From: lothar Date: Mon, 3 Nov 2008 12:08:23 +0000 (+0000) Subject: Initial revision X-Git-Tag: v1.5.3~65 X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-redboot.git;a=commitdiff_plain;h=2b5bec7716c03d42cfb16d8c98c9cea573bf6722 Initial revision --- diff --git a/.cvssymlinks b/.cvssymlinks deleted file mode 100644 index f41ff032..00000000 --- a/.cvssymlinks +++ /dev/null @@ -1,485 +0,0 @@ -v1_0 packages/devs/eth/arm/tx27karo/current -v1_0 packages/hal/arm/mx27/karo/current -v2_0 packages/compat/linux/current -v2_0 packages/compat/posix/current -v2_0 packages/compat/uitron/current -v2_0 packages/cygmon/current -v2_0 packages/devs/can/loop/current -v2_0 packages/devs/can/m68k/mcf52xx/current -v2_0 packages/devs/disk/ide/current -v2_0 packages/devs/disk/synth/current -v2_0 packages/devs/disk/v85x/edb_v850/current -v2_0 packages/devs/eth/amd/lancepci/current -v2_0 packages/devs/eth/amd/pcnet/current -v2_0 packages/devs/eth/arm/aaed2000/current -v2_0 packages/devs/eth/arm/cerf/current -v2_0 packages/devs/eth/arm/cerfpda/current -v2_0 packages/devs/eth/arm/ebsa285/current -v2_0 packages/devs/eth/arm/edb7xxx/current -v2_0 packages/devs/eth/arm/flexanet/current -v2_0 packages/devs/eth/arm/grg/i82559/current -v2_0 packages/devs/eth/arm/i30030ads/current -v2_0 packages/devs/eth/arm/innovator/current -v2_0 packages/devs/eth/arm/integrator/current -v2_0 packages/devs/eth/arm/iq80310/current -v2_0 packages/devs/eth/arm/iq80321/current -v2_0 packages/devs/eth/arm/ixdp425/i82559/current -v2_0 packages/devs/eth/arm/ks32c5000/current -v2_0 packages/devs/eth/arm/mx21ads/current -v2_0 packages/devs/eth/arm/mx27ads/current -v2_0 packages/devs/eth/arm/mx31ads/current -v2_0 packages/devs/eth/arm/mxc27520evb/current -v2_0 packages/devs/eth/arm/mxc27530evb/current -v2_0 packages/devs/eth/arm/mxc30020evb/current -v2_0 packages/devs/eth/arm/mxc30030evb/current -v2_0 packages/devs/eth/arm/mxc91131evb/current -v2_0 packages/devs/eth/arm/nano/current -v2_0 packages/devs/eth/arm/netarm/current -v2_0 packages/devs/eth/arm/npwr/current -v2_0 packages/devs/eth/arm/picasso/current -v2_0 packages/devs/eth/arm/uE250/current -v2_0 packages/devs/eth/arm/xsengine/current -v2_0 packages/devs/eth/cf/current -v2_0 packages/devs/eth/cl/cs8900a/current -v2_0 packages/devs/eth/davicom/dm9000/current -v2_0 packages/devs/eth/fec/current -v2_0 packages/devs/eth/frv/cb70/current -v2_0 packages/devs/eth/frv/frv400/current -v2_0 packages/devs/eth/frv/pdk403/current -v2_0 packages/devs/eth/h8300/aki3068net/current -v2_0 packages/devs/eth/h8300/edosk2674/current -v2_0 packages/devs/eth/h8300/h8max/current -v2_0 packages/devs/eth/i386/pc/i82544/current -v2_0 packages/devs/eth/i386/pc/i82559/current -v2_0 packages/devs/eth/i386/pc/lancepci/current -v2_0 packages/devs/eth/i386/pc/rltk8139/current -v2_0 packages/devs/eth/intel/i21143/current -v2_0 packages/devs/eth/intel/i82544/current -v2_0 packages/devs/eth/intel/i82559/current -v2_0 packages/devs/eth/mcf52xx/mcf5272/current -v2_0 packages/devs/eth/mips/atlas/current -v2_0 packages/devs/eth/mips/idt79s334a/current -v2_0 packages/devs/eth/mips/malta/current -v2_0 packages/devs/eth/mips/ocelot/current -v2_0 packages/devs/eth/mips/upd985xx/current -v2_0 packages/devs/eth/mips/vrc4375/current -v2_0 packages/devs/eth/mn10300/asb2305/current -v2_0 packages/devs/eth/ns/dp83816/current -v2_0 packages/devs/eth/ns/dp83902a/current -v2_0 packages/devs/eth/phy/current -v2_0 packages/devs/eth/powerpc/adder/current -v2_0 packages/devs/eth/powerpc/adderII/current -v2_0 packages/devs/eth/powerpc/csb281/current -v2_0 packages/devs/eth/powerpc/ec555/current -v2_0 packages/devs/eth/powerpc/fcc/current -v2_0 packages/devs/eth/powerpc/fec/current -v2_0 packages/devs/eth/powerpc/mbx/current -v2_0 packages/devs/eth/powerpc/moab/current -v2_0 packages/devs/eth/powerpc/ppc405/current -v2_0 packages/devs/eth/powerpc/quicc/current -v2_0 packages/devs/eth/powerpc/quicc2/current -v2_0 packages/devs/eth/powerpc/rattler/current -v2_0 packages/devs/eth/powerpc/ts1000/current -v2_0 packages/devs/eth/powerpc/viper/current -v2_0 packages/devs/eth/rltk/8139/current -v2_0 packages/devs/eth/sh/dreamcast/current -v2_0 packages/devs/eth/sh/etherc/current -v2_0 packages/devs/eth/sh/hs7729pci/current -v2_0 packages/devs/eth/sh/se7751/current -v2_0 packages/devs/eth/sh/se77x9/current -v2_0 packages/devs/eth/sh/sh4_202_md/current -v2_0 packages/devs/eth/smsc/lan91cxx/current -v2_0 packages/devs/eth/synth/ecosynth/current -v2_0 packages/devs/eth/via/rhine/current -v2_0 packages/devs/flash/amd/am29xxxxx/current -v2_0 packages/devs/flash/arm/aaed2000/current -v2_0 packages/devs/flash/arm/aim711/current -v2_0 packages/devs/flash/arm/am29/current -v2_0 packages/devs/flash/arm/assabet/current -v2_0 packages/devs/flash/arm/cerf/current -v2_0 packages/devs/flash/arm/cerfpda/current -v2_0 packages/devs/flash/arm/e7t/current -v2_0 packages/devs/flash/arm/eb40/current -v2_0 packages/devs/flash/arm/eb40a/current -v2_0 packages/devs/flash/arm/eb42/current -v2_0 packages/devs/flash/arm/eb55/current -v2_0 packages/devs/flash/arm/ebsa285/current -v2_0 packages/devs/flash/arm/edb7xxx/current -v2_0 packages/devs/flash/arm/excalibur/current -v2_0 packages/devs/flash/arm/flexanet/current -v2_0 packages/devs/flash/arm/gps4020/current -v2_0 packages/devs/flash/arm/grg/current -v2_0 packages/devs/flash/arm/i30030ads/current -v2_0 packages/devs/flash/arm/innovator/current -v2_0 packages/devs/flash/arm/integrator/current -v2_0 packages/devs/flash/arm/ipaq/current -v2_0 packages/devs/flash/arm/iq80310/current -v2_0 packages/devs/flash/arm/iq80321/current -v2_0 packages/devs/flash/arm/ixdp425/current -v2_0 packages/devs/flash/arm/jtst/current -v2_0 packages/devs/flash/arm/mpc50/current -v2_0 packages/devs/flash/arm/mx27ads/current -v2_0 packages/devs/flash/arm/mx31ads/current -v2_0 packages/devs/flash/arm/mxc/current -v2_0 packages/devs/flash/arm/mxc27520evb/current -v2_0 packages/devs/flash/arm/mxc27530evb/current -v2_0 packages/devs/flash/arm/mxc30020evb/current -v2_0 packages/devs/flash/arm/mxc30030evb/current -v2_0 packages/devs/flash/arm/mxc91131evb/current -v2_0 packages/devs/flash/arm/nano/current -v2_0 packages/devs/flash/arm/phycore/current -v2_0 packages/devs/flash/arm/picasso/current -v2_0 packages/devs/flash/arm/pid/current -v2_0 packages/devs/flash/arm/prpmc1100/current -v2_0 packages/devs/flash/arm/sa1100mm/current -v2_0 packages/devs/flash/arm/smdk2410/current -v2_0 packages/devs/flash/arm/uE250/current -v2_0 packages/devs/flash/arm/xsengine/current -v2_0 packages/devs/flash/atmel/at29cxxxx/current -v2_0 packages/devs/flash/atmel/at49xxxx/current -v2_0 packages/devs/flash/frv/frv400/current -v2_0 packages/devs/flash/frv/pdk403/current -v2_0 packages/devs/flash/intel/28fxxx/current -v2_0 packages/devs/flash/intel/strata/current -v2_0 packages/devs/flash/mips/atlas/current -v2_0 packages/devs/flash/mips/idt79s334a/current -v2_0 packages/devs/flash/mips/malta/current -v2_0 packages/devs/flash/mips/ocelot/current -v2_0 packages/devs/flash/mips/vrc437x/current -v2_0 packages/devs/flash/mn10300/asb2303/current -v2_0 packages/devs/flash/mn10300/asb2305/current -v2_0 packages/devs/flash/mn10300/stb/current -v2_0 packages/devs/flash/openrisc/orp/current -v2_0 packages/devs/flash/powerpc/adder/current -v2_0 packages/devs/flash/powerpc/cme555/current -v2_0 packages/devs/flash/powerpc/csb281/current -v2_0 packages/devs/flash/powerpc/ec555/current -v2_0 packages/devs/flash/powerpc/mbx/current -v2_0 packages/devs/flash/powerpc/moab/current -v2_0 packages/devs/flash/powerpc/rattler/current -v2_0 packages/devs/flash/powerpc/ts1000/current -v2_0 packages/devs/flash/powerpc/ts6/current -v2_0 packages/devs/flash/powerpc/vads/current -v2_0 packages/devs/flash/powerpc/viper/current -v2_0 packages/devs/flash/sh/cq7750/current -v2_0 packages/devs/flash/sh/edk7708/current -v2_0 packages/devs/flash/sh/hs7729pci/current -v2_0 packages/devs/flash/sh/microdev/current -v2_0 packages/devs/flash/sh/se7751/current -v2_0 packages/devs/flash/sh/se77x9/current -v2_0 packages/devs/flash/sst/39vf400/current -v2_0 packages/devs/flash/sst/39vfxxx/current -v2_0 packages/devs/flash/synth/current -v2_0 packages/devs/flash/toshiba/tc58xxx/current -v2_0 packages/devs/kbd/arm/aaed2000/current -v2_0 packages/devs/kbd/arm/ipaq/current -v2_0 packages/devs/pcmcia/arm/assabet/current -v2_0 packages/devs/pcmcia/arm/cerf/current -v2_0 packages/devs/pcmcia/arm/cerfpda/current -v2_0 packages/devs/pcmcia/arm/ipaq/current -v2_0 packages/devs/serial/arm/aaed2000/current -v2_0 packages/devs/serial/arm/aeb/current -v2_0 packages/devs/serial/arm/aim711/current -v2_0 packages/devs/serial/arm/at91/current -v2_0 packages/devs/serial/arm/cerfpda/current -v2_0 packages/devs/serial/arm/cma230/current -v2_0 packages/devs/serial/arm/e7t/current -v2_0 packages/devs/serial/arm/ebsa285/current -v2_0 packages/devs/serial/arm/edb7xxx/current -v2_0 packages/devs/serial/arm/gps4020/current -v2_0 packages/devs/serial/arm/integrator/current -v2_0 packages/devs/serial/arm/iop310/current -v2_0 packages/devs/serial/arm/iq80321/current -v2_0 packages/devs/serial/arm/lpc2xxx/current -v2_0 packages/devs/serial/arm/pid/current -v2_0 packages/devs/serial/arm/s3c4510/current -v2_0 packages/devs/serial/arm/sa11x0/current -v2_0 packages/devs/serial/arm/smdk2410/current -v2_0 packages/devs/serial/generic/16x5x/current -v2_0 packages/devs/serial/h8300/h8300h/current -v2_0 packages/devs/serial/i386/pc/current -v2_0 packages/devs/serial/loop/current -v2_0 packages/devs/serial/mcf52xx/mcf5272/current -v2_0 packages/devs/serial/mips/atlas/current -v2_0 packages/devs/serial/mips/idt79s334a/current -v2_0 packages/devs/serial/mips/jmr3904/current -v2_0 packages/devs/serial/mips/ref4955/current -v2_0 packages/devs/serial/mips/upd985xx/current -v2_0 packages/devs/serial/mips/vrc437x/current -v2_0 packages/devs/serial/mn10300/mn10300/current -v2_0 packages/devs/serial/powerpc/cme555/current -v2_0 packages/devs/serial/powerpc/cogent/current -v2_0 packages/devs/serial/powerpc/ec555/current -v2_0 packages/devs/serial/powerpc/mpc8xxx/current -v2_0 packages/devs/serial/powerpc/ppc405/current -v2_0 packages/devs/serial/powerpc/quicc/current -v2_0 packages/devs/serial/powerpc/quicc2/current -v2_0 packages/devs/serial/sh/cq7708/current -v2_0 packages/devs/serial/sh/edk7708/current -v2_0 packages/devs/serial/sh/sci/current -v2_0 packages/devs/serial/sh/scif/current -v2_0 packages/devs/serial/sh/se77x9/current -v2_0 packages/devs/serial/sh/sh4_202_md/current -v2_0 packages/devs/serial/sparclite/sleb/current -v2_0 packages/devs/serial/v85x/v850/current -v2_0 packages/devs/spi/arm/at91/current -v2_0 packages/devs/spi/arm/eb55/current -v2_0 packages/devs/spi/arm/mxc/current -v2_0 packages/devs/touch/arm/aaed2000/current -v2_0 packages/devs/touch/arm/ipaq/current -v2_0 packages/devs/usb/mxc/current -v2_0 packages/devs/usb/nec_upd985xx/current -v2_0 packages/devs/usb/sa11x0/current -v2_0 packages/devs/wallclock/arm/aim711/current -v2_0 packages/devs/wallclock/dallas/ds12887/current -v2_0 packages/devs/wallclock/dallas/ds1307/current -v2_0 packages/devs/wallclock/dallas/ds1742/current -v2_0 packages/devs/wallclock/i386/pc/current -v2_0 packages/devs/wallclock/mips/ref4955/current -v2_0 packages/devs/wallclock/powerpc/moab/current -v2_0 packages/devs/wallclock/powerpc/mpc5xx/current -v2_0 packages/devs/wallclock/sh/hs7729pci/current -v2_0 packages/devs/wallclock/sh/sh3/current -v2_0 packages/devs/wallclock/synth/current -v2_0 packages/devs/watchdog/arm/aeb/current -v2_0 packages/devs/watchdog/arm/at91/current -v2_0 packages/devs/watchdog/arm/ebsa285/current -v2_0 packages/devs/watchdog/arm/lpc2xxx/current -v2_0 packages/devs/watchdog/arm/sa11x0/current -v2_0 packages/devs/watchdog/h8300/h8300h/current -v2_0 packages/devs/watchdog/mn10300/mn10300/current -v2_0 packages/devs/watchdog/powerpc/mpc5xx/current -v2_0 packages/devs/watchdog/sh/sh3/current -v2_0 packages/devs/watchdog/synth/current -v2_0 packages/error/current -v2_0 packages/fs/fat/current -v2_0 packages/fs/jffs2/current -v2_0 packages/fs/ram/current -v2_0 packages/fs/rom/current -v2_0 packages/hal/arm/aeb/current -v2_0 packages/hal/arm/aim711/current -v2_0 packages/hal/arm/arch/current -v2_0 packages/hal/arm/arm9/aaed2000/current -v2_0 packages/hal/arm/arm9/excalibur/current -v2_0 packages/hal/arm/arm9/innovator/current -v2_0 packages/hal/arm/arm9/smdk2410/current -v2_0 packages/hal/arm/arm9/var/current -v2_0 packages/hal/arm/at91/eb40/current -v2_0 packages/hal/arm/at91/eb40a/current -v2_0 packages/hal/arm/at91/eb42/current -v2_0 packages/hal/arm/at91/eb55/current -v2_0 packages/hal/arm/at91/jtst/current -v2_0 packages/hal/arm/at91/phycore/current -v2_0 packages/hal/arm/at91/var/current -v2_0 packages/hal/arm/cma230/current -v2_0 packages/hal/arm/e7t/current -v2_0 packages/hal/arm/ebsa285/current -v2_0 packages/hal/arm/edb7xxx/current -v2_0 packages/hal/arm/gps4020/current -v2_0 packages/hal/arm/integrator/current -v2_0 packages/hal/arm/lpc2xxx/lpcmt/current -v2_0 packages/hal/arm/lpc2xxx/mcb2100/current -v2_0 packages/hal/arm/lpc2xxx/p2106/current -v2_0 packages/hal/arm/lpc2xxx/var/current -v2_0 packages/hal/arm/mx21/ads/current -v2_0 packages/hal/arm/mx21/var/current -v2_0 packages/hal/arm/mx27/ads/current -v2_0 packages/hal/arm/mx27/var/current -v2_0 packages/hal/arm/mx31/ads/current -v2_0 packages/hal/arm/mx31/var/current -v2_0 packages/hal/arm/mxc91131/evb/current -v2_0 packages/hal/arm/mxc91131/var/current -v2_0 packages/hal/arm/mxc91221/evb/current -v2_0 packages/hal/arm/mxc91221/var/current -v2_0 packages/hal/arm/mxc91231/evb/current -v2_0 packages/hal/arm/mxc91231/var/current -v2_0 packages/hal/arm/mxc91311/evb/current -v2_0 packages/hal/arm/mxc91311/var/current -v2_0 packages/hal/arm/mxc91321/evb/current -v2_0 packages/hal/arm/mxc91321/i30030ads/current -v2_0 packages/hal/arm/mxc91321/mxc30030ads/current -v2_0 packages/hal/arm/mxc91321/mxc30030topaz/current -v2_0 packages/hal/arm/mxc91321/var/current -v2_0 packages/hal/arm/mxc92323/mxc30031ads/current -v2_0 packages/hal/arm/mxc92323/var/current -v2_0 packages/hal/arm/pid/current -v2_0 packages/hal/arm/sa11x0/assabet/current -v2_0 packages/hal/arm/sa11x0/brutus/current -v2_0 packages/hal/arm/sa11x0/cerf/current -v2_0 packages/hal/arm/sa11x0/cerfpda/current -v2_0 packages/hal/arm/sa11x0/flexanet/current -v2_0 packages/hal/arm/sa11x0/ipaq/current -v2_0 packages/hal/arm/sa11x0/nano/current -v2_0 packages/hal/arm/sa11x0/sa1100mm/current -v2_0 packages/hal/arm/sa11x0/var/current -v2_0 packages/hal/arm/snds/current -v2_0 packages/hal/arm/xscale/cores/current -v2_0 packages/hal/arm/xscale/grg/current -v2_0 packages/hal/arm/xscale/iop310/current -v2_0 packages/hal/arm/xscale/iq80310/current -v2_0 packages/hal/arm/xscale/iq80321/current -v2_0 packages/hal/arm/xscale/ixdp425/current -v2_0 packages/hal/arm/xscale/ixp425/current -v2_0 packages/hal/arm/xscale/mpc50/current -v2_0 packages/hal/arm/xscale/npwr/current -v2_0 packages/hal/arm/xscale/picasso/current -v2_0 packages/hal/arm/xscale/prpmc1100/current -v2_0 packages/hal/arm/xscale/pxa2x0/current -v2_0 packages/hal/arm/xscale/uE250/current -v2_0 packages/hal/arm/xscale/verde/current -v2_0 packages/hal/arm/xscale/xsengine/current -v2_0 packages/hal/calmrisc16/arch/current -v2_0 packages/hal/calmrisc16/ceb/current -v2_0 packages/hal/calmrisc16/core/current -v2_0 packages/hal/calmrisc32/arch/current -v2_0 packages/hal/calmrisc32/ceb/current -v2_0 packages/hal/calmrisc32/core/current -v2_0 packages/hal/common/current -v2_0 packages/hal/frv/arch/current -v2_0 packages/hal/frv/frv400/current -v2_0 packages/hal/frv/mb93091/current -v2_0 packages/hal/frv/mb93093/current -v2_0 packages/hal/h8300/aki3068net/current -v2_0 packages/hal/h8300/arch/current -v2_0 packages/hal/h8300/edosk2674/current -v2_0 packages/hal/h8300/h8300h/current -v2_0 packages/hal/h8300/h8max/current -v2_0 packages/hal/h8300/h8s/current -v2_0 packages/hal/h8300/sim/current -v2_0 packages/hal/h8300/sim_s/current -v2_0 packages/hal/i386/arch/current -v2_0 packages/hal/i386/generic/current -v2_0 packages/hal/i386/pc/current -v2_0 packages/hal/i386/pcmb/current -v2_0 packages/hal/m68k/arch/current -v2_0 packages/hal/m68k/mcf52xx/mcf5272/mcf5272c3/plf/current -v2_0 packages/hal/m68k/mcf52xx/mcf5272/proc/current -v2_0 packages/hal/m68k/mcf52xx/var/current -v2_0 packages/hal/mips/arch/current -v2_0 packages/hal/mips/atlas/current -v2_0 packages/hal/mips/idt32334/current -v2_0 packages/hal/mips/idt79s334a/current -v2_0 packages/hal/mips/jmr3904/current -v2_0 packages/hal/mips/malta/current -v2_0 packages/hal/mips/mips32/current -v2_0 packages/hal/mips/mips64/current -v2_0 packages/hal/mips/ref4955/current -v2_0 packages/hal/mips/rm7000/ocelot/current -v2_0 packages/hal/mips/rm7000/var/current -v2_0 packages/hal/mips/sim/current -v2_0 packages/hal/mips/tx39/current -v2_0 packages/hal/mips/tx49/current -v2_0 packages/hal/mips/upd985xx/current -v2_0 packages/hal/mips/vr4300/current -v2_0 packages/hal/mips/vrc4373/current -v2_0 packages/hal/mips/vrc4375/current -v2_0 packages/hal/mips/vrc437x/current -v2_0 packages/hal/mn10300/am31/current -v2_0 packages/hal/mn10300/am33/current -v2_0 packages/hal/mn10300/arch/current -v2_0 packages/hal/mn10300/asb/current -v2_0 packages/hal/mn10300/asb2305/current -v2_0 packages/hal/mn10300/sim/current -v2_0 packages/hal/mn10300/stb/current -v2_0 packages/hal/mn10300/stdeval1/current -v2_0 packages/hal/openrisc/arch/current -v2_0 packages/hal/openrisc/orp/current -v2_0 packages/hal/powerpc/adder/current -v2_0 packages/hal/powerpc/arch/current -v2_0 packages/hal/powerpc/cme555/current -v2_0 packages/hal/powerpc/cogent/current -v2_0 packages/hal/powerpc/csb281/current -v2_0 packages/hal/powerpc/ec555/current -v2_0 packages/hal/powerpc/fads/current -v2_0 packages/hal/powerpc/mbx/current -v2_0 packages/hal/powerpc/moab/current -v2_0 packages/hal/powerpc/mpc5xx/current -v2_0 packages/hal/powerpc/mpc8260/current -v2_0 packages/hal/powerpc/mpc8xx/current -v2_0 packages/hal/powerpc/mpc8xxx/current -v2_0 packages/hal/powerpc/ppc40x/current -v2_0 packages/hal/powerpc/ppc60x/current -v2_0 packages/hal/powerpc/quicc/current -v2_0 packages/hal/powerpc/rattler/current -v2_0 packages/hal/powerpc/sim/current -v2_0 packages/hal/powerpc/ts1000/current -v2_0 packages/hal/powerpc/ts6/current -v2_0 packages/hal/powerpc/vads/current -v2_0 packages/hal/powerpc/viper/current -v2_0 packages/hal/sh/arch/current -v2_0 packages/hal/sh/cq7708/current -v2_0 packages/hal/sh/cq7750/current -v2_0 packages/hal/sh/dreamcast/current -v2_0 packages/hal/sh/edk7708/current -v2_0 packages/hal/sh/hs7729pci/current -v2_0 packages/hal/sh/se7751/current -v2_0 packages/hal/sh/se77x9/current -v2_0 packages/hal/sh/sh2/current -v2_0 packages/hal/sh/sh3/current -v2_0 packages/hal/sh/sh4/current -v2_0 packages/hal/sh/sh4_202_md/current -v2_0 packages/hal/sparc/arch/current -v2_0 packages/hal/sparc/erc32/current -v2_0 packages/hal/sparc/leon/current -v2_0 packages/hal/sparclite/arch/current -v2_0 packages/hal/sparclite/sim/current -v2_0 packages/hal/sparclite/sleb/current -v2_0 packages/hal/synth/arch/current -v2_0 packages/hal/synth/i386linux/current -v2_0 packages/hal/v85x/arch/current -v2_0 packages/hal/v85x/ceb_v850/current -v2_0 packages/hal/v85x/v850/current -v2_0 packages/infra/current -v2_0 packages/io/can/current -v2_0 packages/io/common/current -v2_0 packages/io/disk/current -v2_0 packages/io/eth/current -v2_0 packages/io/fileio/current -v2_0 packages/io/flash/current -v2_0 packages/io/i2c/current -v2_0 packages/io/pci/current -v2_0 packages/io/pcmcia/current -v2_0 packages/io/serial/current -v2_0 packages/io/spi/current -v2_0 packages/io/usb/common/current -v2_0 packages/io/usb/eth/slave/current -v2_0 packages/io/usb/slave/current -v2_0 packages/io/wallclock/current -v2_0 packages/io/watchdog/current -v2_0 packages/isoinfra/current -v2_0 packages/kernel/current -v2_0 packages/language/c/libc/common/current -v2_0 packages/language/c/libc/i18n/current -v2_0 packages/language/c/libc/setjmp/current -v2_0 packages/language/c/libc/signals/current -v2_0 packages/language/c/libc/startup/current -v2_0 packages/language/c/libc/stdio/current -v2_0 packages/language/c/libc/stdlib/current -v2_0 packages/language/c/libc/string/current -v2_0 packages/language/c/libc/time/current -v2_0 packages/language/c/libm/current -v2_0 packages/net/bsd_tcpip/current -v2_0 packages/net/common/current -v2_0 packages/net/ftpclient/current -v2_0 packages/net/httpd/current -v2_0 packages/net/ipsec/libipsec/current -v2_0 packages/net/lwip_tcpip/current -v2_0 packages/net/ns/dns/current -v2_0 packages/net/ppp/current -v2_0 packages/net/snmp/agent/current -v2_0 packages/net/snmp/lib/current -v2_0 packages/net/sntp/current -v2_0 packages/net/tcpip/current -v2_0 packages/net/vnc_server/current -v2_0 packages/redboot/current -v2_0 packages/services/blib/current -v2_0 packages/services/compress/zlib/current -v2_0 packages/services/cpuload/current -v2_0 packages/services/crc/current -v2_0 packages/services/ezxml/current -v2_0 packages/services/gfx/mw/current -v2_0 packages/services/loader/current -v2_0 packages/services/memalloc/common/current -v2_0 packages/services/objloader/current -v2_0 packages/services/power/common/current -v2_0 packages/services/profile/gprof/current diff --git a/README.KARO b/README.KARO new file mode 100644 index 00000000..700e125c --- /dev/null +++ b/README.KARO @@ -0,0 +1,28 @@ +Build instructions for KARO specific RedBoot under Linux +======================================================== + +1. Prerequisites: +----------------- + +- Make sure the gcc cross-compiler 'arm-linux-gcc' is installed and + can be found via the PATH environment variable +- Determine what configuration (.ecc files in redboot/config/) is + required for the board that you want to program (see the file + 'readme.txt' in the RedBoot directory of the Starterkit CD.) + +2. Configuring Redboot: +----------------------- +- Either edit the corresponding .ecc file or use the graphical + configuration tool installed under redboot/tools/bin/configtool to + modify and save the configuration settings. + +3. Compiling Redboot: +--------------------- +- enter the base directory 'redboot' of the redboot source tree +- run sh build.sh [config[.ecc]] to build all or one specific + configuration + + +The binary file that should be programmed into the flash rom of the +Triton module is the '.bin' file that can be found under +build//_install/bin/ diff --git a/README.txt b/README.txt new file mode 100644 index 00000000..7f052929 --- /dev/null +++ b/README.txt @@ -0,0 +1,81 @@ +eCos - the Embedded Configurable Operating System - release 2.0 README +====================================================================== + +May 2003 + + +Welcome to the eCos 2.0 public net release. + +This README contains a list of known problems with the eCos 2.0 release. +Please check for further issues by searching the Bugzilla database for +product "eCos" version "2.0": + + http://bugzilla.redhat.com/bugzilla/query.cgi?product=eCos + +If you discover new bugs with this release please report them using +Bugzilla: + + http://bugzilla.redhat.com/bugzilla/enter_bug.cgi?product=eCos + + +------------------------------------------------------------------------------ +eCos 2.0 Errata +--------------- + +* When building RedBoot for ROM startup, the following warning may be produced +by BFD: + + allocated section `.bss' is not in segment + +This warning is due to mishandling of overlapping segments and is harmless. A +patch has been submitted to the binutils mailing list. + +* When building eCos for the 'linux' target with the 'net' template, the +following warning is produced: + + /usr/bin/ld: warning: no memory region specified for section + `.rel.ecos.table._Net_inits.data.0x88000001domain_routecyg_net_add_domain' + +This warning is harmless and may be ignored. + +* eCos fails to build for target 'flexanet' since the platform support has not +been maintained with respect to the rest of the repository. + +* RedBoot fails to build for target 'dreamcast' since the package +CYGPKG_FS_ISO is not present in the eCos public repository. + +* The eCos tests 'pselect' and 'cpuload' may fail erroneously on some eCos +targets (false negative). + +* We are aware of the following issues with specific versions of the cygwin1 +DLL: + + - version 1.3.19 cannot be used to configure eCos toolchains due to a + problem with vasprintf. + - version 1.3.20 causes various toolchain failures when building eCos on + Win95/98/ME only. We suspect this is an mmap issue. + +* The PSIM PowerPC simulator treats all data cache instructions as noops. +The behaviour is benign with the exception of the dcbz instruction. It causes +the eCos kcache2 test to fail on target 'psim'. + +* Register handling in the GDB stub code for the MIPS32 variant has been +changed to supply 32 bit registers rather than 64 bit. This change allows +use the public gcc 3.2.x compiler but will cause problems with the +mipsisa32-elf toolchain from ftp://ftp.mips.com/pub/redhat/linux/ + +* There are a number of minor issues with the eCos Configuration Tool: + + 84946 Configtool build progress bar inoperative + 84948 Cannot add new command prefix in platform editor dialog box + 85588 Starting help spawns xterm which doesn't disappear + 85597 Configtool internal doc viewer issues + 89778 Configtool platforms list is not sorted + 90180 NT config tool configuration pane divider dragging unreliable + +* The eCos documentation does not describe how to invoke the Insight graphical +debugger. Insight is invoked by specifying the "-w" switch on the GDB command +line. + +* The Insight graphical debugger exhibits a lack of robustness on Win95/98/ME +hosts. We recommend using command-line GDB on these platforms. diff --git a/buildid.txt b/buildid.txt new file mode 100644 index 00000000..9dcb88f0 --- /dev/null +++ b/buildid.txt @@ -0,0 +1 @@ +v2.0-20030509-0835 diff --git a/config/TRITON270_STK3.ecc b/config/TRITON270_STK3.ecc new file mode 100644 index 00000000..38a0f5a0 --- /dev/null +++ b/config/TRITON270_STK3.ecc @@ -0,0 +1,7639 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3 current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 2 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.5.2 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 2 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_128S32F.ecc b/config/TRITON270_STK3_128S32F.ecc new file mode 100644 index 00000000..8b961a57 --- /dev/null +++ b/config/TRITON270_STK3_128S32F.ecc @@ -0,0 +1,7638 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_128s32f ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_128S32F current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 3 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 2 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_128S32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_128S32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_128S32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_128S32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_128S32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_128S32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 128 MB DRAM / 32 MB Flash +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3 with 32MB Flash and 128MB DRAM. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_128S32F { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_128s32f" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_128s32f" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_128s32f" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_128s32f" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_128s32f +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 3 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_16F.ecc b/config/TRITON270_STK3_16F.ecc new file mode 100644 index 00000000..38f90cc5 --- /dev/null +++ b/config/TRITON270_STK3_16F.ecc @@ -0,0 +1,7637 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_16f ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, enabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 2 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 64 MB DRAM / 16 MB Flash +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3 with 16MB Flash and 64MB DRAM. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_16f" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_16f" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_16f +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 2 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + user_value 1 + # value_source user + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + user_value 1 + # value_source user + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_16F128S.ecc b/config/TRITON270_STK3_16F128S.ecc new file mode 100644 index 00000000..8281f874 --- /dev/null +++ b/config/TRITON270_STK3_16F128S.ecc @@ -0,0 +1,7638 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_16f128s ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F128S current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, enabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 2 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 128 MB SDRAM / 16 MB P30 Flash +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3 with 16MB Flash and 128MB DRAM. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F128S { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f128s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_16f128s" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f128s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_16f128s" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_16f128s +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 2 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_16F32S.ecc b/config/TRITON270_STK3_16F32S.ecc new file mode 100644 index 00000000..46812f95 --- /dev/null +++ b/config/TRITON270_STK3_16F32S.ecc @@ -0,0 +1,7639 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_16f32s ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F32S current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, enabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 2 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 32 MB SDRAM / 16 MB P30 Flash +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3 with 16MB Flash and 64MB DRAM. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F32S { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f32s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_16f32s" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f32s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_16f32s" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_16f32s +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 2 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_16F64S.ecc b/config/TRITON270_STK3_16F64S.ecc new file mode 100644 index 00000000..239dccc6 --- /dev/null +++ b/config/TRITON270_STK3_16F64S.ecc @@ -0,0 +1,7638 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_16f64s ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F64S current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, enabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 2 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F64S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F64S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F64S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F64S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F64S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F64S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 64 MB SDRAM / 16 MB P30 Flash +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3 with 16MB Flash and 64MB DRAM. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F64S { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f64s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_16f64s" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f64s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_16f64s" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_16f64s +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 2 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_32F.ecc b/config/TRITON270_STK3_32F.ecc new file mode 100644 index 00000000..75d33467 --- /dev/null +++ b/config/TRITON270_STK3_32F.ecc @@ -0,0 +1,7638 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_32f ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 3 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 2 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 64 MB DRAM / 32 MB Flash +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3 with 32MB Flash and 64MB DRAM. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_32f" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_32f" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_32f" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_32f" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_32f +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 3 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_32F32S.ecc b/config/TRITON270_STK3_32F32S.ecc new file mode 100644 index 00000000..9370ad6d --- /dev/null +++ b/config/TRITON270_STK3_32F32S.ecc @@ -0,0 +1,7639 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_32f32s ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F32S current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 2 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F32S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 32 MB DRAM (16 bit) / 32 MB P30 Flash +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3 with 32MB Flash and 64MB DRAM. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F32S { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_32f32s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_32f32s" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_32f32s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_32f32s" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_32f32s +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 2 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_32MB.ecc b/config/TRITON270_STK3_32MB.ecc new file mode 100644 index 00000000..3b8cac63 --- /dev/null +++ b/config/TRITON270_STK3_32MB.ecc @@ -0,0 +1,7639 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_32mb ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32MB current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 2 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32MB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32MB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32MB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32MB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32MB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32MB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 32 MB +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32MB { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_32mb" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_32mb" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_32mb" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_32mb" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_32mb +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 2 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_64F.ecc b/config/TRITON270_STK3_64F.ecc new file mode 100644 index 00000000..225a71bd --- /dev/null +++ b/config/TRITON270_STK3_64F.ecc @@ -0,0 +1,7639 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_64f ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 2 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 64 MB DRAM / 64 MB Flash +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3 with 64MB Flash and 64MB DRAM. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_64f" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_64f" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_64f" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_64f" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_64f +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 2 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON270_STK3_64F128S.ecc b/config/TRITON270_STK3_64F128S.ecc new file mode 100644 index 00000000..3c3742f0 --- /dev/null +++ b/config/TRITON270_STK3_64F128S.ecc @@ -0,0 +1,7639 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton270_stk3_64f128s ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F128S current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_INTEL_28FXXX current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_INTEL_28FXXX, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 2 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel FlashFile FLASH memory support +# FLASH memory device support for Intel FlashFile +# +cdl_package CYGPKG_DEVS_FLASH_INTEL_28FXXX { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + # CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 + # CYGINT_DEVS_FLASH_INTEL_VARIANTS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX +}; + +# > +# Number of included variants +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_VARIANTS { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320B3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320C3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F320S3, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128W18, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_48F4000P30, active, enabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY, active, disabled + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F128P30, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # Requires: CYGINT_DEVS_FLASH_INTEL_VARIANTS != 0 +}; + +# Must support buffered writes +# +cdl_interface CYGHWR_DEVS_FLASH_INTEL_BUFFERED_WRITES { + # Implemented by CYGHWR_DEVS_FLASH_INTEL_28F160S5, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Intel 28F160S5 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F160S5 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F160S5 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320B3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320B3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320B3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320C3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320C3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320C3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F320S3 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F320S3 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F320S3 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-Z4 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-Z4 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_Z4 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Sharp LH28F016SCT-95 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the Sharp LH28F016SCT-95 +# part. Although this part is not an Intel part, the driver +# is implemented using the same command status definitions. +# +cdl_option CYGHWR_DEVS_FLASH_SHARP_LH28F016SCT_95 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128W18 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128W18 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128W18 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 48F4000P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_48F4000P30 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Intel 28F256P30 flash memory support with buggy ID +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 48F4000P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F256P30_BUGGY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Intel 28F128P30 flash memory support +# When this option is enabled, the Intel flash driver will be +# able to recognize and handle the 28F128P30 +# part in the family. +# +cdl_option CYGHWR_DEVS_FLASH_INTEL_28F128P30 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# TRITON270 FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_INTEL_28FXXX + # CYGPKG_DEVS_FLASH_INTEL_28FXXX == current + # --> 1 +}; + +# > +# Generic INTEL 28fxxx driver required +# +cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_INTEL_28FXXX + # ActiveIf: CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F128S, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# KARO TRITON270 SK3 128 MB SDRAM / 64 MB P30 Flash +# The KARO TRITON270 HAL package provides the support needed to run +# eCos on a TRITON270 SK3 with 64MB Flash and 128MB DRAM. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F128S { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON270 eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_64f128s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_64f128s" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: 2 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON270 build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON270 HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON270 tests +# This option specifies the set of tests for the XScale TRITON270 HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_64f128s" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : "arm_xscale_triton270_rom_64f128s" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton270_rom_64f128s +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.6.1 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 2 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # This option is not active + # The parent CYGPKG_REDBOOT_DISK is disabled + + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON_ECO_STK1.ecc b/config/TRITON_ECO_STK1.ecc new file mode 100644 index 00000000..4426ce68 --- /dev/null +++ b/config/TRITON_ECO_STK1.ecc @@ -0,0 +1,7484 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton_eco_stk1 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON_ECO_STK1 current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_STRATA current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_STRATA, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # Implemented by CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value + # component CYGPKG_DEVS_FLASH_STRATA_LOCKING + # ActiveIf: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel StrataFLASH memory support +# FLASH memory device support for Intel StrataFlash +# +cdl_package CYGPKG_DEVS_FLASH_STRATA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_STRATA_REQUIRED + # CYGINT_DEVS_FLASH_STRATA_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_FLASH_STRATA +}; + +# > +# Control Flash driver code copy to RAM +# Rarely, it is useful to disable the request that flash driver code +# be copied to separate RAM for execution. This option lets you do that. +# It should only be controlled by redboot_XXX.ecm config files, for +# building different varieties of RedBoot. +# NEVER disable this option for ROM startup code, which executes in place +# from Flash: the build will not work. +# +cdl_option CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Flash device implements locking +# +cdl_component CYGPKG_DEVS_FLASH_STRATA_LOCKING { + # ActiveIf constraint: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# < +# TRITON FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_STRATA + # CYGPKG_DEVS_FLASH_STRATA == current + # --> 1 +}; + +# > +# Generic StrataFLASH driver required +# +cdl_interface CYGINT_DEVS_FLASH_STRATA_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGINT_DEVS_FLASH_STRATA_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ECO_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ECO_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ECO_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ECO_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ECO_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ECO_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Karo Triton XScale evaluation boards +# The TRITON_ECO_STK1 HAL package provides the support needed to run +# eCos on a Karo TRITON ECO board located on a Starter Kit I. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_ECO_STK1 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_lp_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_lp_roma" : "arm_xscale_triton_lp_rom" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 0 + # Flavor: data + # Current_value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 1 + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Diagnostic serial port +# The TRITON board has only one serial port. This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON tests +# This option specifies the set of tests for the XScale TRITON HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_lp_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_lp_roma" : "arm_xscale_triton_lp_rom" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton_lp_rom +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.4.1a + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON_ETN_STK2.ecc b/config/TRITON_ETN_STK2.ecc new file mode 100644 index 00000000..6d6b3fc2 --- /dev/null +++ b/config/TRITON_ETN_STK2.ecc @@ -0,0 +1,7482 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton_etn_stk2 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK2 current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_STRATA current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 0 + # --> 1 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_STRATA, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # Implemented by CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value + # component CYGPKG_DEVS_FLASH_STRATA_LOCKING + # ActiveIf: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel StrataFLASH memory support +# FLASH memory device support for Intel StrataFlash +# +cdl_package CYGPKG_DEVS_FLASH_STRATA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_STRATA_REQUIRED + # CYGINT_DEVS_FLASH_STRATA_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_FLASH_STRATA +}; + +# > +# Control Flash driver code copy to RAM +# Rarely, it is useful to disable the request that flash driver code +# be copied to separate RAM for execution. This option lets you do that. +# It should only be controlled by redboot_XXX.ecm config files, for +# building different varieties of RedBoot. +# NEVER disable this option for ROM startup code, which executes in place +# from Flash: the build will not work. +# +cdl_option CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Flash device implements locking +# +cdl_component CYGPKG_DEVS_FLASH_STRATA_LOCKING { + # ActiveIf constraint: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# < +# TRITON FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_STRATA + # CYGPKG_DEVS_FLASH_STRATA == current + # --> 1 +}; + +# > +# Generic StrataFLASH driver required +# +cdl_interface CYGINT_DEVS_FLASH_STRATA_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGINT_DEVS_FLASH_STRATA_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Karo Triton XScale evaluation boards +# The TRITON_ETN_STK2 HAL package provides the support needed to run +# eCos on a Karo TRITON ETN board located on a Starter Kit II. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK2 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : "arm_xscale_triton_rom" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 0 + # Flavor: data + # Current_value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 1 + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Diagnostic serial port +# The TRITON board has only one serial port. This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON tests +# This option specifies the set of tests for the XScale TRITON HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : "arm_xscale_triton_rom" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton_rom +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.4.1a + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON_LP32_STK2.ecc b/config/TRITON_LP32_STK2.ecc new file mode 100644 index 00000000..5c78f567 --- /dev/null +++ b/config/TRITON_LP32_STK2.ecc @@ -0,0 +1,7444 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton_lp32_stk2 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON_LP32_STK2 current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_STRATA current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_CL_CS8900A current ; + package -hardware CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_CL_CS8900A + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # Implemented by CYGPKG_DEVS_ETH_CL_CS8900A, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# Driver for Cirrus Logic CS8900A ethernet controller. +# Driver for Cirrus Logic CS8900A ethernet controller. +# +cdl_package CYGPKG_DEVS_ETH_CL_CS8900A { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED + # CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_ETH_CL_CS8900A +}; + +# > +# Cirrus Logic ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_CL_CS8900A_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the Cirrus Logic ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_CL_CS8900A_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON CS8900A ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_CL_CS8900A + # CYGPKG_DEVS_ETH_CL_CS8900A == current + # --> 1 +}; + +# > +# CL CS8900A driver required +# +cdl_interface CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_CL_CS8900A + # ActiveIf: CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 0 + # --> 1 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0C, 0xC6, 0x70, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0C, 0xC6, 0x70, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_STRATA, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # Implemented by CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value + # component CYGPKG_DEVS_FLASH_STRATA_LOCKING + # ActiveIf: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel StrataFLASH memory support +# FLASH memory device support for Intel StrataFlash +# +cdl_package CYGPKG_DEVS_FLASH_STRATA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_STRATA_REQUIRED + # CYGINT_DEVS_FLASH_STRATA_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_FLASH_STRATA +}; + +# > +# Control Flash driver code copy to RAM +# Rarely, it is useful to disable the request that flash driver code +# be copied to separate RAM for execution. This option lets you do that. +# It should only be controlled by redboot_XXX.ecm config files, for +# building different varieties of RedBoot. +# NEVER disable this option for ROM startup code, which executes in place +# from Flash: the build will not work. +# +cdl_option CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Flash device implements locking +# +cdl_component CYGPKG_DEVS_FLASH_STRATA_LOCKING { + # ActiveIf constraint: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# < +# TRITON FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_STRATA + # CYGPKG_DEVS_FLASH_STRATA == current + # --> 1 +}; + +# > +# Generic StrataFLASH driver required +# +cdl_interface CYGINT_DEVS_FLASH_STRATA_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGINT_DEVS_FLASH_STRATA_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP32_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP32_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP32_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP32_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP32_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP32_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Karo Triton XScale evaluation boards +# The TRITON_LP32_STK2 HAL package provides the support needed to run +# eCos on a Karo TRITON LP/32S board located on a Starter Kit II. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_LP32_STK2 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_lp_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_lp32_roma" : "arm_xscale_triton_lp32_rom" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 0 + # Flavor: data + # Current_value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 1 + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Diagnostic serial port +# The TRITON board has only one serial port. This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON tests +# This option specifies the set of tests for the XScale TRITON HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_lp_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_lp32_roma" : "arm_xscale_triton_lp32_rom" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton_lp32_rom +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.4.1a + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON_LP_STK2.ecc b/config/TRITON_LP_STK2.ecc new file mode 100644 index 00000000..3d1346bf --- /dev/null +++ b/config/TRITON_LP_STK2.ecc @@ -0,0 +1,7444 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton_lp_stk2 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON_LP_STK2 current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_STRATA current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_CL_CS8900A current ; + package -hardware CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_CL_CS8900A + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # Implemented by CYGPKG_DEVS_ETH_CL_CS8900A, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# Driver for Cirrus Logic CS8900A ethernet controller. +# Driver for Cirrus Logic CS8900A ethernet controller. +# +cdl_package CYGPKG_DEVS_ETH_CL_CS8900A { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED + # CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_ETH_CL_CS8900A +}; + +# > +# Cirrus Logic ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_CL_CS8900A_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the Cirrus Logic ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_CL_CS8900A_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON CS8900A ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_CL_CS8900A + # CYGPKG_DEVS_ETH_CL_CS8900A == current + # --> 1 +}; + +# > +# CL CS8900A driver required +# +cdl_interface CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_CL_CS8900A + # ActiveIf: CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 0 + # --> 1 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0C, 0xC6, 0x70, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0C, 0xC6, 0x70, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_STRATA, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # Implemented by CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value + # component CYGPKG_DEVS_FLASH_STRATA_LOCKING + # ActiveIf: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel StrataFLASH memory support +# FLASH memory device support for Intel StrataFlash +# +cdl_package CYGPKG_DEVS_FLASH_STRATA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_STRATA_REQUIRED + # CYGINT_DEVS_FLASH_STRATA_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_FLASH_STRATA +}; + +# > +# Control Flash driver code copy to RAM +# Rarely, it is useful to disable the request that flash driver code +# be copied to separate RAM for execution. This option lets you do that. +# It should only be controlled by redboot_XXX.ecm config files, for +# building different varieties of RedBoot. +# NEVER disable this option for ROM startup code, which executes in place +# from Flash: the build will not work. +# +cdl_option CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Flash device implements locking +# +cdl_component CYGPKG_DEVS_FLASH_STRATA_LOCKING { + # ActiveIf constraint: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# < +# TRITON FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_STRATA + # CYGPKG_DEVS_FLASH_STRATA == current + # --> 1 +}; + +# > +# Generic StrataFLASH driver required +# +cdl_interface CYGINT_DEVS_FLASH_STRATA_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGINT_DEVS_FLASH_STRATA_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_LP_STK2, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Karo Triton XScale evaluation boards +# The TRITON_LP_STK2 HAL package provides the support needed to run +# eCos on a Karo TRITON LP board located on a Starter Kit II. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_LP_STK2 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_lp_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_lp_roma" : "arm_xscale_triton_lp_rom" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Calculated value: 0 + # Flavor: data + # Current_value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# The TRITON board has only one serial port. This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON tests +# This option specifies the set of tests for the XScale TRITON HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_lp_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_lp_roma" : "arm_xscale_triton_lp_rom" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton_lp_rom +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.4.1a + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON_STK1.ecc b/config/TRITON_STK1.ecc new file mode 100644 index 00000000..c98187ef --- /dev/null +++ b/config/TRITON_STK1.ecc @@ -0,0 +1,7485 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton_stk1 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON_STK1 current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_STRATA current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_SMSC_LAN91C111 current ; + package -hardware CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# Common ethernet support +# doc: ref/io-eth-drv-generic.html +# Platform independent ethernet drivers +# +cdl_package CYGPKG_IO_ETH_DRIVERS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_ETH_DRIVERS + # component CYGPKG_REDBOOT_NETWORKING + # ActiveIf: CYGPKG_IO_ETH_DRIVERS +}; + +# > +# Driver supports multicast addressing +# This interface defines whether or not a driver can handle +# requests for multicast addressing. +# +cdl_interface CYGINT_IO_ETH_MULTICAST { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Support printing driver debug information +# Selecting this option will include code to allow the driver to +# print lots of information on diagnostic output such as full +# packet dumps. +# +cdl_component CYGDBG_IO_ETH_DRIVERS_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Driver debug output verbosity +# The value of this option indicates the default verbosity +# level of debugging output. 0 means no debugging output +# is made by default. Higher values indicate higher verbosity. +# The verbosity level may also be changed at run time by +# changing the variable cyg_io_eth_net_debug. +# +cdl_option CYGDBG_IO_ETH_DRIVERS_DEBUG_VERBOSITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Size of scatter-gather I/O lists +# A scatter-gather list is used to pass requests to/from +# the physical device driver. This list can typically be +# small, as the data is normally already packed into reasonable +# chunks. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_SG_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 +}; + +# Support for standard eCos TCP/IP stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_NET { + # This option is not active + # ActiveIf constraint: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Warn when there are no more mbufs +# Warnings about running out of mbufs are printed to the +# diagnostic output channel via diag_printf() if this option +# is enabled. Mbufs are the network stack's basic dynamic +# memory objects that hold all packets in transit; running +# out is bad for performance but not fatal, not a crash. +# You might want to turn off the warnings to preserve realtime +# properties of the system even in extremis. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Simulate network failures for testing +# This package contains a suite of simulated failure modes +# for the ethernet device layer, including dropping and/or +# corrupting received packets, dropping packets queued for +# transmission, and simulating a complete network break. +# It requires the kernel as a source of time information. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_NET is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Drop incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Corrupt incoming packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_CORRUPT_RX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Drop outgoing packets (percentage) +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_DROP_TX { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 10 + # value_source default + # Default value: 1 10 + # Legal values: 10 50 80 +}; + +# Simulate a line cut from time to time +# This option causes the system to drop all packets for a +# short random period (10s of seconds), and then act +# normally for up to 4 times that long. This simulates your +# sysadmin fiddling with plugs in the network switch +# cupboard. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_SIMULATE_LINE_CUT { + # This option is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is not active + # The parent CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Support for stand-alone network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + # ActiveIf constraint: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# > +# Pass packets to an alternate stack +# Define this to allow packets seen by this layer to be +# passed on to the previous logical layer, i.e. when +# stand-alone processing replaces system (eCos) processing. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_REDBOOT_NETWORKING + # CYGPKG_REDBOOT_NETWORKING == 1 + # --> 1 +}; + +# Number of [network] buffers +# This option is used to allocate space to buffer incoming network +# packets. These buffers are used to hold data until they can be +# logically processed by higher layers. +# +cdl_option CYGNUM_IO_ETH_DRIVERS_NUM_PKT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 2 to 32 +}; + +# Show driver warnings +# Selecting this option will allows the stand-alone ethernet driver +# to display warnings on the system console when incoming network +# packets are being discarded due to lack of buffer space. +# +cdl_option CYGSEM_IO_ETH_DRIVERS_WARN { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for lwIP network stack. +# +cdl_component CYGPKG_IO_ETH_DRIVERS_LWIP { + # This option is not active + # ActiveIf constraint: CYGPKG_NET_LWIP + # CYGPKG_NET_LWIP (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 1 +}; + +# Interrupt support required +# This interface is used to indicate to the low +# level device drivers that interrupt driven operation +# is required by higher layers. +# +cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED { + # Implemented by CYGPKG_IO_ETH_DRIVERS_NET, inactive, enabled + # Implemented by CYGPKG_IO_ETH_DRIVERS_LWIP, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value +}; + +# Common ethernet support build options +# +cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the common ethernet support package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_ETH_DRIVERS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# < +# SMSC LAN91C111 compatible ethernet driver +# Ethernet driver for SMSC LAN91C111 compatible controllers. +# +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + # CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 +}; + +# > +# use 32 bit data access +# The device driver uses 32 bit data access if +# this option is enabled, otherwise 16 bit data access is +# used. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# SIOCSIFHWADDR records ESA (MAC address) in EEPROM +# The ioctl() socket call with operand SIOCSIFHWADDR sets the +# interface hardware address - the MAC address or Ethernet Station +# Address (ESA). This option causes the new MAC address to be written +# into the EEPROM associated with the interface, so that the new +# MAC address is permanently recorded. Doing this should be a +# carefully chosen decision, hence this option. +# +cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# ESA is statically configured +# If this is nonzero, then the ESA (MAC address) is statically +# configured in the platform-specific package which instantiates +# this driver with all its details. +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# LAN91C111 ethernet driver build options +# +cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the LAN91C111 ethernet driver package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-O2 -D_KERNEL -D__ECOS" + # value_source default + # Default value: "-O2 -D_KERNEL -D__ECOS" +}; + +# < +# < +# TRITON SMC91C111 ethernet driver +# Ethernet driver for TRITON boards. +# +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # CYGPKG_DEVS_ETH_SMSC_LAN91C111 == current + # --> 1 +}; + +# > +# SMSC LAN91C111 driver required +# +cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + # Implemented by CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_ETH_SMSC_LAN91C111 + # ActiveIf: CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED +}; + +# Device name for the ethernet driver +# This option sets the name of the ethernet device for the +# ethernet port. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"eth0\"" + # value_source default + # Default value: "\"eth0\"" +}; + +# The ethernet station address (MAC) +# A static ethernet station address. +# Caution: Booting two systems with the same MAC on the same +# network, will cause severe conflicts. +# +cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + # This option is not active + # ActiveIf constraint: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + # CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" + # value_source default + # Default value: "{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}" +}; + +# Use the 1-WIRE device ESA (MAC address) +# Use the ESA that is stored in the 1wire device instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Use the RedBoot ESA (MAC address) +# Use the ESA that is stored as a RedBoot variable instead of +# a static ESA. +# +cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA + # ActiveIf: !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_STRATA, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # Implemented by CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value + # component CYGPKG_DEVS_FLASH_STRATA_LOCKING + # ActiveIf: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel StrataFLASH memory support +# FLASH memory device support for Intel StrataFlash +# +cdl_package CYGPKG_DEVS_FLASH_STRATA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_STRATA_REQUIRED + # CYGINT_DEVS_FLASH_STRATA_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_FLASH_STRATA +}; + +# > +# Control Flash driver code copy to RAM +# Rarely, it is useful to disable the request that flash driver code +# be copied to separate RAM for execution. This option lets you do that. +# It should only be controlled by redboot_XXX.ecm config files, for +# building different varieties of RedBoot. +# NEVER disable this option for ROM startup code, which executes in place +# from Flash: the build will not work. +# +cdl_option CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Flash device implements locking +# +cdl_component CYGPKG_DEVS_FLASH_STRATA_LOCKING { + # ActiveIf constraint: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# < +# TRITON FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_STRATA + # CYGPKG_DEVS_FLASH_STRATA == current + # --> 1 +}; + +# > +# Generic StrataFLASH driver required +# +cdl_interface CYGINT_DEVS_FLASH_STRATA_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGINT_DEVS_FLASH_STRATA_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_STK1, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Karo Triton XScale evaluation boards +# The TRITON_STK1 HAL package provides the support needed to run +# eCos on a Karo TRITON board located on a Starter Kit I. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_STK1 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: ROM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : "arm_xscale_triton_rom" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 1 + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Diagnostic serial port +# This option chooses which serial port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 1 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON tests +# This option specifies the set of tests for the XScale TRITON HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : "arm_xscale_triton_rom" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton_rom +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # option CYGSEM_IO_ETH_DRIVERS_WARN + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 2 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 2 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.4.1a + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS + # DefaultValue: 0 != CYGPKG_REDBOOT_NETWORKING +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # Flavor: booldata + user_value 0 255,255,255,0 + # value_source user + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + user_value 512 + # value_source user + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # component CYGPKG_IO_ETH_DRIVERS_NET + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/config/TRITON_X.ecc b/config/TRITON_X.ecc new file mode 100644 index 00000000..c2bc0bdc --- /dev/null +++ b/config/TRITON_X.ecc @@ -0,0 +1,6996 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware triton_x ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_XSCALE_TRITON_X current ; + package -hardware CYGPKG_IO_FLASH current ; + package -hardware CYGPKG_DEVS_FLASH_STRATA current ; + package -hardware CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON current ; + package CYGPKG_HAL current ; + package CYGPKG_INFRA current ; + package CYGPKG_REDBOOT current ; + package CYGPKG_ISOINFRA current ; + package CYGPKG_LIBC_STRING current ; + package CYGPKG_NS_DNS current ; + package CYGPKG_CRC current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-linux + # value_source user + # Default value: xscale-elf +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # value_source default + # Default value: "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" + # value_source default + # Default value: "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" +}; + +# Build GDB stub ROM image +# This option enables the building of the GDB stubs for the +# board. The common HAL controls takes care of most of the +# build process, but the final conversion from ELF image to +# binary data is handled by the platform CDL, allowing +# relocation of the data if necessary. +# +cdl_option CYGBLD_BUILD_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS + # CYGBLD_BUILD_COMMON_GDB_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGBLD_BUILD_COMMON_GDB_STUBS +}; + +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" + # CYGBLD_ISO_STRTOK_R_HEADER == + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of functions +# This option chooses whether some of the +# particularly simple string functions from +# are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # This option is not active + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA (unknown) == 0 + # --> 0 +}; + +# Tracing level +# Trace verbosity level for debugging the +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 +}; + +# < +# < +# < +# FLASH device drivers +# This option enables drivers for basic I/O services on +# flash devices. +# +cdl_package CYGPKG_IO_FLASH { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGPKG_IO_FLASH + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # ActiveIf: CYGPKG_IO_FLASH +}; + +# > +# Extra memory required by FLASH device drivers +# Use this option to control how much extra memory is used +# by the FLASH drivers to perform certain operations. This +# memory is used to hold driver functions in RAM (for platforms +# which require it). The value should thus be large enough +# to hold any such driver. Reducing this value will make +# more RAM available to general programs. +# +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00001000 + # value_source default + # Default value: 0x00001000 +}; + +# Hardware FLASH device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE { + # Implemented by CYGPKG_DEVS_FLASH_STRATA, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FLASH + # ActiveIf: CYGHWR_IO_FLASH_DEVICE +}; + +# Hardware FLASH device drivers are not in RAM +# This option makes the IO driver copy the device +# driver functions to RAM before calling them. Newer +# drivers should make sure that the functions are +# linked to RAM by putting them in .2ram sections. +# +cdl_interface CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM { + # Implemented by CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value +}; + +# Hardware can support block locking +# This option will be enabled by devices which can support +# locking (write-protection) of individual blocks. +# +cdl_interface CYGHWR_IO_FLASH_BLOCK_LOCKING { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + + # The following properties are affected by this value + # component CYGPKG_DEVS_FLASH_STRATA_LOCKING + # ActiveIf: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL + # ActiveIf: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 +}; + +# Verify data programmed to flash +# Selecting this option will cause verification of data +# programmed to flash. +# +cdl_option CYGSEM_IO_FLASH_VERIFY_PROGRAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Platform has flash soft DIP switch write-protect +# Selecting this option will cause the state of a hardware jumper or +# dipswitch to be read by software to determine whether the flash is +# write-protected or not. +# +cdl_option CYGSEM_IO_FLASH_SOFT_WRITE_PROTECT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instantiate in I/O block device API +# Provides a block device accessible using the standard I/O +# API ( cyg_io_read() etc. ) +# +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + # This option is not active + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Name of flash device 1 block device +# +cdl_component CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 { + # This option is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is not active + # The parent CYGPKG_IO_FLASH_BLOCK_DEVICE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/flash1\"" + # value_source default + # Default value: "\"/dev/flash1\"" +}; + +# > +# Start offset from flash base +# This gives the offset from the base of flash which this +# block device corresponds to. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_OFFSET_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# Length +# This gives the length of the region of flash given over +# to this block device. +# +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + # This option is not active + # The parent CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x00100000 + # value_source default + # Default value: 0x00100000 +}; + +# < +# < +# Intel StrataFLASH memory support +# FLASH memory device support for Intel StrataFlash +# +cdl_package CYGPKG_DEVS_FLASH_STRATA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + # ActiveIf constraint: CYGINT_DEVS_FLASH_STRATA_REQUIRED + # CYGINT_DEVS_FLASH_STRATA_REQUIRED == 1 + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON + # Requires: CYGPKG_DEVS_FLASH_STRATA +}; + +# > +# Control Flash driver code copy to RAM +# Rarely, it is useful to disable the request that flash driver code +# be copied to separate RAM for execution. This option lets you do that. +# It should only be controlled by redboot_XXX.ecm config files, for +# building different varieties of RedBoot. +# NEVER disable this option for ROM startup code, which executes in place +# from Flash: the build will not work. +# +cdl_option CYGOPT_DEVS_FLASH_STRATA_NOT_IN_RAM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Flash device implements locking +# +cdl_component CYGPKG_DEVS_FLASH_STRATA_LOCKING { + # ActiveIf constraint: 0 < CYGHWR_IO_FLASH_BLOCK_LOCKING + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# < +# TRITON FLASH memory support +# +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_DEVS_FLASH_STRATA + # CYGPKG_DEVS_FLASH_STRATA == current + # --> 1 +}; + +# > +# Generic StrataFLASH driver required +# +cdl_interface CYGINT_DEVS_FLASH_STRATA_REQUIRED { + # Implemented by CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_DEVS_FLASH_STRATA + # ActiveIf: CYGINT_DEVS_FLASH_STRATA_REQUIRED +}; + +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL (unknown) == 0 + # --> 0 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS (unknown) == 0 + # --> 0 +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS (unknown) == 0 + # --> 0 +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM == current + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + user_value 4096 + # value_source user + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL (unknown) == 0 + # --> 32768 + # Legal values: 1024 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_X, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_X, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # component CYGBLD_BUILD_REDBOOT + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR == 1 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_X, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_X, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 1 + # Flavor: bool + # Current value: 0 +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim cache virtual vectors +# This option will cause the cache virtual vectors +# to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# Behave as a ROM monitor +# Enable this option if this program is to be used as a ROM monitor, +# i.e. applications will be loaded into RAM on the board, and this +# ROM monitor may process exceptions or interrupts generated from the +# application. This enables features such as utilizing a separate +# interrupt stack when exceptions are generated. +# +cdl_option CYGSEM_HAL_ROM_MONITOR { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 + # Requires: CYG_HAL_STARTUP == "ROM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYGSEM_HAL_ROM_MONITOR + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # option CYGPRI_REDBOOT_ROM_MONITOR + # Requires: CYGSEM_HAL_ROM_MONITOR +}; + +# Work with a ROM monitor +# Support can be enabled for different varieties of ROM monitor. +# This support changes various eCos semantics such as the encoding +# of diagnostic output, or the overriding of hardware interrupt +# vectors. +# Firstly there is "Generic" support which prevents the HAL +# from overriding the hardware vectors that it does not use, to +# instead allow an installed ROM monitor to handle them. This is +# the most basic support which is likely to be common to most +# implementations of ROM monitor. +# "GDB_stubs" provides support when GDB stubs are included in +# the ROM monitor or boot ROM. +# +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + # Flavor: booldata + user_value 0 0 + # value_source user + # Default value: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # CYG_HAL_STARTUP == ROM + # --> 0 0 + # Legal values: "Generic" "GDB_stubs" + # Requires: CYG_HAL_STARTUP == "RAM" + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# < +# Platform defined I/O channels. +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support. +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_X, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_DISK + # ActiveIf: CYGINT_HAL_PLF_IF_IDE != 0 +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK (unknown) == 0 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache tests/intr +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# < +# ARM architecture +# The ARM architecture HAL package provides generic +# support for this processor architecture. It is also +# necessary to select a specific target platform HAL +# package. +# +cdl_package CYGPKG_HAL_ARM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # ActiveIf: CYGPKG_HAL_ARM +}; + +# > +# The CPU architecture supports THUMB mode +# +cdl_interface CYGINT_HAL_ARM_THUMB_ARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_THUMB + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # ActiveIf: CYGINT_HAL_ARM_THUMB_ARCH != 0 +}; + +# Enable Thumb instruction set +# Enable use of the Thumb instruction set. +# +cdl_option CYGHWR_THUMB { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_ARM_ENABLE_THUMB_INTERWORK + # DefaultValue: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) +}; + +# Enable Thumb interworking compiler option +# This option controls the use of -mthumb-interwork in the +# compiler flags. It defaults enabled in Thumb or ROM monitor +# configurations, but can be overridden for reduced memory +# footprint where interworking is not a requirement. +# +cdl_option CYGBLD_ARM_ENABLE_THUMB_INTERWORK { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_THUMB_ARCH != 0 + # CYGINT_HAL_ARM_THUMB_ARCH == 0 + # --> 0 + + # Flavor: bool + user_value 0 + # value_source user + # Default value: (CYGHWR_THUMB || CYGSEM_HAL_ROM_MONITOR) + # CYGHWR_THUMB == 0 + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_ARM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_BIGENDIAN + # ActiveIf: CYGINT_HAL_ARM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_ARM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_ARM_BIGENDIAN != 0 + # CYGINT_HAL_ARM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# The platform uses a processor with an ARM7 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM7 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with an ARM9 core +# +cdl_interface CYGINT_HAL_ARM_ARCH_ARM9 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a StrongARM core +# +cdl_interface CYGINT_HAL_ARM_ARCH_STRONGARM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# The platform uses a processor with a XScale core +# +cdl_interface CYGINT_HAL_ARM_ARCH_XSCALE { + # Implemented by CYGPKG_HAL_ARM_XSCALE_TRITON_X, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_ARM_CPU_FAMILY + # LegalValues: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # option CYGHWR_HAL_ARM_CPU_FAMILY + # DefaultValue: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" +}; + +# ARM CPU family +# It is possible to optimize code for different +# ARM CPU families. This option selects which CPU to +# optimize for on boards that support multiple CPU types. +# +cdl_option CYGHWR_HAL_ARM_CPU_FAMILY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value XScale + # value_source default + # Default value: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : + # "unknown" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 + # --> XScale + # Legal values: (CYGINT_HAL_ARM_ARCH_ARM7 != 0) ? "ARM7" : "" + # (CYGINT_HAL_ARM_ARCH_ARM9 != 0) ? "ARM9" : "" + # (CYGINT_HAL_ARM_ARCH_STRONGARM != 0) ? "StrongARM" : "" + # (CYGINT_HAL_ARM_ARCH_XSCALE != 0) ? "XScale" : "" + # "" + # CYGINT_HAL_ARM_ARCH_ARM7 == 0 + # CYGINT_HAL_ARM_ARCH_ARM9 == 0 + # CYGINT_HAL_ARM_ARCH_STRONGARM == 0 + # CYGINT_HAL_ARM_ARCH_XSCALE == 1 +}; + +# Provide diagnostic dump for exceptions +# Print messages about hardware exceptions, including +# raw exception frame dump and register contents. +# +cdl_option CYGHWR_HAL_ARM_DUMP_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 0 +}; + +# Process all exceptions with the eCos application +# Normal RAM-based programs which do not include GDB stubs +# defer processing of the illegal instruction exception to GDB. +# Setting this options allows the program to explicitly handle +# the illegal instruction exception itself. Note: this will +# prevent the use of GDB to debug the application as breakpoints +# will no longer work. +# +cdl_option CYGIMP_HAL_PROCESS_ALL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support GDB thread operations via ICE/Multi-ICE +# Allow GDB to get thread information via the ICE/Multi-ICE +# connection. +# +cdl_option CYGHWR_HAL_ARM_ICE_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + # Requires: CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT (unknown) == 0 + # --> 0 +}; + +# Support for 'gprof' callbacks +# The ARM HAL provides the macro for 'gprof' callbacks from RedBoot +# to acquire the interrupt-context PC and SP, when this option is +# active. +# +cdl_option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/arm.ld" + # Flavor: data + # Current_value: src/arm.ld +}; + +# Implementations of hal_arm_mem_real_region_top() +# +cdl_interface CYGINT_HAL_ARM_MEM_REAL_REGION_TOP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Karo Triton XScale evaluation boards +# The TRITON_X HAL package provides the support needed to run +# eCos on a Karo TRITON X board. +# +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_X { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Startup type +# When targetting the KARO TRITON eval board it is possible to build +# the system for either RAM bootstrap or ROM bootstrap(s). Select +# 'ram' when building programs to load into RAM using onboard +# debug software such as Angel or eCos GDB stubs. Select 'rom' +# when building a stand-alone application which will be put +# into ROM. Selection of 'stubs' is for the special case of +# building the eCos GDB stubs themselves. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: RAM + # Legal values: "RAM" "ROM" + + # The following properties are affected by this value + # option CYGBLD_BUILD_GDB_STUBS + # Requires: CYG_HAL_STARTUP == "ROM" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : "arm_xscale_triton_rom" + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # option CYGSEM_HAL_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "ROM" + # option CYGSEM_HAL_USE_ROM_MONITOR + # DefaultValue: CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 + # option CYGSEM_HAL_USE_ROM_MONITOR + # Requires: CYG_HAL_STARTUP == "RAM" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # option CYGBLD_BUILD_REDBOOT_WITH_THREADS + # ActiveIf: CYG_HAL_STARTUP != "RAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # option CYGPRI_REDBOOT_ROM_MONITOR + # ActiveIf: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" +}; + +# Coexist with ARM bootloader +# Enable this option if the ARM bootloader is programmed into +# the FLASH boot sector on the board. +# +cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Default console channel. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + # Flavor: data + user_value 2 + # value_source user + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # LegalValues: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 +}; + +# Debug serial port +# This option chooses which port will be used to connect to a host +# running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # Flavor: data + user_value 2 + # value_source user + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port +# The TRITON board has only one serial port. This option +# chooses which port will be used for diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # Flavor: data + user_value 2 + # value_source user + # Default value: 0 + # Legal values: 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + # CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS == 3 +}; + +# Diagnostic serial port baud rate +# This option selects the baud rate used for the diagnostic port. +# Note: this should match the value chosen for the GDB port if the +# diagnostic and GDB port are the same. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# GDB serial port baud rate +# This option selects the baud rate used for the GDB port. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 38400 + # value_source default + # Default value: 38400 + # Legal values: 9600 19200 38400 57600 115200 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Calculated value: 1000000000 + # Flavor: data + # Current_value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Calculated value: 100 + # Flavor: data + # Current_value: 100 +}; + +# Real-time clock period +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Calculated value: 330000 + # Flavor: data + # Current_value: 330000 +}; + +# < +# XScale TRITON build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the XScale TRITON HAL. These flags are +# removed from the set of global flags if present. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# XScale TRITON tests +# This option specifies the set of tests for the XScale TRITON HAL. +# +cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + # Calculated value: "" + # Flavor: data + # Current_value: +}; + +# < +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : "arm_xscale_triton_rom" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: arm_xscale_triton_rom +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: CYG_HAL_STARTUP == "RAM" ? "" : CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : "" + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT (unknown) == 0 + # Flavor: data + # Current_value: +}; + +# < +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in ) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 0 + # --> 1 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_option CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp" + # Flavor: data + # Current_value: tests/cxxsupp +}; + +# < +# < +# Redboot ROM monitor +# doc: ref/redboot.html +# This package supports the Redboot [stand-alone debug monitor] +# using eCos as the underlying board support mechanism. +# +cdl_package CYGPKG_REDBOOT { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_XSCALE_OPTIONS + # ActiveIf: CYGPKG_REDBOOT + # component CYGPKG_REDBOOT_HAL_OPTIONS + # ActiveIf: CYGPKG_REDBOOT +}; + +# > +# Include support for ELF file format +# +cdl_option CYGSEM_REDBOOT_ELF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Methods of loading images using redboot +# +cdl_interface CYGINT_REDBOOT_LOAD_METHOD { + # Implemented by CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM, active, enabled + # Implemented by CYGPKG_REDBOOT_NETWORKING, inactive, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_REDBOOT_LOAD_METHOD +}; + +# Build Redboot ROM ELF image +# This option enables the building of the Redboot ELF image. +# The image may require further relocation or symbol +# stripping before being converted to a binary image. +# This is handled by a rule in the target CDL. +# +cdl_component CYGBLD_BUILD_REDBOOT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 1 + # --> 1 + # Requires: !CYGINT_HAL_DEBUG_GDB_STUBS || CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 1 + # --> 1 + # Requires: ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_REDBOOT_LOAD_METHOD + # CYGINT_REDBOOT_LOAD_METHOD == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_BUILD_REDBOOT_BIN + # ActiveIf: CYGBLD_BUILD_REDBOOT +}; + +# > +# Threads debugging support +# Enabling this option will include special code in the GDB stubs to +# support debugging of threaded programs. In the case of eCos programs, +# this support allows GDB to have complete access to the eCos threads +# in the program. +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_THREADS { + # ActiveIf constraint: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 +}; + +# Customized version string +# Use this option to define a customized version "string" for +# RedBoot. Note: this value is only cosmetic, displayed by the +# "version" command, but is useful for providing site specific +# information about the RedBoot configuration. +# +cdl_option CYGDAT_REDBOOT_CUSTOM_VERSION { + # Flavor: booldata + user_value 1 3.2 + # value_source user + # Default value: 0 0 +}; + +# Enable command line editing +# If this option is non-zero, RedBoot will remember the last N command +# lines. These lines may be reused. Enabling this history will also +# enable rudimentary editting of the lines themselves. +# +cdl_option CYGNUM_REDBOOT_CMD_LINE_EDITING { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# Include support gzip/zlib decompression +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_ZLIB { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Include support for xyzModem downloads +# doc: ref/download-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_XYZMODEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include MS Windows CE support +# doc: ref/wince.html +# This option enables MS Windows CE EShell support +# and Windows CE .BIN images support +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# Include POSIX checksum command +# doc: ref/cksum-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CKSUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory fill command +# doc: ref/mfill-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MFILL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory compare command +# doc: ref/mcmp-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_MCMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include memory dump command +# doc: ref/dump-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_DUMP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include cache command +# doc: ref/cache-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_CACHES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Include exec command +# doc: ref/exec-command.html +# +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_ARM_LINUX_EXEC + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_EXEC +}; + +# Redboot Networking +# This option includes networking support in RedBoot. +# +cdl_component CYGPKG_REDBOOT_NETWORKING { + # This option is not active + # ActiveIf constraint: CYGPKG_IO_ETH_DRIVERS + # CYGPKG_IO_ETH_DRIVERS (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Print net debug information +# This option is overriden by the configuration stored in flash. +# +cdl_option CYGDBG_REDBOOT_NET_DEBUG { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Support HTTP for download +# This option enables the use of the HTTP protocol for download +# +cdl_option CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Default IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING is not active + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# > +# Do not try to use BOOTP +# By default Redboot tries to use BOOTP to get an IP +# address. If there's no BOOTP server on your network +# use this option to avoid to wait until the +# timeout. This option is overriden by the +# configuration stored in flash. +# +cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP { + # This option is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is not active + # The parent CYGDAT_REDBOOT_DEFAULT_IP_ADDR is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Use DHCP to get IP information +# Use DHCP protocol to obtain pertinent IP addresses, such +# as the client, server, gateway, etc. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_DHCP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use a gateway for non-local IP traffic +# Enabling this option will allow the RedBoot networking +# stack to use a [single] gateway to reach a non-local +# IP address. If disabled, RedBoot will only be able to +# reach nodes on the same subnet. +# +cdl_component CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Default gateway IP address +# This IP address is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR { + # This option is not active + # The parent CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY is not active + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# Default IP address mask +# This IP address mask is the default used by RedBoot if a BOOTP/DHCP +# server does not respond. The numbers should be separated by +# *commas*, and not dots. If an IP address is configured into +# the Flash configuration, that will be used in preference. +# +cdl_component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK { + # This option is not active + # The parent CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY is not active + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 0 +}; + +# < +# TCP port to listen for incoming connections +# RedBoot will 'listen' on this port for incoming TCP connections. +# This allows outside connections to be made to the platform, either +# for GDB or RedBoot commands. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_TCP_PORT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 9000 + # value_source default + # Default value: 9000 +}; + +# Number of [network] packet buffers +# RedBoot may need to buffer network data to support various connections. +# This option allows control over the number of such buffered packets, +# and in turn, controls the amount of memory used by RedBoot (which +# is not available to user applications). Each packet buffer takes up +# about 1514 bytes. Note: there is little need to make this larger +# than the default. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_MAX_PKTBUF { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4 + # value_source default + # Default value: 4 + # Legal values: 3 to 8 +}; + +# DNS support +# When this option is enabled, RedBoot will be built with +# support for DNS, allowing use of hostnames on the command +# line. +# +cdl_component CYGPKG_REDBOOT_NETWORKING_DNS { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGPKG_NS_DNS + # CYGPKG_NS_DNS == current + # --> 1 + # Requires: !CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 1 +}; + +# > +# Default DNS IP +# This option sets the IP of the default DNS. The IP can be +# changed at runtime as well. +# +cdl_option CYGPKG_REDBOOT_NETWORKING_DNS_IP { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is not active + # ActiveIf constraint: !CYGSEM_REDBOOT_FLASH_CONFIG + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0.0.0.0 + # value_source default + # Default value: 0.0.0.0 +}; + +# Timeout in DNS lookup +# This option sets the timeout used when looking up an +# address via the DNS. Default is 10 seconds. +# +cdl_option CYGNUM_REDBOOT_NETWORKING_DNS_TIMEOUT { + # This option is not active + # The parent CYGPKG_REDBOOT_NETWORKING_DNS is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# < +# < +# Allow RedBoot to use any I/O channel for its console. +# If this option is enabled then RedBoot will attempt to use all +# defined serial I/O channels for its console device. Once input +# arrives at one of these channels then the console will use only +# that port. +# +cdl_option CYGPKG_REDBOOT_ANY_CONSOLE { + # Flavor: bool + user_value 0 + # value_source user + # Default value: 1 +}; + +# Allow RedBoot to adjust the baud rate on the serial console. +# If this option is enabled then RedBoot will support commands to set +# and query the baud rate on the selected console. +# +cdl_option CYGSEM_REDBOOT_VARIABLE_BAUD_RATE { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum command line length +# This option allows control over how long the CLI command line +# should be. This space will be allocated statically +# rather than from RedBoot's stack. +# +cdl_option CYGPKG_REDBOOT_MAX_CMD_LINE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# Command processing idle timeout (ms) +# This option controls the timeout period before the +# command processing is considered 'idle'. Making this +# number smaller will cause idle processing to take place +# more often, etc. The default value of 10ms is a reasonable +# tradeoff between responsiveness and overhead. +# +cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Size of zlib decompression buffer +# This is the size of the buffer filled with incoming data +# during load before calls are made to the decompressor +# function. For ethernet downloads this can be made bigger +# (at the cost of memory), but for serial downloads on slow +# processors it may be necessary to reduce the size to +# avoid serial overruns. zlib appears to bail out if less than +# five bytes are available initially so this is the minimum. +# +cdl_option CYGNUM_REDBOOT_LOAD_ZLIB_BUFFER { + # This option is not active + # ActiveIf constraint: CYGPKG_COMPRESS_ZLIB + # CYGPKG_COMPRESS_ZLIB (unknown) == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 64 + # value_source default + # Default value: 64 + # Legal values: 5 to 256 +}; + +# Validate RAM addresses during load +# This option controls whether or not RedBoot will make sure that +# memory being used by the "load" command is in fact in user RAM. +# Leaving the option enabled makes for a safer environment, but this +# check may not be valid on all platforms, thus the ability to +# disable it. ** Disable this only with great care ** +# +cdl_option CYGSEM_REDBOOT_VALIDATE_USER_RAM_LOADS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Allow RedBoot to support FLASH programming +# If this option is enabled then RedBoot will provide commands +# to manage images in FLASH memory. These images can be loaded +# into memory for execution or executed in place. +# +cdl_component CYGPKG_REDBOOT_FLASH { + # ActiveIf constraint: CYGHWR_IO_FLASH_DEVICE + # CYGHWR_IO_FLASH_DEVICE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Minimum image size +# This option controls the minimum length of images kept by +# the FIS. In particular, it should be large enough to hold +# the RedBoot primary image itself, as well as be a natural +# multiple of the FLASH erase block size. +# +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + # Flavor: data + user_value 0x00040000 + # value_source user + # Default value: 0x00020000 +}; + +# Offset from start of FLASH to RedBoot boot image +# This option controls where the RedBoot boot image is located +# relative to the start of FLASH. +# +cdl_option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# Size of reserved area at start of FLASH +# This option reserves an area at the start of FLASH where RedBoot +# will never interfere; it is expected that this area contains +# (non-RedBoot-based) POST code or some other boot monitor that +# executes before RedBoot. +# +cdl_option CYGNUM_REDBOOT_FLASH_RESERVED_BASE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # DefaultValue: CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # option CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # Requires: CYGNUM_REDBOOT_FLASH_RESERVED_BASE <= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # option CYGOPT_REDBOOT_FIS_RESERVED_BASE + # ActiveIf: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE +}; + +# RedBoot Flash Image System support +# doc: ref/flash-image-system.html +# This option enables the Flash Image System commands +# and support within RedBoot. If disabled, simple Flash +# access commands such as "fis write" will still exist. +# This option would be disabled for targets that need simple +# FLASH manipulation, but do not have the need or space for +# complete image management. +# +cdl_option CYGOPT_REDBOOT_FIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_FIS_CONTENTS + # ActiveIf: CYGOPT_REDBOOT_FIS + # option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG + # ActiveIf: CYGOPT_REDBOOT_FIS + # component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER + # ActiveIf: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS +}; + +# Flash Image System default directory contents +# +cdl_component CYGPKG_REDBOOT_FIS_CONTENTS { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Flash block containing the Directory +# Which block of flash should hold the directory +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 +}; + +# Pseudo-file to describe reserved area +# If an area of FLASH is reserved, it is informative to +# have a fis entry describing it. This option controls +# creation of such an entry by default in the fis init +# command. +# +cdl_option CYGOPT_REDBOOT_FIS_RESERVED_BASE { + # This option is not active + # ActiveIf constraint: 0 != CYGNUM_REDBOOT_FLASH_RESERVED_BASE + # CYGNUM_REDBOOT_FLASH_RESERVED_BASE == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# File to describe RedBoot boot image +# Normally a ROM-startup RedBoot image is first in the +# FLASH, and the system boots using that image. This +# option controls creation of an entry describing it in +# the fis init command. It might be disabled if a +# platform has an immutable boot image of its own, where +# we use a POST-startup RedBoot instead, which performs +# less board initialization. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGOPT_REDBOOT_FIS_REDBOOT_POST + # DefaultValue: !CYGOPT_REDBOOT_FIS_REDBOOT +}; + +# File to describe RedBoot POST-compatible image +# This option controls creation of an entry describing a +# POST-startup RedBoot image in the fis init command. +# Not all platforms support POST-startup. A platform +# might have both for testing purposes, where the +# eventual user would substitute their own POST code for +# the initial ROM-startup RedBoot, and then jump to the +# POST-compatible RedBoot immediately following. +# +cdl_component CYGOPT_REDBOOT_FIS_REDBOOT_POST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGOPT_REDBOOT_FIS_REDBOOT + # CYGOPT_REDBOOT_FIS_REDBOOT == 1 + # --> 0 +}; + +# > +# Offset of POST image from FLASH start +# This option specifies the offset for a POST image from +# the start of FLASH. If unset, then the fis entry +# describing the POST image will be placed where +# convenient. +# +cdl_option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_REDBOOT_POST is disabled + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET + # CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET == 0 + # CYGBLD_REDBOOT_FLASH_BOOT_OFFSET == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET + # Requires: CYGNUM_REDBOOT_FIS_REDBOOT_POST_OFFSET >= CYGBLD_REDBOOT_FLASH_BOOT_OFFSET +}; + +# < +# File to describe RedBoot backup image +# This option controls creation of an entry describing a +# backup RedBoot image in the fis init command. +# Conventionally a RAM-startup RedBoot image is kept +# under this name for use in updating the ROM-based +# RedBoot that boots the board. +# +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Include ARM SIB ID in FIS +# If set, this option will cause the last 5 words of +# the FIS to include the special ID needed for the +# flash to be recognized as a reserved area for RedBoot +# by an ARM BootRom monitor. +# +cdl_option CYGOPT_REDBOOT_FIS_DIRECTORY_ARM_SIB_ID { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Size of FIS directory entry +# The FIS directory is limited to one single flash +# sector. If your flash has tiny sectors, you may wish +# to reduce this value in order to get more slots in +# the FIS directory. +# +cdl_option CYGNUM_REDBOOT_FIS_DIRECTORY_ENTRY_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 +}; + +# < +# Keep RedBoot configuration data in FLASH +# When this option is enabled, RedBoot will keep configuration +# data in a separate block of FLASH memory. This data will +# include such items as the node IP address or startup scripts. +# +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_GATEWAY_IP_ADDR + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "0, 0, 0, 0" + # component CYGDAT_REDBOOT_DEFAULT_IP_ADDR_MASK + # DefaultValue: CYGSEM_REDBOOT_FLASH_CONFIG ? 0 : "255, 255, 255, 0" + # option CYGPKG_REDBOOT_NETWORKING_DNS_IP + # ActiveIf: !CYGSEM_REDBOOT_FLASH_CONFIG + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# > +# Length of configuration data in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: 4096 +}; + +# Merged config data and FIS directory +# If this option is set, then the FIS directory and FLASH +# configuration database will be stored in the same physical +# FLASH block. +# +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + # ActiveIf constraint: CYGOPT_REDBOOT_FIS + # CYGOPT_REDBOOT_FIS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Which block of flash to use +# Which block of flash should hold the configuration +# information. Positive numbers are absolute block numbers. +# Negative block numbers count backwards from the last block. +# eg 2 means block 2, -2 means the last but one block. +# +cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_BLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -2 + # value_source default + # Default value: -2 +}; + +# Support simple macros/aliases in FLASH +# This option is used to allow support for simple text-based +# macros (aliases). These aliases are kept in the FLASH +# configuration data (persistent storage). +# +cdl_option CYGSEM_REDBOOT_FLASH_ALIASES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Length of strings in FLASH configuration data +# This option is used to control the amount of memory and FLASH +# to be used for string configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_STRING_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 +}; + +# Length of configuration script(s) in FLASH +# This option is used to control the amount of memory and FLASH +# to be used for configuration options (persistent storage). +# +cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 512 + # value_source default + # Default value: 512 +}; + +# Fallback to read-only FLASH configuration +# This option will cause the configuration information to +# revert to the readonly information stored in the FLASH. +# The option only takes effect after +# 1) the config_ok flag has been set to be true, +# indicating that at one time the copy in RAM was valid; +# and +# 2) the information in RAM has been verified to be invalid +# +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG_READONLY_FALLBACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Keep all RedBoot FLASH data blocks locked. +# When this option is enabled, RedBoot will keep configuration +# data and the FIS directory blocks implicitly locked. While +# this is somewhat safer, it does add overhead during updates. +# +cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL { + # ActiveIf constraint: CYGHWR_IO_FLASH_BLOCK_LOCKING != 0 + # CYGHWR_IO_FLASH_BLOCK_LOCKING == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use CRC checksums on FIS images. +# When this option is enabled, RedBoot will use CRC checksums +# when reading and writing flash images. +# +cdl_option CYGSEM_REDBOOT_FIS_CRC_CHECK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ARM FLASH drivers support SIB flash block structure +# This interface is implemented by a flash driver +# to indicate that it supports the ARM SIB flash +# block structure +# +cdl_interface CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED { + # No options implement this inferface + # ActiveIf constraint: CYGPKG_HAL_ARM + # CYGPKG_HAL_ARM == current + # --> 1 + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_FLASH_SIB + # ActiveIf: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED +}; + +# Use ARM SIB flash block structure +# This option is used to interpret ARM Flash System information +# blocks. +# +cdl_option CYGHWR_REDBOOT_ARM_FLASH_SIB { + # This option is not active + # ActiveIf constraint: CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED + # CYGINT_REDBOOT_ARM_FLASH_SIB_SUPPORTED == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Allow RedBoot to support disks +# If this option is enabled then RedBoot will provide commands +# to load disk files. +# +cdl_component CYGPKG_REDBOOT_DISK { + # ActiveIf constraint: CYGINT_HAL_PLF_IF_IDE != 0 + # CYGINT_HAL_PLF_IF_IDE == 1 + # --> 1 + + # Flavor: bool + user_value 1 + # value_source user + # Default value: 1 +}; + +# > +# Maximum number of supported disks +# This option controls the number of disks supported by RedBoot. +# +cdl_option CYGNUM_REDBOOT_MAX_DISKS { + # Flavor: data + user_value 1 + # value_source user + # Default value: 4 +}; + +# Maximum number of partitions per disk +# This option controls the maximum number of supported partitions per disk. +# +cdl_option CYGNUM_REDBOOT_MAX_PARTITIONS { + # Flavor: data + user_value 4 + # value_source user + # Default value: 8 +}; + +# Support IDE disks. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_IDE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support Linux second extended filesystems. +# When this option is enabled, RedBoot will support IDE disks. +# +cdl_component CYGSEM_REDBOOT_DISK_EXT2FS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support ISO9660 filesystems. +# When this option is enabled, RedBoot will support ISO9660 filesystems. +# +cdl_component CYGSEM_REDBOOT_DISK_ISO9660 { + # Calculated value: 0 + # Flavor: bool + # Current value: 0 +}; + +# < +# Boot scripting +# doc: ref/persistent-state-flash.html +# This contains options related to RedBoot's boot script +# functionality. +# +cdl_component CYGPKG_REDBOOT_BOOT_SCRIPT { + # There is no associated value. +}; + +# > +# Boot scripting enabled +# This option controls whether RedBoot boot script +# functionality is enabled. +# +cdl_option CYGFUN_REDBOOT_BOOT_SCRIPT { + # ActiveIf constraint: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG + # CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT == 0 + # CYGSEM_REDBOOT_FLASH_CONFIG == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Use default RedBoot boot script +# If enabled, this option will tell RedBoot to use the value of +# this option as a default boot script. +# +cdl_option CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_REDBOOT_BOOT_SCRIPT + # ActiveIf: CYGDAT_REDBOOT_DEFAULT_BOOT_SCRIPT || CYGSEM_REDBOOT_FLASH_CONFIG +}; + +# Resolution (in ms) for script timeout value. +# This option controls the resolution of the script timeout. +# The value is specified in milliseconds (ms), thus to have the +# script timeout be defined in terms of tenths of seconds, use 100. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_TIMEOUT_RESOLUTION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 +}; + +# Script default timeout value +# This option is used to set the default timeout for startup +# scripts, when they are enabled. +# +cdl_option CYGNUM_REDBOOT_BOOT_SCRIPT_DEFAULT_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# < +# Behave like a ROM monitor +# Enabling this option will allow RedBoot to provide ROM monitor-style +# services to programs which it executes. +# +cdl_option CYGPRI_REDBOOT_ROM_MONITOR { + # ActiveIf constraint: CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_HAL_ROM_MONITOR + # CYGSEM_HAL_ROM_MONITOR == 1 + # --> 1 +}; + +# Allow RedBoot to handle GNUPro application 'syscalls'. +# If this option is enabled then RedBoot will install a syscall handler +# to support debugging of applications based on GNUPro newlib/bsp. +# +cdl_component CYGSEM_REDBOOT_BSP_SYSCALLS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS + # option CYGPKG_HAL_GDB_FILEIO + # ActiveIf: CYGSEM_REDBOOT_BSP_SYSCALLS +}; + +# > +# Support additional syscalls for 'gprof' profiling +# Support additional syscalls to support a periodic callback +# function for histogram-style profiling, and an enquire/set +# of the tick rate. +# The application must use the GNUPro newlib facilities +# to set this up. +# +cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF { + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + # ActiveIf constraint: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT + # CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Does the HAL support 'gprof' profiling? +# +cdl_interface CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT { + # Implemented by CYGOPT_HAL_ARM_SYSCALL_GPROF_SUPPORT, inactive, enabled + # This option is not active + # The parent CYGSEM_REDBOOT_BSP_SYSCALLS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF + # ActiveIf: 0 < CYGINT_REDBOOT_BSP_SYSCALLS_GPROF_SUPPORT +}; + +# < +# Use a common buffer for Zlib and FIS +# Use a common memory buffer for both the zlib workspace +# and FIS directory operations. This can save a substantial +# amount of RAM, especially when flash sectors are large. +# +cdl_component CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER { + # This option is not active + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_ZLIB && CYGOPT_REDBOOT_FIS + # CYGBLD_BUILD_REDBOOT_WITH_ZLIB == 0 + # CYGOPT_REDBOOT_FIS == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of Zlib/FIS common buffer +# Size of common buffer to allocate. Must be at least the +# size of one flash sector. +# +cdl_option CYGNUM_REDBOOT_FIS_ZLIB_COMMON_BUFFER_SIZE { + # This option is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is not active + # The parent CYGOPT_REDBOOT_FIS_ZLIB_COMMON_BUFFER is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x0000C000 + # value_source default + # Default value: 0x0000C000 + # Legal values: 0x4000 to 0x80000000 +}; + +# < +# < +# Redboot for ARM options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_ARM_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Provide the exec command in RedBoot +# This option contains requirements for booting linux +# from RedBoot. The component is enabled/disabled from +# RedBoots CDL. +# +cdl_component CYGPKG_REDBOOT_ARM_LINUX_EXEC { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT_WITH_EXEC + # CYGBLD_BUILD_REDBOOT_WITH_EXEC == 1 + # --> 1 + + # There is no associated value. +}; + +# > +# Physical base address of linux kernel +# This is the physical address of the base of the +# Linux kernel image. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT + # CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 + # --> 0xa0008000 +}; + +# Default physical base address of linux kernel +# 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_EXEC_ADDRESS_DEFAULT { + # Flavor: data + user_value 0xa0008000 + # value_source user + # Default value: 0x00008000 + + # The following properties are affected by this value + # option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS + # DefaultValue: CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT +}; + +# Base address of linux kernel parameter tags +# 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. +# +cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS { + # Flavor: data + user_value 0xa0001000 + # value_source user + # Default value: 0x00000100 +}; + +# < +# < +# Redboot for XScale options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# Redboot HAL options +# This option lists the target's requirements for a valid Redboot +# configuration. +# +cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + # ActiveIf constraint: CYGPKG_REDBOOT + # CYGPKG_REDBOOT == current + # --> 1 + + # There is no associated value. +}; + +# > +# Build Redboot ROM binary image +# This option enables the conversion of the Redboot ELF +# image to a binary image suitable for ROM programming. +# +cdl_option CYGBLD_BUILD_REDBOOT_BIN { + # ActiveIf constraint: CYGBLD_BUILD_REDBOOT + # CYGBLD_BUILD_REDBOOT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_IO_FLASH + # Requires: CYGPKG_ISOINFRA + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_IO_FLASH + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # component CYGBLD_BUILD_REDBOOT + # Requires: CYGINT_ISO_STRING_STRFUNCS + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX contents +# This covers the types required by POSIX to be in +# +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX contents +# This covers the extra types required by non-POSIX +# packages to be in . These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # Implemented by CYGPKG_NS_DNS_BUILD, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_NS_DNS_BUILD + # Requires: CYGBLD_ISO_DNS_HEADER == "" +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# DNS client +# doc: ref/net-ns-dns.html +# +cdl_package CYGPKG_NS_DNS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: CYGPKG_NS_DNS +}; + +# > +# Build DNS NS client package +# +cdl_option CYGPKG_NS_DNS_BUILD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # The inferred value should not be edited directly. + inferred_value 0 + # value_source inferred + # Default value: 1 + # Requires: CYGBLD_ISO_DNS_HEADER == "" + # CYGBLD_ISO_DNS_HEADER == + # --> 1 + # Requires: CYGPKG_NET + # CYGPKG_NET (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 0 + # --> 0 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 0 + # --> 0 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD + # CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_NS_DNS_DEFAULT + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_NS_DNS_DOMAINNAME + # ActiveIf: CYGPKG_NS_DNS_BUILD + # option CYGPKG_NS_DNS_TESTS + # ActiveIf: CYGPKG_NS_DNS_BUILD + # component CYGPKG_REDBOOT_NETWORKING_DNS + # Requires: !CYGPKG_NS_DNS_BUILD +}; + +# Provide a hard coded default server address +# This option controls the use of a default, hard coded DNS +# server. When this is enabled, the IP address in the CDL +# option CYGDAT_NS_DNS_DEFAULT_SERVER is used in +# init_all_network_interfaces() to start the resolver using +# the specified server. The DHCP client or user code may +# override this by restarting the resolver. +# +cdl_component CYGPKG_NS_DNS_DEFAULT { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# IP address of the default DNS server +# +cdl_option CYGDAT_NS_DNS_DEFAULT_SERVER { + # This option is not active + # The parent CYGPKG_NS_DNS_DEFAULT is not active + # The parent CYGPKG_NS_DNS_DEFAULT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 192.168.1.1 + # value_source default + # Default value: 192.168.1.1 +}; + +# < +# Provide a hard coded default domain name +# This option controls the use of a default, hard coded +# domain name to be used when querying a DNS server. When +# this is enabled, the name in the CDL option +# CYGDAT_NS_DNS_DOMAINNAME_NAME is used in +# init_all_network_interfaces() to set the domain name as +# accessed by getdomainname(). +# +cdl_component CYGPKG_NS_DNS_DOMAINNAME { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Domain name for this device +# +cdl_option CYGDAT_NS_DNS_DOMAINNAME_NAME { + # This option is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is not active + # The parent CYGPKG_NS_DNS_DOMAINNAME is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value default.domain.com + # value_source default + # Default value: default.domain.com +}; + +# < +# DNS support build options +# +cdl_component CYGPKG_NS_DNS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. +# These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "-D_KERNEL -D__ECOS" + # value_source default + # Default value: "-D_KERNEL -D__ECOS" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the DNS package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_NS_DNS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Networking tests +# This option specifies the set of tests for the DNS package. +# +cdl_option CYGPKG_NS_DNS_TESTS { + # This option is not active + # ActiveIf constraint: CYGPKG_NS_DNS_BUILD + # CYGPKG_NS_DNS_BUILD == 0 + # --> 0 + + # Calculated value: "tests/dns1 tests/dns2" + # Flavor: data + # Current_value: tests/dns1 tests/dns2 +}; + +# < +# Compute CRCs +# doc: ref/services-crc.html +# This package provides support for CRC calculation. Currently +# this is the POSIX 1003 defined CRC algorithm, a 32 CRC by +# Gary S. Brown, and a 16 bit CRC. +# +cdl_package CYGPKG_CRC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# POSIX CRC tests +# +cdl_option CYGPKG_CRC_TESTS { + # Calculated value: "tests/crc_test" + # Flavor: data + # Current_value: tests/crc_test +}; + +# < +# < + diff --git a/doc/html/cdl-guide/advanced.html b/doc/html/cdl-guide/advanced.html new file mode 100644 index 00000000..5b0a101b --- /dev/null +++ b/doc/html/cdl-guide/advanced.html @@ -0,0 +1,177 @@ + + + + + + + + +Templates, Targets and Other Topics +
The eCos Component Writer's Guide
PrevNext


PrevHomeNext
script Targets
\ No newline at end of file diff --git a/doc/html/cdl-guide/advanced.targets.html b/doc/html/cdl-guide/advanced.targets.html new file mode 100644 index 00000000..38d1126d --- /dev/null +++ b/doc/html/cdl-guide/advanced.targets.html @@ -0,0 +1,145 @@ + + + + + + + + +Targets +
The eCos Component Writer's Guide
PrevChapter 6. Templates, Targets and Other Topics 


PrevHome 
Templates, Targets and Other TopicsUp 
\ No newline at end of file diff --git a/doc/html/cdl-guide/build.headers.html b/doc/html/cdl-guide/build.headers.html new file mode 100644 index 00000000..372e0643 --- /dev/null +++ b/doc/html/cdl-guide/build.headers.html @@ -0,0 +1,1452 @@ + + + + + + + + +Configuration Header File Generation +
The eCos Component Writer's Guide
PrevChapter 4. The Build ProcessNext

Configuration Header File Generation

Configuration options can affect a build in two main ways. First, +enabling a configuration option or other CDL entity can result in +various files being built and added to a library, thus providing +functionality to the application code. However this mechanism can only +operate at a rather coarse grain, at the level of entire source files. +Hence the component framework also generates configuration header +files containing mainly C preprocessor #define +directives. Package source code can then #include +the appropriate header files and use #if, +#ifdef and #ifndef directives to +adapt accordingly. In this way configuration options can be used to +enable or disable entire functions within a source file or just a +single line, whichever is appropriate.

The configuration header files end up in the include/pkgconf subdirectory of the +install tree. There will be one header file for the system as a whole, +pkgconf/system.h, and there will +be additional header files for each package, for example +pkgconf/kernel.h. The header files +are generated when creating or updating the build and install trees, +which needs to happen after every change to the configuration.

The component framework processes each package in the configuration +one at a time. The exact order in which the packages are processed is +not defined, so the order in which #define's will +end up in the global pkgconf/system.h header may vary. However +for any given configuration the order should remain consistent until +packages are added to or removed from the system. This avoids +unnecessary changes to the global header file and hence unnecessary +rebuilds of the packages and of application code because of header +file dependency handling.

Within a given package the various components, options and interfaces +will be processed in the order in which they were defined in the +corresponding CDL scripts. Typically the data in the configuration +headers consists only of a sequence of #define's so +the order in which these are generated is irrelevant, but some +properties such as define_proc can be used to add arbitrary data to +a configuration header and hence there may be dependencies on the +order. It should be noted that re-parenting an option below some other +package has no effect on which header file will contain the +corresponding #define: the preprocessor directives +will always end up in the header file for the package that defines the +option, or in the global configuration header.

There are six properties which affect the process of generating header +files: +define_header, +no_define, +define_format, +define, +if_define, and +define_proc.

The define_header property can only occur in the body of a +cdl_package command and specifies the name of the header file which +should contain the package's configuration data, for example:

cdl_package <some_package> {
+    …
+    define_header xyzzy.h
+}

Given such a define_header property the component framework will +use the file pkgconf/xyzzy.h for +the package's configuration data. If a package does not have +a define_header property then a suitable file name is constructed +from the package's name. This involves:

  1. All characters in the package name up to and including the first +underscore are removed. For example CYGPKG_KERNEL +is converted to KERNEL, and +CYGPKG_HAL_ARM is converted to +HAL_ARM.

  2. Any upper case letters in the resulting string will be converted to +lower case, yielding e.g. kernel and +hal_arm.

  3. A .h suffix is appended, yielding e.g. +kernel.h and hal_arm.h.

Because of the naming restrictions on configuration options, this +should result in a valid filename. There is a small possibility of a +file name class, for example CYGPKG_PLUGH and +CYGPKG_plugh would both end up trying to use the +same header file pkgconf/plugh.h, +but the use of lower case letters for package names violates the +naming conventions. It is not legal to use the define_header +property to put the configuration data for several packages in a +single header file. The resulting behaviour is undefined.

Once the name of the package's header file has been determined and the +file has been opened, the various components, options and interfaces +in the package will be processed starting with the package itself. The +following steps are involved:

  1. If the current option or other CDL entity is inactive or disabled, +the option is ignored for the purposes of header file generation. +#define's are only generated for options that are +both active and enabled.

  2. The next step is to generate a default #define for +the current option. If this option has a no_define property then the +default #define is suppressed, and processing +continues for define, if_define and define_proc properties.

    1. The header file appropriate for the default #define +is determined. For a cdl_package this will be pkgconf/system.h, for any other option this +will be the package's own header file. The intention here is that +packages and application code can always determine which packages are +in the configuration by #include'ing pkgconf/system.h. The C preprocessor lacks +any facilities for including a header file only if it exists, and +taking appropriate action otherwise.

    2. For options with the flavors bool or +none, a single #define will be +generated. This takes the form:

      #define <option> 1

      For example:

      #define CYGFUN_LIBC_TIME_POSIX 1

      Package source code can check whether or not an option is active and +enabled by using the #ifdef, +#ifndef or #if +defined(…)directives.

    3. For options with the flavors data or +booldata, either one or two +#define's will be generated. The first of these may +be affected by a define_format property. If this property is not +defined then the first #define will take the form:

      #define <option> <value>

      For example:

      #define CYGNUM_LIBC_ATEXIT_HANDLERS 32

      Package source code can examine this value using the +#if directive, or by using the symbol in +code such as:

          for (i = 0; i < CYGNUM_LIBC_ATEXIT_HANDLERS; i++) {
      +        …
      +    }

      It must be noted that the #define will be generated +only if the corresponding option is both active and enabled. Options +with the data flavor are always enabled but may not +be active. Code like the above should be written only if it is known +that the symbol will always be defined, for example if the +corresponding source file will only get built if the containing +component is active and enabled. Otherwise the use of additional +#ifdef or similar directives will be necessary.

    4. If there is a define_format property then this controls how the +option's value will appear in the header file. Given a format string +such as %08x and a value 42, the component +framework will execute the Tcl command +format %08x 42 and the result will be +used for the #define's value. It is the +responsibility of the component writer to make sure that this Tcl +command will be valid given the format string and the legal values for +the option.

    5. In addition a second #define may or may not be +generated. This will take the form:

      #define <option>_<value>

      For example:

      #define CYGNUM_LIBC_ATEXIT_HANDLERS_32

      The #define will be generated only if it would +result in a valid C preprocessor symbol. If the value is a string such +as "/dev/ser0" then the #define +would be suppressed. This second #define is not +particularly useful for numerical data, but can be valuable in other +circumstances. For example if the legal values for an option +XXX_COLOR are red, +green and blue then code like +the following can be used:

      #ifdef XXX_COLOR_red
      +    …
      +#endif
      +#ifdef XXX_COLOR_green
      +    …
      +#endif
      +#ifdef XXX_COLOR_blue
      +    …
      +#endif

      The expression syntax provided by the C preprocessor is limited to +numerical data and cannot perform string comparisons. By generating +two #define's in this way it is possible to work +around this limitation of the C preprocessor. However some care has to +be taken: if a component writer also defined a configuration option +XXX_COLOR_green then there will be confusion. Since +such a configuration option violates the naming conventions, the +problem is unlikely to arise in practice.

  3. For some options it may be useful to generate one or more additional +#define's or, in conjunction with the no_define +property, to define a symbol with a name different from the option's +name. This can be achieved with the define property, which takes the +following form:

        define [-file=<filename>] [-format=<format>] <symbol>

    For example:

        define FOPEN_MAX

    This will result in something like:

    #define FOPEN_MAX 8
    +#define FOPEN_MAX_8

    The specified symbol must be a valid C preprocessor symbol. Normally +the #define will end up in the same header file as +the default one, in other words pkgconf/system.h in the case of a +cdl_package, or the package's own header file for any other option. +The -file option can be used to change this. At +present the only legal value is system.h, for +example:

        define -file=system.h <symbol>

    This will cause the #define to end up in the global +configuration header rather than in the package's own header. Use of +this facility should be avoided since it is very rarely necessary to +make options globally visible.

    The define property takes another option, +-format, to provide a format string.

        define -format=%08x <symbol>

    This should only be used for options with the data +or booldata flavor, and has the same effect as the +define_format property has on the default +#define.

    define properties are processed in the same way the default +#define. For options with the +bool or none flavors a single +#define will be generated using the value +1. For options with the data or +booldata flavors either one or two +#define's will be generated.

  4. After processing all define properties, the component framework will +look for any if_define properties. These take the following form:

        if_define [-file=<filename>] <symbol1> <symbol2>

    For example:

        if_define CYGSRC_KERNEL CYGDBG_USE_ASSERTS

    The following will be generated in the configuration header file:

    #ifdef CYGSRC_KERNEL
    +# define CYGDBG_USE_ASSERTS
    +#endif

    Typical kernel source code would begin with the following construct:

    #define CYGSRC_KERNEL 1
    +#include <pkgconf/kernel.h>
    +#include <cyg/infra/cyg_ass.h>

    The infrastructure header file cyg/infra/cyg_ass.h only checks for symbols +such as CYGDBG_USE_ASSERTS, and has no special +knowledge of the kernel or any other package. The if_define property +will only affect code that defines the symbol +CYGSRC_KERNEL, so typically only kernel source +code. If the option is enabled then assertion support will be enabled +for the kernel source code only. If the option is inactive or disabled +then kernel assertions will be disabled. Assertions in other packages +are not affected. Thus the if_define property allows control over +assertions, tracing, and similar facilities at the level of individual +packages, or at finer levels such as components or even single source +files if desired.

    Note: Current eCos packages do not yet make use of this facility. Instead +there is a single global configuration option +CYGDBG_USE_ASSERTS which is used to enable or +disable assertions for all packages. This issue should be addressed in +a future release of the system.

    As with the define property, the if_define property takes an +option -file with a single legal value +system.h. This allows the output to be redirected +to pkgconf/system.h if and when +necessary.

  5. The final property that is relevant to configuration header file +generation is define_proc. This takes a single argument, a Tcl +fragment that can add arbitrary data to the global header pkgconf/system.h and to the package's own +header. When the define_proc script is invoked two variables will be +set up to allow access to these headers: cdl_header +will be a channel to the package's own header file, for example +pkgconf/kernel.h; +cdl_system_header will be a channel to pkgconf/system.h. A typical define_proc +script will use the Tcl puts command to output +data to one of these channels, for example:

    cdl_option <name> {
    +    …
    +    define_proc {
    +        puts $::cdl_header "#define XXX 1"
    +    }
    +}

    Note: In the current implementation the use of define_proc is limited +because the Tcl script cannot access any of the configuration data. +Therefore the script is limited to writing constant data to the +configuration headers. This is a major limitation which will be +addressed in a future release of the component framework.

Note: Generating C header files with #define's for the +configuration data suffices for existing packages written in some +combination of C, C++ and assembler. It can also be used in +conjunction with some other languages, for example by first passing +the source code through the C preprocessor and feeding the result into +the appropriate compiler. In future versions of the component +framework additional programming languages such as Java may be +supported, and the configuration data may also be written to files in +some format other than C preprocessor directives.

Note: At present there is no way for application or package source code to +get hold of all the configuration details related to the current +hardware. Instead that information is spread over various different +configuration headers for the HAL and device driver packages, with +some of the information going into pkgconf/system.h. It is possible that in +some future release of the system there will be another global +configuration header file pkgconf/hardware.h which either contains the +configuration details for the various hardware-specific packages or +which #include's all the hardware-specific +configuration headers. The desirability and feasibility of such a +scheme are still to be determined. To avoid future incompatibility +problems as a result of any such changes, it is recommended that all +hardware packages (in other packages containing the hardware +property) use the define_header property to specify explicitly which +configuration header should be generated.

The system.h Header

Typically configuration header files are #include'd +only by the package's source code at build time, or by a package's +exported header files if the interface provided by the package may be +affected by a configuration option. There should be no need for +application code to know the details of individual configuration +options, instead the configuration should specifically meet the needs +of the application.

There are always exceptions. Application code may want to adapt to +configuration options, for example to do different things for ROM and +RAM booting systems, or when it is necessary to support several +different target boards. This is especially true if the code in question +is really re-usable library code which has not been converted to an +eCos package, and hence cannot use any CDL facilities.

A major problem here is determining which packages are in the +configuration: attempting to #include a header file +such as pkgconf/net.h +when it is not known for certain that that particular package is part +of the configuration will result in compilation errors. The global +header file pkgconf/system.h +serves to provide such information, so application code can use +techniques like the following:

#include <pkgconf/system.h>
+#ifdef CYGPKG_NET
+# include <pkgconf/net.h>
+#endif

This will compile correctly irrespective of the eCos configuration, +and subsequent code can use #ifdef or similar +directives on CYGPKG_NET or any of the +configuration options in that package.

In addition to determining whether or not a package is present, the +global configuration header file can also be used to find out the +specific version of a package that is being used. This can be useful +if a more recent version exports additional functionality. It may also +be necessary to adapt to incompatible changes in the exported +interface or to changes in behaviour. For each package the +configuration system will typically #define three +symbols, for example for a V1.3.1 release:

#define CYGNUM_NET_VERSION_MAJOR 1
+#define CYGNUM_NET_VERSION_MINOR 3
+#define CYGNUM_NET_VERSION_RELEASE 1

There are a number of problems associated with such version +#define's. The first restriction is that the +package must follow the standard naming conventions, so the package +name must be of the form xxxPKG_yyy. The three +characters immediately preceding the first underscore must be +PKG, and will be replaced with +NUM when generating the version +#define's. If a package does not follow the naming +convention then no version #define's will be +generated.

Assuming the package does follow the naming conventions, the +configuration tools will always generate three version +#define's for the major, minor, and release +numbers. The symbol names are obtained from the package name by +replacing PKG with NUM and +appending _VERSION_MAJOR, +_VERSION_MINOR and +_VERSION_RELEASE. It is assumed that the resulting +symbols will not clash with any configuration option names. The values +for the #define's are determined by searching the +version string for sequences of digits, optionally preceded by a minus +sign. It is possible that some or all of the numbers are absent in any +given version string, in which case -1 will be used +in the #define. For example, given a version string +of V1.12beta, the major version number is +1, the minor number is 12, and +the release number is -1. Given a version string of +beta all three numbers would be set to +-1.

There is special case code for the version current, +which typically corresponds to a development version obtained via +anonymous CVS or similar means. The configuration system has special +built-in knowledge of this version, and will assume it is more recent +than any specific release number. The global configuration header +defines a special symbol CYGNUM_VERSION_CURRENT, +and this will be used as the major version number when version +current of a package is used:

#define CYGNUM_VERSION_CURRENT 0x7fffff00
+...
+#define CYGNUM_INFRA_VERSION_MAJOR CYGNUM_VERSION_CURRENT
+#define CYGNUM_INFRA_VERSION_MINOR -1
+#define CYGNUM_INFRA_VERSION_RELEASE -1

The large number used for CYGNUM_VERSION_CURRENT +should ensure that major version comparisons work as expected, while +still allowing for a small amount of arithmetic in case that proves +useful.

It should be noted that this implementation of version +#define's will not cope with all version number +schemes. However for many cases it should suffice.


PrevHomeNext
The Build ProcessUpBuilding eCos
\ No newline at end of file diff --git a/doc/html/cdl-guide/build.html b/doc/html/cdl-guide/build.html new file mode 100644 index 00000000..7f70250b --- /dev/null +++ b/doc/html/cdl-guide/build.html @@ -0,0 +1,405 @@ + + + + + + + + +The Build Process +
The eCos Component Writer's Guide
PrevNext

Chapter 4. The Build Process

Some CDL properties describe the consequences of manipulating +configuration options. There are two main types of consequences. +Typically enabling a configuration option results in one or more +#define's in a configuration header file, and +properties that affect this include define, define_proc and +no_define. Enabling a configuration option can also affect the build +process, primarily determining which files get built and added to the +appropriate library. Properties related to the build process include +compile and make. This chapter describes the whole build process, +including details such as compiler flags and custom build steps.

Part of the overall design of the eCos component framework is that +it can interact with a number of different build systems. The most +obvious of these is GNU +make:the component framework can generate one or more +makefiles, and the user can then build the various packages simply by +invoking make. However it +should also be possible to build eCos by other means: the +component framework can be queried about what is involved in building +a given configuration, and this information can then be fed into the +desired build system. Component writers should be aware of this +possibility. Most packages will not be affected because the compile +property can be used to provide all the required information, but care +has to be taken when writing custom build steps.

Build Tree Generation

It is necessary to create an eCos configuration before anything can +be built. With some tools such as the graphical configuration tool +this configuration will be created in memory, and it is not essential +to produce an ecos.ecc savefile first (although +it is still very desirable to generate such a savefile at some point, +to allow the configuration to be re-loaded later on). With other tools +the savefile is generated first, for example using +ecosconfig new, and then a build tree is +generated using ecosconfig tree. The savefile +contains all the information needed to recreate a configuration.

An eCos build actually involves three separate trees. The component +repository acts as the source tree, and for application developers +this should be considered a read-only resource. The build tree is +where all intermediate files, especially object files, are created. +The install tree is where the main library +libtarget.a, the exported header files, and +similar files end up. Following a successful build it is possible to +take just the install tree and use it for developing an application: +none of the files in the component repository or the build tree are +needed for that. The build tree will be needed again only if the user +changes the configuration. However the install tree does not contain +copies of all of the documentation for the various packages, instead +the documentation is kept only in the component repository.

By default the build tree, the install tree, and the +ecos.ecc savefile all reside in the same +directory tree. This is not a requirement, both the install tree and +the savefile can be anywhere in the file system.

It is worth noting that the component framework does not separate the +usual make and make install +stages. A build always populates the install tree, and any +make install step would be redundant.

The install tree will always begin with two directories, include for the exported header files and +lib for the main library +libtarget.a and other files +such as the linker script. In addition there will be a subdirectory +include/pkgconf containing the +configuration header files, which are generated or updated at the same +time the build tree is created or updated. More details of header file +generation are given below. Additional include subdirectories such as sys and cyg/kernel will be created during the +first build, when each package's exported header files are copied to +the install tree. The install tree may also end up with additional +subdirectories during a build, for example as a result of custom build +steps.

The component framework does not define the structure of the build +tree, and this may vary between build systems. It can be assumed that +each package in the configuration will have its own directory in the +build tree, and that this directory will be used for storing the +package's object files and as the current directory for any build +steps for that package. This avoids problems when custom build steps +from different packages generate intermediate files which happen to +have the same name.

Some build systems may allow application developers to copy a source +file from the component repository to the build tree and edit the +copy. This allows users to experiment with small changes, for example +to add a couple of lines of debugging to a package, without having to +modify the master copy in the component repository which could be +shared by several projects or several people. Functionality such as +this is transparent to component writers, and it is the responsibility +of the build system to make sure that the right thing happens.

Note: There are some unresolved issues related to the build tree and install +tree. Specifically, when updating an existing build or install tree, +what should happen to unexpected files or directories? Suppose the +user started with a configuration that included the math library, and +the install tree contains header files include/math.h and include/sys/ieeefp.h. The user then removed +the math library from the configuration and is updating the build +tree. It is now desirable to remove these header files from the +install tree, so that if any application code still attempts to use +the math library this will fail at compile time rather than at link +time. There will also be some object files in the existing +libtarget.a library which are no longer +appropriate, and there may be other files in the install tree as a +result of custom build steps. The build tree will still contain a +directory for the math library, which no longer serves any purpose.

However, it is also possible that some of the files in the build tree +or the install tree were placed there by the user, in which case +removing them automatically would be a bad idea.

At present the component framework does not keep track of exactly what +should be present in the build and install trees, so it cannot readily +determine which files or library members are obsolete and can safely +be removed, and which ones are unexpected and need to be reported to +the user. This will be addressed in a future release of the system.


PrevHomeNext
Updating the ecos.db database Configuration Header File Generation
\ No newline at end of file diff --git a/doc/html/cdl-guide/build.make.html b/doc/html/cdl-guide/build.make.html new file mode 100644 index 00000000..3446de94 --- /dev/null +++ b/doc/html/cdl-guide/build.make.html @@ -0,0 +1,2283 @@ + + + + + + + + +Building eCos +
The eCos Component Writer's Guide
PrevChapter 4. The Build ProcessNext

Building eCos

The primary goal of an eCos build is to produce the library +libtarget.a. A typical eCos build will also +generate a number of other targets: extras.o, +startup code vectors.o, and a linker script. Some +packages may cause additional libraries or targets to be generated. +The basic build process involves a number of different phases with +corresponding priorities. There are a number of predefined priorities:

Generation of the extras.o file, the startup code +and the linker script actually happens via make custom build steps, +typically defined in appropriate HAL packages. The component framework +has no special knowledge of these targets.

By default custom build steps for a make_object property happen +during the same phase as most compilations, but this can be changed +using a -priority option. Similarly custom build +steps for a make property happen at the end of a build, but this can +also be changed with a -priority option. For +example a priority of 50 can be used to run a custom build step +between the header file export phase and the main compilation phase. +Custom build steps are discussed in more detail below.

Some build systems may run several commands of the same priority in +parallel. For example files listed in compile properties may get +compiled in parallel, concurrently with make_object custom build +steps with default priorities. Since most of the time for an eCos +build involves processing compile properties, this allows builds to +be speeded up on suitable host hardware. All build steps for a given +phase will complete before the next phase is started.

Exporting Public Header Files

The first compulsory phase involves making sure that there is an up to +date set of header files in the install tree. Each package can contain +some number of header files defining the exported interface. +Applications should only use exported functionality. A package can +also contain some number of private header files which are only of +interest to the implementation, and which should not be visible to +application code. The various packages that go into a particular +configuration can be spread all over the component repository. In +theory it might be possible to make all the exported header files +accessible by having a lengthy -I header file +search path, but this would be inconvenient both for building eCos and +for building applications. Instead all the relevant header files are +copied to a single location, the include subdirectory of the install tree. +The process involves the following:

  1. The install tree, for example /usr/local/ecos/install, and its include subdirectory /usr/local/ecos/install/include will typically be +created when the build tree is generated or updated. At the same time +configuration header files will be written to the pkgconf subdirectory, for example +/usr/local/ecos/include/pkgconf, so that +the configuration data is visible to all the packages and to +application code that may wish to examine some of the configuration +options.

  2. Each package in the configuration is examined for exported header +files. The exact order in which the packages are processed is not +defined, but should not matter.

    1. If the package has an include_files property then this +lists all the exported header files:

      cdl_package <some_package> {
      +    …
      +    include_files header1.h header2.h
      +}    

      If no arguments are given then the package does not export any header +files.

      cdl_package <some_package> {
      +    …
      +    include_files
      +}    

      The listed files may be in an include subdirectory within the package's +hierarchy, or they may be relative to the package's toplevel +directory. The include_files property is intended mainly for very +simple packages. It can also be useful when converting existing code +to an eCos package, to avoid rearranging the sources.

    2. If there is no include_files property then the component framework +will look for an include +subdirectory in the package, as per the layout conventions. All files, +including those in subdirectories, will be treated as exported header +files. For example, the math library package contains files include/math.h and include/sys/ieeefp.h, both of which will +be exported to the install tree.

    3. As a last resort, if there is neither an include_files property nor +an include subdirectory, the +component framework will search the package's toplevel directory and +all of its subdirectories for files with one of the following +suffixes: .h, .hxx, +.inl or .inc. All such files +will be interpreted as exported header files.

      This last resort rule could cause confusion for packages which have no +exported header files but which do contain one or more private header +files. For example a typical device driver simply implements an +existing interface rather than define a new one, so it does not need +to export a header file. However it may still have one or more private +header files. Such packages should use an include_files property +with no arguments.

  3. If the package has one or more exported header files, the next step is +to determine where the files should end up. By default all exported +header files will just end up relative to the install tree's include subdirectory. For example the +math library's math.h header +would end up as /usr/local/ecos/include/math.h, +and the sys/ieeefp.h header +would end up as +/usr/local/ecos/include/sys/ieeefp.h. This +behaviour is correct for packages like the C library where the +interface is defined by appropriate standards. For other packages this +behaviour can lead to file name clashes, and the include_dir property should be used +to avoid this:

    cdl_package CYGPKG_KERNEL {
    +    include_dir cyg/kernel
    +}

    This means that the kernel's exported header file +include/kapi.h should be copied to +/usr/local/ecos/include/cyg/kernel/kapi.h, where +it is very unlikely to clash with a header file from some other +package.

  4. For typical application developers there will be little or no need for +the installed header files to change after the first build. Changes +will be necessary only if packages are added to or removed from the +configuration. For component writers, the build system should detect +changes to the master copy of the header file source code and update +the installed copies automatically during the next build. The build +system is expected to perform a header file dependency analysis, so +any source files affected should get rebuilt as well.

  5. Some build systems may provide additional support for application +developers who want to make minor changes to a package, especially for +debugging purposes. A header file could be copied from the +component repository (which for application developers is assumed to +be a read-only resource) into the build tree and edited there. The +build system would detect a more recent version of such a header file +in the build tree and install it. Care would have to be taken to +recover properly if the modified copy in the build tree is +subsequently removed, in order to revert to the original behaviour.

  6. When updating the install tree's include subdirectory, the build tree may +also perform a clean-up operation. Specifically, it may check for any +files which do not correspond to known exported header files and +delete them.

Note: At present there is no defined support in the build system for +defining custom build steps that generate exported header files. Any +attempt to use the existing custom build step support may fall foul of +unexpected header files being deleted automatically by the build +system. This limitation will be addressed in a future release of the +component framework, and may require changing the priority for +exporting header files so that a custom build step can happen first.

Compiling

Once there are up to date copies of all the exported header files in +the build tree, the main build can proceed. Most of this involves +compiling source files listed in compile properties in the CDL +scripts for the various packages, for example:

cdl_package CYGPKG_ERROR {
+    display       "Common error code support"
+    compile       strerror.cxx
+    …
+}

compile properties may appear in the body of a cdl_package, +cdl_component, cdl_option or cdl_interface. If the option or +other CDL entity is active and enabled, the property takes effect. +If the option is inactive or disabled the property is ignored. It is +possible for a compile property to list multiple source files, and +it is also possible for a given CDL entity to contain multiple +compile properties. The following three examples are equivalent:

cdl_option <some_option> {
+    …
+    compile file1.c file2.c file3.c
+}
+
+cdl_option <some_option> {
+    …
+    compile file1.c
+    compile file2.c
+    compile file3.c
+}
+
+cdl_option <some_option> {
+    …
+    compile file1.c file2.c
+    compile file3.c
+}

Packages that follow the directory layout conventions should have a +subdirectory src, and the +component framework will first look for the specified files there. +Failing that it will look for the specified files relative to the +package's root directory. For example if a package contains a source +file strerror.cxx then the following two lines +are equivalent:

    compile strerror.cxx
+    compile src/strerror.cxx

In the first case the component framework will find the file +immediately in the packages src +subdirectory. In the second case the framework will first look for a +file src/src/strerror.cxx, and then for +str/strerror.cxx relative to the package's root +directory. The result is the same.

The file names may be relative paths, allowing the source code to be +split over multiple directories. For example if a package contains a +file src/sync/mutex.cxx then the corresponding +CDL entry would be:

    compile sync/mutex.cxx

All the source files relevant to the current configuration will be +identified when the build tree is generated or updated, and added to +the appropriate makefile (or its equivalent for other build systems). +The actual build will involve a rule of the form:

<object file> : <source file>
+        $(CC) -c $(INCLUDE_PATH) $(CFLAGS) -o $@ $<

The component framework has built-in knowledge for processing source +files written in C, C++ or assembler. These should have a +.c, .cxx and +.S suffix respectively. The current implementation +has no simple mechanism for extending this with support for other +languages or for alternative suffixes, but this should be addressed in +a future release.

The compiler command that will be used is something like +arm-elf-gcc. This consists of a command prefix, in +this case arm-elf, and a specific command such as +gcc. The command prefix will depend on the target +architecture and is controlled by a configuration option in the +appropriate HAL package. It will have a sensible default value for the +current architecture, but users can modify this option when necessary. +The command prefix cannot be changed on a per-package basis, since +it is usually essential that all packages are built with a consistent +set of tools.

The $(INCLUDE_PATH) header file search path +consists of at least the following:

  1. The include directory in the +install tree. This allows source files to access the various header +files exported by all the packages in the configuration, and also the +configuration header files.

  2. The current package's root directory. This ensures that all files in +the package are accessible at build time.

  3. The current package's src +subdirectory, if it is present. Generally all files to be compiled are +located in or below this directory. Typically this is used to access +private header files containing implementation details only.

The compiler flags $(CFLAGS) are determined in two +steps. First the appropriate HAL package will provide a configuration +option defining the global flags. Typically this includes flags that +are needed for the target processor, for example +-mcpu=arm9, various flags related to warnings, +debugging and optimization, and flags such as +-finit-priority which are needed by eCos itself. +Users can modify the global flags option as required. In addition it +is possible for existing flags to be removed from and new flags to be +added to the current set on a per-package basis, again by means of +user-modifiable configuration options. More details are given below.

Component writers can assume that the build system will perform full +header file dependency analysis, including dependencies on +configuration headers, but the exact means by which this happens is +implementation-defined. Typical application developers are unlikely to +modify exported or private header files, but configuration headers are +likely to change as the configuration is changed to better meet the +needs of the application. Full header file dependency analysis also +makes things easier for the component writers themselves.

The current directory used during a compilation is an implementation +detail of the build system. However it can be assumed that each +package will have its own directory somewhere in the build tree, to +prevent file name clashes, that this will be the current directory, +and that intermediate object files will end up here.

Generating the Libraries

Once all the compile and make_object properties have been +processed and the required object files have been built or rebuilt, +these can be collected together in one or more libraries. The archiver +will be the ar command +corresponding to the current architecture, for example powerpc-eabi-ar. By default al of the +object files will end up in a single library +libtarget.a. This can be changed on a per-package +basis using the library property +in the body of the corresponding cdl_package command, for example:

cdl_package <SOME_PACKAGE> {
+    …
+    library  libSomePackage.a
+}

However using different libraries for each package should be avoided. +It makes things more difficult for application developers since they +now have to link the application code with more libraries, and +possibly even change this set of libraries when packages are added to +or removed from the configuration. The use of a single library +libtarget.a avoids any complications.

It is also possible to change the target library for individual files, +using a -library option with the corresponding +compile or make_object property. For example:

    compile -library=libSomePackage.a hello.c
+    make_object -library=libSomePackage.a {
+        …
+    }

Again this should be avoided because it makes application development +more difficult. There is one special library which can be used freely, +libextras.a, which is used to generate the +extras.o file as described below.

The order in which object files end up in a library is not defined. +Typically each library will be created directly in the install tree, +since there is little point in generating a file in the build tree and +then immediately copying it to the install tree.

The extras.o file

Package sources files normally get compiled and then added to a +library, by default libtarget.a, which is then +linked with the application code. Because of the usual rules for +linking with libraries, augmented by the use of link-time garbage +collection, this means that code will only end up in the final +executable if there is a direct or indirect reference to it in the +application. Usually this is the desired behaviour: if the application +does not make any use of say kernel message boxes, directly or +indirectly, then that code should not end up in the final executable +taking up valuable memory space.

In a few cases it is desirable for package code to end up in the final +executable even if there are no direct or indirect references. For +example, device driver functions are often not called directly. +Instead the application will access the device via the string +"/dev/xyzzy" and call the device functions +indirectly. This will be impossible if the functions have been +removed at link-time.

Another example involves static C++ objects. It is possible to have a +static C++ object, preferably with a suitable constructor priority, +where all of the interesting work happens as a side effect of running +the constructor. For example a package might include a monitoring +thread or a garbage collection thread created from inside such a +constructor. Without a reference by the application to the static +object the latter will never get linked in, and the package will not +function as expected.

A third example would be copyright messages. A package vendor may want +to insist that all products shipped using that package include a +particular message in memory, even though many users of that package +will object to such a restriction.

To meet requirements such as these the build system provides support +for a file extras.o, which always gets linked +with the application code via the linker script. Because it is an +object file rather than a library everything in the file will be +linked in. The extras.o file is generated at the +end of a build from a library libextras.a, so +packages can put functions and variables in suitable source files and +add them to that library explicitly:

    compile -library=libextras.a xyzzy.c
+    compile xyzzy_support.c

In this example xyzzy.o will end up in +libextras.a, and hence in +extras.o and in the final executable. +xyzzy_support.o will end up in +libtarget.a as usual, and is subject to linker +garbage collection.

Compilers and Flags

Caution

Some of the details of compiler selection and compiler flags described +below are subject to change in future revisions of the component +framework, although every reasonable attempt will be made to avoid +breaking backwards compatibility.

The build system needs to know what compiler to use, what compiler +flags should be used for different stages of the build and so on. Much +of this information will vary from target to target, although users +should be able to override this when appropriate. There may also be a +need for some packages to modify the compiler flags. All platform HAL +packages should define a number of options with well-known names, +along the following lines (any existing platform HAL package can be +consulted for a complete example):

cdl_component CYGBLD_GLOBAL_OPTIONS {
+    flavor  none
+    parent  CYGPKG_NONE
+    …
+
+    cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX {
+        flavor  data
+        default_value { "arm-elf" }
+        …
+    }
+    cdl_option CYGBLD_GLOBAL_CFLAGS {
+        flavor  data
+        default_value "-Wall -g -O2 …"
+        …
+    }
+
+    cdl_option CYGBLD_GLOBAL_LDFLAGS {
+        flavor  data
+        default_value "-g -nostdlib -Wl,--gc-sections …"
+        …
+    }
+}

The CYGBLD_GLOBAL_OPTIONS component serves to +collect together all global build-related options. It has the flavor +none since disabling all of these options would +make it impossible to build anything and hence is not useful. It is +parented immediately below the root of the configuration hierarchy, +thus making sure that it is readily accessible in the graphical +configuration tool and, for command line users, in the +ecos.ecc save file.

The option CYGBLD_GLOBAL_COMMAND_PREFIX defines +which tools should be used for the current target. Typically this is +determined by the processor on the target hardware. In some cases a +given target board may be able to support several different +processors, in which case the default_value expression could select +a different toolchain depending on some other option that is used to +control which particular processor. +CYGBLD_GLOBAL_COMMAND_PREFIX is modifiable rather +than calculated, so users can override this when necessary.

Given a command prefix such as arm-elf, all C +source files will be compiled with arm-elf-gcc, all +C++ sources will be built using arm-elf-g++, +and arm-elf-ar will be used to generate the +library. This is in accordance with the usual naming conventions for +GNU cross-compilers and similar tools. For the purposes of custom +build steps, tokens such as $(CC) will be set to +arm-elf-gcc.

The next option, CYGBLD_GLOBAL_CFLAGS, is used to +provide the initial value of $(CFLAGS). Some +compiler flags such as -Wall and +-g are likely to be used on all targets. Other +flags such as -mcpu=arm7tdmi will be +target-specific. Again this is a modifiable option, so the user can +switch from say -O2 to -Os if +desired. The option CYGBLD_GLOBAL_LDFLAGS serves +the same purpose for $(LDFLAGS) and linking. It is +used primarily when building test cases or possibly for some custom +build steps, since building eCos itself generally involves building +one or more libraries rather than executables.

Some packages may wish to add certain flags to the global set, or +possibly remove some flags. This can be achieved by having +appropriately named options in the package, for example:

cdl_component CYGPKG_KERNEL_OPTIONS {
+    display "Kernel build options"
+    flavor  none
+    …
+
+    cdl_option CYGPKG_KERNEL_CFLAGS_ADD {
+        display "Additional compiler flags"
+        flavor  data
+        default_value { "" }
+        …
+    }
+
+    cdl_option CYGPKG_KERNEL_CFLAGS_REMOVE {
+        display "Suppressed compiler flags"
+        flavor  data
+        default_value { "" }
+        …
+    }
+
+    cdl_option CYGPKG_KERNEL_LDFLAGS_ADD {
+        display "Additional linker flags"
+        flavor  data
+        default_value { "" }
+        …
+    }
+
+    cdl_option CYGPKG_KERNEL_LDFLAGS_REMOVE {
+        display "Suppressed linker flags"
+        flavor  data
+        default_value { "" }
+        …
+    }
+}

In this example the kernel does not modify the global compiler flags +by default, but it is possible for the users to modify the options if +desired. The value of $(CFLAGS) that is used for +the compilations and custom build steps in a given package is +determined as follows:

  1. Start with the global settings from +CYGBLD_GLOBAL_CFLAGS, for example +-g -O2.

  2. Remove any flags specified in the per-package +CFLAGS_REMOVE option, if any. For example +if -O2 should be removed for this package then +$(CFLAGS) would now have a value of just +-g.

  3. Then concatenate the flags specified by the per-package +CFLAGS_ADD option, if any. For example if +-Os should be added for the current package then +the final value of $(CFLAGS) will be +-g -Os.

$(LDFLAGS) is determined in much the same way.

Note: The way compiler flags are handled at present has numerous limitations +that need to be addressed in a future release, although it should +suffice for nearly all cases. For the time being custom build steps +and in particular the make_object property can be used to work +around the limitations.

Amongst the issues, there is a specific problem with package +encapsulation. For example the math library imposes some stringent +requirements on the compiler in order to guarantee exact IEEE +behavior, and may need special flags on a per-architecture basis. One +way of handling this is to have +CYGPKG_LIBM_CFLAGS_ADD and +CYGPKG_LIBM_CFLAGS_REMOVE default_value +expressions which depend on the target architecture, but such +expressions may have to updated for each new architecture. An +alternative approach would allow the architectural HAL package to +modify the default_value expressions for the math library, but this +breaks encapsulation. A third approach would allow some architectural +HAL packages to define one or more special options with well-known +names, and the math library could check if these options were defined +and adjust the default values appropriately. Other packages with +floating point requirements could do the same. This approach also has +scalability issues, in particular how many such categories of options +would be needed? It is not yet clear how best to resolve such issues.

Custom Build Steps

Caution

Some of the details of custom build steps as described below are +subject to change in future revisions of the component framework, +although every reasonable attempt will be made to avoid breaking +backwards compatibility.

For most packages simply listing one or more source files in a +compile property is sufficient. These files will get built using the +appropriate compiler and compiler flags and added to a library, which +then gets linked with application code. A package that can be built in +this way is likely to be more portable to different targets and build +environments, since it avoids build-time dependencies. However some +packages have special needs, and the component framework supports +custom build steps to allow for these needs. There are two properties +related to this, make and make_object, and both take the following +form:

    make {
+        <target_filepath> : <dependency_filepath> …
+            <command>
+            ...
+    }

Although this may look like makefile syntax, and although some build +environments will indeed involve generating makefiles and running +make, this is not +guaranteed. It is possible for the component framework to be +integrated with some other build system, and custom build steps should +be written with that possibility in mind. Each custom build step +involves a target, some number of dependency files, and some number of +commands. If the target is not up to date with respect to one or more +of the dependencies then the commands need to be executed.

  1. Only one target can be specified. For a make_object property this +target must be an object file. For a make property it can be any +file. In both cases it must refer to a physical file, the use of +phony targets is not supported. The target should not be an absolute +path name. If the generated file needs to end up in the install tree +then this can be achieved using a <PREFIX> +token, for example:

        make {
    +        <PREFIX>/lib/mytarget : …
    +            ...
    +    }

    When the build tree is generated and the custom build step is added to +the makefile (or whatever build system is used) +<PREFIX> will be replaced with the absolute +path to the install tree.

  2. All the dependencies must also refer to physical files, not to phony +targets. These files may be in the source tree. The +<PACKAGE> token can be used to indicate this: +when the build tree is generated this token will be replaced with the +absolute path to the package's root directory in the component +repository, for example:

        make_object {
    +        xyzzy.o : <PACKAGE>/src/xyzzy.c
    +            …

    If the component repository was installed in /usr/local/ecos and this custom build +step existed in version 1_5 of the kernel, +<PACKAGE> would be replaced with +/usr/local/ecos/packages/kernel/v1_5.

    Alternatively the dependencies may refer to files that are generated +during the build. These may be object files resulting from compile +properties or other make_object properties, or they may be other +files resulting from a make property, for example:

        compile plugh.c
    +    make_object {
    +        xyzzy.o : plugh.o
    +            …
    +    }
  3. No other token or makefile variables may be used in the target or +dependency file names. Also conditionals such as +ifneq and similar makefile functionality must not +be used.

  4. +Similarly the list of commands must not use any makefile conditionals +or similar functionality. A number of tokens can be used to provide +access to target-specific or environmental data. Note that these +tokens look like makefile variables, unlike the +<PREFIX> and +<PACKAGE> tokens mentioned earlier:

    In addition commands in a custom build step may refer to the target +and the dependencies using $@, +$<, $^ and +$*, all of which behave as per GNU make syntax. The +commands will execute in a suitable directory in the build tree.

  5. The current directory used during a custom build step is an +implementation detail of the build system. However it can be assumed +that each package will have its own directory somewhere in the build +tree, to prevent file name clashes, and that this will be the current +directory. In addition any object files generated as a result of +compile properties will be located here as well, which is useful for +custom build steps that depend on a .o file +previously generated.

    Any temporary files created by a custom build step should be generated +in the build tree (in or under the current directory). Such files +should be given a .tmp file extension to ensure +that they are deleted during a make clean or +equivalent operation.

    If a package contains multiple custom build steps with the same +priority, it is possible that these build steps will be run +concurrently. Therefore these custom build steps must not accidentally +use the same file names for intermediate files.

  6. Care has to be taken to make sure that the commands in a custom build +step will run on all host platforms, including Windows NT as well as +Linux and other Unix systems. For example, all file paths should use +forward slashes as the directory separator. It can be assumed that +Windows users will have a full set of CygWin tools installed and +available on the path. The GNU coding +standards provide some useful guidelines for writing portable +build rules.

  7. A custom build step must not make any assumptions concerning the +version of another package. This enforces package encapsulation, +preventing one package from accessing the internals of another.

  8. No assumptions should be made about the target platform, unless the +package is inherently specific to that platform. Even then it is +better to use the various tokens whenever possible, rather than +hard-coding in details such as the compiler. For example, given a +custom build step such as:

        arm-elf-gcc -c -mcpu=arm7di -o $@ $<

    Even if this build step will only be invoked on ARM targets, it could +cause problems. For example the toolchain may have been installed +using a prefix other than arm-elf. Also, if the +user changes the compiler flags then this would not be reflected in +the build step. The correct way to write this rule would be:

        $(CC) -c $(CFLAGS) -o $@ $<

    Some commands such as the compiler, the archiver, and objcopy are +required sufficiently often to warrant their own tokens, for example +$(CC) and $(OBJCOPY). Other +target-specific commands are needed only rarely and the +$(COMMAND_PREFIX) token can be used to construct +the appropriate command name, for example:

    
    $(COMMAND_PREFIX)size $< > $@
  9. Custom build steps should not be used to build host-side executables, +even if those executables are needed to build parts of the target side +code. Support for building host-side executables will be added in a +future version of the component framework, although it will not +necessarily involve these custom build steps.

By default custom build steps defined in a make_object property +have a priority of 100, which means that they will be executed +in the same phase as compilations resulting from a compile property. +It is possible to change the priority using a property option, for +example:

    make_object -priority 50 {
+        …
+    }

Specifying a priority smaller than a 100 means that the custom build +step happens before the normal compilations. Priorities between 100 +and 200 happen after normal compilations but before the libraries are +archived together. make_object properties should not specify a +priority of 200 or later.

Custom build steps defined in a make property have a default +priority of 300, and so they will happen after the libraries have been +built. Again this can be changed using a -priority +property option.

Startup Code

Linking an application requires the application code, a linker script, +the eCos library or libraries, the extras.o file, +and some startup code. Depending on the target hardware and how the +application gets booted, this startup code may do little more than +branching to main(), or it may have to perform a +considerable amount of hardware initialization. The startup code +generally lives in a file vectors.o which is +created by a custom build step in a HAL package. As far as application +developers are concered the existence of this file is largely +transparent, since the linker script ensures that the file is part of +the final executable.

This startup code is not generally of interest to component writers, +only to HAL developers who are referred to one of the existing HAL +packages for specific details. Other packages are not expected to +modify the startup in any way. If a package needs some work performed +early on during system initialization, before the application's main +entry point gets invoked, this can be achieved using a static object +with a suitable constructor priority.

The Linker Script

Caution

This section is not finished, and the details are subject to change in +a future release. Arguably linker script issues should be documented +in the HAL documentation rather than in this guide.

Generating the linker script is the responsibility of the various HAL +packages that are applicable to a given target. Developers of +components other than HAL packages need not be concerned about what is +involved. Developers of new HAL packages should use an existing HAL as +a template.


PrevHomeNext
Configuration Header File GenerationUpBuilding Test Cases
\ No newline at end of file diff --git a/doc/html/cdl-guide/build.tests.html b/doc/html/cdl-guide/build.tests.html new file mode 100644 index 00000000..06fb4c5b --- /dev/null +++ b/doc/html/cdl-guide/build.tests.html @@ -0,0 +1,348 @@ + + + + + + + + +Building Test Cases +
The eCos Component Writer's Guide
PrevChapter 4. The Build ProcessNext

Building Test Cases

Caution

The support in the current implementation of the component framework +for building and running test cases is limited, and should be enhanced +considerably in a future version. Compatibility with the existing +mechanisms described below will be maintained if possible, but this +cannot be guaranteed.

Whenever possible packages should be shipped with one or more test +cases. This allows users to check that all packages function correctly +in their particular configuration and on their target, which may be +custom hardware unavailable to the package developer. The component +framework needs to provide a way of building such test cases. For +example, if a makefile system is used then there could be a +make tests target to build the test cases, or +possibly a make check target to build and run +the test cases and process all the results. Unfortunately there are +various complications.

Not every test case will be applicable to every configuration. For +example if the user has disabled the C library's +CYGPKG_LIBC_STDIO component then there is no point +in building or running any of the test cases for that component. This +implies that test cases need to be associated with configuration +options somehow. It is possible for the test case to use one or more +#ifdef statements to check whether or not it is +applicable in the current configuration, and compile to a null program +when not applicable. This is inefficient because the test case will +still get built and possibly run, even though it will not provide any +useful information.

Many packages involve direct interaction with hardware, for example a +serial line or an ethernet interface. In such cases it is only +worthwhile building and running the test if there is suitable software +running at the other end of the serial line or listening on the same +ethernet segment, and that software would typically have to run on the +host. Of course the serial line in question may be hooked up to a +different piece of hardware which the application needs to talk to, so +disconnecting it and then hooking it up to the host for running some +tests may be undesirable. The decision as to whether or not to build +the test depends not just on the eCos configuration but also on the +hardware setup and the availability of suitable host software.

There are different kinds of tests, and it is not always desirable to +run all of them. For example a package may contain a number of stress +tests intended to run for long periods of time, possibly days or +longer. Such tests should certainly be distinguished somehow from +ordinary test cases so that users will not run them accidentally and +wonder how long they should wait for a pass message +before giving up. Stress tests may also have dependencies on the +hardware configuration and on host software, for example a network +stress test may require lots of ethernet packets.

In the current implementation of the component framework these issues +are not yet addressed. Instead there is only very limited support for +building test cases. Any package can define a calculated configuration +option of the form +CYGPKG_<package-name>_TESTS, whose value is a +list of test cases. The calculated property can involve an +expression so it is possible to adapt to a small number of +configuration options, but this quickly becomes unwieldy. A typical +example would be:

        cdl_option CYGPKG_UITRON_TESTS {
+            display "uITRON tests"
+            flavor  data
+            no_define
+            calculated { "tests/test1 tests/test2 tests/test3 \
+                tests/test4 tests/test5 tests/test6 tests/test7 \
+                tests/test8 tests/test9 tests/testcxx tests/testcx2 \
+                tests/testcx3 tests/testcx4 tests/testcx5 \
+                tests/testcx6 tests/testcx7 tests/testcx8 \
+                tests/testcx9 tests/testintr" }
+            description   "
+This option specifies the set of tests for the uITRON compatibility layer."
+        }

This implies that there is a file tests/test1.c +or tests/test1.cxx in the package's directory. +The commands that will be used to build the test case will take the +form:

    $(CC) -c $(INCLUDE_PATH) $(CFLAGS) -o <build path>/test1.o \
+         <source path>/tests/test1.c
+    $(CC) $(LDFLAGS) -o <install path>/tests/test1 <build_path>/test1.o

The variables $(CC) and so on are determined in the +same way as for custom build steps. The various paths and the current +directory will depend on the exact build system being used, and are +subject to change. As usual the sources in the component repository +are treated as a read-only resources, intermediate files live in the +build tree, and the desired executables should end up in the install +tree.

Each test source file must be self-contained. It is not possible at +present to build a little per-package library that can be used by the +test cases, or to link together several object files to produce a +single test executable. In some cases it may be possible to +#include source code from a shared file in order to +avoid unnecessary code replication. There is no support for +manipulating compiler or linker flags for individual test cases: the +flags that will be used for all files are $(CFLAGS) +and $(LDFLAGS), as per custom build steps. Note +that it is possible for a package to define options of the form +CYGPKG_<PACKAGE-NAME>_LDFLAGS_ADD and +CYGPKG_<PACKAGE-NAME>_LDFLAGS_REMOVE. These +will affect test cases, but in the absence of custom build steps they +will have no other effect on the build.


PrevHomeNext
Building eCosUpCDL Language Specification
\ No newline at end of file diff --git a/doc/html/cdl-guide/cdl-guide.html b/doc/html/cdl-guide/cdl-guide.html new file mode 100644 index 00000000..c9cd4a8e --- /dev/null +++ b/doc/html/cdl-guide/cdl-guide.html @@ -0,0 +1,788 @@ + + + + + + + + +The eCos Component Writer's Guide +
Table of Contents
1. Overview
Terminology
Component Framework
Configuration Option
Component
Package
Configuration
Target
Template
Properties
Consequences
Constraints
Conflicts
CDL
Component Repository
Why Configurability?
Approaches to Configurability
Degrees of Configurability
Warnings
2. Package Organization
Packages and the Component Repository
Package Versioning
Package Contents and Layout
Outline of the Build Process
Configurable Source Code
Exported Header Files
Package Documentation
Test Cases
Host-side Support
Making a Package Distribution
The eCos package distribution file format
Preparing eCos packages for distribution
3. The CDL Language
Language Overview
CDL Commands
CDL Properties
Information-providing Properties
The Configuration Hierarchy
Value-related Properties
Generating the Configuration Header Files
Controlling what gets Built
Miscellaneous Properties
Option Naming Convention
An Introduction to Tcl
Values and Expressions
Option Values
Ordinary Expressions
Functions
Goal Expressions
List Expressions
Interfaces
Updating the ecos.db database
4. The Build Process
Build Tree Generation
Configuration Header File Generation
The system.h Header
Building eCos
Updating the Build Tree
Exporting Public Header Files
Compiling
Generating the Libraries
The extras.o file
Compilers and Flags
Custom Build Steps
Startup Code
The Linker Script
Building Test Cases
5. CDL Language Specification
cdl_option -- Define a single configuration option
cdl_component -- Define a component, a collection of configuration options
cdl_package -- Define a package, a component that can be distributed
cdl_interface -- Define an interface, functionality that can be provided by +a number of different implementations.
active_if -- Allow additional control over the active state of an +option or other CDL entity.
calculated -- Used if the current option's value is not user-modifiable, +but is calculated using a suitable CDL expression.
compile -- List the source files that should be built if this option +is active and enabled.
default_value -- Provide a default value for this option using a CDL expression.
define -- Specify additional #define symbols that +should go into the owning package's configuration header file.
define_format -- Control how an option's value will appear in the +configuration header file.
define_header -- Specify the configuration header file that +will be generated for a given package.
define_proc -- Use a fragment of Tcl code to output additional data to +configuration header files.
description -- Provide a textual description for an option.
display -- Provide a short string describing this option.
doc -- The location of online-documentation for a configuration option.
flavor -- Specify the nature of a configuration option.
hardware -- Specify that a package is tied to specific hardware.
if_define -- Output a common preprocessor construct to a configuration +header file.
implements -- Enabling this option provides one instance of a more +general interface.
include_dir -- Specify the desired location of a package's exported +header files in the install tree.
include_files -- List the header files that are exported by a package.
legal_values -- Impose constraints on the possible values for an option.
library -- Specify which library should contain the object files +generated by building this package.
make -- Define an additional custom build step associated with an +option, resulting in a target that should not go directly into a library.
make_object -- Define a custom build step, resulting in an object file +that should go into a library.
no_define -- Suppress the normal generation of a preprocessor +#define symbol in a configuration header file.
parent -- Control the location of an option in the configuration hierarchy.
requires -- List constraints that the configuration should satisfy if +a given option is active and enabled..
script -- Include additional configuration information from another +CDL script.
6. Templates, Targets and Other Topics
Templates
Targets

  Next
  Overview
\ No newline at end of file diff --git a/doc/html/cdl-guide/language.commands.html b/doc/html/cdl-guide/language.commands.html new file mode 100644 index 00000000..ef4e1109 --- /dev/null +++ b/doc/html/cdl-guide/language.commands.html @@ -0,0 +1,514 @@ + + + + + + + + +CDL Commands +
The eCos Component Writer's Guide
PrevChapter 3. The CDL LanguageNext

CDL Commands

There are four CDL-related commands which can occur at the top-level +of a CDL script: cdl_package, cdl_component, cdl_option and +cdl_interface. These correspond to the basic building blocks of the +language (CDL interfaces are described in the Section called Interfaces). All of these take the same basic form:

cdl_package <name> {
+    …
+}
+
+cdl_component <name> {
+    …
+}
+
+cdl_option <name> {
+    …
+}
+
+cdl_interface <name> {
+    …
+}

The command is followed by a name and by a body of properties, the +latter enclosed in braces. Packages and components can contain other +entities, so the cdl_package and cdl_component can also have +nested commands in their bodies. All names must be unique within a +given configuration. If say the C library package and a TCP/IP stack +both defined an option with the same name then it would not be +possible to load both of them into a single configuration. There is a +naming convention which should +make accidental name clashes very unlikely.

It is possible for two packages to use the same name if there are no +reasonable circumstances under which both packages could be loaded at +the same time. One example would be architectural HAL packages: a +given eCos configuration can be used on only one processor, so the +architectural HAL packages CYGPKG_HAL_ARM and +CYGPKG_HAL_I386 can re-use option names; in fact +in some cases they are expected to.

Each package has one top-level CDL script, which is specified in the +packages ecos.db database +entry. Typically the name of this top-level script is related to +the package, so the kernel package uses +kernel.cdl, but this is just a convention. The +first command in the top-level script should be cdl_package, and the +name used should be the same as in the ecos.db +database. There should be only one cdl_package command per package.

The various CDL entities live in a hierarchy. For example the kernel +package contains a scheduling component, a synchronization primitives +component, and a number of others. The synchronization component +contains various options such as whether or not mutex priority +inheritance is enabled. There is no upper bound on how far components +can be nested, but it is rarely necessary to go more than three or +four levels deeper than the package level. Since the naming convention +incorporates bits of the hierarchy, this has the added advantage of +keeping the names down to a more manageable size.

The hierarchy serves two purposes. It allows options to be controlled +en masse, so disabling a component automatically disables all the +options below it in the hierarchy. It also permits a much simpler +representation of the configuration in the graphical configuration +tool, facilitating navigation and modification.

By default a package is placed at the top-level of the hierarchy, but +it is possible to override this using a parent property. For example +an architectural HAL package such as CYGPKG_HAL_SH +typically re-parents itself below CYGPKG_HAL, and a +platform HAL package would then re-parent itself below the +architectural HAL. This makes it a little bit easier for users to +navigate around the hierarchy. Components, options and interfaces can +also be re-parented, but this is less common.

All components, options and interfaces that are defined directly in +the top-level script will be placed below the package in the hierarchy. +Alternatively they can be nested in the body of the cdl_package +command. The following two script fragments are equivalent:

cdl_package CYGPKG_LIBC {
+    …
+}
+
+cdl_component CYGPKG_LIBC_STRING {
+    …
+}
+
+cdl_option CYGPKG_LIBC_CTYPE_INLINES {
+    …
+}

and:

cdl_package CYGPKG_LIBC {
+    …
+
+    cdl_component CYGPKG_LIBC_STRING {
+        …
+    }
+
+    cdl_option CYGPKG_LIBC_CTYPE_INLINES {
+        …
+    }
+}

If a script defines options both inside and outside the body of the +cdl_package then the ones inside will be processed first. Language +purists may argue that it would have been better if all contained +options and components had to go into the body, but in practice it is +often convenient to be able to skip this level of nesting and the +resulting behavior is still well-defined.

Components can also contain options and other CDL entities, in fact +that is what distinguishes them from options. These can be defined in +the body of the cdl_component command:

cdl_component CYGPKG_LIBC_STDIO {
+
+    cdl_component CYGPKG_LIBC_STDIO_FLOATING_POINT {
+        …
+    }
+
+    cdl_option CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS {
+        …
+    }
+}

Nesting options inside the bodies of components like this is fine for +simple packages with only a limited number of configuration options, +but it becomes unsatisfactory as the number of options increases. +Instead it is possible to split the CDL data into multiple CDL +scripts, on a per-component basis. The script property should be +used for this. For example, in the case of the C library all +stdio-related configuration options could be put into +stdio.cdl, and the top-level CDL script +libc.cdl would contain the following:

cdl_package CYGPKG_LIBC {
+    …
+
+    cdl_component CYGPKG_LIBC_STDIO {
+        …
+        script stdio.cdl
+    }
+}

The CYGPKG_LIBC_STDIO_FLOATING_POINT component and +the CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS option +can then be placed at the top-level of stdio.cdl. +It is possible to have some options nested in the body of a +cdl_component command and other options in a separate file accessed +by the script property. In such a case the nested options would be +processed first, and then the other script would be read in. A script +specified by a script property should only define new options, +components or interfaces: it should not contain any additional +properties for the current component.

It is possible for a component's CDL script to have a sub-component +which also has a script property, and so on. In practice excessive +nesting like this is rarely useful. It is also possible to ignore the +CDL language support for constructing hierarchies automatically and +use the parent property explicitly for every single option and +component. Again this is not generally useful.

Note: At the time of writing interfaces cannot act as containers. This may +change in a future version of the component framework. If the change +is made then interfaces would support the script property, just like +components.


PrevHomeNext
The CDL LanguageUpCDL Properties
\ No newline at end of file diff --git a/doc/html/cdl-guide/language.database.html b/doc/html/cdl-guide/language.database.html new file mode 100644 index 00000000..b03e0d7d --- /dev/null +++ b/doc/html/cdl-guide/language.database.html @@ -0,0 +1,408 @@ + + + + + + + + +Updating the ecos.db database +
The eCos Component Writer's Guide
PrevChapter 3. The CDL LanguageNext

Updating the ecos.db database

The current implementation of the component framework requires that +all packages be present in a single component repository and listed in +that repository's ecos.db database. This is not +generally a problem for application developers who can consider the +component repository a read-only resource, except when adding or +removing packages via the administration tool. However it means that +component writers need to do their development work inside a +component repository as well, and update the database with details of +their new package or packages. Future enhancements to the component +framework may allow new components to be developed outside a +repository.

Like most files related to the component framework, the +ecos.db database is actually a Tcl script. +Typical package entries would look like this:

package CYGPKG_LIBC {
+	alias		{ "C library" libc clib clibrary }
+	directory	language/c/libc
+	script		libc.cdl
+        description  "
+This package enables compatibility with the ISO C standard - ISO/IEC
+9899:1990. This allows the user application to use well known standard
+C library functions, and in eCos starts a thread to invoke the user
+function main()"
+}
+
+package CYGPKG_IO_PCI	{
+	alias		{ "PCI configuration library" io_pci }
+	directory	io/pci
+	script		io_pci.cdl
+	hardware
+        description "
+           This package contains the PCI configuration library."
+}

The package command takes two arguments, a name and +a body. The name must be the same as in the cdl_package command in +the package's top-level CDL script. The body can contain the +following five commands: alias, +directory, script, +hardware and description.

alias

Each package should have one or more aliases. The first alias is +typically used when listing the known packages, because a string like +C library is a bit easier to read and +understand than CYGPKG_LIBC. The other aliases are +not used for output, but are accepted on input. For example the +ecosconfig command-line +tool will accept add libc as an option, as well +as add CYGPKG_LIBC.

directory

This is used to specify the location of the package relative to the +root of the component repository. It should be noted that in the +current component framework this location cannot be changed in +subsequent releases of the package: if for some reason it is desirable +to install a new release elsewhere in the repository, all the old +versions must first be uninstalled; the database cannot hold two +separate locations for one package.

script

The script command specifies the location of the +package's top-level CDL script, in other words the one containing the +cdl_package definition. If the package follows the directory layout conventions then +this script will be in the cdl +sub-directory, otherwise it will be relative to the package's top-level +directory. Again once a release has been made this file should not +change in later releases. In practice the top-level script is generally +named after the package itself, so changing its name is unlikely to be +useful.

hardware

Packages which are tied to specific hardware, for example device +drivers and HAL packages, should indicate this in both the +cdl_package command of the CDL script and in the database entry.

description

This should give a brief description of the package. Typically the +text for the description property in the cdl_package command will +be re-used.

Note: Most of the information in the ecos.db file could +be obtained by a relatively simple utility. This would be passed a +single argument identifying a package's top-level CDL script. The +directory path relative to the component repository root could be +determined from the filename. The name, description +and hardware fields could be obtained from the +script's cdl_package command. The display property would supply +the first alias, additional aliases could be obtained by extending the +syntax of that property or by other means. Something along these lines +may be provided by a future release of the component framework.

Currently the ecos.db database also holds +information about the various targets. When porting to a new target it +will be necessary to add information about the target to the database, +as well as the details of the new platform HAL package and any related +packages.


PrevHomeNext
InterfacesUpThe Build Process
\ No newline at end of file diff --git a/doc/html/cdl-guide/language.html b/doc/html/cdl-guide/language.html new file mode 100644 index 00000000..0bd0648c --- /dev/null +++ b/doc/html/cdl-guide/language.html @@ -0,0 +1,436 @@ + + + + + + + + +The CDL Language +
The eCos Component Writer's Guide
PrevNext

Chapter 3. The CDL Language

The CDL language is a key part of the eCos component framework. +All packages must come with at least one CDL script, to describe +that package to the framework. The information in that script includes +details of all the configuration options and how to build the package. +Implementing a new component or turning some existing code into an +eCos component always involves writing corresponding CDL. This +chapter provides a description of the CDL language. Detailed +information on specific parts of the language can be found in Chapter 5.

Language Overview

A very simple CDL script would look like this:

cdl_package CYGPKG_ERROR {
+    display       "Common error code support"
+    compile       strerror.cxx
+    include_dir   cyg/error
+    description   "
+        This package contains the common list of error and
+        status codes. It is held centrally to allow
+        packages to interchange error codes and status
+        codes in a common way, rather than each package
+        having its own conventions for error/status
+        reporting. The error codes are modelled on the
+        POSIX style naming e.g. EINVAL etc. This package
+        also provides the standard strerror() function to
+        convert error codes to textual representation."
+}

This describes a single package, the error code package, which does +not have any sub-components or configuration options. The package has +an internal name, CYGPKG_ERROR, which can be +referenced in other CDL scripts using e.g. +requires CYGPKG_ERROR. There will also be a +#define for this symbol in a configuration header +file. In addition to the package name, this script provides a number +of properties for the package as a whole. The display property +provides a short description. The description property involves a +rather longer one, for when users need a bit more information. The +compile and include_dir properties list the consequences of this +package at build-time. The package appears to lack any on-line +documentation.

Packages could be even simpler than this. If the package only provides +an interface and there are no files to be compiled then there is no +need for a compile property. Alternatively if there are no exported +header files, or if the exported header files should go to the +top-level of the install/include directory, then there is +no need for an include_dir property. Strictly speaking the +description and display properties are optional as well, although +application developers would not appreciate the resulting lack of +information about what the package is supposed to do.

However many packages tend to be a bit more complicated than the error +package, containing various sub-components and configuration options. +These are also defined in the CDL scripts and in much the same way +as the package. For example, the following excerpt comes from the +infrastructure package:

cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER {
+    display       "Buffered tracing"
+    default_value 1
+    active_if     CYGDBG_USE_TRACING
+    description   "
+        An output module which buffers output from tracing and
+        assertion events. The stored messages are output when an
+        assert fires, or CYG_TRACE_PRINT() (defined in
+        <cyg/infra/cyg_trac.h>) is called. Of course, there will
+        only be stored messages if tracing per se (CYGDBG_USE_TRACING)
+        is enabled above."
+
+    cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE {
+        display       "Trace buffer size"
+        flavor        data
+        default_value 32
+        legal_values  5 to 65535
+        description   "
+            The size of the trace buffer. This counts the number of
+            trace records stored. When the buffer fills it either
+            wraps, stops recording, or generates output."
+    }
+
+    …
+}

Like a cdl_package, a cdl_component has a name and a body. The +body contains various properties for that component, and may also +contain sub-components or options. Similarly a cdl_option has a +name and a body of properties. This example lists a number of +new properties: default_value, active_if, flavor and +legal_values. The meaning of most of these should be fairly obvious. +The next sections describe the various CDL commands and properties.

There is one additional and very important point: CDL is not a +completely new language; instead it is implemented as an extension of +the existing Tcl scripting language. The syntax of a CDL script is +Tcl syntax, which is described below. In addition some of the more +advanced facilities of CDL involve embedded fragments of Tcl code, +for example there is a define_proc property which specifies some +code that needs to be executed when the component framework generates +the configuration header files.


PrevHomeNext
Making a Package Distribution CDL Commands
\ No newline at end of file diff --git a/doc/html/cdl-guide/language.interface.html b/doc/html/cdl-guide/language.interface.html new file mode 100644 index 00000000..835bbd11 --- /dev/null +++ b/doc/html/cdl-guide/language.interface.html @@ -0,0 +1,395 @@ + + + + + + + + +Interfaces +
The eCos Component Writer's Guide
PrevChapter 3. The CDL LanguageNext

Interfaces

For many configurability requirements, options provide sufficient +expressive power. However there are times when a higher level of +abstraction is appropriate. As an example, suppose that some package +relies on the presence of code that implements the standard kernel +scheduling interface. However the requirement is no more stringent +than this, so the constraint can be satisfied by the mlqueue +scheduler, the bitmap scheduler, or any additional schedulers that may +get implemented in future. A first attempt at expressing the +dependency might be:

    requires CYGSEM_KERNEL_SCHED_MLQUEUE || CYGSEM_KERNEL_SCHED_BITMAP

This constraint will work with the current release, but it is limited. +Suppose there is a new release of the kernel which adds another +scheduler such as a deadline scheduler, or suppose that there is a new +third party package which adds such a scheduler. The package +containing the limited constraint would now have to be updated and +another release made, with possible knock-on effects.

CDL interfaces provide an abstraction mechanism: constraints can be +expressed in terms of an abstract concept, for example +“scheduler”, rather than specific implementations such as +CYGSEM_KERNEL_SCHED_MLQUEUE and +CYGSEM_KERNEL_SCHED_BITMAP. Basically an interface +is a calculated configuration option:

cdl_interface CYGINT_KERNEL_SCHEDULER {
+    display  "Number of schedulers in this configuration"
+    …
+}

The individual schedulers can then implement this interface:

cdl_option CYGSEM_KERNEL_SCHED_MLQUEUE {
+    display       "Multi-level queue scheduler"
+    default_value 1
+    implements    CYGINT_KERNEL_SCHEDULER
+    …
+}
+
+cdl_option CYGSEM_KERNEL_SCHED_BITMAP {
+    display       "Bitmap scheduler"
+    default_value 0
+    implements    CYGINT_KERNEL_SCHEDULER
+    …
+}

Future schedulers can also implement this interface. The value of an +interface, for the purposes of expression evaluation, is the number of +active and enabled options which implement this interface. Packages +which rely on the presence of a scheduler can impose constraints such +as:

    requires CYGINT_KERNEL_SCHEDULER

If none of the schedulers are enabled, or if the kernel package is not +loaded, then CYGINT_KERNEL_SCHEDULER will evaluate +to 0. If at least one scheduler is active and +enabled then the constraint will be satisfied.

Because interfaces have a calculated value determined by the +implementors, the default_value and calculated properties are not +applicable and should not appear in the body of a cdl_interface +command. Interfaces have the data flavor by +default, but the bool and +booldata flavors may be specified instead. A +bool interface is disabled if there are no active +and enabled implementors, otherwise it is enabled. A +booldata interface is disabled if there are no +active and enabled implementors, otherwise it is enabled and has a +value corresponding to the number of these implementors. Other +properties such as requires and compile can be used as normal.

Some component writers will not want to use interfaces in this way. +The reasoning is that their code will only have been tested with the +existing schedulers, so the requires constraint needs to be +expressed in terms of those schedulers; it is possible that the +component will still work with a new scheduler, but there are no +guarantees. Other component writers may take a more optimistic view +and assume that their code will work with any scheduler until proven +otherwise. It is up to individual component writers to decide which +approach is most appropriate in any given case.

One common use for interfaces is to describe the hardware +functionality provided by a given target. For example the CDL +scripts for a TCP/IP package might want to know whether or not the +target hardware has an ethernet interface. Generally it is not +necessary for the TCP/IP stack to know exactly which ethernet hardware +is present, since there should be a device driver which implements the +appropriate functionality. In CDL terms the device drivers should +implement an interface CYGHWR_NET_DRIVERS, and the +CDL scripts for the TCP/IP stack can use this in appropriate +expressions.


PrevHomeNext
Values and ExpressionsUpUpdating the ecos.db database
\ No newline at end of file diff --git a/doc/html/cdl-guide/language.naming.html b/doc/html/cdl-guide/language.naming.html new file mode 100644 index 00000000..0407c965 --- /dev/null +++ b/doc/html/cdl-guide/language.naming.html @@ -0,0 +1,602 @@ + + + + + + + + +Option Naming Convention +
The eCos Component Writer's Guide
PrevChapter 3. The CDL LanguageNext

Option Naming Convention

All the options in a given configuration live in the same namespace. +Furthermore it is not possible for two separate options to have the +same name, because this would make any references to those options in +CDL expressions ambiguous. A naming convention exists to avoid +problems. It is recommended that component writers observe some or all +of this convention to reduce the probability of name clashes with +other packages.

There is an important restriction on option names. Typically the +component framework will output a #define for every +active and enabled option, using the name as the symbol being defined. +This requires that all names are valid C preprocessor symbols, a +limitation that is enforced even for options which have the +no_define property. Preprocessor symbols can be any sequence of +lower case letters a-z, upper +case letters, A-Z, the +underscore character _, and the digits +0-9. The first character must be +a non-digit. Using an underscore as the first character is +discouraged, because that may clash with reserved language +identifiers. In addition there is a convention that preprocessor +symbols only use upper case letters, and some component writers may +wish to follow this convention.

A typical option name could be something like +CYGSEM_KERNEL_SCHED_BITMAP. This name consists of +several different parts:

  1. The first few characters, in this case the three letters +CYG, are used to identify the organization that +produced the package. For historical reasons packages produced by Red +Hat tend to use the prefix CYG rather than +RHAT. Component writers should use their own +prefix: even when cutting and pasting from an existing CDL script +the prefix should be changed to something appropriate to their +organization.

    It can be argued that a short prefix, often limited to upper case +letters, is not sufficiently long to eliminate the possibility of +name clashes. A longer prefix could be used, for example one based on +internet domain names. However the C preprocessor has no concept of +namespaces or import directives, so it would always +be necessary to use the full option name in component source code +which gets tedious - option names tend to be long enough as it is. +There is a small increased risk of name clashes, but this risk is felt +to be acceptable.

  2. The next three characters indicate the nature of the option, for +example whether it affects the interface or just the implementation. A +list of common tags is given below.

  3. The KERNEL_SCHED part indicates the location of the +option within the overall hierarchy. In this case the option is part of +the scheduling component of the kernel package. Having the hierarchy +details as part of the option name can help in understanding +configurable code and further reduces the probability of a name clash.

  4. The final part, BITMAP, identifies the option +itself.

The three-character tag is intended to provide some additional +information about the nature of the option. There are a number of +pre-defined tags. However for many options there is a choice: +options related to the platform should normally use +HWR, but numerical options should normally use +NUM; a platform-related numerical option such as +the size of an interrupt stack could therefore use either tag. +There are no absolute rules, and it is left to component writers to +interpret the following guidelines:

xxxARC_

The ARC tag is intended for options related +to the processor architecture. Typically such options will only occur +in architectural or variant HAL packages.

xxxHWR_

The HWR tag is intended for options related to +the specific target board. Typically such options will only occur in +platform HAL packages.

xxxPKG_

This tag is intended for packages or components, in other words +options which extend the configuration hierarchy. Arguably a +COM tag would be more appropriate for +components, but this could be confusing because of the considerable +number of computing terms that begin with com.

xxxGLO_

This is intended for global configuration options, especially +preferences.

xxxDBG_

The DBG tag indicates that the option is in +some way related to debugging, for example it may enable assertions in +some part of the system.

xxxTST_

This tag is for testing-related options. Typically these do not +affect actual application code, instead they control the interaction +between target-side test cases and a host-side testing infrastructure.

xxxFUN_

This is for configuration options which affect the interface of a +package. There are a number of related tag which are also +interface-related. xxxFUN_ is intended primarily +for options that control whether or not one or more functions are +provided by the package, but can also be used if none of the other +interface-related tags is applicable.

xxxVAR_

This is analogous to FUN but controls the presence +or absence of one or more variables or objects.

xxxCLS_

The CLS tag is intended only for packages that +provide an object-oriented interface, and controls the presence or +absence of an entire class.

xxxMFN_

This is also for object-orientated interfaces, and indicates the +presence or absence of a member function rather than an entire class.

xxxSEM_

A SEM option does not affect the interface (or if +does affect the interface, this is incidental). Instead it is used for +options which have a fundamental effect on the semantic behavior of a +package. For example the choice of kernel schedulers is semantic in +nature: it does not affect the interface, in particular the function +cyg_thread_create exists irrespective of which +scheduler has been selected. However it does have a major impact on +the system's behavior.

xxxIMP_

IMP is for implementation options. These do not +affect either the interface or the semantic behavior (with the +possible exception of timing-related changes). A typical +implementation option controls whether or not a particular function or +set of functions should get inlined.

xxxNUM_

This tag is for numerical options, for example the number of +scheduling priority levels.

xxxDAT_

This is for data items that are not numerical in nature, for example a +device name.

xxxBLD_

The BLD tag indicates an option that affects +the build process, for example compiler flag settings.

xxxINT_

This should normally be used for CDL interfaces, which is a language +construct that is largely independent from the interface exported by a +package via its header files. For more details of CDL interfaces +see the Section called Interfaces.

xxxPRI_

This tag is not normally used for configuration options. Instead +it is used by CDL scripts to pass additional private information to +the source code via the configuration header files, typically inside a +define_proc property.

xxxSRC_

This tag is not normally used for configuration options. Instead +it can be used by package source code to interact with such options, +especially in the context of the if_define property.

There is one special case of a potential name clash that is worth +mentioning here. When the component framework generates a +configuration header file for a given package, by default it will use +a name derived from the package name (the define_header property can +be used to override this). The file name is constructed from the +package name by removing everything up to and including the first +underscore, converting the remainder of the name to lower case, and +appending a .h suffix. For example the kernel +package CYGPKG_KERNEL will involve a header file +pkgconf/kernel.h. If a +configuration contained some other package +XYZPKG_KERNEL then this would attempt to use the +same configuration header file, with unfortunate effects. Case +sensitivity could introduce problems as well, so a package +xyzpkg_kernel would involve the same problem. Even +if the header file names preserved the case of the package name, not +all file systems are case sensitive. There is no simple solution to +this problem. Changing the names of the generated configuration header +files would involve a major incompatible change to the interface, to +solve a problem which is essentially hypothetical in nature.


PrevHomeNext
CDL PropertiesUpAn Introduction to Tcl
\ No newline at end of file diff --git a/doc/html/cdl-guide/language.properties.html b/doc/html/cdl-guide/language.properties.html new file mode 100644 index 00000000..dda19920 --- /dev/null +++ b/doc/html/cdl-guide/language.properties.html @@ -0,0 +1,1643 @@ + + + + + + + + +CDL Properties +
The eCos Component Writer's Guide
PrevChapter 3. The CDL LanguageNext

CDL Properties

Each package, component, option, and interface has a body of +properties, which provide the component framework with information +about how to handle each option. For example there is a property for a +descriptive text message which can be displayed to a user who is +trying to figure out just what effect manipulating the option would +have on the target application. There is another property for the +default value, for example whether a particular option should be +enabled or disabled by default.

All of the properties are optional, it is legal to define a +configuration option which has an empty body. However some properties +are more optional than others: users will not appreciate having to +manipulate an option if they are not given any sort of description or +documentation. Other properties are intended only for very specific +purposes, for example make_object and include_files, and are used +only rarely.

Because different properties serve very different purposes, their +syntax is not as uniform as the top-level commands. Some properties +take no arguments at all. Other properties take a single argument such +as a description string, or a list of arguments such as a compile +property which specifies the file or files that should be compiled if +a given option is active and enabled. The define_proc property takes +as argument a snippet of Tcl code. The active_if, calculated, +default_value, legal_values and requires properties take various +expressions. Additional properties may be defined in future which take +new kinds of arguments.

All property parsing code supports options for every property, +although at present the majority of properties do not yet take any +options. Any initial arguments that begin with a hyphen character +- will be interpreted as an option, for example:

cdl_package CYGPKG_HAL_ARM {
+    …
+    make -priority 1 {
+        …
+    }
+}

If the option involves additional data, as for the +-priority example above, then this can be written +as either -priority=1 or as +-priority 1. On occasion the option parsing +code can get in the way, for example:

cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_STATE {
+    …
+    legal_values -1 to 1
+    default_value -1
+}

Neither the legal_values nor the default_value property will +accept -1 as a valid option, so this will result in +syntax errors when the CDL script is read in by the component +framework. To avoid problems, the option parsing code will recognize +the string -- and will not attempt to interpret any +subsequent arguments. Hence this option should be written as:

cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_STATE {
+    …
+    legal_values  -- -1 to 1
+    default_value -- -1
+}

The property parsing code involves a recursive invocation of the Tcl +interpreter that is used to parse the top-level commands. This means +that some characters in the body of an option will be treated +specially. The # character can be used for +comments. The backslash character \, the +dollar character $, square brackets +[ and ], braces +{ and }, and the quote character +" may all receive special treatment. Most of the +time this is not a problem because these characters are not useful for +most properties. On occasion having a Tcl interpreter around +performing the parser can be very powerful. For more details of +how the presence of a Tcl interpreter can affect CDL scripts, +see the Section called An Introduction to Tcl.

Many of the properties can be used in any of cdl_package, +cdl_component, cdl_option or cdl_interface. Other properties are +more specific. The script property is only relevant to components. +The define_header, hardware, include_dir, include_files, and +library properties apply to a package as a whole, so can only occur +in the body of a cdl_package command. The calculated, +default_value, legal_values and flavor properties are not +relevant to packages, as will be explained later. The calculated and +default_value properties are also not relevant to interfaces.

This section lists the various properties, grouped by purpose. Each +property also has a full reference page in Chapter 5. +Properties related to values and expressions are described in more +detail in the Section called Values and Expressions. Properties related to +header file generation and to the build process are described in +Chapter 4.

Information-providing Properties

Users can only be expected to manipulate configuration options +sensibly if they are given sufficient information about these options. +There are three properties which serve to explain an option in plain +text: the display property gives +a textual alias for an option, which is usually more comprehensible +than something like CYGPKG_LIBC_TIME_ZONES`; the +description property gives a +longer description, typically a paragraph or so; the doc property specifies the location of +additional on-line documentation related to a configuration option. In +the context of a graphical tool the display string will be the +primary way for users to identify configuration options; the +description paragraph will be visible whenever the option is +selected; the on-line documentation will only be accessed when the +user explicitly requests it.

cdl_package CYGPKG_UITRON {
+    display       "uITRON compatibility layer"
+    doc           ref/ecos-ref.a.html
+    description   "
+        eCos supports a uITRON Compatibility Layer, providing
+        full Level S (Standard) compliance with Version 3.02 of
+        the uITRON Standard, plus many Level E (Extended) features.
+        uITRON is the premier Japanese embedded RTOS standard."
+    …
+}

All three properties take a single argument. For display and +description this argument is just a string. For doc it should be a +pointer to a suitable HTML file, optionally including an anchor within +that page. If the directory layout +conventions are observed then the component framework will look +for the HTML file in the package's doc sub-directory, otherwise the doc +filename will be treated as relative to the package's top-level directory.

The Configuration Hierarchy

There are two properties related to the hierarchical organization of +components and options: parent and +script.

The parent property can be used to move a CDL entity somewhere +else in the hierarchy. The most common use is for packages, to avoid +having all the packages appear at the top-level of the configuration +hierarchy. For example an architectural HAL package such as +CYGPKG_HAL_SH is placed below the common HAL +package CYGPKG_HAL using a parent property.

cdl_package CYGPKG_HAL_SH {
+    display       "SH architecture"
+    parent        CYGPKG_HAL
+    …
+}

The parent property can also be used in the body of a +cdl_component, cdl_option or cdl_interface, but this is less +common. However care has to be taken since excessive re-parenting can +be confusing. Care also has to be taken when reparenting below some +other package that may not actually be loaded in a given +configuration, since the resulting behavior is undefined.

As a special case, if the parent is the empty string then the +CDL entity is placed at the root of the hierarchy. This is useful +for global preferences, default compiler flags, and other settings +that may affect every package.

The script property can only be used in the body of a +cdl_component command. The property takes a single filename as +argument, and this should be another CDL script containing +additional options, sub-components and interfaces that should go below +the current component in the hierarchy. If the directory layout conventions are +observed then the component framework will look for the specified file +relative to the cdl +subdirectory of the package, otherwise the filename will be treated as +relative to the package's top-level directory.

cdl_component CYGPKG_LIBC_STDIO {
+    display       "Standard input/output functions"
+    flavor        bool
+    requires      CYGPKG_IO
+    requires      CYGPKG_IO_SERIAL_HALDIAG
+    default_value 1
+    description   "
+        This enables support for standard I/O functions from <stdio.h>."
+
+    script        stdio.cdl
+}

Value-related Properties

There are seven properties which are related to option values and +state: flavor, +calculated, +default_value, +legal_values, +active_if, +implements, and +requires. More detailed +information can be found in the Section called Values and Expressions.

In the context of configurability, the concept of an option's value is +somewhat non-trivial. First an option may or may not be loaded: it is +possible to build a configuration which has the math library but not +the kernel; however the math library's CDL scripts still reference +kernel options, for example +CYGSEM_LIBM_THREAD_SAFE_COMPAT_MODE has a +requires constraint on +CYGVAR_KERNEL_THREADS_DATA. Even if an option is +loaded it may or may not be active, depending on what is happening +higher up in the hierarchy: if the C library's +CYGPKG_LIBC_STDIO component is disabled then some +other options such as CYGNUM_LIBC_STDIO_BUFSIZE +become irrelevant. In addition each option has both a boolean +enabled/disabled flag and a data part. For many options only the +boolean flag is of interest, while for others only the data part is of +interest. The flavor property can be used to control this:

flavor none

This flavor indicates that neither the boolean nor the data parts are +user-modifiable: the option is always enabled and the data is always +set to 1. The most common use for this is to have a +component that just acts as a placeholder in the hierarchy, allowing +various options to be grouped below it.

flavor bool

Only the boolean part of the option is user-modifiable. The data part +is fixed at 1.

flavor data

Only the data part of the option is user-modifiable. The boolean part +is fixed at enabled.

flavor booldata

Both the boolean and the data part of the option are user-modifiable.

For more details of CDL flavors and how a flavor affects expression +evaluation, and other consequences, see the Section called Values and Expressions. The flavor property cannot be used for a +package because packages always have the booldata +flavor. Options and components have the bool flavor +by default, since most configuration choices are simple yes-or-no +choices. Interfaces have the data flavor by default.

The calculated property can be used for options which should not be +user-modifiable, but which instead are fixed by the target hardware or +determined from the current values of other options. In general +calculated options should be avoided, since they can be confusing to +users who need to figure out whether or not a particular option can +actually be changed. There are a number of valid uses for calculated +options, and quite a few invalid ones as well. The reference packages should be consulted +for further details. The property takes an ordinary CDL expression as +argument, for example:

# A constant on some target hardware, perhaps user-modifiable on other
+# targets.
+cdl_option CYGNUM_HAL_RTC_PERIOD {
+    display       "Real-time clock period"
+    flavor        data
+    calculated    12500
+}

The calculated property cannot be used for packages or interfaces. +The value of a package always corresponds to the version of that +package which is loaded, and this is under user control. Interfaces +are implicitly calculated, based on the number of active and enabled +implementors.

The default_value property is similar to calculated, but only +specifies a default value which users can modify. Again this property +is not relevant to packages or interfaces. A typical example would be:

cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT {
+    display       "Include GDB multi-threading debug support"
+    requires      CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
+    default_value CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
+    …
+}

The legal_values property imposes a constraint on the possible +values of the data part of an option. Hence it is only applicable to +options with the data or +booldata flavors. It cannot be used for a package +since the only valid value for a package is its version number. The +arguments to the legal_values property should constitute a CDL list expression.

cdl_option CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET {
+    display       "Default Standard Time offset"
+    flavor        data
+    legal_values  -- -90000 to 90000
+    default_value -- 0
+    …
+}

The active_if property does not relate directly to an option's +value, but rather to its active state. Usually this is controlled via +the configuration hierarchy: if the +CYGPKG_LIBC_STDIO component is disabled then all +options below it are inactive and do not have any consequences. +In some cases the hierarchy does not provide sufficient control, for +example an option should only be active if two disjoint sets of +conditions are satisfied: the hierarchy could be used for one of these +conditions, and an additional active_if property could be used for +the other one. The arguments to active_if should constitute a +CDL goal expression.

# Do not provide extra semaphore debugging if there are no semaphores
+cdl_option CYGDBG_KERNEL_INSTRUMENT_BINSEM {
+    active_if CYGPKG_KERNEL_SYNCH
+    …
+}

The implements property is related to the concept of CDL interfaces. If an option is +active and enabled and it implements a particular interface then it +contributes 1 to that interface's value.

cdl_package CYGPKG_NET_EDB7XXX_ETH_DRIVERS {
+    display       "Cirrus Logic ethernet driver"
+    implements    CYGHWR_NET_DRIVERS
+    implements    CYGHWR_NET_DRIVER_ETH0
+    …
+}

The requires property is used to impose constraints on the user's +choices. For example it is unreasonable to expect the C library to +provide thread-safe implementations of certain functions if the +underlying kernel support has been disabled, or even if the kernel is +not being used at all.

cdl_option CYGSEM_LIBC_PER_THREAD_ERRNO {
+    display       "Per-thread errno"
+    doc           ref/ecos-ref.15.html
+    requires      CYGVAR_KERNEL_THREADS_DATA
+    default_value 1
+    …
+}

The arguments to the requires property should be a CDL goal expression.

Generating the Configuration Header Files

When creating or updating a build tree the component framework will +also generate configuration header files, one per package. By default +it will generate a #define for each option, +component or interface that is active and enabled. For options with +the data or booldata flavors the +#define will use the option's data part, otherwise +it will use the constant 1. Typical output would +include:

#define CYGFUN_LIBC_TIME_POSIX 1
+#define CYGNUM_LIBC_TIME_DST_DEFAULT_STATE -1

There are six properties which can be used to control the header file +generation process: +define_header, +no_define, +define_format, +define, +if_define, and +define_proc.

By default the component framework will generate a configuration +header file for each package based on the package's name: everything +up to and including the first underscore is discarded, the rest of the +name is lower-cased, and a .h suffix is appended. +For example the configuration header file for the kernel package +CYGPKG_KERNEL is pkgconf/kernel.h. The define_header +property can be used to specify an alternative filename. This applies +to all the components and options within a package, so it can only be +used in the body of a cdl_package command. For example the following +specifies that the configuration header file for the SPARClite HAL +package is pkgconf/hal_sparclite.h.

cdl_package CYGPKG_HAL_SPARCLITE {
+    display "SPARClite architecture"
+    parent        CYGPKG_HAL
+    hardware
+    define_header hal_sparclite.h
+    …
+}

Note: At present the main use for the define_header property is related +to hardware packages, see the reference +pages for more details.

The no_define property is used to suppress the generation of the +default #define. This can be useful if an option's +consequences are all related to the build process or to constraints, +and the option is never actually checked in any source code. It can +also be useful in conjunction with the define, if_define or +define_proc properties. The no_define property does not take any +arguments.

cdl_component CYG_HAL_STARTUP {
+    display       "Startup type"
+    flavor        data
+    legal_values  { "RAM" "ROM" }
+    default_value {"RAM"}
+    no_define
+    define -file system.h CYG_HAL_STARTUP
+    …
+}

This example also illustrates the define property, which can be used +to generate a #define in addition to the default +one. It takes a single argument, the name of the symbol to be defined. +It also takes options to control the configuration header file in +which the symbol should be defined and the format to be used.

The define_format property can be used to control how the value part +of the default #define gets formatted. For example +a format string of "0x%04x" could be used to +generate a four-digit hexadecimal number.

The if_define property is intended for use primarily to control +assertions, tracing, and similar functionality. It supports a specific +implementation model for these, allowing control at the grain of +packages or even individual source files. The reference pages provide additional +information.

The define_proc property provides an escape mechanism for those +cases where something special has to happen at configuration header +file generation time. It takes a single argument, a fragment of Tcl +code, which gets executed when the header file is generated. This code +can output arbitrary data to the header file, or perform any other +actions that might be appropriate.

Controlling what gets Built

There are six properties which affect the build process: +compile, +make, +make_object, +library, +include_dir, and +include_files. +The last three apply to a package as a whole, and can only occur in +the body of a cdl_package command.

Most of the source files that go into a package should simply be +compiled with the appropriate compiler, selected by the target +architecture, and with the appropriate flags, with an additional set +defined by the target hardware and possible modifications on a +per-package basis. The resulting object files will go into the library +libtarget.a, which can then be linked against +application code. The compile property is used to list these source +files:

cdl_package CYGPKG_ERROR {
+    display       "Common error code support"
+    compile       strerror.cxx
+    include_dir   cyg/error
+    …
+}

The arguments to the compile property should be one or more source +files. Typically most of the sources will be needed for the package as +a whole, and hence they will be listed in one or more compile +properties in the body of the cdl_package. Some sources may be +specific to particular configuration options, in other words there is +no point in compiling them unless that option is enabled, in which +case the sources should be listed in a compile property in the +corresponding cdl_option, cdl_component or cdl_interface body.

Some packages may have more complicated build requirements, for +example they may involve a special target such as a linker script +which should not end up in the usual library, or they may involve +special build steps for generating an object file. The make and +make_object properties provide support for such requirements, for +example:

cdl_package CYGPKG_HAL_MN10300_AM33 {
+    display       "MN10300 AM33 variant"
+    …
+    make {
+        <PREFIX>/lib/target.ld: <PACKAGE>/src/mn10300_am33.ld
+        $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) \
+            $(CFLAGS) -o $@ $<
+        @echo $@ ": \\" > $(notdir $@).deps
+        @tail +2 target.tmp >> $(notdir $@).deps
+        @echo >> $(notdir $@).deps
+        @rm target.tmp
+    }
+}

For full details of custom build steps and the build process +generally, see Chapter 4.

By default all object files go into the library +libtarget.a. It is possible to override this at +the package level using the library property, but this should be +avoided since it complicates application development: instead of just +linking with a single library for all eCos-related packages, it +suddenly becomes necessary to link with several libraries.

The include_dir and include_files properties relate to a package's +exported header files. By default a package's header files will be +exported to the install/include +directory. This is the desired behavior for some packages like the C +library, since headers like stdio.h should exist at that level. +However if all header files were to end up in that directory then +there would be a significant risk of a name clash. Instead it is +better for packages to specify some sub-directory for their exported +header files, for example:

cdl_package CYGPKG_INFRA {
+    display       "Infrastructure"
+    include_dir   cyg/infra
+    …
+}

The various header files exported by the infrastructure, for example +cyg_ass.h and cyg_trac.h will now end up in the +install/include/cyg/infra +sub-directory, where a name clash is very unlikely.

For packages which follow the directory layout conventions the +component framework will assume that the package's +include sub-directory contains +all exported header files. If this is not the case, for example +because the package is sufficiently simple that the layout convention +is inappropriate, then the exported header files can be listed +explicitly in an include_files property.

Miscellaneous Properties

The hardware property is +only relevant to packages. Some packages such as device drivers and +HAL packages are hardware-specific, and generally it makes no sense to +add such packages to a configuration unless the corresponding hardware +is present on your target system. Typically hardware package selection +happens automatically when you select your target. The hardware +property should be used to identify a hardware-specific package, and +does not take any arguments.

cdl_package CYGPKG_HAL_MIPS {
+    display "MIPS architecture"
+    parent        CYGPKG_HAL
+    hardware
+    include_dir   cyg/hal
+    define_header hal_mips.h
+    …
+}

At present the hardware property is largely ignored by the component +framework. This may change in future releases.


PrevHomeNext
CDL CommandsUpOption Naming Convention
\ No newline at end of file diff --git a/doc/html/cdl-guide/language.tcl.html b/doc/html/cdl-guide/language.tcl.html new file mode 100644 index 00000000..c9ed9b02 --- /dev/null +++ b/doc/html/cdl-guide/language.tcl.html @@ -0,0 +1,927 @@ + + + + + + + + +An Introduction to Tcl +
The eCos Component Writer's Guide
PrevChapter 3. The CDL LanguageNext

An Introduction to Tcl

All CDL scripts are implemented as Tcl scripts, and are read in by +running the data through a standard Tcl interpreter, extended with a +small number of additional commands such as +cdl_option and cdl_component. +Often it is not necessary to know the full details of Tcl syntax. +Instead it is possible to copy an existing script, perform some copy +and paste operations, and make appropriate changes to names and to +various properties. However there are also cases where an +understanding of Tcl syntax is very desirable, for example:

cdl_option CYGDAT_UITRON_MEMPOOLFIXED_EXTERNS {
+    display       "Externs for initialization"
+    flavor        data
+    default_value {"static char fpool1[ 2000 ], \\\n\
+	                        fpool2[ 2000 ], \\\n\
+	                        fpool3[ 2000 ];"}
+    …
+}

This causes the cdl_option command to be executed, which in turn +evaluates its body in a recursive invocation of the Tcl interpreter. +When the default_value property is encountered the braces around the +value part are processed by the interpreter, stopping it from doing +further processing of the braced contents (except for backslash +processing at the end of a line, that is special). In particular it +prevents command substitution for +[ 2000 ]. A single argument will be +passed to the default_value command which expects a CDL +expression, so the expression parsing code is passed the following:

"static char fpool1[ 2000 ], \\\n fpool2[ 2000 ], \\\n fpool3[ 2000 ];"

The CDL expression parsing code will treat this as a simple string +constant, as opposed to a more complicated expression involving other +options and various operators. The string parsing code will perform +the usual backslash substitutions so the actual default value will be:

static char fpool1[ 2000 ], \
+ fpool2[ 2000 ], \
+ fpool3[ 2000 ];

If the user does not modify the option's value then the following +will be generated in the appropriate configuration header file:

#define CYGDAT_UITRON_MEMPOOLFIXED_EXTERNS static char fpool1[ 2000 ], \
+ fpool2[ 2000 ], \
+ fpool3[ 2000 ];

Getting this desired result usually requires an understanding of both +Tcl syntax and CDL expression syntax. Sometimes it is possible to +substitute a certain amount of trial and error instead, but this may +prove frustrating. It is also worth pointing out that many CDL +scripts do not involve this level of complexity. On the other hand, +some of the more advanced features of the CDL language involve +fragments of Tcl code, for example the define_proc property. To +use these component writers will need to know about the full Tcl +language as well as the syntax.

Although the current example may seem to suggest that Tcl is rather +complicated, it is actually a very simple yet powerful scripting +language: the syntax is defined by just eleven rules. On occasion this +simplicity means that Tcl's behavior is subtly different from other +languages, which can confuse newcomers.

When the Tcl interpreter is passed some data such as +puts Hello, it splits this data into a command +and its arguments. The command will be terminated by a newline or by a +semicolon, unless one of the quoting mechanisms is used. The command +and each of its arguments are separated by white space. So in the +following example:

puts Hello
+set x 42

This will result in two separate commands being executed. The first +command is puts and is passed a single argument, +Hello. The second command is set +and is passed two arguments, x and +42. The intervening newline character serves to +terminate the first command, and a semi-colon separator could be used +instead:

puts Hello;set x 42

Any white space surrounding the semicolon is just ignored because it +does not serve to separate arguments.

Now consider the following:

set x Hello world

This is not valid Tcl. It is an attempt to invoke the +set command with three arguments: +x, Hello, and +world. The set only takes two +arguments, a variable name and a value, so it is necessary to combine +the data into a single argument by quoting:

set x "Hello world"

When the Tcl interpreter encounters the first quote character it +treats all subsequent data up to but not including the closing quote +as part of the current argument. The quote marks are removed by the +interpreter, so the second argument passed to the +set command is just Hello world +without the quote characters. This can be significant in the context +of CDL scripts. For example:

cdl_option CYG_HAL_STARTUP {
+    …
+    default_value "RAM"
+}

The Tcl interpreter strips off the quote marks so the CDL +expression parsing code sees RAM instead of +"RAM". It will treat this as a reference to +some unknown option RAM rather than as a string +constant, and the expression evaluation code will use a value of +0 when it encounters an option that is not +currently loaded. Therefore the option +CYG_HAL_STARTUP ends up with a default value of +0. Either braces or backslashes should be used to +avoid this, for example +default_value { "RAM" }.

A quoted argument continues until the closing quote character is +encountered, which means that it can span multiple lines. Newline or +semicolon characters do not terminate the current command in such +cases. description properties usually make use of this:

cdl_package CYGPKG_ERROR {
+    description   "
+        This package contains the common list of error and
+        status codes. It is held centrally to allow
+        packages to interchange error codes and status
+        codes in a common way, rather than each package
+        having its own conventions for error/status
+        reporting. The error codes are modelled on the
+        POSIX style naming e.g. EINVAL etc. This package
+        also provides the standard strerror() function to
+        convert error codes to textual representation."
+    …
+}

The Tcl interpreter supports much the same forms of backslash +substitution as other common programming languages. Some backslash +sequences such as \n will be replaced by the +appropriate character. The sequence \\ will be +replaced by a single backslash. A backslash at the very end of a line +will cause that backslash, the newline character, and any white space +at the start of the next line to be replaced by a single space. Hence +the following two Tcl commands are equivalent:

puts  "Hello\nworld\n"
+puts \
+"Hello
+world
+"

If a description string needs to contain quote marks or other +special characters then backslash escapes can be used. In addition to +quote and backslash characters, the Tcl interpreter treats square +brackets, the $ character, and braces specially. +Square brackets are used for command substitution, for example:

puts "The answer is [expr 6 * 9]"

When the Tcl interpreter encounters the square brackets it will treat +the contents as another command that should be executed first, and the +result of executing that is used when continuing to process the +script. In this case the Tcl interpreter will execute the command +expr 6 * 9, yielding a result of 42 +[1] +and then the +Tcl interpreter will execute puts "The answer is 42". +It should be noted that the interpreter performs only one level +of substitution: if the result of performing command substitution +performs further special characters such as square brackets then these +will not be treated specially.

Command substitution will not prove useful for many CDL scripts, +except for e.g. a define_proc property which involves a fragment of +Tcl code. Potentially there are some interesting uses, for example +to internationalize display strings. However care does have to be +taken to avoid unexpected command substitution, for example if an +option description involves square brackets then typically these would +require backslash-escapes.

The $ character is used in Tcl scripts to perform +variable substitution:

set x [expr 6 * 9]
+puts "The answer is $x"

Variable substitution, like command substitution, is unlikely to +prove useful for many CDL scripts except in the context of +Tcl fragments. If it is necessary to have a $ +character then a backslash escape may have to be used.

Braces are used to collect a sequence of characters into a single +argument, just like quotes. The difference is that variable, command +and backslash substitution do not occur inside braces (with the +sole exception of backslash substitution at the end of a line). +Therefore given a line in a CDL script such as:

default_value {"RAM"}

The braces are stripped off by the Tcl interpreter, leaving +"RAM" which will be handled as a string constant by +the expression parsing code. The same effect could be achieved using +one of the following:

default_value \"RAM\"
+default_value "\"RAM\""

Generally the use of braces is less confusing. At this stage it is +worth noting that the basic format of CDL data makes use of +braces:

cdl_option <name> {
+     …
+};

The cdl_option command is passed two arguments, a name and a body, +where the body consists of everything inside the braces but not the +braces themselves. This body can then be executed in a recursive +invocation of the Tcl interpreter. If a CDL script contains +mismatched braces then the interpreter is likely to get rather +confused and the resulting diagnostics may be difficult to understand.

Comments in Tcl scripts are introduced by a hash character +#. However, a hash character only introduces a +comment if it occurs where a command is expected. Consider the +following:

# This is a comment
+puts "Hello" # world

The first line is a valid comment, since the hash character occurs +right at the start where a command name is expected. The second line +does not contain a comment. Instead it is an attempt to invoke the +puts command with three arguments: +Hello, # and +world. These are not valid arguments for the +puts command so an error will be raised. +If the second line was rewritten as:

puts "Hello"; # world

then this is a valid Tcl script. The semicolon identifies the end of +the current command, so the hash character occurs at a point where the +next command would start and hence it is interpreted as the start of a +comment.

This handling of comments can lead to subtle behavior. Consider the +following:

cdl_option WHATEVER {
+# This is a comment }
+    default_value 0
+    …
+}

Consider the way the Tcl interpreter processes this. The command name +and the first argument do not pose any special difficulties. The +opening brace is interpreted as the start of the next argument, which +continues until a closing brace is encountered. In this case the +closing brace occurs on the second line, so the second argument passed +to cdl_option is +\n    # This is a comment. This second argument is processed in a recursive +invocation of the Tcl interpreter and does not contain any commands, +just a comment. Top-level script processing then resumes, and the next +command that is encountered is default_value. Since +the parser is not currently processing a configuration option this is +an error. Later on the Tcl interpreter would encounter a closing brace +by itself, which is also an error.

For component writers who need more information about Tcl, +especially about the language rather than the syntax, various +resources are available. A reasonable starting point is the +Scriptics developer +web site.

Notes

[1]

It is possible that some versions of the Tcl interpreter will instead +produce a result of 54 when asked to multiply six by nine. Appropriate +reference +documentation should be consulted for more information on why +42 is in fact the correct answer.


PrevHomeNext
Option Naming ConventionUpValues and Expressions
\ No newline at end of file diff --git a/doc/html/cdl-guide/language.values.html b/doc/html/cdl-guide/language.values.html new file mode 100644 index 00000000..97438500 --- /dev/null +++ b/doc/html/cdl-guide/language.values.html @@ -0,0 +1,3127 @@ + + + + + + + + +Values and Expressions +
The eCos Component Writer's Guide
PrevChapter 3. The CDL LanguageNext

Values and Expressions

It is fairly reasonable to expect that enabling or disabling a +configuration option such as +CYGVAR_KERNEL_THREADS_DATA in some way affects its +value. This will have an effect on any +expressions that reference this option such as +requires CYGVAR_KERNEL_THREADS_DATA. It will +also affect the consequences of that option: how it affects the build +process and what happens to any constraints that +CYGVAR_KERNEL_THREADS_DATA may impose (as opposed +to constraints on this option imposed by others).

In a language like C the handling of variables is relatively +straightforward. If a variable x gets referenced in +an expression such as if (x != 0), +and that variable is not defined anywhere, then the code will fail to +build, typically with an unresolved error at link-time. Also in C +a variable x does not live in any hierarchy, so its +value for the purposes of expression evaluation is not affected by +anything else. C variables also have a clear type such as +int or long double.

In CDL things are not so straightforward.

Option Values

There are four factors which go into an option's value:

  1. An option may or may not be loaded.

  2. If the option is loaded, it may or may not be active.

  3. Even if the option is active, it may or may not be enabled.

  4. If the option is loaded, active and enabled then it will have some +associated data which constitutes its value.

Is the Option Loaded?

At any one time a configuration will contain only a subset of all +possible packages. In fact it is impossible to combine certain +packages in a single configuration. For example architectural HAL +packages should contain a set of options defining endianness, the +sizes of basic data types and so on (many of which will of course be +constant for any given architecture). Any attempt to load two +architectural HAL packages into a configuration will fail because of +the resulting name clash. Since CDL expressions can reference +options in other packages, and often need to do so, it is essential to +define the resulting behavior.

One complication is that the component framework does not know about +every single option in every single package. Obviously it cannot know +about packages from arbitrary third parties which have not been +installed. Even for packages which have been installed, the current +repository database does not hold details of every option, only of the +packages themselves. If a CDL expression contains a reference to +some option CYGSEM_KERNEL_SCHED_TIMESLICE then the +component framework will only know about this option if the kernel +package is actually loaded into the current configuration. If the +package is not loaded then theoretically the framework might guess +that the option is somehow related to the kernel by examining the +option name but this would not be robust: the option could easily be +part of some other package that violates the naming convention.

Assume that the user is building a minimal configuration which does +not contain the kernel package, but does have other packages which +contain the following constraints:

    requires CYGPKG_KERNEL
+    requires CYGPKG_KERNEL_THREADS_DATA
+    requires !CYGSEM_KERNEL_SCHED_TIMESLICE

Clearly the first constraint is not satisfied because the kernel is +not loaded. The second constraint is also not satisfied. The third +constraint is trivially satisfied: if there is no kernel then the +kernel's timeslicing support cannot possibly be enabled.

Any options which are not in the current configuration are handled as +follows:

  1. Any references to that option will evaluate to 0, +so requires !CYGSEM_KERNEL_SCHED_TIMESLICE will +be satisfied but +requires CYGSEM_KERNEL_THREADS_DATA will not +be satisfied.

  2. An option that is not loaded has no consequences on the build process. +It cannot directly result in any #define's in a +configuration header file, nor in any files being compiled. This is +only reasonable: if the option is not loaded then the component +framework has no way of knowing about any compile or similar +properties. An option that is not loaded can have indirect +consequences by being referenced in CDL expressions.

  3. An option that is not loaded cannot impose any constraints on the rest +of the configuration. Again this is the only reasonable behavior: if +the option is not loaded then any associated requires or +legal_values properties will not be known.

Is the Option Active

The next issue to consider is whether or not a particular option is +active. Configuration options are organized in a hierarchy of +components and sub-components. For example the C library package +contains a component CYGPKG_LIBC_STDIO containing +all the options related to standard I/O. If a user disables the +component as a whole then all the options below it become inactive: it +makes no sense to disable all stdio functionality and then manipulate +the buffer sizes.

Inactive is not quite the same as disabled, although the effects are +similar. The value of an inactive option is preserved. If the user +modifies a buffer size option, then disables the whole stdio +component, the buffer size value remains in case the stdio component +is re-enabled later on. Some tools such as the graphical configuration +tool will treat inactive options specially, for example such options +may be grayed out.

The active or inactive state of an option may affect other packages. +For example a package may use the sprintf +function and require support for floating point conversions, a +constraint that is not satisfied if the relevant option is inactive. +It is necessary to define exactly what it means for an option to be +inactive:

  1. An option is inactive if its parent is either inactive or disabled. +For example if CYGPKG_LIBC_STDIO is disabled then +all the options and sub-components become inactive; since +CYGPKG_LIBC_STDIO_FLOATING_POINT is now inactive, +CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT is inactive +as well.

  2. Options may also be inactive as a result of an active_if property. +This is useful if a particular option is only relevant if two or more +disjoint sets of conditions need to be satisfied, since the +hierarchical structure can only cope with at most one such set.

  3. If an option is inactive then any references to that option in CDL +expressions will evaluate to 0. Hence a constraint +of the form +requires CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT +is not satisfied if the entire stdio component is disabled.

  4. An option that is inactive has no consequences on the build process. +No #define will be generated. Any compile or +similar properties will be ignored.

  5. An option that is inactive cannot impose any constraints on the rest +of the configuration. For example +CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT has a +dependency requires CYGPKG_LIBM, but if all of +the stdio functionality is disabled then this constraint is ignored +(although of course there may be other packages which have a +dependency on CYGPKG_LIBM.

Is the Option Enabled? What is the Data?

The majority of configuration options are boolean in nature, so the +user can either enable or disable some functionality. Some options are +different. For example CYGNUM_LIBC_STDIO_BUFSIZE is +a number, and CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE is +a string corresponding to a device name. A few options like +CYGDAT_UITRON_TASK_EXTERNS can get very +complicated. CDL has to cope with this variety, and define the exact +behavior of the system in terms of constraints and build-time +consequences.

In CDL the value of an option consists of two parts. There is a +boolean part, controlling whether or not the option is enabled. There +is also a data part, providing additional information. For most +options one of these parts is fixed, as controlled by the option's +flavor property:

The effects of the boolean and data parts are as follows:

  1. If an option is disabled, in other words if the boolean part is false, +then any references to that option in CDL expressions will evaluate +to 0. This is the same behavior as for inactive +options. The data part is not relevant. The none +and data flavors specify that the option is always +enabled, in which case this rule is not applicable.

  2. If an option is enabled then any references to that option in CDL +expressions will evaluate to the option's data part. For two of the +flavors, none and bool, this +data part is fixed to the constant 1 which +generally has the expected result.

  3. If a component or package is disabled then all sub-components and +options immediately below it in the hierarchy are inactive. By a +process of recursion this will affect all the nodes in the subtree.

  4. If an option is disabled then it can impose no constraints on the rest +of the configuration, in particular requires and legal_values +properties will be ignored. If an option is enabled then its +constraints should be satisfied, or the component framework will +report various conflicts. Note that the legal_values constraint only +applies to the data part of the option's value, so it is only useful +with the data and booldata +flavors. Options with the none and +data flavors are always enabled so their +constraints always have to be satisfied (assuming the option is +active).

  5. If an option is disabled then it has no direct consequences at +build-time: no #define will be generated, no files +will get compiled, and so on. If an option is active and enabled then +all the consequences take effect. The option name and data part are +used to generate the #define in the appropriate +configuration header file, subject to various properties such as +no_define, but the data part has no other effects on the build +system.

By default all options and components have the bool +flavor: most options are boolean in nature, so making this the default +allows for slightly more compact CDL scripts. Packages have the +booldata flavor, where the data part always +corresponds to the version of the package that is loaded into the +configuration: changing this value corresponds to unloading the old +version and loading in a different one.

CDL Flavors: The concept of CDL flavors tends to result in various discussions +about why it is unnecessarily complicated, and would it not have been +easier to do … However there are very good reasons why CDL +works the way it does.

The first common suggestion is that there is no need to have separate +flavors bool, data, and so on. A +boolean option could just be handled as a data option with legal +values 0 and 1. The counter +arguments are as follows:

  1. It would actually make CDL scripts more verbose. By default all +options and components have the bool flavor, since +most options are boolean in nature. Without a bool +flavor it would be necessary to indicate explicitly what the legal +values are somehow, e.g. with a legal_values property.

  2. The boolean part of an option's value has a very different effect from +the data part. If an option is disabled then it has no consequences at +build time, and can impose no constraints. A data +option always has consequences and can impose constraints. To get the +desired effect it would be necessary to add CDL data indicating that +a value of 0 should be treated specially. Arguably +this could be made built-in default behavior, although that would +complicate options where 0 is a perfectly legal +number, for example +CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET.

  3. There would no replacement for a booldata option +for which 0 is a valid value. Again some additional +CDL syntax would be needed to express such a concept.

Although initially it may seem confusing that an option's value has +both a boolean and a data part, it is an accurate reflection of how +configuration options actually work. The various alternatives would +all make it harder to write CDL scripts.

The next common suggestion is that the data part of a value should be +typed in much the same way as C or C++ data types. For example it +should be possible to describe +CYGNUM_LIBC_STDIO_BUFSIZE as an integer value, +rather than imposing legal_values constraints. Again there are very +good reasons why this approach was not taken:

  1. The possible legal values for an integer are rarely correct for a +CDL option. A constraint such as +1 to 0x7fffffff is a bit more accurate, +although if this option indicates a buffer size it is still not +particularly good — very few targets will have enough +memory for such a buffer. Forcing CDL writers to list the +legal_values constraints explicitly should make them think a bit +more about what values are actually sensible. For example +CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET has legal +values in the range -90000 to 90000, +which helps the user to set a sensible value.

  2. Not all options correspond to simple data types such as integers. +CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE is a C string, +and would have to be expressed using something like +char []. This introduces plenty of +opportunities for confusion, especially since square brackets may get +processed by the Tcl interpreter for command substitution.

  3. Some configuration options can get very complicated indeed, for +example the default value of +CYGDAT_UITRON_TASK_INITIALIZERS is:

    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 )

    This would require CDL knowing about C macros, structures, arrays, +static initializers, and so on. Adding such detailed knowledge about +the C language to the component framework is inappropriate.

  4. CDL needs to be usable with languages other than C. At present this +includes C++, in future it may include languages such as Java. Each +language adds new data types and related complications, for example +C++ classes and inheritance. Making CDL support a union of all data +types in all possible languages is not sensible.

The CDL approach of treating all data as a sequence of characters, +possibly constrained by a legal_values property or other means, has +the great advantage of simplicity. It also fits in with the Tcl +language that underlies CDL.

Some Examples

The following excerpt from the C library's CDL scripts can be used +to illustrate how values and flavors work in practice:

cdl_component CYGPKG_LIBC_RAND {
+    flavor        none
+    compile       stdlib/rand.cxx
+
+    cdl_option CYGSEM_LIBC_PER_THREAD_RAND {
+        requires      CYGVAR_KERNEL_THREADS_DATA
+        default_value 0
+    }
+
+    cdl_option CYGNUM_LIBC_RAND_SEED {
+        flavor        data
+        legal_values  0 to 0x7fffffff
+        default_value 1
+    }
+
+    cdl_option CYGNUM_LIBC_RAND_TRACE_LEVEL {
+        flavor        data
+        legal_values  0 to 1
+        default_value 0
+    }
+}

If the application does not require any C library functionality then +it is possible to have a configuration where the C library is not +loaded. This can be achieved by starting with the minimal template, or +by starting with another template such as the default one and then +explicitly unloading the C library package. If this package is not +loaded then any references to the CYGPKG_LIBC_RAND +component or any of its options will have a value of +0 for the purposes of expression evaluation. No +#define's will be generated for the component or +any of its options, and the file stdlib/rand.cxx +will not get compiled. There is nothing special about the C library +here, exactly the same would apply for say a device driver that does +not correspond to any of the devices on the target hardware.

Assuming the C library is loaded, the next thing to consider is +whether or not the component and its options are active. The component +is layered immediately below the C library package itself, so if the +package is loaded then it is safe to assume that the package is also +enabled. Therefore the parent of CYGPKG_LIBC_RAND +is active and enabled, and in the absence of any active_if +properties CYGPKG_LIBC_RAND will be active as well.

The component CYGPKG_LIBC_RAND has the flavor +none. This means the component cannot be disabled. +Therefore all the options in this component have an active and enabled +parent, and in the absence of any active_if properties they are all +active as well.

The component's flavor none serves to group +together all of the configuration options related to random number +generation. This is particularly useful in the context of the +graphical configuration tool, but it also helps when it comes to +naming the options: all of the options begin with +CYGxxx_LIBC_RAND, giving a clear hint about both +the package and the component within that package. The flavor means +that the component is always enabled and has the value +1 for the purposes of expression evaluation. There +will always be a single #define of the form:

#define CYGPKG_LIBC_RAND 1

In addition the file stdlib/rand.cxx will always +get built. If the component had the default bool +flavor then users would be able to disable the whole component, +and one less file would need to be built. However random number +generation is relatively simple, so the impact on eCos build times are +small. Furthermore by default the code has no dependencies on other +parts of the system, so compiling the code has no unexpected side +effects. Even if it was possible to disable the component, the +sensible default for most applications would still leave it enabled. +The net result is that the flavor none is probably +the most sensible one for this component. For other components the +default bool flavor or one of the other flavors +might be more appropriate.

Next consider option CYGSEM_LIBC_PER_THREAD_RAND +which can be used to get a per-thread random number seed, possibly +useful if the application needs a consistent sequence of random +numbers. In the absence of a flavor property this option will be +boolean, and the default_value property means that it is disabled by +default — reasonable since few applications need this +particular functionality, and it does impose a constraint on the rest +of the system. If the option is left disabled then no +#define will be generated, and if there were any +compile or similar properties these would not take effect. If the +option is enabled then a #define will be generated, +using the option's data part which is fixed at 1:

#define CYGSEM_LIBC_PER_THREAD_RAND 1

The CYGSEM_LIBC_PER_THREAD_RAND option has a +requires constraint on +CYGVAR_KERNEL_THREADS_DATA. If the C library option +is enabled then the constraint should be satisfied, or else the +configuration contains a conflict. If the configuration does not +include the kernel package then +CYGVAR_KERNEL_THREADS_DATA will evaluate to +0 and the constraint is not satisfied. Similarly if +the option is inactive or disabled the constraint will not be +satisfied.

CYGNUM_LIBC_RAND_SEED and +CYGNUM_LIBC_RAND_TRACE_LEVEL both have the +data flavor, so they are always enabled and the +component framework will generate appropriate +#define's:

#define CYGNUM_LIBC_RAND_SEED 1
+#define CYGNUM_LIBC_RAND_SEED_1
+#define CYGNUM_LIBC_RAND_TRACE_LEVEL 0
+#define CYGNUM_LIBC_RAND_TRACE_LEVEL_0

Neither option has a compile or similar property, but any such +properties would take effect. Any references to these options in CDL +expressions would evaluate to the data part, so a hypothetical +constraint of the form +{ requires CYGNUM_LIBC_RAND_SEED > 42 } +would not be satisfied with the default values. Both options use a +simple constant for the default_value expression. It would be +possible to use a more complicated expression, for example the default +for CYGNUM_LIBC_RAND_TRACE_LEVEL could be +determined from some global debugging option or from a debugging +option that applies to the C library as a whole. Both options also +have a legal_values constraint, which must be satisfied since the +options are active and enabled.

Ordinary Expressions

Expressions in CDL follow a conventional syntax, for example:

    default_value CYGGLO_CODESIZE > CYGGLO_SPEED
+    default_value { (CYG_HAL_STARTUP == "RAM" &&
+                     !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS &&
+                     !CYGINT_HAL_USE_ROM_MONITOR_UNSUPPORTED &&
+                     !CYGSEM_HAL_POWERPC_COPY_VECTORS) ? 1 : 0 }
+    default_value { "\"/dev/ser0\"" }

However there is a complication in that the various arguments to a +default_value property will first get processed by a Tcl +interpreter, so special characters like quotes and square brackets may +get processed. Such problems can be avoided by enclosing non-trivial +expressions in braces, as in the second example above. The way +expression parsing actually works is as follows:

  1. The Tcl interpreter splits the line or lines into a command and its +arguments. In the first default_value expression above the command +is default_value and there are three arguments, +CYGGLO_CODESIZE, > and +CYGGLO_SPEED. In the second and third examples +there is just one argument, courtesy of the braces.

  2. Next option processing takes place, so any initial arguments that +begin with a hyphen will be interpreted as options. This can cause +problems if the expression involves a negative number, so the +special argument -- can be used to prevent option +processing on the subsequent arguments.

  3. All of the arguments are now concatenated, with a single space in +between each one. Hence the following two expressions are equivalent, +even though they will have been processed differently up to this point.

        default_value CYGGLO_CODESIZE > CYGGLO_SPEED
    +    default_value {CYGGLO_CODESIZE > CYGGLO_SPEED}
  4. The expression parsing code now has a single string to process.

CDL expressions consist of four types of element: references to +configuration options, constant strings, integers, and floating point +numbers. These are combined using a conventional set of operators: the +unary operators -, ~ and +!; the arithmetic operators +, +-, *, / and +%; the shift operators << +and >>; the comparison operators +==, !=, <, +<=, > and +>=; the bitwise operators +&, ^ and +|; the logical operators && and +||; the string concatenation operator +.; and the ternary conditional operator +A ? B : C. There is also support for +some less widely available operators for logical equivalence and +implication, and for a set of function-style operations. Bracketed +sub-expressions are supported, and the operators have the usual +precedence:

Function calls have the usual format of a name, an opening bracket, +one or more arguments separated by commas, and a closing bracket. For +example:

    requires { !is_substr(CYGBLD_GLOBAL_CFLAGS, " -fno-rtti") }

Functions will differ in the number of arguments and may impose +restrictions on some or all of their arguments. For example it may be +necessary for the first argument to be a reference to a configuration +option. The available functions are described in the Section called Functions.

The logical xor operator evaluates to true if +either the left hand side or the right hand side but not both evaluate +to true The logical eqv operator evaluates to true +if both the left and right hand sides evaluate to true, or if both +evaluate to false. The implies operator evaluates +to true either if the left hand side is false or if the right hand +side is true, in other words A implies B +has the same meaning as !A || B. An +example use would be:

    requires { is_active(CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE) implies
+                   (CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE >= (16 * 1024)) }

This constraint would be satisfied if either the support for a main +stack size is disabled, or if that stack is at least 16K. However if +such a stack were in use but was too small, a conflict would be raised.

A valid CDL identifier in an expression, for example +CYGGLO_SPEED, will be interpreted as a reference to +a configuration option by that name. The option does not have to be +loaded into the current configuration. When the component framework +evaluates the expression it will substitute in a suitable value that +depends on whether or not the option is loaded, active, and enabled. +The exact rules are described in the Section called Option Values.

A constant string is any sequence of characters enclosed in quotes. +Care has to be taken that these quotes are not stripped off by the +Tcl interpreter before the CDL expression parser sees them. +Consider the following:

    default_value "RAM"

The quote marks will be stripped before the CDL expression parser +sees the data, so the expression will be interpreted as a reference to +a configuration option RAM. There is unlikely to be +such an option, so the actual default value will be +0. Careful use of braces or other Tcl quoting +mechanisms can be used to avoid such problems.

+String constants consist of the data inside the quotes. If the data +itself needs to contain quote characters then appropriate quoting is +again necessary, for example:

    default_value { "\"/dev/ser0\"" }

An integer constant consists of a sequence of digits, optionally +preceeded with the unary + or - +operators. As usual the sequence 0x or +0X can be used for hexadecimal data, and a leading +0 indicates octal data. Internally the component +framework uses 64-bit arithmetic for integer data. If a constant is +too large then double precision arithmetic will be used instead. +Traditional syntax is also used for double precision numbers, for +example 3.141592 or -3E6.

Of course this is not completely accurate: CDL is not a typed +language, all data is treated as if it were a string. For example the +following two lines are equivalent:

    requires CYGNUM_UITRON_SEMAS > 10
+    requires { CYGNUM_UITRON_SEMAS > "10" }

When an expression gets evaluated the operators will attempt +appropriate conversions. The > comparison +operator can be used on either integer or double precision numbers, so +it will begin by attempting a string to integer conversion of both +operands. If that fails it will attempt string to double conversions. +If that fails as well then the component framework will report a +conflict, an evaluation exception. If the conversions from string to +integer are successful then the result will be either the string +0 or the string 1, both of which +can be converted to integers or doubles as required.

It is worth noting that the expression +CYGNUM_UITRON_SEMAS >10 is not ambiguous. +CDL identifiers can never begin with a digit, so it is not possible +for 10 to be misinterpreted as a reference to an +identifier instead of as a string.

Of course the implementation is slightly different again. The CDL +language definition is such that all data is treated as if it were a +string, with conversions to integer, double or boolean as and when +required. The implementation is allowed to avoid conversions until +they are necessary. For example, given +CYGNUM_UITRON_SEMAS > 10 the +expression parsing code will perform an immediate conversion from +string to integer, storing the integer representation, and there is no +need for a conversion by the comparison operator when the expression +gets evaluated. Given +{ CYGNUM_UITRON_SEMAS > "10" } +the parsing code will store the string representation and a conversion +happens the first time the expression is evaluated. All of this is an +implementation detail, and does not affect the semantics of the +language.

Different operators have different requirements, for example the +bitwise or operator only makes sense if both operands have an integer +representation. For operators which can work with either integer or +double precision numbers, integer arithmetic will be preferred.

The following operators only accept integer operands: +unary ~ (bitwise not), the shift operators +<< and >>, and the +bitwise operators &, | and +^.

The following operators will attempt integer arithmetic first, then +double precision arithmetic: unary -, +the arithmetic operators +, -, +*, /, and %; +and the comparision operators <, +<=, > and +>=.

The equality == and inequality +!= operators will first attempt integer conversion +and comparison. If that fails then double precision will be attempted +(although arguably using these operators on double precision data is +not sensible). As a last resort string comparison will be used.

The operators !, && and +|| all work with boolean data. Any string that can +be converted to the integer 0 or the double +0.0 is treated as false, as is the empty string or +the constant string false. Anything else is +interpreted as true. The result is either 0 or +1.

The conditional operator ? : will interpret +its first operand as a boolean. It does not perform any processing on +the second or third operands.

In practice it is rarely necessary to worry about any of these +details. In nearly every case CDL expressions just work as expected, +and there is no need to understand the full details.

Note: The current expression syntax does not meet all the needs of component +writers. Some future enhancements will definitely be made, others are +more controversial. The list includes the following:

  1. An option's value is determined by several different factors: whether +or not it is loaded, whether or not it is active, whether or not it is +enabled, and the data part. Currently there is no way of querying +these individually. This is very significant in the context of options +with the bool or booldata +flavors, because there is no way of distinguishing between the option +being absent/inactive/disabled or it being enabled with a data field +of 0. There should be unary operators that allow +any of the factors to be checked.

  2. Only the == and != operators can +be used for string data. More string-related facilities are needed.

  3. An implies operator would be useful for many goal expression, where +A implies B is equivalent to +!A ||B.

  4. Similarly there is inadequate support for lists. On occasion it would +be useful to write expressions involving say the list of implementors +of a given CDL interface, for example a sensible default value could +be the first implementor. Associated with this is a need for an +indirection operator.

  5. Arguably extending the basic CDL expression syntax with lots of new +operators is unnecessary, instead expressions should just support +Tcl command substitution and then component writers could escape +into Tcl scripts for complicated operations. This has some major +disadvantages. First, the inference engine would no longer have any +sensible way of interpreting an expression to resolve a conflict. +Second, the component framework's value propagation code keeps track +of which options get referenced in which expressions and avoids +unnecessary re-evaluation of expressions; if expressions can involve +arbitrary Tcl code then there is no simple way to eliminate +unnecessary recalculations, with a potentially major impact on +performance.

Note: The current implementation of the component framework uses 64 bit +arithmetic on all host platforms. Although this is adequate for +current target architectures, it may cause problems in future. At some +stage it is likely that an arbitrary precision integer arithmetic +package will be used instead.

Functions

CDL expressions can contain calls to a set of built-in functions +using the usual syntax, for example;

    requires { !is_substr(CYGBLD_GLOBAL_CFLAGS, "-fno-rtti") }

The available function calls are as follows:

get_data(option)

This function can be used to obtain just the data part of a loaded +configuration option, ignoring other factors such as whether or not +the option is active and enabled. It takes a single argument which +should be the name of a configuration option. If the specified option +is not loaded in the current configuration then the function returns +0, otherwise it returns the data part. Typically this function will +only be used in conjunction with is_active and +is_enabled for fine-grained control over the +various factors that make up an option's value.

is_active(option)

This function can be used to determine whether or not a particular +configuration option is active. It takes a single argument which +should be the name of an option, and returns a boolean. If the +specified option is not loaded then the function will return false. +Otherwise it will consider the state of the option's parents and +evaluate any active_if properties, and return the option's current +active state. A typical use might be:

    requires { is_active(CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE) implies
+                   (CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE >= (16 * 1024)) }

In other words either the specified configuration option must be +inactive, for example because the current application does not use +any related C library or POSIX functionality, or the stack size must +be at least 16K.

The configuration system's inference engine can attempt to satisfy +constraints involving is_active in various +different ways, for example by enabling or disabling parent +components, or by examining active_if properties and manipulating +terms in the associated expressions.

is_enabled(option)

This function can be used to determine whether or not a particular +configuration option is enabled. It takes a single argument which +should be the name of an option, and returns a boolean. If the +specified option is not loaded then the function will return false. +Otherwise it will return the current boolean part of the option's +value. The option's active or inactive state is ignored. Typically +this function will be used in conjunction with +is_active and possibly +get_data to provide fine-grained control over the +various factors that make up an option's value.

is_loaded(option)

This function can be used to determine whether or not a particular +configuration option is loaded. It takes a single argument which +should be the name of an option, and returns a boolean. If the +argument is a package then the is_loaded function +provides little or no extra information, for example the following two +constraints are usually equivalent:

    requires { CYGPKG_KERNEL }
+    requires { is_loaded(CYGPKG_KERNEL) }

However if the specified package is loaded but re-parented below a +disabled component, or inactive as a result of an active_if +property, then the first constraint would not be satisfied but the +second constraint would. In other words the +is_loaded makes it possible to consider in +isolation one of the factors that are considered when CDL expressions +are evaluated.

The configuration system's inference engine will not automatically +load or unload packages to satisfy is_loaded +constraints.

is_substr(haystack, needle)

This can be used to check whether or not a particular string is +present in another string. It is used mainly for manipulating compiler +flags. The function takes two arguments, both of which can be +arbitrary expressions, and returns a boolean.

is_substr has some understanding of word +boundaries. If the second argument starts with a space character then +that will match either a real space or the start of the string. +Similarly if the second argument ends with a space character then that +will match a real space or the end of the string. For example, all of +the following conditions are satisfied:

    is_substr("abracadabra", "abra")
+    is_substr("abracadabra", " abra")
+    is_substr("hocus pocus", " pocus")
+    is_substr("abracadabra", "abra ")

The first is an exact match. The second is a match because the leading +space matches the start of the string. The third is an exact match, +with the leading space matching an actual space. The fourth is a match +because the trailing space matches the end of the string. However, the +following condition is not satisfied.

    is_substr("abracadabra", " abra ")

This fails to match at the start of the string because the trailing +space is not matched by either a real space or the end of the string. +Similarly it fails to match at the end of the string.

If a constraint involving is_substr is not +satisfied and the first argument is a reference to a configuration +option, the inference engine will attempt to modify that option's +value. This can be achieved either by appending the second argument to +the current value, or by removing all occurrences of that argument +from the current value.

    requires { !is_substr(CYGBLD_GLOBAL_CFLAGS, " -fno-rtti ") }
+    requires { is_substr(CYGBLD_GLOBAL_CFLAGS, " -frtti ") }

When data is removed the leading and trailing spaces will be left. For +example, given an initial value of +<CYGBLD_GLOBAL_CFLAGS of +-g -fno-rtti -O2 the result will be +-g  -O2 rather than -g-O2.

If exact matches are needed, the function +is_xsubstr can be used instead.

is_xsubstr(haystack, needle)

This function checks whether or not the pattern string is an exact +substring of the string being searched. It is similar to +is_substr but uses exact matching only. In other +words, leading or trailing spaces have to match exactly and will not +match the beginning or end of the string being searched. The function +takes two arguments, both of which can be arbitrary expressions, and +returns a boolean. The difference between +is_substr and is_xsubstr is +illustrated by the following examples:

    cdl_option MAGIC {
+        flavor data
+        default_value { "abracadabra" }
+    }
+    …
+    requires { is_substr(MAGIC,  " abra") }
+    requires { is_xsubstr(MAGIC, " abra") }

The first goal will be satisfied because the leading space in the +pattern matches the beginning of the string. The second goal will not +be satisfied initialy because there is no exact match, so the +inference engine is likely to update the value of +MAGIC to abracadabra abra which +does give an exact match.

version_cmp(A, B)

This function is used primarily to check that a sufficiently recent +version of some other package +is being used. It takes two arguments, both of which can be arbitrary +expressions. In practice usually one of the arguments will be a +reference to a package and the other will be a constant version +string. The return value is -1 if the first argument is a more recent +version then the second, 0 if the two arguments correspond to +identical versions, and 1 if the first argument is an older version. +For example the following constraint can be used to indicate that the +current package depends on kernel functionality that only became +available in version 1.3:

    requires { version_cmp(CYGPKG_KERNEL, "v1.3") <= 0 }

Note: At this time it is not possible to define new functions inside a CDL +script. Instead functions can only be added at the C++ level, usually +by extending libcdl itself. This is partly because there is more to +CDL functions than simple evaluation: associated with most functions +is support for the inference engine, so that if a constraint involving +a function is not currently satisfied the system may be able to find a +solution automatically.

Goal Expressions

The arguments to certain properties, notably requires and +active_if, constitute a goal expression. As with an ordinary +expression, all of the arguments get combined and then the expression +parser takes over. The same care has to be taken with constant strings +and anything else that may get processed by the Tcl interpreter, so +often a goal expression is enclosed entirely in braces and the +expression parsing code sees just a single argument.

A goal expression is basically just a sequence of ordinary +expressions, for example:

    requires { CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
+               !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
+               !CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT }

This consists of three separate expressions, all of which should +evaluate to a non-zero result. The same expression could be written +as:

    requires { CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS  &&
+               !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT &&
+               !CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT }

Alternatively the following would have much the same effect:

    requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
+    requires !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
+    requires !CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT

Selecting between these alternatives is largely a stylistic choice. +The first is slightly more concise than the others. The second is more +likely to appeal to mathematical purists. The third is more amenable +to cutting and pasting.

The result of evaluating a goal expression is a boolean. If any part +of the goal expression evaluates to the integer 0 +or an equivalent string then the result is false, otherwise it is +true.

The term “goal expression” relates to the component +framework's inference engine: it is a description of a goal that +should be satisfied for a conflict-free configuration. If a requires +constraint is not satisfied then the inference engine will examine the +goal expression: if there is some way of changing the configuration +that does not introduce new conflicts and that will cause the goal +expression to evaluate to true, the conflict can be resolved.

The inference engine works with one conflict and hence one goal +expression at a time. This means that there can be slightly different +behavior if a constraint is specified using a single requires +property or several different ones. Given the above example, suppose +that none of the three conditions are satisfied. If a single goal +expression is used then the inference engine might be able to satisfy +only two of the three parts, but since the conflict as a whole cannot +be resolved no part of the solution will be applied. Instead the user +will have to resolve the entire conflict. If three separate goal +expressions are used then the inference engine might well find +solutions to two of them, leaving less work for the user. On the other +hand, if a single goal expression is used then the inference engine +has a bit more information to work with, and it might well find a +solution to the entire conflict where it would be unable to find +separate solutions for the three parts. Things can get very +complicated, and in general component writers should not worry about +the subtleties of the inference engine and how to manipulate its +behavior.

It is possible to write ambiguous goal expressions, for example:

    requires CYGNUM_LIBC_RAND_SEED -CYGNUM_LIBC_RAND_TRACE_LEVEL > 5

This could be parsed in two ways:

    requires ((CYGNUM_LIBC_RAND_SEED - CYGNUM_LIBC_RAND_TRACE_LEVEL) > 5)
+    requires CYGNUM_LIBC_RAND_SEED && ((-CYGNUM_LIBC_RAND_TRACE_LEVEL) > 5)

The goal expression parsing code will always use the largest ordinary +expression for each goal, so the first interpretation will be used. +In such cases it is a good idea to use brackets and avoid possible +confusion.

List Expressions

The arguments to the legal_values property constitute a goal +expression. As with an ordinary and goal expressions, all of the +arguments get combined and then the expression parser takes over. The +same care has to be taken with constant strings and anything else that +may get processed by the Tcl interpreter, so often a list expression +is enclosed entirely in braces and the expression parsing code sees +just a single argument.

Most list expressions take one of two forms:

    legal_values <expr1> <expr2> <expr3> ...
+    legal_values <expr1> to <expr2>

expr1, expr2 and so on are +ordinary expressions. Often these will be constants or references to +calculated options in the architectural HAL package, but it is +possible to use arbitrary expressions when necessary. The first syntax +indicates a list of possible values, which need not be numerical. The +second syntax indicates a numerical range: both sides of the +to must evaluate to a numerical value; if either +side involves a floating point number then any floating point number +in that range is legal; otherwise only integer values are legal; +ranges are inclusive, so 4 is a valid value given a +list expression 1 to ; if one or both +sides of the to does not evaluate to a numerical +value then this will result in a run-time conflict. The following +examples illustrate these possibilities:

    legal_values { "red" "green" "blue" }
+    legal_values 1 2 4 8 16
+    legal_values 1 to CYGARC_MAXINT
+    legal_values 1.0 to 2.0

It is possible to combine the two syntaxes, for example:

    legal_values 1 2 4 to CYGARC_MAXINT -1024 -20.0 to -10

This indicates three legal values 1, +2 and -1024, one +integer range 4 to CYGARC_MAXINT, and one +floating point range -20.0 to -10.0. In +practice such list expressions are rarely useful.

The identifier to is not reserved, so it is +possible to have a configuration option with that name (although it +violates every naming convention). Using that option in a list +expression may however give unexpected results.

The graphical configuration tool uses the legal_values list +expression to determine how best to let users manipulate the option's +value. Different widgets will be appropriate for different lists, so +{ "red" "green" "blue" } might +involve a pull-down option menu, and +1 to 16 could involve a spinner. The +exact way in which legal_values lists get mapped on to GUI widgets +is not defined and is subject to change at any time.

As with goal expressions, list expressions can be ambiguous. Consider +the following hypothetical example:

    legal_values CYGNUM_LIBC_RAND_SEED -CYGNUM_LIBC_RAND_TRACE_LEVEL

This could be parsed in two ways:

    legal_values (CYGNUM_LIBC_RAND_SEED - CYGNUM_LIBC_RAND_TRACE_LEVEL)
+    legal_values (CYGNUM_LIBC_RAND_SEED) (-CYGNUM_LIBC_RAND_TRACE_LEVEL)

Both are legal. The list expression parsing code will always use the +largest ordinary expression for each element, so the first +interpretation will be used. In cases like this it is a good idea to +use brackets and avoid possible confusion.


PrevHomeNext
An Introduction to TclUpInterfaces
\ No newline at end of file diff --git a/doc/html/cdl-guide/overview.approaches.html b/doc/html/cdl-guide/overview.approaches.html new file mode 100644 index 00000000..47220153 --- /dev/null +++ b/doc/html/cdl-guide/overview.approaches.html @@ -0,0 +1,300 @@ + + + + + + + + +Approaches to Configurability +
The eCos Component Writer's Guide
PrevChapter 1. OverviewNext

Approaches to Configurability

The purpose of configurability is to control the behavior of +components. A scheduler component may or may not support time slicing; +it may or may not support multiple priorities; it may or may not +perform error checking on arguments passed to the scheduler routines. +In the context of a desktop application a button widget may contain +some text or it may contain a picture; the text may be displayed in a +variety of fonts; the foreground and background color may vary. When +an application uses a component there must be some way of specifying +the desired behavior. The component writer has no way of knowing in +advance exactly how a particular component will end up being used.

One way to control the behavior is at run time. The application +creates an instance of a button object, and then instructs this object +to display either text or a picture. No special effort by the +application developer is required, since a button can always support +all desired behavior. There is of course a major disadvantage in +terms of the size of the final application image: the code that gets +linked with the application has to provide support for all possible +behavior, even if the application does not require it.

Another approach is to control the behavior at link-time, typically +by using inheritance in an object-oriented language. The button +library provides an abstract base class Button +and derived classes TextButton and +PictureButton. If an application only uses text +buttons then it will only create objects of type +TextButton, and the code for the +PictureButton class does not get used. In +many cases this approach works rather well and reduces the final image +size, but there are limitations. The main one is that you can only +have so many derived classes before the system gets unmanageable: a +derived class +TextButtonUsingABorderWidthOfOnePlusAWhiteBackgroundAndBlackForegroundAndATwelvePointTimesFontAndNoErrorCheckingOrAssertions +is not particularly sensible as far as most application developers are +concerned.

The eCos component framework allows the behavior of components to +be controlled at an even earlier time: when the component source code +gets compiled and turned into a library. The button component could +provide options, for example an option that only text buttons need to +be supported. The component gets built and becomes part of a library +intended specifically for the application, and the library will +contain only the code that is required by this application and nothing +else. A different application with different requirements would need +its own version of the library, configured separately.

In theory compile-time configurability should give the best possible +results in terms of code size, because it allows code to be controlled +at the individual statement level rather than at the function or +object level. Consider an example more closely related to embedded +systems, a package to support multi-threading. A standard routine +within such a package allows applications to kill threads +asynchronously: the POSIX routine for this is +pthread_cancel; the equivalent routine in µITRON +is ter_tsk. These routines themselves tend to +involve a significant amount of code, but that is not the real +problem: other parts of the system require extra code and data for the +kill routine to be able to function correctly. For example if a thread +is blocked while waiting on a mutex and is killed off by another +thread then the kill operation may have to do two things: remove the +thread from the mutex's queue of waiting threads; and undo the +effects, if any, of priority inheritance. The implementation requires +extra fields in the thread data structure so that the kill routine +knows about the thread's current state, and extra code in the mutex +routines to fill in and clear these extra fields correctly.

Most embedded applications do not require the ability to kill off a +thread asynchronously, and hence the kill routine will not get linked +into the final application image. Without compile-time configurability +this would still mean that the mutex code and similar parts of the +system contain code and data that serve no useful purpose in this +application. The eCos approach allows the user to select that the +thread kill functionality is not required, and all the components can +adapt to this at compile-time. For example the code in the mutex lock +routine contains statements to support the killing of threads, but +these statements will only get compiled in if that functionality is +required. The overall result is that the final application image +contains only the code and data that is really needed for the +application to work, and nothing else.

Of course there are complications. To return to the button example, +the application code might only use text buttons directly, but it +might also use some higher-level widget such as a file selector and +this file selector might require buttons with pictures. Therefore the +button code must still be compiled to support pictures as well as +text. The configuration tools must be aware of the dependencies +between components and ensure that the internal constraints are met, +as well as the external requirements of the application code. An area +of particular concern is conflicting requirements: a button component +might be written in such a way that it can only support either text +buttons or picture buttons, but not both in one application; this +would represent a weakness in the component itself rather than in the +component framework as a whole.

Compile-time configurability is not intended to replace the other +approaches but rather to complement them. There will be times when +run-time selection of behavior is desirable: for example an +application may need to be able to change the baud rate of a serial +line, and the system must then provide a way of doing this at +run-time. There will also be times when link-time selection is +desirable: for example a C library might provide two different random +number routines rand and +lrand48; these do not affect other code so there +is no good reason for the C library component not to provide both of +these, and allow the application code to use none, one, or both of +them as appropriate; any unused functions will just get eliminated at +link-time. Compile-time selection of behavior is another option, and +it can be the most powerful one of the three and the best suited to +embedded systems development.


PrevHomeNext
Why Configurability?UpDegrees of Configurability
\ No newline at end of file diff --git a/doc/html/cdl-guide/overview.configurability.html b/doc/html/cdl-guide/overview.configurability.html new file mode 100644 index 00000000..ea6d302b --- /dev/null +++ b/doc/html/cdl-guide/overview.configurability.html @@ -0,0 +1,206 @@ + + + + + + + + +Why Configurability? +
The eCos Component Writer's Guide
PrevChapter 1. OverviewNext

Why Configurability?

The eCos component framework places a great deal of emphasis on +configurability. The fundamental goal is to allow large parts of +embedded applications to be constructed from re-usable software +components, which does not a priori require that those components be +highly configurable. However embedded application development often +involves some serious constraints.

Many embedded applications have to work with very little memory, to +keep down manufacturing costs. The final application image that will +get blown into EPROM's or used to manufacture ROMs should contain only +the code that is absolutely necessary for the application to work, and +nothing else. If a few tens of kilobytes are added unnecessarily to a +typical desktop application then this is regrettable, but is quite +likely to go unnoticed. If an embedded application does not fit on the +target hardware then the problem is much more serious. The component +framework must allow users to configure the components so that any +unnecessary functionality gets removed.

Many embedded applications need deterministic behavior so that they +can meet real-time requirements. Such deterministic behavior can +often be provided, but at a cost in terms of code size, slower +algorithms, and so on. Other applications have no such real-time +requirements, or only for a small part of the overall system, and the +bulk of the system should not suffer any penalties. Again the +component framework must allow the users control over the timing +behavior of components.

Embedded systems tend to be difficult to debug. Even when it is +possible to get information out of the target hardware by means other +than flashing an LED, the more interesting debugging problems are +likely to be timing-related and hence very hard to reproduce and track +down. The re-usable components can provide debugging assistance in +various ways. They can provide functionality that can be exploited by +source level debuggers such as gdb, for example per-thread debugging +information. They can also contain various assertions so that problems +can be detected early on, tracing mechanisms to figure out what +happened before the assertion failure, and so on. Of course all of +these involve overheads, especially code size, and affect the timing. +Allowing users to control which debugging features are enabled for any +given application build is very desirable.

However, although it is desirable for re-usable components to provide +appropriate configuration options this is not required. It is possible +to produce a package which does not provide a single configuration +option — although the user still gets to choose +whether or not to use the package. In such cases it is still necessary +to provide a minimal CDL script, but its main purpose would be to +integrate the package with the component framework's build system.


PrevHomeNext
OverviewUpApproaches to Configurability
\ No newline at end of file diff --git a/doc/html/cdl-guide/overview.degress.html b/doc/html/cdl-guide/overview.degress.html new file mode 100644 index 00000000..36eb2674 --- /dev/null +++ b/doc/html/cdl-guide/overview.degress.html @@ -0,0 +1,305 @@ + + + + + + + + +Degrees of Configurability +
The eCos Component Writer's Guide
PrevChapter 1. OverviewNext

Degrees of Configurability

Components can support configurability in varying degrees. It is not +necessary to have any configuration options at all, and the only user +choice is whether or not to load a particular package. Alternatively +it is possible to implement highly-configurable code. As an example +consider a typical facility that is provided by many real-time +kernels, mutex locks. The possible configuration options include:

  1. If no part of the application and no other component requires mutexes +then there is no point in having the mutex code compiled into a +library at all. This saves having to compile the code. In addition +there will never be any need for the user to configure the detailed +behavior of mutexes. Therefore the presence of mutexes is a +configuration option in itself.

  2. Even if the application does make use of mutexes directly or +indirectly, this does not mean that all mutex functions have to be +included. The minimum functionality consists of lock and unlock +functions. However there are variants of the locking primitive such as +try-lock and try-with-timeout which may or may not be needed.

    Generally it will be harmless to compile the try-lock function even if +it is not actually required, because the function will get eliminated +at link-time. Some users might take the view that the try-lock +function should never get compiled in unless it is actually needed, to +reduce compile-time and disk usage. Other users might argue that there +are very few valid uses for a try-lock function and it should not be +compiled by default to discourage incorrect uses. The presence of a +try-lock function is a possible configuration option, although it may +be sensible to default it to true.

    The try-with-timeout variant is more complicated because it adds a +dependency: the mutex code will now rely on some other component to +provide a timer facility. To make things worse the presence of this +timer might impact other components, for example it may now be +necessary to guard against timer interrupts, and thus have an +insidious effect on code size. The presence of a lock-with-timeout +function is clearly a sensible configuration option, but the default +value is less obvious. If the option is enabled by default then the +final application image may end up with code that is not actually +essential. If the option is disabled by default then users will have +to enable the option somehow in order to use the function, implying +more effort on the part of the user. One possible approach is to +calculate the default value based on whether or not a timer component +is present anyway.

  3. The application may or may not require the ability to create and +destroy mutexes dynamically. For most embedded systems it is both less +error-prone and more efficient to create objects like mutexes +statically. Dynamic creation of mutexes can be implemented using a +pre-allocated pool of mutex objects, involving some extra code to +manipulate the pool and an additional configuration option to define +the size of the pool. Alternatively it can be implemented using a +general-purpose memory allocator, involving quite a lot of extra code +and configuration options. However this general-purpose memory +allocator may be present anyway to support the application itself or +some other component. The ability to create and destroy mutexes +dynamically is a configuration option, and there may not be a sensible +default that is appropriate for all applications.

  4. An important issue for mutex locks is the handling of priority +inversion, where a high priority thread is prevented from running +because it needs a lock owned by a lower priority thread. This is only +an issue if there is a scheduler with multiple priorities: some +systems may need multi-threading and hence synchronization primitives, +but a single priority level may suffice. If priority inversion is a +theoretical possibility then the application developer may still want +to ignore it because the application has been designed such that the +problem cannot arise in practice. Alternatively the developer may want +some sort of exception raised if priority inversion does occur, +because it should not happen but there may still be bugs in the code. +If priority inversion can occur legally then there are three main ways +of handling it: priority ceilings, priority inheritance, and ignoring +the problem. Priority ceilings require little code but extra effort on +the part of the application developer. Priority inheritance requires +more code but is automatic. Ignoring priority inversion may or may not +be acceptable, depending on the application and exactly when priority +inversion can occur. Some of these choices involve additional +configuration options, for example there are different ways of raising +an exception, and priority inheritance may or may not be applied +recursively.

  5. As a further complication some mutexes may be hidden inside a +component rather than being an explicit part of the application. For +example, if the C library is configured to provide a +malloc call then there may be an associated mutex +to make the function automatically thread-safe, with no need for +external locking. In such cases the memory allocation component of the +C library can impose a constraint on the kernel, requiring that +mutexes be provided. If the user attempts to disable mutexes anyway +then the configuration tools will report a conflict.

  6. The mutex code should contain some general debugging code such as +assertions and tracing. Usually such debug support will be enabled or +disabled at a coarse level such as the entire system or everything +inside the kernel, but sometimes it will be desirable to enable the +support more selectively. One reason would be memory requirements: the +target may not have enough memory to hold the system if all debugging +is enabled. Another reason is if most of the system is working but +there are a few problems still to resolved; enabling debugging in the +entire system might change the system's timing behavior too much, but +enabling some debug options selectively can still be useful. There +should be configuration options to allow specific types of debugging +to be enabled at a fine-grain, but with default settings inherited +from an enclosing component or from global settings.

  7. The mutex code may contain specialized code to interact +with a debugging tool running on the host. It should be +possible to enable or disable this debugging code, and there may +be additional configuration options controlling the detailed +behavior.

Altogether there may be something like ten to twenty configuration +options that are specific to the mutex code. There may be a similar +number of additional options related to assertions and other debug +facilities. All of the options should have sensible default values, +possibly fixed, possibly calculated depending on what is happening +elsewhere in the configuration. For example the default setting for +an assertion option should generally inherit from a kernel-wide +assertion control option, which in turn inherits from a global option. +This allows users to enable or disable assertions globally or at +a more fine-grained level, as desired.

Different components may be configurable to different degrees, ranging +from no options at all to the fine-grained configurability of the +above mutex example (or possibly even further). It is up to component +writers to decide what options should be provided and how best to +serve the needs of application developers who want to use that +component.


PrevHomeNext
Approaches to ConfigurabilityUpWarnings
\ No newline at end of file diff --git a/doc/html/cdl-guide/overview.html b/doc/html/cdl-guide/overview.html new file mode 100644 index 00000000..21c09ebd --- /dev/null +++ b/doc/html/cdl-guide/overview.html @@ -0,0 +1,623 @@ + + + + + + + + +Overview +
The eCos Component Writer's Guide
PrevNext

Chapter 1. Overview

eCos was designed from the very beginning as a configurable +component architecture. The core eCos system consists of a number of +different components such as the kernel, the C library, an +infrastructure package. Each of these provides a large number of +configuration options, allowing application developers to build a +system that matches the requirements of their particular application. +To manage the potential complexity of multiple components and lots of +configuration options, eCos comes with a component framework: a +collection of tools specifically designed to support configuring +multiple components. Furthermore this component framework is +extensible, allowing additional components to be added to the system +at any time.

Terminology

The eCos component architecture involves a number of key concepts.

Configuration Option

The option is the basic unit of configurability. Typically each option +corresponds to a single choice that a user can make. For example there +is an option to control whether or not assertions are enabled, and the +kernel provides an option corresponding to the number of scheduling +priority levels in the system. Options can control very small amounts +of code such as whether or not the C library's +strtok gets inlined. They can also control quite +large amounts of code, for example whether or not the +printf supports floating point conversions.

Many options are straightforward, and the user only gets to choose +whether the option is enabled or disabled. Some options are more +complicated, for example the number of scheduling priority levels is a +number that should be within a certain range. Options should always +start off with a sensible default setting, so that it is not necessary +for users to make hundreds of decisions before any work can start on +developing the application. Once the application is running the +various configuration options can be used to tune the system for the +specific needs of the application.

The component framework allows for options that are not directly +user-modifiable. Consider the case of processor endianness: some +processors are always big-endian or always little-endian, while with +other processors there is a choice. Depending on the user's choice of +target hardware, endianness may or may not be user-modifiable.

Component

A component is a unit of functionality such as a particular kernel +scheduler or a device driver for a specific device. A component is +also a configuration option in that users may want to enable +or disable all the functionality in a component. For example, if a +particular device on the target hardware is not going to be used by +the application, directly or indirectly, then there is no point in +having a device driver for it. Furthermore disabling the device driver +should reduce the memory requirements for both code and data.

Components may contain further configuration options. In the case of a +device driver, there may be options to control the exact behavior of +that driver. These will of course be irrelevant if the driver as a +whole is disabled. More generally options and components live in a +hierarchy, where any component can contain options specific to that +component and further sub-components. It is possible to view the +entire eCos kernel as one big component, containing sub-components +for scheduling, exception handling, synchronization primitives, and so +on. The synchronization primitives component can contain further +sub-components for mutexes, semaphores, condition variables, event +flags, and so on. The mutex component can contain configuration +options for issues like priority inversion support.

Package

A package is a special type of component. Specifically, a package is +the unit of distribution of components. It is possible to create a +distribution file for a package containing all of the source code, +header files, documentation, and other relevant files. This +distribution file can then be installed using the appropriate tool. +Afterwards it is possible to uninstall that package, or to install a +later version. The core eCos distribution comes with a number of +packages such as the kernel and the infrastructure. Other packages +such as network stacks can come from various different sources and can +be installed alongside the core distribution.

Packages can be enabled or disabled, but the user experience is a +little bit different. Generally it makes no sense for the tools to +load the details of every single package that has been installed. For +example, if the target hardware uses an ARM processor then there is no +point in loading the HAL packages for other architectures and +displaying choices to the user which are not relevant. Therefore +enabling a package means loading its configuration data into the +appropriate tool, and disabling a package is an unload operation. In +addition, packages are not just enabled or disabled: it is also +possible to select the particular version of a package that should be +used.

Template

A template is a partial configuration, aimed at providing users with +an appropriate starting point. eCos is shipped with a small number +of templates, which correspond closely to common ways of using the +system. There is a minimal template which provides very little +functionality, just enough to bootstrap the hardware and then jump +directly to application code. The default template adds additional +functionality, for example it causes the kernel and C library packages +to be loaded as well. The uitron template adds further functionality +in the form of a µITRON compatibility layer. Creating a new +configuration typically involves specifying a template as well as a +target, resulting in a configuration that can be built and linked with +the application code and that will run on the actual hardware. It is +then possible to fine-tune configuration options to produce something +that better matches the specific requirements of the application.

Consequences

Choices must have consequences. For an eCos configuration the main +end product is a library that can be linked with application code, so +the consequences of a user choice must affect the build process. This +happens in two main ways. First, options can affect which files get +built and end up in the library. Second, details of the current option +settings get written into various configuration header files using C +preprocessor #define directives, and package source +code can #include these configuration headers and +adapt accordingly. This allows options to affect a package at a very +fine grain, at the level of individual lines in a source file if +desired. There may be other consequences as well, for example there +are options to control the compiler flags that get used during the +build process.

Constraints

Configuration choices are not independent. The C library can provide +thread-safe implementations of functions like +rand, but only if the kernel provides support for +per-thread data. This is a constraint: the C library option has a +requirement on the kernel. A typical configuration involves a +considerable number of constraints, of varying complexity: many +constraints are straightforward, option A requires +option B, or option C precludes +option D. Other constraints can be more +complicated, for example option E may require the +presence of a kernel scheduler but does not care whether it is the +bitmap scheduler, the mlqueue scheduler, or something else.

Another type of constraint involves the values that can be used for +certain options. For example there is a kernel option related to the +number of scheduling levels, and there is a legal values constraint on +this option: specifying zero or a negative number for the number of +scheduling levels makes no sense.

Conflicts

As the user manipulates options it is possible to end up with an +invalid configuration, where one or more constraints are not +satisfied. For example if kernel per-thread data is disabled but the C +library's thread-safety options are left enabled then there are +unsatisfied constraints, also known as conflicts. Such conflicts will +be reported by the configuration tools. The presence of conflicts does +not prevent users from attempting to build eCos, but the +consequences are undefined: there may be compile-time failures, there +may be link-time failures, the application may completely fail to run, +or the application may run most of the time but once in a while there +will be a strange failure… Typically users will want to resolve +all conflicts before continuing.

To make things easier for the user, the configuration tools contain an +inference engine. This can examine a conflict in a particular +configuration and try to figure out some way of resolving the +conflict. Depending on the particular tool being used, the inference +engine may get invoked automatically at certain times or the user may +need to invoke it explicitly. Also depending on the tool, the +inference engine may apply any solutions it finds automatically or it +may request user confirmation.

CDL

The configuration tools require information about the various options +provided by each package, their consequences and constraints, and +other properties such as the location of on-line documentation. This +information has to be provided in the form of CDL scripts. CDL +is short for Component Definition Language, and is specifically +designed as a way of describing configuration options.

A typical package contains the following:

  1. Some number of source files which will end up in a library. The +application code will be linked with this library to produce an +executable. Some source files may serve other purposes, for example to +provide a linker script.

  2. Exported header files which define the interface provided by the +package.

  3. On-line documentation, for example reference pages for each exported +function.

  4. Some number of test cases, shipped in source format, allowing users to +check that the package is working as expected on their particular +hardware and in their specific configuration.

  5. One or more CDL scripts describing the package to the configuration +system.

Not all packages need to contain all of these. For example some +packages such as device drivers may not provide a new interface, +instead they just provide another implementation of an existing +interface. However all packages must contain a CDL script that +describes the package to the configuration tools.

Component Repository

All eCos installations include a component repository. This is a +directory structure where all the packages get installed. The +component framework comes with an administration tool that allows new +packages or new versions of a package to be installed, old packages to +be removed, and so on. The component repository includes a simple +database, maintained by the administration tool, which contains +details of the various packages.

Generally application developers do not need to modify anything inside +the component repository, except by means of the administration tool. +Instead their work involves separate build and install trees. This +allows the component repository to be treated as a read-only resource +that can be shared by multiple projects and multiple users. Component +writers modifying one of the packages do need to manipulate files in +the component repository.


PrevHomeNext
The eCos Component Writer's Guide Why Configurability?
\ No newline at end of file diff --git a/doc/html/cdl-guide/overview.warning.html b/doc/html/cdl-guide/overview.warning.html new file mode 100644 index 00000000..0849c2b0 --- /dev/null +++ b/doc/html/cdl-guide/overview.warning.html @@ -0,0 +1,189 @@ + + + + + + + + +Warnings +
The eCos Component Writer's Guide
PrevChapter 1. OverviewNext

Warnings

Large parts of eCos were developed concurrently with the development +of the configuration technology, or in some cases before design work +on that technology was complete. As a consequence the various eCos +packages often make only limited use of the available functionality. +This situation is expected to change over time. It does mean that many +of the descriptions in this guide will not correspond exactly to how +the eCos packages work right now, but rather to how they could work. +Some of the more extreme discrepancies such as the location of on-line +documentation in the component repository will be mentioned in the +appropriate places in the guide.

A consequence of this is that developers of new components can look at +existing CDL scripts for examples, and discover discrepancies +between what is recommended in this guide and what actually happens at +present. In such cases this guide should be treated as authoritative.

It is also worth noting that the current component framework is not +finished. Various parts of this guide will refer to possible changes +and enhancements in future versions. Examining the source code of the +configuration tools may reveal hints about other likely developments, +and there are many more possible enhancements which only exist at a +conceptual level right now.


PrevHomeNext
Degrees of ConfigurabilityUpPackage Organization
\ No newline at end of file diff --git a/doc/html/cdl-guide/package.contents.html b/doc/html/cdl-guide/package.contents.html new file mode 100644 index 00000000..b0fcc590 --- /dev/null +++ b/doc/html/cdl-guide/package.contents.html @@ -0,0 +1,1055 @@ + + + + + + + + +Package Contents and Layout +
The eCos Component Writer's Guide
PrevChapter 2. Package OrganizationNext

Package Contents and Layout

A typical package contains the following:

  1. Some number of source files which will end up in a library. The +application code will be linked with this library to produce an +executable. Some source files may serve other purposes, for example to +provide a linker script.

  2. Exported header files which define the interface provided by the +package.

  3. On-line documentation, for example reference pages for each exported +function.

  4. Some number of test cases, shipped in source format, allowing users to +check that the package is working as expected on their particular +hardware and in their specific configuration.

  5. One or more CDL scripts describing the package to the configuration +system.

It is also conventional to have a per-package +ChangeLog file used to keep track of changes to +that package. This is especially valuable to end users of the package +who may not have convenient access to the source code control system +used to manage the master copy of the package, and hence cannot find +out easily what has changed. Often it can be very useful to the main +developers as well.

Any given packages need not contain all of these. It is compulsory to +have at least one CDL script describing the package, otherwise the +component framework would be unable to process it. Some packages may +not have any source code: it is possible to have a package that merely +defines a common interface which can then be implemented by several +other packages, especially in the context of device drivers; however +it is still common to have some code in such packages to avoid +replicating shareable code in all of the implementation packages. +Similarly it is possible to have a package with no exported header +files, just source code that implements an existing interface: for +example an ethernet device driver might just implement a standard +interface and not provide any additional functionality. Packages do +not need to come with any on-line documentation, although this may +affect how many people will want to use the package. Much the same +applies to per-package test cases.

The component framework has a recommended per-package directory layout +which splits the package contents on a functional basis:

For example, if a package has an include sub-directory then the component +framework will assume that all header files in and below that +directory are exported header files and will do the right thing at +build time. Similarly if there is doc property indicating the +location of on-line documentation then the component framework will +first look in the doc +sub-directory.

This directory layout is just a guideline, it is not enforced by the +component framework. For simple packages it often makes more sense to +have all of the files in just one directory. For example a package +could just contain the files hello.cxx, +hello.h, hello.html and +hello.cdl. By default +hello.h will be treated as an exported header +file, although this can be overridden with the include_files property. Assuming +there is a doc property referring to hello.html +and there is no doc +sub-directory then the tools will search for this file relative to the +package's top-level and everything will just work. Much the same +applies to hello.cxx and +hello.cdl.

Tip: Older versions of the eCos build system only supported packages that +followed the directory structure exactly. Hence certain core packages +such as error implement the full directory +structure, even though that is a particularly simple package and the +full directory structure is inappropriate. Component writers can +decide for themselves whether or not the directory structure +guidelines are appropriate for their package.

Outline of the Build Process

The full build process is described in Chapter 4, but +a summary is appropriate here. A build involves three directory +structures:

  1. The component repository. This is where all the package source code is +held, along with CDL scripts, documentation, and so on. For build +purposes a component repository is read-only. Application developers +will only modify the component repository when installing or removing +packages, via the administration tool. Component writers will +typically work on just one package in the component repository.

  2. The build tree. Each configuration has its own build tree, which can +be regenerated at any time using the configuration's +ecos.ecc savefile. The build tree contains only +intermediate files, primarily object files. Once a build is complete +the build tree contains no information that is useful for application +development and can be wiped, although this would slow down any +rebuilds following changes to the configuration.

  3. The install tree. This is populated during a build, and contains all +the files relevant to application development. There will be a +lib sub-directory which +typically contains libtarget.a, a linker script, +start-up code, and so on. There will also be an include sub-directory containing all the +header files exported by the various packages. There will also be a +include/pkgconf sub-directory +containing various configuration header files with +#define's for the options. Typically the install +tree is created within the build tree, but this is not a requirement.

The build process involves the following steps:

  1. Given a configuration, the component framework is responsible for +creating all the directories in the build and install trees. If these +trees already exist then the component framework is responsible for +any clean-ups that may be necessary, for example if a package has been +removed then all related files should be expunged from the build and +install trees. The configuration header files will be generated at +this time. Depending on the host environment, the component framework +will also generate makefiles or some other way of building the various +packages. Every time the configuration is modified this step needs to +be repeated, to ensure that all option consequences take effect. Care +is taken that this will not result in unnecessary rebuilds.

    Note: At present this step needs to be invoked manually. In a future version +the generated makefile may if desired perform this step automatically, +using a dependency on the ecos.ecc savefile.

  2. The first step in an actual build is to make sure that the install +tree contains all exported header files. All compilations will use +the install tree's include +directory as one of the places to search for header files.

  3. All source files relevant to the current configuration get compiled. +This involves a set of compiler flags initialized on a per-target +basis, with each package being able to modify these flags, and with +the ability for the user to override the flags as well. Care has to be +taken here to avoid inappropriate target-dependencies in packages that +are intended to be portable. The component framework has built-in +knowledge of how to handle C, C++ and assembler source files — +other languages may be added in future, as and when necessary. The +compile property is used to +list the files that should get compiled. All object files end up in +the build tree.

  4. Once all the object files have been built they are collected into a +library, typically libtarget.a, which can then be +linked with application code. The library is generated in the install +tree.

  5. The component framework provides support for custom build steps, using +the make_object and +make properties. The results of +these custom build steps can either be object files that should end up +in a library, or other files such as a linker script. It is possible +to control the order in which these custom build steps take place, for +example it is possible to run a particular build step before any of +the compilations happen.

Configurable Source Code

All packages should be totally portable to all target hardware (with +the obvious exceptions of HAL and device driver packages). They should +also be totally bug-free, require the absolute minimum amount of code +and data space, be so efficient that cpu time usage is negligible, and +provide lots of configuration options so that application developers +have full control over the behavior. The configuration options are +optional only if a package can meet the requirements of every +potential application without any overheads. It is not the purpose of +this guide to explain how to achieve all of these requirements.

The eCos component framework does have some important implications +for the source code: compiler flag dependencies; package interfaces +vs. implementations; and how configuration options affect source code.

Compiler Flag Dependencies

Wherever possible component writers should avoid dependencies on +particular compiler flags. Any such dependencies are likely to impact +portability. For example, if one package needs to be built in +big-endian mode and another package needs to be built in little-endian +mode then usually it will not be possible for application developers +to use both packages at the same time; in addition the application +developer is no longer given a choice in the matter. It is far better +for the package source code to adapt the endianness at compile-time, +or possibly at run-time although that will involve code-size +overheads.

Package Interfaces and Implementations

The component framework provides encapsulation at the package level. A +package A has no way of accessing the +implementation details of another package B at +compile-time. In particular, if there is a private header file +somewhere in a package's src +sub-directory then this header file is completely invisible to other +packages. Any attempts to cheat by using relative pathnames beginning +with ../.. are generally doomed +to failure because of the presence of package version directories. +There are two ways in which one package can affect another: by means +of the exported header files, which define a public interface; or via +the CDL scripts.

This encapsulation is a deliberate aspect of the overall eCos +component framework design. In most cases it does not cause any +problems for component writers. In some cases enforcing a clean +separation between interface and implementation details can improve +the code. Also it reduces problems when a package gets upgraded: +component writers are free to do pretty much anything on the +implementation side, including renaming every single source file; care +has to be taken only with the exported header files and with the CDL +data, because those have the potential of impacting other packages. +Application code is similarly unable to access package implementation +details, only the exported interface.

Very occasionally the inability of one package to see implementation +details of another does cause problems. One example occurs in HAL +packages, where it may be desirable for the architectural, variant and +platform HAL's to share some information that should not be visible to +other packages or to application code. This may be addressed in the +future by introducing the concept of friend +packages, just as a C++ class can have friend +functions and classes which are allowed special access to a class +internals. It is not yet clear whether such cases are sufficiently +frequent to warrant introducing such a facility.

Source Code and Configuration Options

Configurability usually involves source code that needs to implement +different behavior depending on the settings of configuration +options. It is possible to write packages where the only consequence +associated with various configuration options is to control what gets +built, but this approach is limited and does not allow for +fine-grained configurability. There are three main ways in which +options could affect source code at build time:

  1. The component code can be passed through a suitable preprocessor, +either an existing one such as m4 or a new one specially designed with +configurability in mind. The original sources would reside in the +component repository and the processed sources would reside in the +build tree. These processed sources can then be compiled in the usual +way.

    This approach has two main advantages. First, it is independent from +the programming language used to code the components, provided +reasonable precautions are taken to avoid syntax clashes between +preprocessor statements and actual code. This would make it easier in +future to support languages other than C and C++. Second, configurable +code can make use of advanced preprocessing facilities such as loops +and recursion. The disadvantage is that component writers would have +to learn about a new preprocessor and embed appropriate directives in +the code. This makes it much more difficult to turn existing code into +components, and it involves extra training costs for the component +writers.

  2. Compiler optimizations can be used to elide code that should not be +present, for example:

        …
    +    if (CYGHWR_NUMBER_UARTS > 0) {
    +        …
    +     }
    +    …

    If the compiler knows that CYGHWR_NUMBER_UARTS is +the constant number 0 then it is a trivial operation to get rid of the +unnecessary code. The component framework still has to define this +symbol in a way that is acceptable to the compiler, typically by using +a const variable or a preprocessor symbol. In some +respects this is a clean approach to configurability, but it has +limitations. It cannot be used in the declarations of data structures +or classes, nor does it provide control over entire functions. In +addition it may not be immediately obvious that this code is affected +by configuration options, which may make it more difficult to +understand.

  3. Existing language preprocessors can be used. In the case of C or C++ +this would be the standard C preprocessor, and configurable code would +contain a number of #ifdef and +#if statements.

    #if (CYGHWR_NUMBER_UARTS > 0)
    +     …
    +#endif

    This approach has the big advantage that the C preprocessor is a +technology that is both well-understood and widely used. There are +also disadvantages: it is not directly applicable to components +written in other languages such as Java (although it is possible to +use the C preprocessor as a stand-alone program); the preprocessing +facilities are rather limited, for example there is no looping +facility; and some people consider the technology to be ugly. Of +course it may be possible to get around the second objection by +extending the preprocessor that is used by gcc and g++.

The current component framework generates configuration header files +with C preprocessor #define's for each option +(typically, there various properties which can be used to control +this). It is up to component writers to decide whether to use +preprocessor #ifdef statements or language +constructs such as if. At present there is no +support for languages which do not involve the C preprocessor, +although such support can be added in future when the need arises.

Exported Header Files

A package's exported header files should specify the interface +provided by that package, and avoid any implementation details. +However there may be performance or other reasons why implementation +details occasionally need to be present in the exported headers.

Configurability has a number of effects on the way exported header +files should be written. There may be configuration options which +affect the interface of a package, not just the implementation. It is +necessary to worry about nested #include's and how +this affects package and application builds. A special case of this +relates to whether or not exported header files should +#include configuration headers. These configuration +headers are exported, but should only be #include'd +when necessary.

Configurable Functionality

Many configuration options affect only the implementation of a +package, not the interface. However some options will affect the +interface as well, which means that the options have to be tested in +the exported header files. Some implementation choices, for example +whether or not a particular function should be inlined, also need to +be tested in the header file because of language limitations.

Consider a configuration option +CYGFUN_KERNEL_MUTEX_TIMEDLOCK which controls +whether or not a function cyg_mutex_timedlock is +provided. The exported kernel header file cyg/kernel/kapi.h could contain the +following:

#include <pkgconf/kernel.h>
+…
+#ifdef CYGFUN_KERNEL_MUTEX_TIMEDLOCK
+extern bool cyg_mutex_timedlock(cyg_mutex_t*);
+#endif

This is a correct header file, in that it defines the exact interface +provided by the package at all times. However is has a number of +implications. First, the header file is now dependent on pkgconf/kernel.h, so any changes to +kernel configuration options will cause cyg/kernel/kapi.h to be out of date, and +any source files that use the kernel interface will need rebuilding. +This may affect sources in the kernel package, in other packages, and +in application source code. Second, if the application makes use of +this function somewhere but the application developer has +misconfigured the system and disabled this functionality anyway then +there will now be a compile-time error when building the application. +Note that other packages should not be affected, since they should +impose appropriate constraints on +CYGFUN_KERNEL_MUTEX_TIMEDLOCK if they use that +functionality (although of course some dependencies like this may get +missed by component developers).

An alternative approach would be:

extern bool cyg_mutex_timedlock(cyg_mutex_t*);

Effectively the header file is now lying about the functionality +provided by the package. The first result is that there is no longer a +dependency on the kernel configuration header. The second result is +that an application file using the timed-lock function will now +compile, but the application will fail to link. At this stage the +application developer still has to intervene, change the +configuration, and rebuild the system. However no application +recompilations are necessary, just a relink.

Theoretically it would be possible for a tool to analyze linker errors +and suggest possible configuration changes that would resolve the +problem, reducing the burden on the application developer. No such +tool is planned in the short term.

It is up to component writers to decide which of these two approaches +should be preferred. Note that it is not always possible to avoid +#include'ing a configuration header file in an +exported one, for example an option may affect a data structure rather +than just the presence or absence of a function. Issues like this will +vary from package to package.

Including Configuration Headers

Exported header files should avoid #include'ing +configuration header files unless absolutely necessary, to avoid +unnecessary rebuilding of both application code and other packages +when there are minor configuration changes. A +#include is needed only when a configuration option +affects the exported interface, or when it affects some implementation +details which is controlled by the header file such as whether or not +a particular function gets inlined.

There are a couple of ways in which the problem of unnecessary +rebuilding could be addressed. The first would require more +intelligent handling of header file dependency handling by the tools +(especially the compiler) and the build system. This would require +changes to various non-eCos tools. An alternative approach would be to +support finer-grained configuration header files, for example there +could be a file pkgconf/libc/inline.h controlling which +functions should be inlined. This could be achieved by some fairly +simple extensions to the component framework, but it makes it more +difficult to get the package header files and source code correct: +a C preprocessor #ifdef directive does not +distinguish between a symbol not being defined because the option is +disabled, or the symbol not being defined because the appropriate +configuration header file has not been #include'd. +It is likely that a cross-referencing tool would have to be developed +first to catch problems like this, before the component framework +could support finer-grained configuration headers.

Test Cases

Packages should normally come with one or more test cases. This allows +application developers to verify that a given package works correctly +on their particular hardware and in their particular configuration, +making it slightly more likely that they will attempt to find bugs in +their own code rather than automatically blaming the component +writers.

At the time of writing the application developer support for building +and running test cases via the component framework is under review and +likely to change. Currently each test case should consist of a single +C or C++ source file that can be compiled with the package's set of +compiler flags and linked like any application program. Each test case +should use the testing API defined by the infrastructure. A +magically-named calculated configuration option of the form +CYGPKG_<PACKAGE-NAME>_TESTS lists the test +cases.

Host-side Support

On occasion it would be useful for an eCos package to be shipped +with host-side support. This could take the form of an additional tool +needed to build that package. It could be an application intended to +communicate with the target-side package code and display monitoring +information. It could be a utility needed for running the package test +cases, especially in the case of device drivers. The component +framework does not yet provide any such support for host-side +software, and there are obvious issues related to portability to the +different machines that can be used for hosts. This issue may get +addressed in some future release. In some cases custom build steps can +be subverted to do things on the host side rather than the target +side, but this is not recommended.


PrevHomeNext
Package VersioningUpMaking a Package Distribution
\ No newline at end of file diff --git a/doc/html/cdl-guide/package.distrib.html b/doc/html/cdl-guide/package.distrib.html new file mode 100644 index 00000000..88ff2c64 --- /dev/null +++ b/doc/html/cdl-guide/package.distrib.html @@ -0,0 +1,629 @@ + + + + + + + + +Making a Package Distribution +
The eCos Component Writer's Guide
PrevChapter 2. Package OrganizationNext

Making a Package Distribution

Developers of new eCos packages are advised to distribute their +packages in the form of eCos package distribution files. Packages +distributed in this format may be added to existing eCos component +repositories in a robust manner using the Package Administration Tool. +This chapter describes the format of package distribution files and +details how to prepare an eCos package for distribution in this format.

The eCos package distribution file format

eCos package distribution files are gzipped GNU tar archives which +contain both the source code for one or more eCos packages and a +data file containing package information to be added to the component +repository database. The distribution files are subject to the +following rules:

  1. The data file must be named pkgadd.db and must be +located in the root of the tar archive. It must contain data in a +format suitable for appending to the eCos repository database +(ecos.db). the Section called Updating the ecos.db database in Chapter 3 +describes this data format. Note that a database consistency check is +performed by the eCos Administration Tool when +pkgadd.db has been appended to the database. Any +new target entries which refer to unknown packages will be removed at +this stage.

  2. The package source code must be placed in one or more <package-path>/<version> +directories in the tar archive, where each <package-path> +directory path is specified as the directory attribute of one of the +packages entries in pkgadd.db.

  3. An optional license agreement file named +pkgadd.txt may be placed in the root of the tar +archive. It should contain text with a maximum line length of 79 +characters. If this file exists, the contents will be presented to the +user during installation of the package. The eCos Package +Administration Tool will then prompt the user with the question +"Do you accept all the terms of the preceding license +agreement?". The user must respond +"yes" to this prompt in order to proceed with +the installation.

  4. Optional template files may be placed in one or more templates/<template_name> +directories in the tar archive. Note that such template files would be +appropriate only where the packages to be distributed have a complex +dependency relationship with other packages. Typically, a third party +package can be simply added to an eCos configuration based on an +existing core template and the provision of new templates would not be +appropriate. the Section called Templates in Chapter 6 contains more +information on templates.

  5. The distribution file must be given a .epk (not +.tar.gz) file extension. The +.epk file extension serves to distinguish eCos +package distributions files from generic gzipped GNU tar archives. It +also discourages users from attempting to extract the package from the +archive manually. The file browsing dialog of the eCos Package +Administration Tool lists only those files which have a +.epk extension.

  6. No other files should be present in the archive.

  7. Files in the tar archive may use LF or +CRLF line endings interchangably. The eCos +Administration Tool ensures that the installed files are given the +appropriate host-specific line endings.

  8. Binary files may be placed in the archive, but the distribution of +object code is not recommended. All binary files must be given a +.bin suffix in addition to any file extension they +may already have. For example, the GIF image file +myfile.gif must be named +myfile.gif.bin in the archive. The +.bin suffix is removed during file extraction and +is used to inhibit the manipulation of line endings by the eCos +Administration Tool.

Preparing eCos packages for distribution

Development of new eCos packages or new versions of existing eCos +packages will take place in the context of an existing eCos +component repository. This section details the steps involved in +extracting new packages from a repository and generating a +corresponding eCos package distribution file for distribution of the +packages to other eCos users. The steps required are as follows:

  1. Create a temporary directory $PKGTMP for manipulation of the package +distribution file contents and copy the source files of the new +packages into this directory, preserving the relative path to the +package. In the case of a new package at mypkg/current in the repository:

        $ mkdir -p $PKGTMP/mypkg
    +    $ cp -p -R $ECOS_REPOSITORY/mypkg/current $PKGTMP/mypkg

    Where more than one package is to be distributed in a single package +distribution file, copy each package in the above manner. Note that +multiple packages distributed in a single package distribution file +cannot be installed separately. Where such flexibility is required, +distribution of each new package in separate package distribution files +is recommended.

  2. Copy any template files associated with the distributed packages into +the temporary directory, preserving the relative path to the template. +For example:

        $ mkdir -p $PKGTMP/templates
    +    $ cp -p -R $ECOS_REPOSITORY/templates/mytemplate $PKGTMP/templates
  3. Remove any files from the temporary directory hierarchy which you do +not want to distribute with the packages (eg object files, CVS directories).

  4. Add a .bin suffix to the name of any binary +files. For example, if the packages contains GIF image files (*.gif) +for documentation purposes, such files must be renamed to *.gif.bin as +follows:

       $ find $PKGTMP -type f -name '*.gif' -exec mv {} {}.bin ';'

    The .bin suffix is removed during file extraction +and is used to inhibit the manipulation of line endings by the eCos +Package Administration Tool.

  5. Extract the package records for the new packages from the package +database file at $ECOS_REPOSITORY/ecos.db and +create a new file containing these records at +$PKGTMP/pkgadd.db (in the root of the temporary +directory hierarchy). Any target records which reference the +distributed packages must also be provided in pkgadd.db.

  6. Rename the version directories under $PKGTMP (typically current during development) to reflect +the versions of the packages you are distributing. For example, +version 1.0 of a package may use the version directory name v1_0:

        $ cd $PKGTMP/mypkg
    +    $ mv current v1_0

    the Section called Package Versioning describes the version naming +conventions.

  7. Rename any template files under $PKGTMP (typically +current.ect during development) to reflect the +version of the template you are distributing. For example, version 1.0 +of a template may use the filename v1_0.ect:

        $ cd $PKGTMP/templates/mytemplate
    +    $ mv current.ect v1_0.ect

    It is also important to edit the contents of the template file, changing +the version of each referenced package to match that of the packages you +are distributing. This step will eliminate version warnings during the +subsequent loading of the template.

  8. Optionally create a licence agreement file at +$PKGTMP/pkgadd.txt containing the licensing terms +under which you are distributing the new packages. Limit each line in +this file to a maximum of 79 characters.

  9. Create a GNU tar archive of the temporary directory hierarchy. By +convention, this archive would have a name of the form +<package_name>-<version>:

        $ cd $PKGTMP
    +    $ tar cf mypkg-1.0.tar *

    Note that non-GNU version of tar may create archive files which exhibit +subtle incompatibilities with GNU tar. For this reason, always use GNU +tar to create the archive file.

  10. Compress the archive using gzip and give the resulting file a +.epk file extension:

        $ gzip mypkg-1.0.tar
    +    $ mv mypkg-1.0.tar.gz mypkg-1.0.epk

    The resulting eCos package distribution file (*.epk) is in a compressed +format and may be distributed without further compression.


PrevHomeNext
Package Contents and LayoutUpThe CDL Language
\ No newline at end of file diff --git a/doc/html/cdl-guide/package.html b/doc/html/cdl-guide/package.html new file mode 100644 index 00000000..a3c7f9c3 --- /dev/null +++ b/doc/html/cdl-guide/package.html @@ -0,0 +1,368 @@ + + + + + + + + +Package Organization +
The eCos Component Writer's Guide
PrevNext

Chapter 2. Package Organization

For a package to be usable in the eCos component framework it must +conform to certain rules imposed by that framework. Packages must be +distributed in a form that is understood by the component repository +administration tool. There must be a top-level CDL script which +describes the package to the component framework. There are certain +limitations related to how a package gets built, so that the package +can still be used in a variety of host environments. In addition to +these rules, the component framework provides a number of guidelines. +Packages do not have to conform to the guidelines, but sticking to +them can simplify certain operations.

This chapter deals with the general organization of a package, for +example how to distinguish between private and exported header files. +Chapter 3 describes the CDL language. +Chapter 4 details the build process.

Packages and the Component Repository

All eCos installations include a component repository. This is a +directory structure for all installed packages. The component +framework comes with an administration tool that allows new packages +or new versions of a package to be installed, old packages to be +removed, and so on. The component repository includes a simple +database, maintained by the administration tool, which contains +details of the various packages.

Each package has its own little directory hierarchy within the +component repository. Keeping several packages in a single directory +is illegal. The error, infra and kernel packages all live at the +top-level of the repository. For other types of packages there are +some pre-defined directories: compat is used for compatibility +packages, which implement other interfaces such as µITRON or POSIX +using native eCos calls; hal +is used for packages that port eCos to different architectures or +platforms, and this directory is further organized on a +per-architecture basis; io is +intended for device drivers; language is used for language support +libraries, for example the C library. There are no strict rules +defining where new packages should get installed. Obviously if an +existing top-level directory such as compat is applicable then the new package +should go in there. If a new category is desirable then it is possible +to create a new sub-directory in the component repository. For +example, an organization planning to release a number of eCos +packages may want them all to appear below a sub-directory +corresponding to the organization's name — in the hope that +the name will not change too often. It is possible to add new packages +directly to the top-level of the component repository, but this should +be avoided.

The ecos.db file holds the component repository +database and is managed by the administration tool. The various +configuration tools read in this file when they start-up to obtain +information about the various packages that have been installed. When +developing a new package it is necessary to add some information to +the file, as described in the Section called Updating the ecos.db database in Chapter 3. The +templates directory holds +various configuration templates.

Note: Earlier releases of eCos came with two separate files, +targets and packages. The +ecos.db database replaces both of these.

Caution

The current ecos.db database does not yet provide +all of the information needed by the component framework. Its format +is subject to change in future releases, and the file may be replaced +completely if necessary. There are a number of other likely future +developments related to the component repository and the database. The +way targets are described is subject to change. Sometimes it is +desirable for component writers to do their initial development in a +directory outside the component repository, but there is no specific +support in the framework for that yet.


PrevHomeNext
Warnings Package Versioning
\ No newline at end of file diff --git a/doc/html/cdl-guide/package.png b/doc/html/cdl-guide/package.png new file mode 100644 index 00000000..69432a0f Binary files /dev/null and b/doc/html/cdl-guide/package.png differ diff --git a/doc/html/cdl-guide/package.versions.html b/doc/html/cdl-guide/package.versions.html new file mode 100644 index 00000000..02a3ce6f --- /dev/null +++ b/doc/html/cdl-guide/package.versions.html @@ -0,0 +1,433 @@ + + + + + + + + +Package Versioning +
The eCos Component Writer's Guide
PrevChapter 2. Package OrganizationNext

Package Versioning

Below each package directory there can be one or more version +sub-directories, named after the versions. This is a requirement of +the component framework: it must be possible for users to install +multiple versions of a package and select which one to use for any +given application. This has a number of advantages to users: most +importantly it allows a single component repository to be shared +between multiple users and multiple projects, as required; also it +facilitates experiments, for example it is relatively easy to try out +the latest version of some package and see if it makes any difference. +There is a potential disadvantage in terms of disk space. However +since eCos packages generally consist of source code intended for +small embedded systems, and given typical modern disk sizes, keeping a +number of different versions of a package installed will usually be +acceptable. The administration tool can be used to remove versions +that are no longer required.

The version current is special. Typically it +corresponds to the very latest version of the sources, obtained by +anonymous CVS. These sources may change frequently, unlike full +releases which do not change (or only when patches are produced). +Component writers may also want to work on the +current version.

All other subdirectories of a package correspond to specific releases +of that package. The component framework allows users to select the +particular version of a package they want to use, but by default the +most recent one will be used. This requires some rules for ordering +version numbers, a difficult task because of the wide variety of ways +in which versions can be identified.

  1. The version current is always considered to be +the most recent version.

  2. If the first character of both strings are either v +or V, these are skipped because it makes little +sense to enforce case sensitivity here. Potentially this could result +in ambiguity if there are two version directories +V1.0 and v1.0, but this will +match the confusion experienced by any users of such a package. +However if two subsequent releases are called V1.0 +and v1.1, e.g. because of a minor mix-up when +making the distribution file, then the case difference is ignored.

  3. Next the two version strings are compared one character at a time. +If both strings are currently at a digit then a string to number +conversion takes place, and the resulting numbers are compared. +For example v10 is a more recent release than +v2. If the two numbers are the same then processing +continues, so for v2b and v2c +the version comparison code would move on to b and +c.

  4. The characters dot ., hyphen - +and underscore _ are treated as equivalent +separators, so if one release goes out as v1_1 and +the next goes out as v1.2 the separator has no +effect.

  5. If neither string has yet terminated but the characters are different, +ASCII comparison is used. For example V1.1b is +more recent than v1.1alpha.

  6. If one version string terminates before the other, the current +character determines which is the more recent. If the other string is +currently at a separator character, for example +v1.3.1 and v1.3, then the former +is assumed to be a minor release and hence more recent than the +latter. If the other string is not at a separator character, for +example v1.3beta, then it is treated as an +experimental version of the v1.3 release and hence +older.

  7. There is no special processing of dates, so with two versions +ss-20000316 and ss-20001111 +the numerical values 20001111 and +20000316 determine the result: larger values are +more recent. It is suggested that the full year be used in such cases +rather than a shorthand like 00, to avoid +Y2100 problems.

  8. There is no limit on how many levels of versioning are used, so +there could in theory be a v3.1.4.1.5.9.2.7 release +of a package. However this is unlikely to be of benefit to typical +users of a package.

The version comparison rules of the component framework may not be +suitable for every version numbering scheme in existence, but they +should cope with many common cases.

Caution

There are some issues still to be resolved before it is possible to +combine the current sources available via +anonymous CVS and full releases of eCos and additional packages in +a single component repository. The first problem relates to the +ecos.db database: if a new package is added via +the CVS repository then this requires a database update, but the +administration tool is bypassed. The second problem arises if an +organization chooses to place its component repository under source +code control using CVS, in which case different directories will +belong to different CVS servers. These issues will be addressed in a +future release.


PrevHomeNext
Package OrganizationUpPackage Contents and Layout
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.active-if.html b/doc/html/cdl-guide/ref.active-if.html new file mode 100644 index 00000000..3949bb85 --- /dev/null +++ b/doc/html/cdl-guide/ref.active-if.html @@ -0,0 +1,428 @@ + + + + + + + + +active_if +
The eCos Component Writer's Guide
PrevNext

active_if

Name

Property active_if -- Allow additional control over the active state of an +option or other CDL entity.

Description

Configuration options or other entities may be either active or +inactive. Typically this is controlled by the option's location in the +overall hierarchy. Consider the option +CYGDBG_INFRA_DEBUG_PRECONDITIONS, which exists +below the component CYGDBG_USE_ASSERT. If the whole +component is disabled then the options it contains are inactive: there +is no point in enabling preconditions unless there is generic +assertion support; any requires constraints associated with +preconditions are irrelevant; any compile property or other +build-related property is ignored.

In some cases the hierarchy does not provide sufficient control over +whether or not a particular option should be active. For example, the +math library could have support for floating point exceptions which +is only worthwhile if the hardware implements appropriate +functionality, as specified by the architectural HAL. The relevant +math library configuration options should remain below the +CYGPKG_LIBM package in the overall hierarchy, but +should be inactive unless there is appropriate hardware support. In +cases like this an active_if property is appropriate.

Another common use of active_if properties is to avoid excessive +nesting in the configuration hierarchy. If some option B is only +relevant if option A is enabled, it is possible to turn A into a +component that contains B. However adding another level to the +hierarchy for a component which will contain just one entry may be +considered excessive. In such cases it is possible for B to have an +active_if dependency on A.

active_if takes a goal expression as argument. For details of goal +expression syntax see the Section called Goal Expressions in Chapter 3. In +most cases the goal expression will be very simple, often involving +just one other option, but more complicated expressions can be used +when appropriate. It is also possible to have multiple active_if +conditions in a single option, in which case all of the conditions +have to be satisfied if the option is to be active.

The active_if and requires properties have certain similarities, +but they serve a different purpose. Suppose there are two options A +and B, and option B relies on functionality provided by A. This could +be expressed as either active_if A or as +requires A. The points to note are:

  • If active_if A is used and A is disabled or +inactive, then graphical tools will generally prevent any attempt at +modifying B. For example the text for B could be grayed out, and the +associated checkbutton (if B is a boolean option) would be disabled. +If the user needs the functionality provided by option B then it is +necessary to go to option A first and manipulate it appropriately.

  • If requires A is used and A is disabled or +inactive, graphical tools will still allow B to be manipulated and +enabled. This would result in a new conflict which may get resolved +automatically or which may need user intervention.

  • If there are hardware dependencies then an active_if condition is +usually the preferred approach. There is no point in allowing the user +to manipulate a configuration option if the corresponding +functionality cannot possibly work on the currently-selected hardware. +Much the same argument applies to coarse-grained dependencies, for +example if an option depends on the presence of a TCP/IP stack then an +active_if CYGPKG_NET condition is appropriate: +it may be possible to satisfy the condition, but it requires the +fairly drastic step of loading another package; further more, if the +user wanted a TCP/IP stack in the configuration then it would probably +have been loaded already.

  • If option B exists to provide additional debugging information about +the functionality provided by A then again an active_if constraint +is appropriate. There is no point in letting users enable extra +debugging facilities for a feature that is not actually present.

  • The configuration system's inference engine will cope equally well +with active_if and requires properties. Suppose there is a +conflict because some third option depends on B. If B is +active_if A then the inference engine will +attempt to make A active and enabled, and then to enable B if +necessary. If B requires A then the inference +engine will attempt to enable B and resolve the resulting conflict by +causing A to be both active and enabled. Although the inference occurs +in a different order, in most cases the effect will be the same.

Example

# Do not provide extra semaphore debugging if there are no semaphores
+cdl_option CYGDBG_KERNEL_INSTRUMENT_BINSEM {
+    active_if CYGPKG_KERNEL_SYNCH
+    …
+}
+
+# Avoid another level in the configuration hierarchy
+cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE_RELAY {
+    active_if CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INHERITANCE_SIMPLE
+    …
+}
+
+# Functionality that is only relevant if another package is loaded
+cdl_option CYGSEM_START_UITRON_COMPATIBILITY {
+    active_if CYGPKG_UITRON
+    …
+}
+
+# Check that the hardware or HAL provide the appropriate functionality
+cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT {
+    active_if CYGINT_HAL_DEBUG_GDB_STUBS_BREAK
+    …
+}

See Also

Property requires.


PrevHomeNext
cdl_interfaceUpcalculated
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.calculated.html b/doc/html/cdl-guide/ref.calculated.html new file mode 100644 index 00000000..75bb1f9e --- /dev/null +++ b/doc/html/cdl-guide/ref.calculated.html @@ -0,0 +1,532 @@ + + + + + + + + +calculated +
The eCos Component Writer's Guide
PrevNext

calculated

Name

Property calculated -- Used if the current option's value is not user-modifiable, +but is calculated using a suitable CDL expression.

Description

In some cases it is useful to have a configuration option whose value +cannot be modified directly by the user. This can be achieved using a +calculated, which takes a CDL expression as argument (see the Section called Ordinary Expressions in Chapter 3 for a description of expression +syntax). The configuration system evaluates the expression when the +current package is loaded and whenever there is a change to any other +option referenced in the expression. The result depends on the +option's flavor:

flavor none

Options with this flavor have no value, so the calculated +property is not applicable.

flavor bool

If the expression evaluates to a non-zero result the option is +enabled, otherwise it is disabled.

flavor booldata

If the result of evaluating the expression is zero then the option is +disabled, otherwise the option is enabled and its value is the result.

flavor data

The value of the option is the result of evaluating the expression.

There are a number of valid uses for calculated options, and there are +also many cases where some other CDL facility would be more +appropriate. Valid uses of calculated options include the following:

  • On some target hardware a particular feature may be user-configurable, +while on other targets it is fixed. For example some processors can +operate in either big-endian or little-endian mode, while other +processors do not provide any choice. It is possible to have an +option CYGARC_BIGENDIAN which is calculated in +some architectural HAL packages but user-modifiable in others.

  • Calculated options can provide an alternative way for one package to +affect the behavior of another one. Suppose a package may provide two +possible implementations, a preferred one involving self-modifying +code and a slower alternative. If the system involves a ROM bootstrap +then the slower alternative must be used, but it would be +inappropriate to modify the startup option in every HAL to impose +constraints on this package. Instead it is possible to have a +calculated option whose value is +{ CYG_HAL_STARTUP == "ROM" }, +and which has appropriate consequences. Arguably this is a spurious +example, and it should be a user choice whether or not to use +self-modifying code with a default_value based on +CYG_HAL_STARTUP, but that is for the component +writer to decide.

  • Sometimes it should be possible to perform a particular test at +compile-time, for example by using a C preprocessor +#if construct. However the preprocessor has only +limited functionality, for example it cannot perform string +comparisons. CDL expressions are more powerful.

  • Occasionally a particular sub-expression may occur multiple times in +a CDL script. If the sub-expression is sufficiently complex then it +may be worthwhile to have a calculated option whose value is the +sub-expression, and then reference that calculated option in the +appropriate places.

Alternatives to using calculated options include the following:

  • CDL interfaces are a form of +calculated option intended as an abstraction mechanism. An interface +can be used to express the concept of any +scheduler, as opposed to a specific one such as the bitmap scheduler.

  • If a calculated option would serve only to add additional information +to a configuration header file, it may be possible to achieve the same +effect using a define_proc +property or one of the other properties related to header file +generation.

Tip: If the first entry in a calculated expression is a negative +number, for example calculated -1 then this +can be misinterpreted as an option instead of as part of the +expression. Currently the calculated property does not take any +options, but this may change in future. Option processing halts at the +sequence --, so the desired value can be expressed +safely using +calculated -- -1

Warning

Some of the CDL scripts in current eCos releases make excessive use +of calculated options. This is partly because the recommended +alternatives were not always available at the time the scripts were +written. It is also partly because there is still some missing +functionality, for example define_proc properties cannot yet access +the configuration data so it may be necessary to use calculated +properties to access the data and perform the desired manipulation via +a CDL expression. New scripts should use calculated options only in +accordance with the guidelines.

Note: For options with the booldata flavor the current CDL syntax does not +allow the enabled flag and the value to be calculated separately. +Functionality to permit this may be added in a future release.

Note: It has been suggested that having options which are not +user-modifiable is potentially confusing, and that a top-level +cdl_constant command should be added to the +language instead of or in addition to the calculated property. Such +a change is under consideration. However because the value of a +calculated option can depend on other options, it is not necessarily +constant.

Example

# A constant on some target hardware, perhaps user-modifiable on other
+# targets.
+cdl_option CYGNUM_HAL_RTC_PERIOD {
+    display       "Real-time clock period"
+    flavor        data
+    calculated    12500
+}

See Also

Properties default_value, +flavor and +legal_values,


PrevHomeNext
active_ifUpcompile
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.cdl-component.html b/doc/html/cdl-guide/ref.cdl-component.html new file mode 100644 index 00000000..a3c0ec55 --- /dev/null +++ b/doc/html/cdl-guide/ref.cdl-component.html @@ -0,0 +1,632 @@ + + + + + + + + +cdl_component +
The eCos Component Writer's Guide
PrevNext

cdl_component

Name

Command cdl_component -- Define a component, a collection of configuration options

Description

A component is a configuration option that can contain additional +options and sub-components. The body of a cdl_component can contain +the same properties as that of a cdl_option. There is an additional +property, script which allows configuration data to be split into +multiple files. It is also possible for a component body to include +cdl_component, cdl_option and cdl_interface entities that should +go below this component in the configuration hierarchy.

cdl_component is implemented as a Tcl command that takes two +arguments, a name and a body. The name must be a valid C preprocessor +identifier: a sequence of upper or lower case letters, digits or +underscores, starting with a non-digit character; identifiers +beginning with an underscore should normally be avoided because they +may clash with system packages or with identifiers reserved for use by +the compiler. Within a single configuration, names must be unique. If +a configuration contained two packages which defined the same entity +CYGIMP_SOME_OPTION, any references to that entity +in a requires property or any other expression would be ambiguous. +It is possible for a given name to be used by two different packages +if those packages should never be loaded into a single configuration. +For example, architectural HAL packages are allowed to re-use certain +names because a single configuration cannot target two different +architectures. For a recommended naming convention see the Section called Package Contents and Layout in Chapter 2.

The second argument to cdl_component is a body of properties and +other commands, typically surrounded by braces so that the Tcl +interpreter treats it as a single argument. This body will be +processed by a recursive invocation of the Tcl interpreter, extended +with additional commands for the various properties that are allowed +inside a cdl_component. The valid commands are:

active_if

Allow additional control over the active state of this component.

calculated

The component's value is not directly user-modifiable, it is calculated +using a suitable CDL expression.

cdl_component

Define a sub-component.

cdl_interface

Define an interface which should appear immediately below this +component in the configuration hierarchy.

cdl_option

Define a configuration option which should appear immediately below +this component in the configuration hierarchy.

compile

List the source files that should be built if this component is active +and enabled.

default_value

Provide a default value for this component using a CDL expression.

define

Specify additional #define symbols that should go +into the owning package's configuration header file.

define_format

Control how the component's value will appear in the configuration header +file.

define_proc

Use a fragment of Tcl code to output additional data to +configuration header files.

description

Provide a textual description for this component.

display

Provide a short string describing this component.

doc

The location of on-line documentation for this component.

flavor

Specify the nature of this component.

if_define

Output a common preprocessor construct to a configuration header file.

implements

Enabling this component provides one instance of a more general +interface.

legal_values

Impose constraints on the possible values for this component.

make

An additional custom build step associated with this component, resulting +in a target that should not go directly into a library.

make_object

An additional custom build step associated with this component, resulting +in an object file that should go into a library.

no_define

Suppress the normal generation of a preprocessor +#define symbol in a configuration header file.

parent

Control the location of this component in the configuration hierarchy.

requires

List constraints that the configuration should satisfy if this component is +active and enabled.

script

Include additional configuration information from another +CDL script

Example

cdl_component CYGDBG_USE_ASSERTS {
+    display       "Use asserts"
+    default_value 1
+    description   "
+        If this component is enabled, assertions in the code are
+        tested at run-time. Assert functions (CYG_ASSERT()) are
+        defined in 'include/cyg/infra/cyg_ass.h' within the 'install'
+        tree. If the component is disabled, these result in no
+        additional object code and no checking of the asserted
+        conditions."
+    script        assert.cdl
+}

See Also

Command cdl_option, +command cdl_package, +command cdl_interface.


PrevHomeNext
cdl_optionUpcdl_package
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.cdl-interface.html b/doc/html/cdl-guide/ref.cdl-interface.html new file mode 100644 index 00000000..b3b0423a --- /dev/null +++ b/doc/html/cdl-guide/ref.cdl-interface.html @@ -0,0 +1,697 @@ + + + + + + + + +cdl_interface +
The eCos Component Writer's Guide
PrevNext

cdl_interface

Name

Command cdl_interface -- Define an interface, functionality that can be provided by +a number of different implementations.

Description

An interface is a special type of calculated configuration option. +It provides an abstraction mechanism that is often useful in CDL +expressions. As an example, suppose that some package relies on the +presence of code that implements the standard kernel scheduling +interface. However the requirement is no more stringent than this, so +the constraint can be satisfied by the mlqueue scheduler, the bitmap +scheduler, or any additional schedulers that may get implemented in +future. A first attempt at expressing the dependency might be:

    requires CYGSEM_KERNEL_SCHED_MLQUEUE || CYGSEM_KERNEL_SCHED_BITMAP

This constraint is limited, it may need to be changed if a new +scheduler were to be added to the system. Interfaces provide a way of +expressing more general relationships:

    requires CYGINT_KERNEL_SCHEDULER

The interface CYGINT_KERNEL_SCHEDULER is +implemented by both the mlqueue and bitmap +schedulers, and may be implemented by future schedulers as well. The +value of an interface is the number of implementors that are active +and enabled, so in a typical configuration only one scheduler will be +in use and the value of the interface will be 1. If +all schedulers are disabled then the interface will have a value +0 and the requires constraint will not be +satisfied.

Some component writers may prefer to use the first requires +constraint on the grounds that the code will only have been tested +with the mlqueue and bitmap schedulers and cannot be guaranteed to +work with any new schedulers. Other component writers may take a more +optimistic view and assume that their code will work with any +scheduler until proven otherwise.

Interfaces must be defined in CDL scripts, just like options, +components and packages. This involves the command cdl_interface +which takes two arguments, a name and a body. The name must be a valid +C preprocessor identifier: a sequence of upper or lower case letters, +digits or underscores, starting with a non-digit character; +identifiers beginning with an underscore should normally be avoided +because they may clash with system packages or with identifiers +reserved for use by the compiler. Within a single configuration, names +must be unique. If a configuration contained two packages which +defined the same entity CYGIMP_SOME_OPTION, any +references to that entity in a requires property or any other +expression would be ambiguous. It is possible for a given name to be +used by two different packages if those packages should never be +loaded into a single configuration. For example, architectural HAL +packages are allowed to re-use names because a single configuration +cannot target two different architectures. For a recommended naming +convention see the Section called Package Contents and Layout in Chapter 2.

The second argument to cdl_interface is a body of properties, +typically surrounded by braces so that the Tcl interpreter treats it +as a single argument. This body will be processed by a recursive +invocation of the Tcl interpreter, extended with additional commands +for the various properties that are allowed inside a cdl_interface. +The valid properties are a subset of those for a cdl_option.

active_if

Allow additional control over the active state of this interface.

compile

List the source files that should be built if this interface is active.

define

Specify additional #define symbols that should go +into the owning package's configuration header file.

define_format

Control how the interface's value will appear in the configuration header +file.

define_proc

Use a fragment of Tcl code to output additional data to +configuration header files.

description

Provide a textual description for this interface.

display

Provide a short string describing this interface.

doc

The location of on-line documentation for this interface.

flavor

Interfaces have the data flavor by default, but +they can also be given the bool or +booldata flavor when necessary. A +bool interface is disabled if there are no active +and enabled implementors, otherwise it is enabled. A +booldata interface is also disabled if there are no +active and enabled implementors, otherwise it is enabled and the data +is a number corresponding to the number of these implementors.

if_define

Output a common preprocessor construct to a configuration header file.

implements

If this interface is active it provides one instance of a more general +interface.

legal_values

Interfaces always have a small numerical value. The legal_values can +be used to apply additional constraints such as an upper limit.

make

An additional custom build step associated with this option, resulting +in a target that should not go directly into a library.

make_object

An additional custom build step associated with this option, resulting +in an object file that should go into a library.

no_define

Suppress the normal generation of a preprocessor +#define symbol in a configuration header file.

parent

Control the location of this option in the configuration hierarchy.

requires

List constraints that the configuration should satisfy if this option is +active and enabled.

A number of properties are not applicable to interfaces:

calculated

Interfaces are always calculated, based on the number of active and +enabled entities that implement the interface.

default_value

Interface values are calculated so a default_value property would be +meaningless.

Interfaces are not containers, so they cannot hold other entities such +as options or components.

A commonly used constraint on interface values takes the form:

    requires CYGINT_KERNEL_SCHEDULER == 1

This constraint specifies that there can be only one scheduler in the +system. In some circumstances it is possible for the configuration +tools to detect this pattern and act accordingly, so for example +enabling the bitmap scheduler would automatically disable the mlqueue +scheduler.

Example

cdl_interface CYGINT_KERNEL_SCHEDULER {
+    display  "Number of schedulers in this configuration"
+    requires 1 == CYGINT_KERNEL_SCHEDULER
+}

See Also

Property implements, +command cdl_option. +command cdl_component, +command cdl_package.


PrevHomeNext
cdl_packageUpactive_if
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.cdl-option.html b/doc/html/cdl-guide/ref.cdl-option.html new file mode 100644 index 00000000..b9adb59f --- /dev/null +++ b/doc/html/cdl-guide/ref.cdl-option.html @@ -0,0 +1,564 @@ + + + + + + + + +cdl_option +
The eCos Component Writer's Guide
PrevNext

cdl_option

Name

Command cdl_option -- Define a single configuration option

Description

The option is the basic unit of configurability. Generally each option +corresponds to a single user choice. Typically there is a certain +amount of information associated with an option to assist the user in +manipulating that option, for example a textual description. There +will also be some limits on the possible values that the user can +choose, so an option may be a simple yes-or-no choice or it may be +something more complicated such as an array size or a device name. +Options may have associated constraints, so if that option is enabled +then certain conditions have to satisfied elsewhere in the +configuration. Options usually have direct consequences such as +preprocessor #define symbols in a configuration +header file.

cdl_option is implemented as a Tcl command that takes two arguments, +a name and a body. The name must be a valid C preprocessor identifier: +a sequence of upper or lower case letters, digits or underscores, +starting with a non-digit character; identifiers beginning with an +underscore should normally be avoided because they may clash with +system packages or with identifiers reserved for use by the compiler. +Within a single configuration, names must be unique. If a +configuration contained two packages which defined the same entity +CYGIMP_SOME_OPTION, any references to that entity +in a requires property or any other expression +would be ambiguous. It is possible for a given name to be used by two +different packages if those packages should never be loaded into a +single configuration. For example, architectural HAL packages are +allowed to re-use names because a single configuration cannot target +two different architectures. For a recommended naming convention see +the Section called Package Contents and Layout in Chapter 2.

The second argument to cdl_option is a body of +properties, typically surrounded by braces so that the Tcl interpreter +treats it as a single argument. This body will be processed by a +recursive invocation of the Tcl interpreter, extended with additional +commands for the various properties that are allowed inside a +cdl_option. The valid properties are:

active_if

Allow additional control over the active state of this option.

calculated

The option's value is not directly user-modifiable, it is calculated +using a suitable CDL expression.

compile

List the source files that should be built if this option is active +and enabled.

default_value

Provide a default value for this option using a CDL expression.

define

Specify additional #define symbols that should go +into the owning package's configuration header file.

define_format

Control how the option's value will appear in the configuration header +file.

define_proc

Use a fragment of Tcl code to output additional data to +configuration header files.

description

Provide a textual description for this option.

display

Provide a short string describing this option.

doc

The location of on-line documentation for this option.

flavor

Specify the nature of this option.

if_define

Output a common preprocessor construct to a configuration header file.

implements

Enabling this option provides one instance of a more general +interface.

legal_values

Impose constraints on the possible values for this option.

make

An additional custom build step associated with this option, resulting +in a target that should not go directly into a library.

make_object

An additional custom build step associated with this option, resulting +in an object file that should go into a library.

no_define

Suppress the normal generation of a preprocessor +#define symbol in a configuration header file.

parent

Control the location of this option in the configuration hierarchy.

requires

List constraints that the configuration should satisfy if this option is +active and enabled.

Example

cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS {
+    display       "Preconditions"
+    default_value 1
+    description   "
+        This option allows individual control of preconditions.
+        A precondition is one type of assert, which it is
+        useful to control separately from more general asserts.
+        The function is CYG_PRECONDITION(condition,msg)."
+}

See Also

Command cdl_component, +command cdl_package, +command cdl_interface.


PrevHomeNext
CDL Language SpecificationUpcdl_component
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.cdl-package.html b/doc/html/cdl-guide/ref.cdl-package.html new file mode 100644 index 00000000..c7268795 --- /dev/null +++ b/doc/html/cdl-guide/ref.cdl-package.html @@ -0,0 +1,706 @@ + + + + + + + + +cdl_package +
The eCos Component Writer's Guide
PrevNext

cdl_package

Name

Command cdl_package -- Define a package, a component that can be distributed

Description

A package is a unit of distribution. It is also a configuration option +in that users can choose whether or not a particular package is loaded +into the configuration, and which version of that package should be +loaded. It is also a component in that it can contain additional +components and options in a hierarchy.

The top-level CDL script for a package should begin with a cdl_package +command. This can contain most of the properties that can be used in a +cdl_option command, and a number of additional ones which apply to a +package as a whole. It is also possible to include cdl_component, +cdl_interface and cdl_option commands in the body of a package. +However all configuration entities that occur at the top level of the +script containing the cdl_package command are automatically placed +below that package in the configuration hierarchy, so putting them +inside the body has no effect.

The following properties cannot be used in the body of a cdl_package +command:

flavor

Packages always have the flavor booldata.

default_value

The value of a package is its version number. This is specified at the +time the package is loaded into the configuration, and cannot be +calculated afterwards. Typically the most recent version of the +package will be loaded.

legal_values

The legal values list for a given package is determined by which +versions of that package are installed in the component repository, +and cannot be further constrained in the CDL scripts.

calculated

The value of a package is always selected at the time that it is +loaded into the configuration, and cannot be re-calculated afterwards.

script

This would be redundant since the CDL script containing the +cdl_package command acts as that package's script.

cdl_package is implemented as a Tcl command that takes two +arguments, a name and a body. The name must be a valid C preprocessor +identifier: a sequence of upper or lower case letters, digits or +underscores, starting with a non-digit character; identifiers +beginning with an underscore should normally be avoided because they +may clash with system packages or with identifiers reserved for use by +the compiler. Packages should always have unique names within a given +component repository. For a recommended naming convention see the Section called Package Contents and Layout in Chapter 2.

The second argument to cdl_package is a body of properties and other +commands, typically surrounded by braces so that the Tcl interpreter +treats it as a single argument. This body will be processed by a +recursive invocation of the Tcl interpreter, extended with additional +commands for the various properties that are allowed inside a +cdl_package. The valid commands are:

active_if

Allow additional control over the active state of this package.

cdl_component

Define a component which should appear immediately below this package +in the configuration hierarchy.

cdl_interface

Define an interface which should appear immediately below this +package in the configuration hierarchy.

cdl_option

Define an option which should appear immediately below +this package in the configuration hierarchy.

compile

List the source files that should be built for this package.

define

Specify additional #define symbols that should go +into the package's configuration header file.

define_format

Control how the package's value will appear in the global +configuration header file pkgconf/system.h

define_header

Specify the configuration header file that will be generated for this package.

define_proc

Use a fragment of Tcl code to output additional data to +configuration header files.

description

Provide a textual description for this component.

display

Provide a short string describing this component.

doc

The location of on-line documentation for this component.

hardware

This package is tied to specific hardware.

if_define

Output a common preprocessor construct to a configuration header file.

implements

Enabling this component provides one instance of a more general +interface.

include_dir

Specify the desired location of this package's exported header files in +the install tree.

include_files

List the header files that are exported by this package.

library

Specify which library should contain the object files +generated by building this package.

make

An additional custom build step associated with this component, resulting +in a target that should not go directly into a library.

make_object

An additional custom build step associated with this component, resulting +in an object file that should go into a library.

no_define

Suppress the normal generation of the package's +#define in the global configuration header file +pkgconf/system.h.

parent

Control the location of this package in the configuration hierarchy.

requires

List constraints that the configuration should satisfy if this package is +active.

Example

cdl_package CYGPKG_INFRA {
+    display       "Infrastructure"
+    include_dir   cyg/infra
+    description   "
+        Common types and useful macros.
+        Tracing and assertion facilities.
+        Package startup options." 
+
+    compile startup.cxx prestart.cxx pkgstart.cxx userstart.cxx      \
+            dummyxxmain.cxx null.cxx simple.cxx fancy.cxx buffer.cxx \
+            diag.cxx tcdiag.cxx memcpy.c memset.c delete.cxx
+}

See Also

Command cdl_option, +command cdl_component, +command cdl_interface.


PrevHomeNext
cdl_componentUpcdl_interface
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.compile.html b/doc/html/cdl-guide/ref.compile.html new file mode 100644 index 00000000..8db4d041 --- /dev/null +++ b/doc/html/cdl-guide/ref.compile.html @@ -0,0 +1,460 @@ + + + + + + + + +compile +
The eCos Component Writer's Guide
PrevNext

compile

Name

Property compile -- List the source files that should be built if this option +is active and enabled.

Description

The compile property allows component developers to specify source +files which should be compiled and added to one of the target +libraries. Usually each source file will end up the library +libtarget.a. It is possible for component writers +to specify an alternative library for an entire package using the +library property. Alternatively +the desired library can be specified on the compile line itself. For +example, to add a particular source file to the +libextras.a library the following could be used:

cdl_package CYGPKG_IO_SERIAL {
+    …
+    compile -library=libextras.a common/tty.c
+}

Details of the build process including such issues as compiler flags +and the order in which things happen can be found in +Chapter 4.

compile properties can occur in any of cdl_option, +cdl_component, cdl_package or cdl_interface. A compile +property has effect if and only if the entity that contains it is +active and enabled. Typically the body of a cdl_package will define +any source files that need to be built irrespective of individual +options, and each cdl_component, cdl_option, and cdl_interface +will define source files that are more specific. A single compile +property can list any number of source files, all destined for the +same library. A cdl_option or other entity can contain multiple +compile properties, each of which can specify a different library. +It is possible for a given source file to be specified in compile +properties for several different options, in which case the source +file will get built if any of these options are active and enabled.

If the package follows the directory +layout conventions then the configuration tools will search for +the specified source files first in the +src subdirectory of the +package, then relative to the package directory itself.

Note: A shortcoming of the current specification of compile properties is +that there is no easy way to specify source files that should be built +unless an option is enabled. It would sometimes be useful to be able +to say: “if option A is enabled then compile +file x.c, otherwise compile file +y.c. There are two simple ways of achieving this:

  • Always compile y.c, typically by listing it in +the body of the cdl_package, but use +#ifndef A to produce an empty object file if +option A is not enabled. This has the big +disadvantage that the file always gets compiled and hence for some +configurations builds will take longer than necessary.

  • Use a calculated option whose value is !A, and +have a compile y.c property in its body. This +has the big disadvantage of adding another calculated option to the +configuration.

It is likely that this will be resolved in the future, possibly by +using some sort of expression as the argument to a compile property.

Note: Currently it is not possible to control the priority of a compile +property, in other words the order in which a file gets compiled +relative to other build steps. This functionality might prove useful +for complicated packages and should be added.

Example

cdl_package CYGPKG_INFRA {
+    display       "Infrastructure"
+    include_dir   cyg/infra
+    description   "
+        Common types and useful macros.
+        Tracing and assertion facilities.
+        Package startup options." 
+
+    compile startup.cxx prestart.cxx pkgstart.cxx userstart.cxx \
+            dummyxxmain.cxx memcpy.c memset.c delete.cxx \
+            diag.cxx tcdiag.cxx
+}

See Also

Properties make, +make_object and +library.


PrevHomeNext
calculatedUpdefault_value
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.default-value.html b/doc/html/cdl-guide/ref.default-value.html new file mode 100644 index 00000000..014d48ad --- /dev/null +++ b/doc/html/cdl-guide/ref.default-value.html @@ -0,0 +1,540 @@ + + + + + + + + +default_value +
The eCos Component Writer's Guide
PrevNext

default_value

Name

Property default_value -- Provide a default value for this option using a CDL expression.

Description

The default_value property allows the initial value of a +configuration option to depend on other configuration options. The +arguments to the property should be a CDL expression, see +the Section called Ordinary Expressions in Chapter 3 for the syntactic details. +In many cases a simple constant value will suffice, for example:

cdl_component CYGPKG_KERNEL_EXCEPTIONS {
+    …
+    default_value 1
+
+    cdl_option CYGSEM_KERNEL_EXCEPTIONS_DECODE {
+        …
+        default_value 0
+    }
+}

However it is also possible for an option's default value to depend on +other options. For example the common HAL package provides some +support functions that are needed by the eCos kernel, but are +unlikely to be useful if the kernel is not being used. This +relationship can be expressed using:

cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT {
+    ...
+    default_value CYGPKG_KERNEL
+}

If the kernel is loaded then this HAL option is automatically enabled, +although the user can still disable it explicitly should this prove +necessary. If the kernel is not loaded then the option is disabled, +although it can still be enabled by the user if desired. +default_value expressions can be more complicated than this if +appropriate, and provide a very powerful facility for component +writers who want their code to “just do the right thing” +in a wide variety of configurations.

The CDL configuration system evaluates the default_value +expression when the current package is loaded and whenever there is a +change to any other option referenced in the expression. The result +depends on the option's flavor:

flavor none

Options with this flavor have no value, so the default_value +property is not applicable.

flavor bool

If the expression evaluates to a non-zero result the option is +enabled by default, otherwise it is disabled.

flavor booldata

If the result of evaluating the expression is zero then the option is +disabled, otherwise the option is enabled and its value is the result.

flavor data

The default value of the option is the result of evaluating the +expression.

A cdl_option or other entity can have at most one default_value +property, and it is illegal to have both a calculated and a +default_value property in one body. If an option does not have +either a default_value or a calculated property and it does not +have the flavor none then the configuration tools +will assume a default value expression of 0.

On occasion it is useful to have a configuration option +A which has both a requires constraint on some +other option B and a default_value expression of +B. If option B is not enabled +then A will also be disabled by default and no +conflict arises. If B is enabled then +A also becomes enabled and again no conflict +arises. If a user attempts to enable B but not +A then there will be a conflict. Users should be +able to deduce that the two options are closely interlinked and should +not be manipulated independently except in very unusual circumstances.

Tip: If the first entry in a default_value expression is a negative +number, for example default_value -1 then this +can be misinterpreted as an option instead of as part of the +expression. Currently the default_value property does not take any +options, but this may change in future. Option processing halts at the +sequence --, so the desired value can be expressed +safely using +default_value -- -1

Note: In many cases it would be useful to calculate default values using +some global preferences, for example:

cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST {
+    …
+    default_value CYGGLO_CODESIZE > CYGGLO_SPEED
+}

Such global preference options do not yet exist, but are likely to be +added in a future version.

Note: For options with the booldata flavor the current syntax does not allow +the default values of the enabled flag and the value to be controlled +separately. Functionality to permit this may be added in a future +release.

Example

cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT {
+    display       "Include GDB multi-threading debug support"
+    requires      CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
+    default_value CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
+    description   "
+        This option enables some extra HAL code which is needed
+        to support multi-threaded source level debugging."
+}

See Also

Properties calculated, +flavor and +legal_values.


PrevHomeNext
compileUpdefine
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.define-format.html b/doc/html/cdl-guide/ref.define-format.html new file mode 100644 index 00000000..5dbd2b78 --- /dev/null +++ b/doc/html/cdl-guide/ref.define-format.html @@ -0,0 +1,398 @@ + + + + + + + + +define_format +
The eCos Component Writer's Guide
PrevNext

define_format

Name

Property define_format -- Control how an option's value will appear in the +configuration header file.

Description

For active options with the data flavor, and for +active and enabled options with the booldata +flavor, the configuration tools will normally generate two +#define's in the package's configuration header +file. These take the following forms:

#define <name> <value>
+#define <name>_<value>

The define_format property can be used to control exactly what +appears as the value for the first of these +#define's. For example, the following can be used +to output some configuration data as a C string:

cdl_option <name> {
+    …
+    define -format="\\\"%s\\\"" <symbol>
+}

The implementation of define_format involves concatenating the Tcl +command format, the format string, and the string +representation of the option's value, and evaluating this in a Tcl +interpreter. Therefore the format string will be processed twice by a +Tcl parser, and appropriate care has to be taken with quoting.

The second #define will be generated only if is a +valid C preprocessor macro symbol, and is not affected by the +define_format property. Also, the property is only relevant for +options with the data or +booldata flavor, and cannot be used in +conjunction with the no_define property since it makes no sense to +specify the format if no #define is generated.

Caution

Because the Tcl interpreter's format command is +used, this property is subject to any problems with the implementation +of this in the Tcl library. Generally there should be no problems with +string data or with integers up to 32 bits, but there may well be +problems if 64-bit data is involved. This issue may be addressed in a +future release.

Example

cdl_option CYGNUM_UITRON_VER_ID     {
+    display       "OS identification"
+    flavor        data
+    legal_values  0 to 0xFFFF
+    default_value 0
+    define_format "0x%04x"
+    description   "
+        This value is returned in the 'id'
+        field of the T_VER structure in
+        response to a get_ver() system call."
+}

See Also

Properties define, +define_header, +define_proc, +if_define and +no_define.


PrevHomeNext
defineUpdefine_header
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.define-header.html b/doc/html/cdl-guide/ref.define-header.html new file mode 100644 index 00000000..95397065 --- /dev/null +++ b/doc/html/cdl-guide/ref.define-header.html @@ -0,0 +1,353 @@ + + + + + + + + +define_header +
The eCos Component Writer's Guide
PrevNext

define_header

Name

Property define_header -- Specify the configuration header file that +will be generated for a given package.

Description

When the configuration tools generate a build tree, one of the steps +is to output each package's configuration data to a header file. For +example the kernel's configuration data gets output to +pkgconf/kernel.h. This allows +each package's source code to #include the +appropriate header file and adapt to the choices made by the user.

By default the configuration tools will synthesize a file name from +the package name. This involves removing any prefix such as +CYGPKG_, up to and including the first underscore, +and then converting the remainder of the name to lower case. In some +cases it may be desirable to use a different header file, for example +an existing package may have been ported to eCos and the source code +may already #include a particular file for +configuration data. In such cases a define_header property can be +used to specify an alternative filename.

The define_header property can only be used in the body of a +cdl_package command. It applies to a package as a whole and cannot +be used at a finer grain. The name specified in a define_header +property will always be interpreted as relative to the +include/pkgconf sub-directory +of the install tree.

Note: For hardware-specific packages such as device drivers and HAL +packages, the current scheme of generating a configuration header file +name based on the package name may be abandoned. Instead all hardware +packages would send their configuration data to a single header file, +pkgconf/hardware.h. This would +make it easier for code to obtain details of the current hardware, but +obviously there are compatibility issues. For now it is recommended +that all hardware packages specify their configuration header file +explicitly.

Example

cdl_package CYGPKG_HAL_ARM {
+    display       "ARM architecture"
+    parent        CYGPKG_HAL
+    hardware
+    include_dir   cyg/hal
+    define_header hal_arm.h
+    …
+}

See Also

Properties define, +define_format, +define_proc, +if_define, +no_define and +hardware,


PrevHomeNext
define_formatUpdefine_proc
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.define-proc.html b/doc/html/cdl-guide/ref.define-proc.html new file mode 100644 index 00000000..80d6952d --- /dev/null +++ b/doc/html/cdl-guide/ref.define-proc.html @@ -0,0 +1,408 @@ + + + + + + + + +define_proc +
The eCos Component Writer's Guide
PrevNext

define_proc

Name

Property define_proc -- Use a fragment of Tcl code to output additional data to +configuration header files.

Description

For most configuration options it is sufficient to have an entry in +the configuration header file of the form:

#define <name> <value>

In some cases it is desirable to perform some more complicated +processing when generating a configuration header file. There are a +number of CDL properties for this, including define_format and +if_define. The most flexible is define_proc: this allows the +component writer to specify a Tcl script that gets invoked whenever +the configuration system generates the header file for the owning +package. The script can output anything to the header file, for +example it could generate a C data structure based on various +configuration values.

At the point that the define_proc script is invoked there will be +two channels to open files, accessible via Tcl variables: +cdl_header is a channel to the current package's +own header file for example +pkgconf/kernel.h; +cdl_system_header is a channel to the global +configuration file +pkgconf/system.h. A typical +define_proc script will use the puts command to +output data to one of these channels.

define_proc properties only take effect if the current option is +active and enabled. The default behavior of the configuration system +for an option with the bool flavor corresponds to +the following define_proc:

    cdl_option XXX {
+        …
+        define_proc {
+            puts $cdl_header "#define XXX 1"
+        }
+}

Warning

In the current implementation it is not possible for a define_proc +property to examine the current values of various configuration +options and adapt accordingly. This is a major limitation, and will be +addressed in future versions of the configuration tools.

Example

cdl_package CYGPKG_HAL_ARM_PID {
+    display       "ARM PID evaluation board"
+    parent        CYGPKG_HAL_ARM
+    define_header hal_arm_pid.h
+    include_dir   cyg/hal
+    hardware
+
+    define_proc {
+        puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H   <pkgconf/hal_arm.h>"
+        puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_arm_pid.h>"
+        puts $::cdl_header ""
+        puts $::cdl_header "#define HAL_PLATFORM_CPU    \"ARM 7TDMI\""
+        puts $::cdl_header "#define HAL_PLATFORM_BOARD  \"PID\""
+        puts $::cdl_header "#define HAL_PLATFORM_EXTRA  \"\""
+        puts $::cdl_header ""
+    }
+    …
+}

See Also

Properties define, +define_format, +define_header, +if_define and +no_define.


PrevHomeNext
define_headerUpdescription
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.define.html b/doc/html/cdl-guide/ref.define.html new file mode 100644 index 00000000..c429068e --- /dev/null +++ b/doc/html/cdl-guide/ref.define.html @@ -0,0 +1,544 @@ + + + + + + + + +define +
The eCos Component Writer's Guide
PrevNext

define

Name

Property define -- Specify additional #define symbols that +should go into the owning package's configuration header file.

Description

Normally the configuration system generates a single +#define for each option that is active and enabled, +with the defined symbol being the name of the option. These +#define's go to the package's own configuration +header file, for example pkgconf/kernel.h +for kernel configuration options. For the majority of options this is +sufficient. Sometimes it is useful to have more control over which +#define's get generated.

The define property can be used to generate an addition +#define if the option is both active and enabled, +for example:

cdl_option CYGNUM_LIBC_STDIO_FOPEN_MAX {
+    …
+    define FOPEN_MAX
+}

If this option is given the value 40 then the following +#define's will be generated in the configuration +header pkgconf/libc.h:

#define CYGNUM_LIBC_STDIO_FOPEN_MAX 40
+#define FOPEN_MAX 40

The default #define can be suppressed if desired +using the no_define property. This is useful if the symbol should +only be defined in +pkgconf/system.h and not in +the package's own configuration header file. The value that will be +used for this #define is the same as for the +default one, and depends on the option's flavor as follows:

flavor none

Options with this flavor are always enabled and have no value, so the +constant 1 will be used.

flavor bool

If the option is disabled then no #define will be +generated. Otherwise the constant 1 will be used.

flavor booldata

If the option is disabled then no #define will be +generated. Otherwise the option's current value will be used.

flavor data

The option's current value will be used.

For active options with the data flavor, and for +active and enabled options with the booldata +flavor, either one or two #define's will be +generated. These take the following forms:

#define <symbol> <value>
+#define <symbol>_<value>

For the first #define it is possible to control the +format used for the value using a +-format=<format> option. For example, the +following can be used to output some configuration data as a C string:

cdl_option <name> {
+    …
+    define -format="\\\"%s\\\"" <symbol>
+}

The implementation of this facility involves concatenating the +Tcl command format, the format string, and the +string representation of the option's value, and evaluating this in a +Tcl interpreter. Therefore the format string will be processed twice +by a Tcl parser, and appropriate care has to be taken with quoting.

The second #define will be generated only if is a +valid C preprocessor macro symbol. By default the symbols generated by +define properties will end up in the package's own configuration +header file. The -file option can be used to +specify an alternative destination. At the time of writing the only +valid alternative definition is -file=system.h, +which will send the output to the global configuration header file +pkgconf/system.h.

Caution

Care has to be taken with the -format option. +Because the Tcl interpreter's format command is +used, this property is subject to any problems with the implementation +of this in the Tcl library. Generally there should be no problems with +string data or with integers up to 32 bits, but there may well be +problems if 64-bit data is involved. This issue may be addressed in a +future release.

Example

cdl_component CYG_HAL_STARTUP {
+    display       "Startup type"
+    flavor        data
+    legal_values  {"RAM" "ROM" }
+    default_value {"RAM"}
+    no_define
+    define -file=system.h CYG_HAL_STARTUP
+    …
+}

PrevHomeNext
default_valueUpdefine_format
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.description.html b/doc/html/cdl-guide/ref.description.html new file mode 100644 index 00000000..dd6bb97f --- /dev/null +++ b/doc/html/cdl-guide/ref.description.html @@ -0,0 +1,293 @@ + + + + + + + + +description +
The eCos Component Writer's Guide
PrevNext

description

Name

Property description -- Provide a textual description for an option.

Description

Users can only be expected to manipulate configuration options +sensibly if they are given sufficient information about these options. +There are three properties which serve to explain an option in plain +text: the display property gives a textual alias for an option, +which is usually more comprehensible than something like +CYGPKG_LIBC_TIME_ZONES; the description property +gives a longer description, typically a paragraph or so; the doc +property specifies the location of additional on-line documentation +related to a configuration option. In the context of a graphical tool +the display string will be the primary way for users to identify +configuration options; the description paragraph will be visible +whenever the option is selected; the on-line documentation will only +be accessed when the user explicitly requests it.

At present there is no way of providing any sort of formatting mark-up +in a description. It is possible that future versions of the +configuration tools will provide some control over the way the +description text gets rendered.

Example

cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE {
+    display       "Use trace text"
+    default_value 1
+    description   "
+        All trace calls within eCos contain a text message
+        which should give some information about the circumstances.
+        These text messages will end up being embedded in the
+        application image and hence there is a significant penalty
+        in terms of image size.
+        It is possible to suppress the use of these messages by
+        disabling this option.
+        This results in smaller code size, but there is less
+        human-readable information available in the trace output,
+        possibly only filenames and line numbers."
+}

See Also

Properties display and +doc.


PrevHomeNext
define_procUpdisplay
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.display.html b/doc/html/cdl-guide/ref.display.html new file mode 100644 index 00000000..067234ff --- /dev/null +++ b/doc/html/cdl-guide/ref.display.html @@ -0,0 +1,285 @@ + + + + + + + + +display +
The eCos Component Writer's Guide
PrevNext

display

Name

Property display -- Provide a short string describing this option.

Description

Users can only be expected to manipulate configuration options +sensibly if they are given sufficient information about these options. +There are three properties which serve to explain an option in plain +text: the display property gives a textual alias for an option, +which is usually more comprehensible than something like +CYGPKG_LIBC_TIME_ZONES; the description property +gives a longer description, typically a paragraph or so; the doc +property specifies the location of additional on-line documentation +related to a configuration option. In the context of a graphical tool +the display string will be the primary way for users to identify +configuration options; the description paragraph will be visible +whenever the option is selected; the on-line documentation will only +be accessed when the user explicitly requests it.

Example

cdl_option CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE {
+    display       "Message box queue size"
+    flavor        data
+    legal_values  1 to 65535
+    default_value 10
+    description   "
+        This configuration option controls the number of messages
+        that can be queued in a message box before a non-blocking
+        put() operation will fail or a blocking put() operation will
+        block. The cost in memory is one pointer per message box for
+        each possible message."
+}

See Also

Properties description and +doc.


PrevHomeNext
descriptionUpdoc
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.doc.html b/doc/html/cdl-guide/ref.doc.html new file mode 100644 index 00000000..3e98af8d --- /dev/null +++ b/doc/html/cdl-guide/ref.doc.html @@ -0,0 +1,340 @@ + + + + + + + + +doc +
The eCos Component Writer's Guide
PrevNext

doc

Name

Property doc -- The location of online-documentation for a configuration option.

Description

Users can only be expected to manipulate configuration options +sensibly if they are given sufficient information about these options. +There are three properties which serve to explain an option in plain +text: the display property gives a textual alias for an option, +which is usually more comprehensible than something like +CYGPKG_LIBC_TIME_ZONES; the description property +gives a longer description, typically a paragraph or so; the doc +property specifies the location of additional on-line documentation +related to a configuration option. In the context of a graphical tool +the display string will be the primary way for users to identify +configuration options; the description paragraph will be visible +whenever the option is selected; the on-line documentation will only +be accessed when the user explicitly requests it.

The documentation may be an absolute URL, but more generally the +on-line documentation will be shipped with the package and can be +accessed via a relative URL. If the package follows the directory layout conventions then +the configuration tools will search for the specified html file +first in the doc subdirectory +of the package, then relative to the package directory itself. The URL +may contain a # character to specify an anchor +within a page.

Warning

At the time of writing the eCos packages in the standard +distribution do not conform to the directory layout conventions when +it comes to the documentation. Instead of organizing the documentation +on a per-package basis and placing it in the corresponding +doc sub-directories, all the +documentation is kept in a central location. This should get addressed +in a future release of the system. Third party component writers +should follow the layout conventions.

Example

cdl_package CYGPKG_KERNEL {
+    display       "eCos kernel"
+    doc           ref/ecos-ref.4.html
+    include_dir   cyg/kernel
+    description   "
+        This package contains the core functionality of the eCos
+        kernel. It relies on functionality provided by various HAL
+        packages and by the eCos infrastructure. In turn the eCos
+        kernel provides support for other packages such as the device
+        drivers and the uITRON compatibility layer."
+    …
+}

See Also

Properties description and +display.


PrevHomeNext
displayUpflavor
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.flavor.html b/doc/html/cdl-guide/ref.flavor.html new file mode 100644 index 00000000..222ba323 --- /dev/null +++ b/doc/html/cdl-guide/ref.flavor.html @@ -0,0 +1,550 @@ + + + + + + + + +flavor +
The eCos Component Writer's Guide
PrevNext

flavor

Name

Property flavor -- Specify the nature of a configuration option.

Description

The state of a CDL configuration option is a somewhat complicated +concept. This state determines what happens when a build tree is +generated: it controls what files get built and what +#define's end up in configuration header files. The +state also controls the values used during expression evaluation. The +key concepts are:

  1. An option may or may not be loaded into the current configuration. +However it is still possible for packages to reference options which +are not loaded in a requires constraint or other expression. If an +option is not loaded then it will have no direct effect on the build +process, and 0 will be used for expression +evaluation.

  2. Even if an option is loaded it may still be inactive. Usually this is +controlled by the option's location in the configuration hierarchy. If +an option's parent is active and enabled then the option will normally +be active. If the parent is either inactive or disabled then the +option will be inactive. For example, if kernel timeslicing is diabled +then the option CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS +is irrelevant and must have no effect. The active_if property can be +used to specify additional constraints. If an option is inactive then +it will have no direct effect on the build process, in other words it +will not cause any files to get built or #define's +to be generated. For the purposes of expression evaluation an inactive +option has a value of 0.

  3. An option may be enabled or disabled. Most options are boolean in +nature, for example a particular function may get inlined or it may +involve a full procedure call. If an option is disabled then it has no +direct effect on the build process, and for the purposes of expression +evaluation it has a value of 0.

  4. An option may also have additional data associated with it, for +example a numerical value used to control the size of an array.

Most options are boolean in nature and do not have any additional +associated data. For some options only the data part makes sense and +users should be unable to manipulate the enabled/disabled part of the +state. For a comparatively small number of options it makes sense to +have the ability to disable that option or to enable it and associate +data as well. Finally, when constructing an option hierarchy it is +occasionally useful to have entities which serve only as placeholders. +The flavor property can be used to control all this. There are four +possible values. It should be noted that the active or inactive state +of an option takes priority over the flavor: if an option is inactive +then no #define's will be generated and any +build-related properties such as compile will be ignored.

flavor none

The none is intended primarily for placeholder +components in the hierarchy, although it can be used for other +purposes. Options with this flavor are always enabled and do not have +any additional data associated with them, so there is no way for users +to modify the option. For the purposes of expression evaluation an +option with flavor none always has the value +1. Normal #define processing +will take place, so typically a single #define will +be generated using the option name and a value of +1. Similarly build-related properties such as +compile will take effect.

flavor bool

Boolean options can be either enabled or disabled, and there is no +additional data associated with them. If a boolean option is disabled +then no #define will be generated and any +build-related properties such as compile will be ignored. For the +purposes of expression evaluation a disabled option has the value +0. If a boolean option is enabled then normal +#define processing will take place, all +build-related properties take effect, and the option's value will be +1.

flavor data

Options with this flavor are always enabled, and have some additional +data associated with them which can be edited by the user. This data +can be any sequence of characters, although in practice the +legal_values property will often be used to impose constraints. In +appropriate contexts such as expressions the configuration tools will +attempt to interpret the data as integer or floating point numbers. +Since an option with the data flavor cannot be +disabled, normal #define processing takes place and +the data will be used for the value. Similarly all build-related +properties take effect, and the option's value for the purposes of +expression evaluation is the data.

flavor booldata

This combines the bool and data +flavors. The option may be enabled or disabled, and in addition the +option has some associated data. If the option is disabled then no +#define will be generated, the build-related +properties have no effect, and for the purposes of expression +evaluation the option's value is 0. If the option +is enabled then a #define will be generated using +the data as the value, all build-related properties take effect, and +the option's value for the purposes of expression evaluation is the +data. If 0 is legal data then it is not possible to +distinguish this case from the option being disabled or inactive.

Options and components have the bool flavor by +default, but this can be changed as desired. Packages always have the +booldata flavor, and this cannot be changed. +Interfaces have the data flavor by default, since +the value of an interface is a count of the number of active and +enabled interfaces, but they can be given the bool +or booldata flavors.

Note: The expression syntax needs to be extended to allow the loaded, +active, enabled and data aspects of an option's state to be examined +individually. This would allow component writers to distinguish +between a disabled booldata option and an enabled +one which has a value of 0. Such an enhancement to +the expression syntax may also prove useful in other circumstances.

Example


cdl_component CYGPKG_LIBM_COMPATIBILITY {
+
+    cdl_component CYGNUM_LIBM_COMPATIBILITY {
+        flavor booldata
+        …
+
+        cdl_option CYGNUM_LIBM_COMPAT_DEFAULT {
+            flavor data
+            …
+        }
+    }
+
+    …
+}
+
+cdl_component CYGPKG_LIBM_TRACE {
+    flavor        bool
+    …
+}

See Also

Properties calculated, +default_value and +legal_values,


PrevHomeNext
docUphardware
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.hardware.html b/doc/html/cdl-guide/ref.hardware.html new file mode 100644 index 00000000..a1cf9aed --- /dev/null +++ b/doc/html/cdl-guide/ref.hardware.html @@ -0,0 +1,289 @@ + + + + + + + + +hardware +
The eCos Component Writer's Guide
PrevNext

hardware

Name

Property hardware -- Specify that a package is tied to specific hardware.

Description

Some packages such as device drivers and HAL packages are +hardware-specific, and generally it makes no sense to add such +packages to a configuration unless the corresponding hardware is +present on your target system. Typically hardware package selection +happens automatically when you select your target. The hardware +property can be used in the body of a cdl_package command to +indicate that the package is hardware-specific.

Note: At the time of writing the hardware property is largely ignored by +the configuration tools, but this may change in future. Amongst other +possible changes, for hardware-specific packages such as device +drivers and HAL packages, the current scheme of generating a +configuration header file name based purely on the package name may be +abandoned. Instead all hardware packages would send their +configuration data to a single header file, pkgconf/hardware.h. This would make it +easier for code to obtain details of the current hardware, but +obviously there are compatibility issues. For now it is recommended +that all hardware packages specify their configuration header file +explicitly.

Example

cdl_package CYGPKG_HAL_ARM {
+    display       "ARM architecture"
+    parent        CYGPKG_HAL
+    hardware
+    include_dir   cyg/hal
+    define_header hal_arm.h
+    …
+}

See Also

Property define_header, and +command cdl_package.


PrevHomeNext
flavorUpif_define
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.if-define.html b/doc/html/cdl-guide/ref.if-define.html new file mode 100644 index 00000000..8b4e6769 --- /dev/null +++ b/doc/html/cdl-guide/ref.if-define.html @@ -0,0 +1,494 @@ + + + + + + + + +if_define +
The eCos Component Writer's Guide
PrevNext

if_define

Name

Property if_define -- Output a common preprocessor construct to a configuration +header file.

Description

The purpose of the if_define property is best explained by an +example. Suppose you want finer-grained control over assertions, say +on a per-package or even a per-file basis rather than globally. The +assertion macros can be defined by an exported header file in an +infrastructure package, using code like the following:

#ifdef CYGDBG_USE_ASSERTS
+# define CYG_ASSERT( _bool_, _msg_ )    \
+        CYG_MACRO_START                 \
+        if ( ! ( _bool_ ) )             \
+            CYG_ASSERT_DOCALL( _msg_ ); \
+        CYG_MACRO_END
+#else
+# define CYG_ASSERT( _bool_, _msg_ ) CYG_EMPTY_STATEMENT
+#endif

Assuming this header file is #include'd directly or +indirectly by any code which may need to be built with assertions +enabled, the challenge is now to control whether or not +CYGDBG_USE_ASSERTS is defined for any given source +file. This is the purpose of the if_define property:

cdl_option CYGDBG_KERNEL_USE_ASSERTS {
+    …
+    if_define CYGSRC_KERNEL CYGDBG_USE_ASSERTS
+    requires  CYGDBG_INFRA_ASSERTION_SUPPORT
+}

If this option is active and enabled then the kernel's configuration +header file would end up containing the following:

#ifdef CYGSRC_KERNEL
+# define CYGDBG_USE_ASSERTS 1
+#endif

Kernel source code can now begin with the following construct:

#define CYGSRC_KERNEL 1
+#include <pkgconf/kernel.h>
+#include <cyg/infra/cyg_ass.h>

The configuration option only affects kernel source code, assuming +nothing else #define's the symbol +CYGSRC_KERNEL. If the per-package assertion option +is disabled then CYGDBG_USE_ASSERTS will not get +defined. If the option is enabled then +CYGDBG_USE_ASSERTS will get defined and assertions +will be enabled for the kernel sources. It is possible to use the same +mechanism for other facilities such as tracing, and to apply it at a +finer grain such as individual source files by having multiple options +with if_define properties and multiple symbols such as +CYGSRC_KERNEL_SCHED_BITMAP_CXX.

The if_define property takes two arguments, both of which must be +valid C preprocessor symbols. If the current option is active and +enabled then three lines will be output to the configuration header +file:

#ifdef <symbol1>
+# define <symbol2>
+#endif

If the option is inactive or disabled then these lines will not be +output. By default the current package's configuration header file +will be used, but it is possible to specify an alternative destination +using a -file option. At present the only +legitimate alternative destination is system.h, the +global configuration header. if_define processing happens in +addition to, not instead of, the normal #define +processing or the handling of other header-file related properties.

Note: The infrastructure in the current eCos release does not yet work +this way. In future it may do so, and the intention is that suitable +configuration options get generated semi-automatically by the +configuration system rather than having to be defined explicitly.

Tip: As an alternative to changing the configuration, updating the build +tree, and so on, it is possible to enable assertions by editing a +source file directly, for example:

#define CYGSRC_KERNEL 1
+#define CYGDBG_USE_ASSERTS 1
+#include <pkgconf/kernel.h>
+#include <cyg/infra/cyg_ass.h>

The assertion header file does not care whether +CYGDBG_USE_ASSERTS is #define'd +via a configuration option or by explicit code. This technique can be +useful to component writers when debugging their source code, although +care has to be taken to remove any such #define's +later on.

Example

cdl_option CYGDBG_KERNEL_USE_ASSERTS {
+    display "Assertions in the kernel package"
+    …
+    if_define CYGSRC_KERNEL CYGDBG_USE_ASSERTS
+    requires  CYGDBG_INFRA_ASSERTION_SUPPORT
+}

See Also

Properties define, +define_format, +define_header, +define_proc and +no_define.


PrevHomeNext
hardwareUpimplements
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.implements.html b/doc/html/cdl-guide/ref.implements.html new file mode 100644 index 00000000..7a81b691 --- /dev/null +++ b/doc/html/cdl-guide/ref.implements.html @@ -0,0 +1,272 @@ + + + + + + + + +implements +
The eCos Component Writer's Guide
PrevNext

implements

Name

Property implements -- Enabling this option provides one instance of a more +general interface.

Description

The CDL interface concept provides an abstraction mechanism that can +be useful in many different circumstances. Essentially an interface is +a calculated option whose value is the number of active and enabled +options which implement that interface. For example the interface +CYGINT_KERNEL_SCHEDULER has a value corresponding +to the number of schedulers in the system, typically just one.

The implements property takes a single argument, which should be the +name of an interface. This interface may be defined in the same +package as the implementor or in some other package. In the latter +case it may sometimes be appropriate for the implementor or the +implementor's package to have a requires property for the package +containing the interface. An option may contain multiple implements +properties. It is possible for an option to implement a given +interface multiple times, and on occasion this is actually useful.

Example

cdl_option CYGSEM_KERNEL_SCHED_MLQUEUE {
+    display       "Multi-level queue scheduler"
+    default_value 1
+    implements    CYGINT_KERNEL_SCHEDULER
+    …
+}

See Also

Command cdl_interface.


PrevHomeNext
if_defineUpinclude_dir
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.include-dir.html b/doc/html/cdl-guide/ref.include-dir.html new file mode 100644 index 00000000..0c4f5803 --- /dev/null +++ b/doc/html/cdl-guide/ref.include-dir.html @@ -0,0 +1,340 @@ + + + + + + + + +include_dir +
The eCos Component Writer's Guide
PrevNext

include_dir

Name

Property include_dir -- Specify the desired location of a package's exported +header files in the install tree.

Description

Most packages export one or more header files defining their public +interface. For example the C library exports header files such as +stdio.h and +ctype.h. +If the package follows the directory +layout conventions then the exported header files will normally +be found in the package's +include sub-directory. +Alternatively the include_files property can be used to specify +which header files should be exported.

By default a package's exported header files will be copied to +the include sub-directory of +the install tree. This is correct for packages like the C library +because that is the correct location for files such as +stdio.h. However to reduce the +probability of name clashes it is desirable for packages to use +different sub-directories, for example infrastructure header files get +copied to include/cyg/infra +rather than to the top-level +include directory itself.

It would be possible to replicate these sub-directories in each +package's source tree, such that the infrastructure header file +sources lived in +include/cyg/infra in the source +tree as well as in the install tree. This would make things more +difficult for the package developers. Instead it is possible to +specify the desired install tree sub-directory using an include_dir +property, for example include_dir cyg/infra.

The include_dir property can only be used in the body of a +cdl_package command, since it applies to all of the header files +exported by a package, and only one include_dir property can be +used. If there is no include_dir property then exported header files +will end up in the top-level include +directory of the install tree.

Example

cdl_package CYGPKG_INFRA {
+    display       "Infrastructure"
+    include_dir   cyg/infra
+    description   "
+        Common types and useful macros.
+        Tracing and assertion facilities.
+        Package startup options."
+    …
+}

See Also

Property include_files, and +command cdl_package.


PrevHomeNext
implementsUpinclude_files
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.include-files.html b/doc/html/cdl-guide/ref.include-files.html new file mode 100644 index 00000000..ab41ca65 --- /dev/null +++ b/doc/html/cdl-guide/ref.include-files.html @@ -0,0 +1,318 @@ + + + + + + + + +include_files +
The eCos Component Writer's Guide
PrevNext

include_files

Name

Property include_files -- List the header files that are exported by a package.

Description

Most packages export one or more header files defining their public +interface. For example the C library exports header files such as +stdio.h and +ctype.h. +If the package follows the directory +layout conventions then the exported header files will normally +be found in the package's +include sub-directory. For +packages which do not follow these conventions, typically simple ones +for which a complicated sub-directory hierarchy is undesirable, there +has to be an alternative way of specifying which header file or files +define the public interface. The include_files property provides +support for this.

By default, if a package does not have an +include subdirectory and it +does not have an include_files property then all files with a suffix +of .h, .hxx, +.inl or .inc will be treated as +public header files. However some of these may be private files +containing implementation details. If there is an +include_files property then only the files listed in that property +will be exported.

If a package should not export any header files but does contain +private implementation headers, an include_files property with no +arguments should be used.

Example

cdl_package <SOME_PACKAGE> {
+    …
+    include_dir   <some directory>
+    include_files interface.h
+}
+
+cdl_package <ANOTHER_PACKAGE> {
+    …
+    include_files
+}

See Also

Property include_dir, and +command cdl_package.


PrevHomeNext
include_dirUplegal_values
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.legal-values.html b/doc/html/cdl-guide/ref.legal-values.html new file mode 100644 index 00000000..0c60092e --- /dev/null +++ b/doc/html/cdl-guide/ref.legal-values.html @@ -0,0 +1,397 @@ + + + + + + + + +legal_values +
The eCos Component Writer's Guide
PrevNext

legal_values

Name

Property legal_values -- Impose constraints on the possible values for an option.

Description

Options with the data or +booldata flavors can have an arbitrary sequence of +characters as their data. In nearly all cases some restrictions have +to be imposed, for example the data should correspond to a number +within a certain range, or it should be one of a small number of +constants. The legal_values property can be used to impose such +constraints. The arguments to the property should be a CDL list +expression, see the Section called List Expressions in Chapter 3 for the +syntactic details. Common examples include:

    legal_values 0 to 0x7fff
+    legal_values 9600 19200 38400
+    legal_values { "RAM" "ROM" }

The legal_values property can only be used for options with the +data or booldata flavors, since +it makes little sense to further constrain the legal values of a +boolean option. An option can have at most one legal_values +property.

Tip: If the first entry in a legal_values list expression is a negative +number, for example +legal_values -1 to 1 then this can +be misinterpreted as an option instead of as part of the expression. +Currently the legal_values property does not take any options, but +this may change in future. Option processing halts at the sequence +--, so the desired range can be expressed safely +using legal_values -- -1 to 1

Note: Architectural HAL packages should provide constants which can be used +in legal_values list expressions. For example it should be possible +to specify a numeric range such as +0 to CYGARC_MAXINT, rather than +hard-wiring numbers such as 0x7fffffff which may +not be valid on all targets. Current HAL packages do not define such +constants.

Note: The legal_values property is restricted mainly to numerical ranges +and simple enumerations, and cannot cope with more complicated data +items. Future versions of the configuration system will provide +additional data validation facilities, for example a +check_proc property which specifies a Tcl script +that can be used to perform the validation.

Example

cdl_option CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET {
+    display       "Default Standard Time offset"
+    flavor        data
+    legal_values  -- -90000 to 90000
+    default_value -- 0
+    description   "
+        This option controls the offset from UTC in
+        seconds when in local Standard Time. This
+        value can be positive or negative. It
+        can also be set at run time using the
+        cyg_libc_time_setzoneoffsets() function."
+}

See Also

Properties calculated, +default_value, and +flavor.


PrevHomeNext
include_filesUplibrary
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.library.html b/doc/html/cdl-guide/ref.library.html new file mode 100644 index 00000000..7974cdd0 --- /dev/null +++ b/doc/html/cdl-guide/ref.library.html @@ -0,0 +1,331 @@ + + + + + + + + +library +
The eCos Component Writer's Guide
PrevNext

library

Name

Property library -- Specify which library should contain the object files +generated by building this package.

Description

By default all object files that get built for all packages end up in +a single library, libtarget.a. This makes things +easier for the typical application developer because it is only +necessary to link with a single library, rather than with separate +libraries for each package. It is possible to specify an alternative +library for specific files as an option to the compile and +make_object properties, and there is one library libextras.a which serves a +specific purpose in the build system. The library property allows an +alternative library to be specified for all the object files that will +be generated for a given package.

The use of the library property should be avoided, since it makes +things more difficult for application developers. The property is +intended only for special cases, for example if there are legal +objections to mingling object files from different packages in a +single library. It could also be used to work around name clash +problems if two packages happen to define an exported symbol with the +same name, but any attempt to use multiple libraries in this way is +error-prone and should be avoided.

The library property takes a single argument, the name of a library, +which should follow the standard naming convention of +lib<something>.a. A library property can +only occur in the body of a cdl_package command and applies to all +object files generated for that package (except where explicitly +overwritten with a -library= option to one of the +build-related properties). A cdl_package body can contain at most +one library property.

Example

cdl_package <SOME_PACKAGE> {
+    …
+    library  libSomePackage.a
+}

See Also

Properties compile, +make, and +make_object, +command cdl_package.


PrevHomeNext
legal_valuesUpmake
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.make-object.html b/doc/html/cdl-guide/ref.make-object.html new file mode 100644 index 00000000..db2a7d43 --- /dev/null +++ b/doc/html/cdl-guide/ref.make-object.html @@ -0,0 +1,426 @@ + + + + + + + + +make_object +
The eCos Component Writer's Guide
PrevNext

make_object

Name

Property make_object -- Define a custom build step, resulting in an object file +that should go into a library.

Description

When building an eCos configuration the primary target is a single +library, libtarget.a. Most of the object files +which go into this library will be generated as a result of compile +properties. Occasionally it may be necessary to have special build +steps for a given object file, and this can be achieved with a +make_object property. The use of this property should be avoided +whenever possible because it greatly increases the risk of portability +problems, both on the host side because of possible problems with the +tools, and on the target side because a custom build step may not +allow adequately for the wide variety of architectures supported by +eCos.

The make_object property takes a single argument, which resembles a +makefile rule: it consists of a target, a list of dependencies, and +one or more commands that should be executed. The target should be an +object file. However the make_object argument is not a makefile +fragment, and custom build steps may get executed in build +environments that do not involve make. For full details of custom +build steps see the Section called Custom Build Steps in Chapter 4.

Warning

The exact syntax and limitations of custom build steps have not yet +been finalized, and may change in future versions of the +configuration tools.

The make_object property takes an optional library argument. If no +library is specified then the default library for the current package +will be used, which will be libtarget.a unless +the cdl_package command contains a library property.

The make_object property also takes an optional priority argument +indicating the order in which build steps take place. This priority +complements the dependency list, and avoids problems with packages +needing to know details of custom build steps in other packages (which +may change between releases). The defined order is:

Priority 0

The header files exported by the current set of packages are copied +to the appropriate places in the +include subdirectory of the +install tree. Any unnecessary copies are avoided, to prevent rebuilds +of package and application source modules caused by header file dependencies.

Note: A possible future enhancement of the build system may result in the +build and install trees being updated automatically if there has been +a change to the ecos.ecc configuration savefile.

Priority 100

All files specified in compile properties will get built, producing +the corresponding object files. In addition any custom build steps +defined by make_object properties get executed, unless there is a +-priority= option.

Priority 200

The libraries now get built using the appropriate object files.

Priority 300

Any custom build steps specified by make properties now get +executed, unless the priority for a particular build step is changed +from its default.

For example, if a custom build step needs to take place before any of +the normal source files get compiled then it should be given a +priority somewhere between 0 and 100. If a custom build step involves +post-processing an object file prior to its incorporation into a +library then a priority between 100 and 200 should be used. It is not +sensible to have a priority above 200, since that would imply building +an additional object file for a library that has already been created.

Example

cdl_option XXX {
+    …
+    make_object {
+        parser.o: parser.y
+                yacc $<
+                $(CC) $(CFLAGS) -o $@ y.tab.c
+    }
+}

See Also

Properties compile, +make and +library.


PrevHomeNext
makeUpno_define
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.make.html b/doc/html/cdl-guide/ref.make.html new file mode 100644 index 00000000..baf5bf7b --- /dev/null +++ b/doc/html/cdl-guide/ref.make.html @@ -0,0 +1,413 @@ + + + + + + + + +make +
The eCos Component Writer's Guide
PrevNext

make

Name

Property make -- Define an additional custom build step associated with an +option, resulting in a target that should not go directly into a library.

Description

When building an eCos configuration the primary target is a single +library, libtarget.a. In some cases it is +necessary to build some additional targets. For example architectural +HAL packages typically build a linker script and some start-up code. +Such additional targets can be specified by a make property. Any +option can have one or more make properties, although typically such +properties only occur in the body of a cdl_package command.

The make property takes a single argument, which resembles a +makefile rule: it consists of a target, a list of dependencies, and +one or more commands that should be executed. However the argument is +not a makefile fragment, and custom build steps may get executed in +build environments that do not involve make. For full details of +custom build steps see the Section called Custom Build Steps in Chapter 4.

Warning

The exact syntax and limitations of custom build steps have not yet +been finalized, and are subject to change in future versions of the +configuration tools.

The make property takes an optional priority argument indicating the +order in which build steps take place. This priority complements the +dependency list, and avoids problems with packages needing to know +details of custom build steps in other packages (which may change +between releases). The defined order is:

Priority 0

The header files exported by the current set of packages are copied +to the appropriate places in the +include subdirectory of the +install tree. Any unnecessary copies are avoided, to prevent rebuilds +of package and application source modules caused by header file dependencies.

Note: A possible future enhancement of the build system may result in the +build and install trees being updated automatically if there has been +a change to the ecos.ecc configuration savefile.

Priority 100

All files specified in compile properties will get built, producing +the corresponding object files. In addition any custom build steps +defined by make_object properties get executed, unless there is +a -priority= option.

Priority 200

The libraries now get built using the appropriate object files.

Priority 300

Any custom build steps specified by make properties now get +executed, unless the priority for a particular build step is changed +from its default.

For example, if a custom build step needs to take place before any of +the normal source files get compiled then it should be given a +priority somewhere between 0 and 100. If a custom build step involves +post-processing an object file prior to its incorporation into a +library then a priority between 100 and 200 should be used.

Example

cdl_package CYGPKG_HAL_MN10300_AM33 {
+    display       "MN10300 AM33 variant"
+    parent        CYGPKG_HAL_MN10300
+    implements    CYGINT_HAL_MN10300_VARIANT
+    hardware
+    include_dir   cyg/hal
+    define_header hal_mn10300_am33.h
+    description   "
+           The MN10300 AM33 variant HAL package provides generic
+           support for this processor architecture. It is also
+           necessary to select a specific target platform HAL
+           package."
+
+    make {
+        <PREFIX>/lib/target.ld: <PACKAGE>/src/mn10300_am33.ld
+        $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $<
+        @echo $@ ": \\" > $(notdir $@).deps
+        @tail +2 target.tmp >> $(notdir $@).deps
+        @echo >> $(notdir $@).deps
+        @rm target.tmp
+    }
+}

See Also

Properties compile, +make_object and +library.


PrevHomeNext
libraryUpmake_object
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.no-define.html b/doc/html/cdl-guide/ref.no-define.html new file mode 100644 index 00000000..83c6fa5d --- /dev/null +++ b/doc/html/cdl-guide/ref.no-define.html @@ -0,0 +1,326 @@ + + + + + + + + +no_define +
The eCos Component Writer's Guide
PrevNext

no_define

Name

Property no_define -- Suppress the normal generation of a preprocessor +#define symbol in a configuration header file.

Description

By default all active and enabled properties result in either one or +two #define'd symbols in the package's +configuration header file, and this is one of the main ways in which +options can affect packages at build-time. It is possible to suppress +the default #define's by specifying a +no_define property in the body of an option or other CDL entity. +This property takes no arguments and should occur only once in a given +body.

The no_define property is frequently used in conjunction with one of +the other header-file related properties such as define. If one of +the other properties is used to export the required information to a +configuration header file then often there is little point in +exporting the default #define as +well —  in fact there could be a name clash. The +no_define property can also be useful if the sole purpose of an +option is to affect which files get built, and the default +#define would never get tested in any source code. +However in such cases the default #define is +mostly harmless and there is little to be gained by suppressing it.

Example

cdl_component CYG_HAL_STARTUP {
+    display       "Startup type"
+    flavor        data
+    legal_values  { "RAM" "ROM" }
+    default_value {"RAM"}
+    no_define
+    define -file system.h CYG_HAL_STARTUP
+    …
+}

See Also

Properties define, +define_format, +define_header, +define_proc and +if_define.


PrevHomeNext
make_objectUpparent
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.parent.html b/doc/html/cdl-guide/ref.parent.html new file mode 100644 index 00000000..ae2c066b --- /dev/null +++ b/doc/html/cdl-guide/ref.parent.html @@ -0,0 +1,357 @@ + + + + + + + + +parent +
The eCos Component Writer's Guide
PrevNext

parent

Name

Property parent -- Control the location of an option in the configuration hierarchy.

Description

Configuration options live in a hierarchy of packages and components. +By default a given option's position in the hierarchy is a simple +consequence of its position within the CDL scripts. Packages are +generally placed at the top-level of the configuration. Any components +or options that are defined at the same level as the cdl_package +command in a package's top-level CDL script are placed immediately +below that package in the hierarchy. Any options or components that +are defined in the body of a cdl_package or cdl_component command, +or that are read in as a result of processing a component's script +property, will be placed immediately below that package or component +in the hierarchy.

In some circumstances it is useful to specify an alternative position +in the hierarchy for a given option. For example it is often +convenient to re-parent device driver packages below +CYGPKG_IO in the configuration hierarchy, thus +reducing the number of packages at the top level of the hierarchy and +making navigation easier. The parent property can be used to achieve +this.

The parent property takes a single argument, which should be the +name of a package or component. The body of a cdl_option or other +CDL entity can contain at most one parent property.

Although the parent property affects an option's position in the +overall hierarchy and hence whether or not that option is active, a +re-parented option still belongs to the package that defines it. By +default any #define's will be exported to that +package's configuration header file. Any compile properties can only +reference source files present in that package, and it is not directly +possible to cause some file in another package to be built by +re-parenting.

As a special case, if an empty string is specified for the parent then +the option is placed at the top of the hierarchy, ahead of any +packages which are not explicitly re-parented in this way. This +facility is useful for configuration options such as global +preferences and default compiler flags.

Tip: If an option is re-parented somewhere below another package and that +other package is not actually loaded, the option is an orphan and its +active/inactive state is undefined. In such cases it is a good idea +for the owning package to require the presence of the other one. +Unfortunately this technique does not work if a package as a whole is +reparented below another one that has not been loaded: the package is +orphaned so it may be automatically inactive, and hence any requires +properties would have no effect.

Example

cdl_package CYGPKG_HAL_I386 {
+    display       "i386 architecture"
+    parent        CYGPKG_HAL
+    hardware
+    include_dir   cyg/hal
+    define_header hal_i386.h
+    …
+}
+
+cdl_component CYGBLD_GLOBAL_OPTIONS {
+    display       "Global build options"
+    parent        ""
+    …
+}

See Also

Property script, +commands cdl_component and +cdl_package.


PrevHomeNext
no_defineUprequires
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.requires.html b/doc/html/cdl-guide/ref.requires.html new file mode 100644 index 00000000..cf8bfef8 --- /dev/null +++ b/doc/html/cdl-guide/ref.requires.html @@ -0,0 +1,304 @@ + + + + + + + + +requires +
The eCos Component Writer's Guide
PrevNext

requires

Name

Property requires -- List constraints that the configuration should satisfy if +a given option is active and enabled..

Description

Configuration options are not independent. For example the C library +can provide thread-safe implementations of certain functions, but only +if the kernel is present, if the kernel provides multi-threading, and +if the kernel options related to per-thread data are enabled. It is +possible to express such constraints using requires properties.

The arguments to a requires property should constitute a goal +expression, as described in the Section called List Expressions in Chapter 3. +Most goal expressions are relatively simple because the constraints +being described are simple, but complicated expressions can be used +when necessary. The body of an option or other CDL entity can contain +any number of requires constraints. If the option is active and +enabled then all these constraints should be satisfied, and any goal +expressions which evaluate to 0 will result in +conflicts being raised. It is possible for users to ignore such +conflicts and attempt to build the current configuration anyway, but +there is no guarantee that anything will work. If an option is +inactive or disabled then its requires constraints will be ignored.

The configuration system contains an inference engine which can +resolve many types of conflicts automatically. For example, if option +A is enabled and requires an option +B that is currently disabled then the inference +engine may attempt to resolve the conflict by enabling +B. However this will not always be possible, for +example there may be other constraints in the configuration which +force B to be disabled at present, in which case +user intervention is required.

Example

cdl_component CYGPKG_IO_SERIAL_POWERPC_COGENT_SERIAL_A {
+    display       "Cogent PowerPC serial port A driver"
+    flavor        bool
+    default_value 0
+    requires      (CYGIMP_KERNEL_INTERRUPTS_CHAIN || \
+                   !CYGPKG_IO_SERIAL_POWERPC_COGENT_SERIAL_B)
+    …
+}

See Also

Property active_if.


PrevHomeNext
parentUpscript
\ No newline at end of file diff --git a/doc/html/cdl-guide/ref.script.html b/doc/html/cdl-guide/ref.script.html new file mode 100644 index 00000000..a6886f7c --- /dev/null +++ b/doc/html/cdl-guide/ref.script.html @@ -0,0 +1,288 @@ + + + + + + + + +script +
The eCos Component Writer's Guide
PrevNext

script

Name

Property script -- Include additional configuration information from another +CDL script.

Description

It is possible to define all the configuration options and +sub-components for a given package in a single CDL script, either by +nesting them in the appropriate command bodies, by extensive use of +the parent property, or by some combination of these two. However +for large packages this is inconvenient and it is better to split the +raw configuration data over several different files. The script +property can be used to achieve this. It takes a single filename as +argument. If the package follows the directory layout conventions then +the configuration tools will look for the specified file in the +cdl sub-directory of the +package, otherwise it will look for the file relative to the package's +top-level directory.

The script property can only occur in the body of a cdl_componentcommand, and only one script property per body is allowed.

Example

cdl_component CYGPKG_UITRON_TASKS {
+    display      "Tasks"
+    flavor        none
+    description   "
+        uITRON Tasks are the basic blocks of multi-tasking
+        in the uITRON world; they are threads or lightweight
+        processes, sharing the address space and the CPU.
+        They communicate using the primitives outlined above.
+        Each has a stack, an entry point (a C or C++ function),
+        and (where appropriate) a scheduling priority."
+
+    script        tasks.cdl
+}

See Also

Command cdl_component, +and property parent.


PrevHomeNext
requiresUpTemplates, Targets and Other Topics
\ No newline at end of file diff --git a/doc/html/cdl-guide/reference.html b/doc/html/cdl-guide/reference.html new file mode 100644 index 00000000..4ab50a04 --- /dev/null +++ b/doc/html/cdl-guide/reference.html @@ -0,0 +1,439 @@ + + + + + + + + +CDL Language Specification +
The eCos Component Writer's Guide
PrevNext

Chapter 5. CDL Language Specification

Table of Contents
cdl_option -- Define a single configuration option
cdl_component -- Define a component, a collection of configuration options
cdl_package -- Define a package, a component that can be distributed
cdl_interface -- Define an interface, functionality that can be provided by +a number of different implementations.
active_if -- Allow additional control over the active state of an +option or other CDL entity.
calculated -- Used if the current option's value is not user-modifiable, +but is calculated using a suitable CDL expression.
compile -- List the source files that should be built if this option +is active and enabled.
default_value -- Provide a default value for this option using a CDL expression.
define -- Specify additional #define symbols that +should go into the owning package's configuration header file.
define_format -- Control how an option's value will appear in the +configuration header file.
define_header -- Specify the configuration header file that +will be generated for a given package.
define_proc -- Use a fragment of Tcl code to output additional data to +configuration header files.
description -- Provide a textual description for an option.
display -- Provide a short string describing this option.
doc -- The location of online-documentation for a configuration option.
flavor -- Specify the nature of a configuration option.
hardware -- Specify that a package is tied to specific hardware.
if_define -- Output a common preprocessor construct to a configuration +header file.
implements -- Enabling this option provides one instance of a more +general interface.
include_dir -- Specify the desired location of a package's exported +header files in the install tree.
include_files -- List the header files that are exported by a package.
legal_values -- Impose constraints on the possible values for an option.
library -- Specify which library should contain the object files +generated by building this package.
make -- Define an additional custom build step associated with an +option, resulting in a target that should not go directly into a library.
make_object -- Define a custom build step, resulting in an object file +that should go into a library.
no_define -- Suppress the normal generation of a preprocessor +#define symbol in a configuration header file.
parent -- Control the location of an option in the configuration hierarchy.
requires -- List constraints that the configuration should satisfy if +a given option is active and enabled..
script -- Include additional configuration information from another +CDL script.

This chapter contains reference information for the main CDL +commands cdl_option, cdl_component, cdl_package and +cdl_interface, followed by the various properties such as +active_if and compile in alphabetical order.


PrevHomeNext
Building Test Cases cdl_option
\ No newline at end of file diff --git a/doc/html/cdl-guide/repo.png b/doc/html/cdl-guide/repo.png new file mode 100644 index 00000000..599a62ba Binary files /dev/null and b/doc/html/cdl-guide/repo.png differ diff --git a/doc/html/cdl-guide/version.png b/doc/html/cdl-guide/version.png new file mode 100644 index 00000000..5b0f4faa Binary files /dev/null and b/doc/html/cdl-guide/version.png differ diff --git a/doc/html/ecos.gif b/doc/html/ecos.gif new file mode 100644 index 00000000..3dad40ce Binary files /dev/null and b/doc/html/ecos.gif differ diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 00000000..ed02e9a5 --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,24 @@ + + +eCos 2.0 Documentation + + +
eCos +

eCos 2.0 Documentation

+
+ +

Master Index

+ + +

Downloads

+ + + + diff --git a/doc/html/ref/aaed2000.html b/doc/html/ref/aaed2000.html new file mode 100644 index 00000000..1f91bdb6 --- /dev/null +++ b/doc/html/ref/aaed2000.html @@ -0,0 +1,707 @@ + + + + + + + + +ARM/ARM9 Agilent AAED2000 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/ARM9 Agilent AAED2000

Initial Installation Method

It is possible to install RedBoot in one of two ways. Either as +the primary bootmonitor on the board (installed to blocks 0-1 of the +flash) or as the secondary bootmonitor on the board (installed to +blocks 1-2 of the flash).

Presently, only the former method is supported.

RedBoot as Primary Bootmonitor

RedBoot is installed in flash using the on-board ARM Boot +Monitor.

Boot the board while pressing SPACE. This should bring up the +Boot Monitor: +
ARM bootPROM [Version 1.3] Rebuilt on Jul 16 2001 at 16:21:36                   
+Running on a P920 board Evaluation Board                                        
+Board Revision V1.0, ARM920T processor Processor                                
+Memory Size is 32MBytes, Flash Size is 32MBytes                                 
+Copyright (c) ARM Limited 1999 - 2001. All rights reserved.                     
+Board designed by ARM Limited                                                   
+Hardware support provided at http://www.arm.com/                                
+For help on the available commands type ? or h                                  
+boot Monitor >                                                                  
+ +Download the RAM mode image of RedBoot configured as a primary +bootmonitor using the ARM bootmonitor's SREC-download command: + +
boot Monitor > m
+Load Motorola S-Record image into memory and execute it
+The S-Record loader only accepts input on the serial port.
+Record addresses must be between 0x00008000 and 0x01E0F510.
+Type Ctrl/C to exit loader.
+ +Use the terminal emulator's ASCII upload command, or (on Linux) simply +cat the file to the serial port: + +
$ cat redboot_primary_RAM/redboot.srec >/dev/ttyS1
+ +You should see RedBoot start up: + +
FLASH configuration checksum error or invalid key
+Ethernet eth0: MAC address 00:30:d3:03:04:99                                    
+IP: 192.168.42.111, Default server: 192.168.42.3                                
+                                                                                
+RedBoot(tm) bootstrap and debug environment [RAM]                               
+Non-certified release, version UNKNOWN - built 13:15:40, Nov  9 2001            
+                                                                                
+Platform: AAED2000 system (ARM9) [Primary]                                      
+Copyright (C) 2000, 2001, Red Hat, Inc.                                         
+                                                                                
+RAM: 0x00000000-0x01f80000, 0x0006f208-0x01f51000 available                     
+FLASH: 0x60000000 - 0x62000000, 256 blocks of 0x00020000 bytes each.            
+RedBoot>
+ +As can be seen from the output above, the network has been configured +to give the board an IP address and information about the default +server. If things are not set up on your network, you can still +continue, but use the Y-modem download method when loading the RedBoot +ROMRAM mode image. + +Now initialize RedBoot's FIS: + +
RedBoot> fis init                                                                
+About to initialize [format] FLASH image system - continue (y/n)? y
+*** Initialize FLASH Image System
+    Warning: device contents not erased, some blocks may not be usable
+... Erase from 0x61fe0000-0x62000000: .
+... Program from 0x01f5f000-0x01f5f300 at 0x61fe0000: .
+ +Download the ROMRAM mode image of RedBoot via ethernet: + +
RedBoot> load -b %{FREEMEMLO} redboot_primary_ROMRAM/redboot.srec
+ +or using serial Y-modem protocol: + +
RedBoot> load -mode ymodem -b %{FREEMEMLO}
+ +(Use the terminal emulator's Y-modem upload command to send the file +redboot_primary_ROMRAM/redboot.srec.) + +When the image has been downloaded, program it into flash: + +
Address offset = 0x00ff8000
+Entry point: 0x00008040, address range: 0x00008000-0x0002da80
+RedBoot> fi cr RedBoot
+An image named 'RedBoot' exists - continue (y/n)? y
+* CAUTION * about to program 'RedBoot'
+            at 0x60000000..0x6003ffff from 0x00100000 - continue (y/n)? y
+... Erase from 0x60000000-0x60040000: ..
+... Program from 0x00100000-0x00140000 at 0x60000000: ..
+... Erase from 0x61fe0000-0x62000000: .
+... Program from 0x01f5f000-0x01f7f000 at 0x61fe0000: .
+ +Now reset the board. You should see the RedBoot banner.

Special RedBoot Commands

The exec command which allows the loading +and execution of Linux kernels, +is supported for this board (see the Section called Executing Programs from RedBoot in Chapter 2). The exec parameters used for the AAED2000 are:

-b <addr>

Location Linux kernel was loaded to

-l <len>

Length of kernel

-c "params"

Parameters passed to kernel

-r <addr>

'initrd' ramdisk location

-s <len>

Length of initrd ramdisk

The parameters for kernel image base and size are automatically +set after a load operation. So one way of starting the kernel would +be: + +
RedBoot> load -r -b 0x100000 zImage
+Raw file loaded 0x00100000-0x001a3d6c
+RedBoot> exec -c "console=ttyAC0,38400"
+Using base address 0x00100000 and length 0x000a3d6c
+Uncompressing Linux.....
+ +An image could also be put in flash and started directly: + +
RedBoot> exec -b 0x60040000 -l 0xc0000 -c "console=ttyAC0,38400"
+Uncompressing Linux.....

Memory Maps

The MMU page tables are located at 0x4000.

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x01ffffff    Flash
+0x10000000 - 0x100fffff    Ethernet
+0x30000000 - 0x300fffff    Board registers
+0x40000000 - 0x4fffffff    PCMCIA Slot (0)
+0x50000000 - 0x5fffffff    Compact Flash Slot (1)
+0x80000000 - 0x800037ff    I/O registers
+0xb0060000 - 0xb00fffff    On-chip SRAM
+0xf0000000 - 0xfd3fffff    SDRAM
+
+Virtual Address Range    C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x01f7ffff  Y Y  SDRAM
+0x01f80000 - 0x01ffffff  Y Y  SDRAM (used for LCD frame buffer)
+0x10000000 - 0x100fffff  N N  Ethernet
+0x30000000 - 0x300fffff  N N  Board registers
+0x40000000 - 0x4fffffff  N N  PCMCIA Slot (0)
+0x50000000 - 0x5fffffff  N N  Compact Flash Slot (1)
+0x60000000 - 0x61ffffff  N N  Flash
+0x80000000 - 0x800037ff  N N  I/O registers
+0xf0000000 - 0xffffffff  N N  SDRAM (uncached)

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=aaed
+export ARCH_DIR=arm
+export PLATFORM_DIR=arm9/aaed2000

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/ARM7 Cirrus Logic EP7xxx (EDB7211, EDB7212, EDB7312)UpARM/ARM9 Altera Excalibur
\ No newline at end of file diff --git a/doc/html/ref/alias-command.html b/doc/html/ref/alias-command.html new file mode 100644 index 00000000..d589cabc --- /dev/null +++ b/doc/html/ref/alias-command.html @@ -0,0 +1,456 @@ + + + + + + + + +alias +
eCos Reference Manual
PrevNext

alias

Name

alias -- Manipulate command line aliases

Description

The alias command is used to maintain simple command +line aliases. These aliases are shorthand for longer expressions. +When the pattern %{name} appears in a command line, including in a script, +the corresponding value will be substituted. Aliases may be nested. +

If no value is provided, then the current value of the alias is displayed. +

If the system supports non-volatile configuration data via the +fconfig command (see the Section called Persistent State Flash-based Configuration and Control in Chapter 2), +then the value will be saved and used when the system is reset. +

Examples

Set an alias. +
 
+RedBoot> alias joe "This is Joe"
+Update RedBoot non-volatile configuration - continue (y/n)? n

Display an alias. +
 
+RedBoot> alias joe
+'joe' = 'This is Joe'

Use an alias. Note: the "=" command simply echoes the command to to console. +
 
+RedBoot> = %{joe}
+This is Joe

Aliases can be nested. +
RedBoot> alias frank "Who are you? %{joe}"
+Update RedBoot non-volatile configuration - continue (y/n)? n
+RedBoot> = %{frank}
+Who are you? This is Joe

Notice how the value of %{frank} changes when %{joe} is changed since +the value of %{joe} is not evaluated until %{frank} is evaluated. +
RedBoot> alias joe "This is now Josephine"
+Update RedBoot non-volatile configuration - continue (y/n)? n
+RedBoot> = %{frank}
+Who are you? This is now Josephine
+


PrevHomeNext
Common CommandsUpbaudrate
\ No newline at end of file diff --git a/doc/html/ref/asleep.png b/doc/html/ref/asleep.png new file mode 100644 index 00000000..c1273793 Binary files /dev/null and b/doc/html/ref/asleep.png differ diff --git a/doc/html/ref/assabet.html b/doc/html/ref/assabet.html new file mode 100644 index 00000000..b34fd344 --- /dev/null +++ b/doc/html/ref/assabet.html @@ -0,0 +1,368 @@ + + + + + + + + +ARM/StrongARM(SA1110) Intel SA1110 (Assabet) +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/StrongARM(SA1110) Intel SA1110 (Assabet)

Memory Maps

The first level page table is located at physical address 0xc0004000. +No second level tables are used.

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x07ffffff    flash
+0x08000000 - 0x0fffffff    SA-1111 Board flash
+0x10000000 - 0x17ffffff    Board Registers
+0x18000000 - 0x1fffffff    Ethernet
+0x20000000 - 0x2fffffff    SA-1111 Board PCMCIA
+0x30000000 - 0x3fffffff    Compact Flash
+0x40000000 - 0x47ffffff    SA-1111 Board
+0x48000000 - 0x4bffffff    GFX
+0x80000000 - 0xbfffffff    SA-1110 Internal Registers
+0xc0000000 - 0xc7ffffff    DRAM Bank 0
+0xc8000000 - 0xcfffffff    DRAM Bank 1
+0xd0000000 - 0xd7ffffff    DRAM Bank 2
+0xd8000000 - 0xdfffffff    DRAM Bank 3
+0xe0000000 - 0xe7ffffff    Cache Clean
+
+
+Virtual Address Range    C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x01ffffff  Y Y  DRAM Bank 0
+0x08000000 - 0x0fffffff  Y Y  SA-1111 Board flash
+0x10000000 - 0x17ffffff  N N  Board Registers
+0x18000000 - 0x1fffffff  N N  Ethernet
+0x20000000 - 0x2fffffff  N N  SA-1111 Board PCMCIA
+0x30000000 - 0x3fffffff  N N  Compact Flash
+0x40000000 - 0x47ffffff  N N  SA-1111 Board
+0x48000000 - 0x4bffffff  N N  GFX
+0x50000000 - 0x57ffffff  Y Y  flash
+0x80000000 - 0xbfffffff  N N  SA-1110 Internal Registers
+0xc0000000 - 0xc1ffffff  N Y  DRAM Bank 0
+0xe0000000 - 0xe7ffffff  Y Y  Cache Clean

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=assabet
+export ARCH_DIR=arm
+export PLATFORM_DIR=sa11x0/assabet

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/StrongARM(SA1100) Intel SA1100 Multimedia BoardUpARM/StrongARM(SA11X0) Bright Star Engineering commEngine and nanoEngine
\ No newline at end of file diff --git a/doc/html/ref/at91.html b/doc/html/ref/at91.html new file mode 100644 index 00000000..30cace71 --- /dev/null +++ b/doc/html/ref/at91.html @@ -0,0 +1,475 @@ + + + + + + + + +ARM/ARM7 Atmel AT91 Evaluation Board (EB40) +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/ARM7 Atmel AT91 Evaluation Board (EB40)

Initial Installation Method

This development board comes with ARM's debug tool, Angel, installed in flash. +At this time, Angel will not be replaced. Rather, RedBoot will be placed in +the alternate half of flash. Switch SW1 is used which monitor to boot. Selecting +SW1 to "lower mem" will choose Angel. Select SW1 to "Upper mem" for RedBoot once +it has been installed.

Set SW1 to "lower mem" and connect serial port A to a host computer. Using GDB +from the host and Angel on the board, download the RAM mode image of RedBoot +to the board. SW1 should then be set to "upper mem" just before starting RedBoot using +the 'cont' command. Once RedBoot is started, the Angel session must be interrupted (on +Linux this can be done using ^Z). Follow this by connecting to the board using +minicom at 38400-8N1. At this point, RedBoot will be running on the board in +RAM. Now, download the ROMRAM mode image and program it to flash. +
arm-elf-gdb redboot_RAM.elf
+(gdb) tar rdi s=/dev/ttyS0
+Angel Debug Monitor (serial) 1.04 (Advanced RISC Machines SDT 2.5) for
+AT91EB40 (2.00)
+Angel Debug Monitor rebuilt on Apr 07 2000 at 12:40:31
+Serial Rate:   9600
+Connected to ARM RDI target.
+(gdb) set $cpsr=0xd3
+(gdb) load
+Loading section .rom_vectors, size 0x40 lma 0x2020000
+Loading section .text, size 0x7fd8 lma 0x2020040
+Loading section .rodata, size 0x15a0 lma 0x2028018
+Loading section .data, size 0x2e4 lma 0x20295b8
+Start address 0x2020040 , load size 39068
+Transfer rate: 6250 bits/sec, 500 bytes/write.
+At this point, set SW1 to "upper mem". +
(gdb) cont
+Continuing.
+At this point, suspend the GDB session (use Ctrl-Z) and start a +terminal emulator: +
RedBoot> version
+
+RedBoot(tm) bootstrap and debug environment [RAM]
+Non-certified release, version UNKNOWN - built 14:09:27, Jul 20 2001
+
+Platform: Atmel AT91/EB40 (ARM7TDMI)
+Copyright (C) 2000, 2001, Red Hat, Inc.
+
+RAM: 0x02000000-0x02080000, 0x020116d8-0x0207fd00 available
+FLASH: 0x01010000 - 0x01020000, 256 blocks of 0x00000100 bytes each.
+
+RedBoot> load -m ymodem -b %{FREEMEMLO}
+Use minicom to send the file redboot_ROMRAM.srec via YModem. +
RedBoot> fi wr -f 0x01010000 -b %{FREEMEMLO} -l 0xe100
+Press the "reset" pushbutton and RedBoot +should come up on the board.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=eb40
+export ARCH_DIR=arm
+export PLATFORM_DIR=at91

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/ARM7+ARM9 ARM PID Board and EPI Dev7+Dev9UpARM/ARM7 Cirrus Logic EP7xxx (EDB7211, EDB7212, EDB7312)
\ No newline at end of file diff --git a/doc/html/ref/atlas.html b/doc/html/ref/atlas.html new file mode 100644 index 00000000..2808fe33 --- /dev/null +++ b/doc/html/ref/atlas.html @@ -0,0 +1,777 @@ + + + + + + + + +MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Atlas Board +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Atlas Board

Initial Installation

RedBoot is installed using the code download facility built into the +Atlas board. See the Atlas User manual for details, and also the Atlas download +format in the Section called Atlas download format.

Quick download instructions

Here are quick start instructions for downloading the prebuilt RedBoot +image.

  1. Locate the prebuilt files in the bin directory: deleteall.dl and redboot.dl.

  2. Make sure switch S1-1 is OFF and switch S5-1 is ON. Reset +the board and verify that the LED display reads Flash DL.

  3. Make sure your parallel port is connected to the 1284 port +Of the Atlas board.

  4. Send the deleteall.dl file to the +parallel port to erase previous images: +
    $ cat deleteall.dl >/dev/lp0
    +When this is complete, the LED display should read +Deleted.

  5. Send the ROM mode RedBoot image to the board: +
    $ cat redboot.dl >/dev/lp0
    +When this is complete, the LED display should show the last +address programmed. This will be something like: 1fc17000.

  6. Change switch S5-1 to OFF and reset the board. The LED display +should read RedBoot.

  7. Run the RedBoot fis init +and fconfig commands to initialize the flash. +See the Section called Additional config options, the Section called Flash Image System (FIS) in Chapter 2 +and the Section called Persistent State Flash-based Configuration and Control in Chapter 2 for details.

Atlas download format

In order to download RedBoot to the Atlas board, it must be converted +to the Atlas download format. There are different ways of doing this depending +on which version of the developer's kit is shipped with the board.

The Atlas Developer's Kit CD contains an srec2flash utility. The source code for this utility is part +of the yamon/yamon-src-01.01.tar.gz tarball +on the Dev Kit CD. The path in the expanded tarball is yamon/bin/tools. To use +srec2flash to convert the S-record file: +
$ srec2flash -EL -S29 redboot.srec >redboot.dl
+The Atlas/Malta Developer's Kit CD +contains an srecconv.pl utility which requires +Perl. This utilty is part of the yamon/yamon-src-02.00.tar.gz +tarball on the Dev Kit CD. The path in the expanded tarball +is yamon/bin/tools. To use srecconv to convert the S-record file: +
$ cp redboot_ROM.srec redboot_ROM.rec
+$ srecconv.pl -ES L -A 29 redboot_ROM
+The resulting file is named redboot_ROM.fl.

Additional commands

The exec command which allows the +loading and execution of Linux kernels, is supported for this architecture + (see the Section called Executing Programs from RedBoot in Chapter 2). The +exec parameters used for MIPS boards are:

-b <addr>

Location to store command line and environment passed to kernel

-w <time>

Wait time in seconds before starting kernel

-c "params"

Parameters passed to kernel

<addr>

Kernel entry point, defaulting to the entry point of the last image +loaded

Linux kernels on MIPS platforms expect the entry point to be called with arguments +in the registers equivalent to a C call with prototype: +
void Linux(int argc, char **argv, char **envp);

RedBoot will place the appropriate data at the offset specified by the +-b parameter, or by default at address 0x80080000, and will set the +arguments accordingly when calling into the kernel.

The default entry point, if no image with explicit entry point has been loaded and +none is specified, is 0x80000750.

Interrupts

RedBoot uses an interrupt vector table which is located at address 0x80000400. +Entries in this table are pointers to functions with this protoype:
int irq_handler( unsigned vector, unsigned data )
On an atlas +board, the vector argument is one of 25 interrupts defined in hal/mips/atlas/VERSION/include/plf_intr.h:
#define CYGNUM_HAL_INTERRUPT_SER                 0
+#define CYGNUM_HAL_INTERRUPT_TIM0                1
+#define CYGNUM_HAL_INTERRUPT_2                   2
+#define CYGNUM_HAL_INTERRUPT_3                   3
+#define CYGNUM_HAL_INTERRUPT_RTC                 4
+#define CYGNUM_HAL_INTERRUPT_COREHI              5
+#define CYGNUM_HAL_INTERRUPT_CORELO              6
+#define CYGNUM_HAL_INTERRUPT_7                   7
+#define CYGNUM_HAL_INTERRUPT_PCIA                8
+#define CYGNUM_HAL_INTERRUPT_PCIB                9
+#define CYGNUM_HAL_INTERRUPT_PCIC               10
+#define CYGNUM_HAL_INTERRUPT_PCID               11
+#define CYGNUM_HAL_INTERRUPT_ENUM               12
+#define CYGNUM_HAL_INTERRUPT_DEG                13
+#define CYGNUM_HAL_INTERRUPT_ATXFAIL            14
+#define CYGNUM_HAL_INTERRUPT_INTA               15
+#define CYGNUM_HAL_INTERRUPT_INTB               16
+#define CYGNUM_HAL_INTERRUPT_INTC               17
+#define CYGNUM_HAL_INTERRUPT_INTD               18
+#define CYGNUM_HAL_INTERRUPT_SERR               19
+#define CYGNUM_HAL_INTERRUPT_HW1                20
+#define CYGNUM_HAL_INTERRUPT_HW2                21
+#define CYGNUM_HAL_INTERRUPT_HW3                22
+#define CYGNUM_HAL_INTERRUPT_HW4                23
+#define CYGNUM_HAL_INTERRUPT_HW5                24
The data +passed to the ISR is pulled from a data table (hal_interrupt_data) which immediately follows the interrupt vector table. With +25 interrupts, the data table starts at address 0x80000464 on atlas.

An application may create a normal C function with the above prototype +to be an ISR. Just poke its address into the table at the correct index and +enable the interrupt at its source. The return value of the ISR is ignored +by RedBoot.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=atlas_mips32_4kc
+export TARGET=atlas_mips64_5kc
+export ARCH_DIR=mips
+export PLATFORM_DIR=atlas
+ +Use one of the TARGET settings only.

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
IA32/x86 x86-Based PCUpMIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Malta Board
\ No newline at end of file diff --git a/doc/html/ref/awake.png b/doc/html/ref/awake.png new file mode 100644 index 00000000..c3504dcd Binary files /dev/null and b/doc/html/ref/awake.png differ diff --git a/doc/html/ref/baudrate-command.html b/doc/html/ref/baudrate-command.html new file mode 100644 index 00000000..ccac1cdc --- /dev/null +++ b/doc/html/ref/baudrate-command.html @@ -0,0 +1,354 @@ + + + + + + + + +baudrate +
eCos Reference Manual
PrevNext

baudrate

Name

baudrate -- Set the baud rate for the system serial console

Description

The baudrate command sets the baud rate for the system serial console. +

If no value is provided, then the current value of the console baud rate is displayed. +

If the system supports non-volatile configuration data via the +fconfig command (see the Section called Persistent State Flash-based Configuration and Control in Chapter 2), +then the value will be saved and used when the system is reset. +

Examples

Show the current baud rate. +
 
+RedBoot> baudrate
+Baud rate = 38400

Change the console baud rate. In order to make this operation safer, +there will be a slight pause after the +first message to give you time to change to the new baud rate. +If it doesn't work, or a less than affirmative answer is given to the +"continue" prompt, then the baud rate will revert to the current value. +Only after the baud rate has been firmly established will RedBoot +give you an opportunity to save the value in persistent storage. +
 
+RedBoot> baudrate -b 57600
+Baud rate will be changed to 57600 - update your settings
+Device baud rate changed at this point
+Baud rate changed to 57600 - continue (y/n)? y
+Update RedBoot non-volatile configuration - continue (y/n)? n
+


PrevHomeNext
aliasUpcache
\ No newline at end of file diff --git a/doc/html/ref/brutus.html b/doc/html/ref/brutus.html new file mode 100644 index 00000000..22c7cd59 --- /dev/null +++ b/doc/html/ref/brutus.html @@ -0,0 +1,359 @@ + + + + + + + + +ARM/StrongARM(SA1100) Intel Brutus +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/StrongARM(SA1100) Intel Brutus

Memory Maps

The first level page table is located at physical address 0xc0004000. +No second level tables are used. + +

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x000fffff    Boot ROM
+0x08000000 - 0x083fffff    Application flash
+0x10000000 - 0x100fffff    SRAM
+0x18000000 - 0x180fffff    Chip Select 3
+0x20000000 - 0x3fffffff    PCMCIA
+0x80000000 - 0xbfffffff    SA-1100 Internal Registers
+0xc0000000 - 0xc7ffffff    DRAM Bank 0
+0xc8000000 - 0xcfffffff    DRAM Bank 1
+0xd0000000 - 0xd7ffffff    DRAM Bank 2
+0xd8000000 - 0xdfffffff    DRAM Bank 3
+0xe0000000 - 0xe7ffffff    Cache Clean
+
+
+Virtual Address Range    C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x003fffff  Y Y  DRAM Bank 0
+0x00400000 - 0x007fffff  Y Y  DRAM Bank 1
+0x00800000 - 0x00bfffff  Y Y  DRAM Bank 2
+0x00c00000 - 0x00ffffff  Y Y  DRAM Bank 3
+0x08000000 - 0x083fffff  Y Y  Application flash
+0x10000000 - 0x100fffff  Y N  SRAM
+0x20000000 - 0x3fffffff  N N  PCMCIA
+0x40000000 - 0x400fffff  Y Y  Boot ROM
+0x80000000 - 0xbfffffff  N N  SA-1100 Internal Registers
+0xe0000000 - 0xe7ffffff  Y Y  Cache Clean

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=brutus
+export ARCH_DIR=arm
+export PLATFORM_DIR=sa11x0/brutus

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/StrongARM(SA110) Intel EBSA 285UpARM/StrongARM(SA1100) Intel SA1100 Multimedia Board
\ No newline at end of file diff --git a/doc/html/ref/c-and-math-library-overview.html b/doc/html/ref/c-and-math-library-overview.html new file mode 100644 index 00000000..c3781c24 --- /dev/null +++ b/doc/html/ref/c-and-math-library-overview.html @@ -0,0 +1,449 @@ + + + + + + + + +C and math library overview +
eCos Reference Manual
PrevNext

Chapter 13. C and math library overview

eCos provides compatibility with the + ISO 9899:1990 specification for the standard C library, which + is essentially the same as the better-known ANSI C3.159-1989 + specification (C-89).

There are three aspects of this compatibility supplied by eCos. +First there is a C library which +implements the functions defined by the ISO standard, except for the +mathematical functions. This is provided by the eCos C library +packages.

Then eCos provides a math +library, which implements the mathematical functions from the ISO +C library. This distinction between C and math libraries is frequently +drawn — most standard C library implementations provide +separate linkable files for the two, and the math library contains +all the functions from the math.h header +file.

There is a third element to the ISO C library, which is the +environment in which applications run when they use the standard +C library. This environment is set up by the C library startup procedure +(the Section called C library startup) +and it provides (among other things) a main() entry +point function, an exit() function that +does the cleanup required by the standard (including handlers registered +using the atexit() function), and an environment +that can be read with getenv().

The description in this manual focuses on the eCos-specific +aspects of the C library (mostly related to eCos's +configurability) as well as mentioning the omissions from the standard +in this release. We do not attempt to define the semantics of each +function, since that information can be found in the ISO, ANSI, +POSIX and IEEE standards, and the many good books that have been +written about the standard C library, that cover usage of these +functions in a more general and useful way.

Included non-ISO functions

The following functions from the POSIX specification +are included for convenience:

extern char **environ variable +(for setting up the environment for use with getenv())

_exit()

strtok_r()

rand_r()

asctime_r()

ctime_r()

localtime_r()

gmtime_r()

eCos provides the following additional +implementation-specific functions within the standard C library +to adjust the date and time settings:

void cyg_libc_time_setdst( 
+  cyg_libc_time_dst state
+);

This function sets the state of Daylight Savings Time. The +values for state are:

CYG_LIBC_TIME_DSTNA   unknown
+CYG_LIBC_TIME_DSTOFF  off
+CYG_LIBC_TIME_DSTON   on
void cyg_libc_time_setzoneoffsets( 
+  time_t stdoffset, time_t dstoffset
+);

This function sets the offsets from UTC used when Daylight +Savings Time is enabled or disabled. The offsets are in time_t’s, +which are seconds in the current inplementation.

Cyg_libc_time_dst cyg_libc_time_getzoneoffsets( 
+  time_t *stdoffset, time_t *dstoffset
+);

This function retrieves the current setting for Daylight Savings +Time along with the offsets used for both STD and DST. The offsets +are both in time_t’s, which are seconds in the +current implementation.

cyg_bool cyg_libc_time_settime( 
+  time_t utctime
+);

This function sets the current time for the system The time +is specified as a time_t in UTC. +It returns non-zero on error.


PrevHomeNext
The ISO Standard C and Math LibrariesUpMath library compatibility modes
\ No newline at end of file diff --git a/doc/html/ref/c-library-startup.html b/doc/html/ref/c-library-startup.html new file mode 100644 index 00000000..9c4ccb2d --- /dev/null +++ b/doc/html/ref/c-library-startup.html @@ -0,0 +1,350 @@ + + + + + + + + +C library startup +
eCos Reference Manual
PrevChapter 13. C and math library overviewNext

C library startup

The C library includes a function declared as:

void cyg_iso_c_start( void )

This function is used to start an environment in which an +ISO C style program can run in the most compatible way.

What this function does is to create a thread which will invoke main() — normally +considered a program's entry point. In particular, it can +supply arguments to main() using the CYGDAT_LIBC_ARGUMENTS +configuration option, and when returning from main(), +or calling exit(), pending stdio file output +is flushed and any functions registered with atexit() are +invoked. This is all compliant with the ISO C standard in this respect.

This thread starts execution when the eCos scheduler +is started. If the eCos kernel package is not +available (and hence there is no scheduler), then cyg_iso_c_start() will +invoke the main() function directly, i.e. +it will not return until the main() function +returns.

The main() function should be defined +as the following, and if defined in a C++ file, +should have “C” linkage:

extern int main( 
+  int argc,
+  char *argv[] )

The thread that is started by cyg_iso_c_start() can +be manipulated directly, if you wish. For example you can suspend +it. The kernel C API needs a handle to do this, which is available +by including the following in your source code.

extern cyg_handle_t cyg_libc_main_thread;

Then for example, you can suspend the thread with the line:

cyg_thread_suspend( cyg_libc_main_thread );

If you call cyg_iso_c_start() and +do not provide your own main() function, +the system will provide a main() for you +which will simply return immediately.

In the default configuration, cyg_iso_c_start() is +invoked automatically by the cyg_package_start() function +in the infrastructure configuration. This means that in the simplest +case, your program can indeed consist of simply:

int main( int argc, char *argv[] )
+{
+ printf("Hello eCos\n");
+}

If you override cyg_package_start() or cyg_start(), +or disable the infrastructure configuration option CYGSEM_START_ISO_C_COMPATIBILITY +then you must ensure that you call cyg_iso_c_start() yourself +if you want to be able to have your program start at the entry point +of main() automatically.


PrevHomeNext
Thread safetyUpI/O Package (Device Drivers)
\ No newline at end of file diff --git a/doc/html/ref/cache-command.html b/doc/html/ref/cache-command.html new file mode 100644 index 00000000..346d01e7 --- /dev/null +++ b/doc/html/ref/cache-command.html @@ -0,0 +1,372 @@ + + + + + + + + +cache +
eCos Reference Manual
PrevNext

cache

Name

cache -- Control hardware caches

Description

The cache command is used to manipulate the caches on the processor.

With no options, this command specifies the state of the system caches.

When an option is given, the caches are turned off or on appropriately.

Examples

Show the current cache state. +
 
+RedBoot> cache
+Data cache: On, Instruction cache: On

Disable the caches. +
 
+RedBoot> cache off
+RedBoot> cache
+Data cache: Off, Instruction cache: Off

Enable the caches. +
 
+RedBoot> cache on
+RedBoot> cache
+Data cache: On, Instruction cache: On
+


PrevHomeNext
baudrateUpchannel
\ No newline at end of file diff --git a/doc/html/ref/calmrisc16.html b/doc/html/ref/calmrisc16.html new file mode 100644 index 00000000..86ac0f87 --- /dev/null +++ b/doc/html/ref/calmrisc16.html @@ -0,0 +1,363 @@ + + + + + + + + +CalmRISC/CalmRISC16 Samsung CalmRISC16 Core Evaluation Board +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

CalmRISC/CalmRISC16 Samsung CalmRISC16 Core Evaluation Board

Overview

The +Samsung CalmRISC16 evaluation platform consists of two boards connected by a +ribbon cable. One board contains the CPU core and memory. The other board is +called the MDSChip board and provides the host interface. The calmRISC16 is a +harvard architecture with separate 22-bit program and data addresses. The +instruction set provides no instruction for writing to program memory. The +MDSChip board firmware (called CalmBreaker) provides a pseudo register interface +so that code running on the core has access to a serial channel and a mechanism +to write to program memory. The serial channel is fixed at 57600-8-N-1 by the +firmware. The CalmBreaker firmware also provides a serial protocol which +allows a host to download a program and to start or stop the core board.

The following RedBoot configurations are supported: + +

Initial Installation Method

The CalmRISC16 core is controlled through the MDSChip board. There is +no non-volatile storage available for RedBoot, so RedBoot must be downloaded +to the board on every power cycle. A small utility program is used to download +S-record files to the eval board. Sources and build instructions for this +utility are located in the RedBoot sources in: +packages/hal/calmrisc16/ceb/current/support

To download the RedBoot image, first press the reset button on the MDSChip +board. The green 'Run' LED on the core board should go off. Now, use the +utility to download the RedBoot image with: +
$ calmbreaker -p /dev/term/b --reset --srec-code -f redboot.elf
+Note that the '-p /dev/term/b' specifies the serial port to use and will vary +from system to system. The download will take about two minutes. After it +finishes, start RedBoot with: +
$ calmbreaker -p /dev/term/b --run
+The 'Run' LED on the core board should be on. Connecting to the MDSboard with +a terminal and typing enter should result in RedBoot reprinting the command +prompt.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=calm16_ceb
+export ARCH_DIR=calmrisc16
+export PLATFORM_DIR=ceb

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/Xscale Intel IQ80321UpCalmRISC/CalmRISC32 Samsung CalmRISC32 Core Evaluation Board
\ No newline at end of file diff --git a/doc/html/ref/calmrisc32.html b/doc/html/ref/calmrisc32.html new file mode 100644 index 00000000..8d41c11c --- /dev/null +++ b/doc/html/ref/calmrisc32.html @@ -0,0 +1,363 @@ + + + + + + + + +CalmRISC/CalmRISC32 Samsung CalmRISC32 Core Evaluation Board +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

CalmRISC/CalmRISC32 Samsung CalmRISC32 Core Evaluation Board

Overview

The +Samsung CalmRISC32 evaluation platform consists of two boards connected by a +ribbon cable. One board contains the CPU core and memory. The other board is +called the MDSChip board and provides the host interface. The calmRISC32 is a +harvard architecture with separate 32-bit program and data addresses. The +instruction set provides no instruction for writing to program memory. The +MDSChip board firmware (called CalmBreaker) provides a pseudo register interface +so that code running on the core has access to a serial channel and a mechanism +to write to program memory. The serial channel is fixed at 57600-8-N-1 by the +firmware. The CalmBreaker firmware also provides a serial protocol which +allows a host to download a program and to start or stop the core board.

The following RedBoot configurations are supported: + +

Initial Installation Method

The calmRISC32 core is controlled through the MDSChip board. There is +no non-volatile storage available for RedBoot, so RedBoot must be downloaded +to the board on every power cycle. A small utility program is used to download +S-record files to the eval board. Sources and build instructions for this +utility are located in the RedBoot sources in: +packages/hal/calmrisc32/ceb/current/support

To download the RedBoot image, first press the reset button on the MDSChip +board. The green 'Run' LED on the core board should go off. Now, use the +utility to download the RedBoot image with: +
$ calmbreaker -p /dev/term/b --reset --srec-code -f redboot.elf
+Note that the '-p /dev/term/b' specifies the serial port to use and will vary +from system to syetm. The download will take about two minutes. After it +finishes, start RedBoot with: +
$ calmbreaker -p /dev/term/b --run
+The 'Run' LED on the core board should be on. Connecting to the MDSboard with +a terminal and typing enter should result in RedBoot reprinting the command +prompt.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=calm32_ceb
+export ARCH_DIR=calmrisc32
+export PLATFORM_DIR=ceb

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
CalmRISC/CalmRISC16 Samsung CalmRISC16 Core Evaluation BoardUpFRV/FRV400 Fujitsu FR-V 400 (MB-93091)
\ No newline at end of file diff --git a/doc/html/ref/cerfcube.html b/doc/html/ref/cerfcube.html new file mode 100644 index 00000000..af819065 --- /dev/null +++ b/doc/html/ref/cerfcube.html @@ -0,0 +1,474 @@ + + + + + + + + +ARM/StrongARM(SA11X0) Intrinsyc CerfCube +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/StrongARM(SA11X0) Intrinsyc CerfCube

Additional commands

The exec command which allows the loading +and execution of Linux kernels, +is supported for this board (see the Section called Executing Programs from RedBoot in Chapter 2). The exec parameters used for the CerfCube are:

-b <addr>

Location Linux kernel was loaded to

-l <len>

Length of kernel

-c "params"

Parameters passed to kernel

-r <addr>

'initrd' ramdisk location

-s <len>

Length of initrd ramdisk

Memory Maps

RedBoot sets up the following memory map on the CerfCube: The first level +page table is located at physical address 0xC0004000. No second level tables +are used.

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x01ffffff    16Mb to 32Mb FLASH (nCS0) [organized as below]
+  0x000000 - 0x0001ffff      RedBoot
+  0x020000 - 0x0003ffff      RedBoot [RAM version]
+  0xfc0000 - 0x00fdffff      Fconfig data
+  0xfe0000 - 0x00ffffff      FIS directory
+0x0f000000 - 0x0fffffff    Onboard ethernet
+0x10000000 - 0x17ffffff    CerfCube internal registers
+0x20000000 - 0x3fffffff    PCMCIA / Compact Flash
+0x80000000 - 0xbfffffff    SA-1110 Internal Registers
+0xc0000000 - 0xc1ffffff    DRAM Bank 0 - 32Mb SDRAM
+0xe0000000 - 0xe7ffffff    Cache Clean
+
+
+Virtual Address Range    C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x01ffffff  Y Y  DRAM - 32Mb
+0x08000000 - 0x0fffffff  N N  Onboard ethernet controller
+0x10000000 - 0x17ffffff  N N  CerfCube internal registers
+0x20000000 - 0x3fffffff  N N  PCMCIA / Compact Flash
+0x50000000 - 0x51ffffff  Y Y  Up to 32Mb FLASH (nCS0)
+0x80000000 - 0xbfffffff  N N  SA-1110 Internal Registers
+0xc0000000 - 0xc1ffffff  N Y  DRAM Bank 0: 32Mb
+0xe0000000 - 0xe7ffffff  Y Y  Cache Clean   

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=cerf
+export ARCH_DIR=arm
+export PLATFORM_DIR=sa11x0/cerf

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/StrongARM(SA11X0) Compaq iPAQ PocketPCUpARM/Xscale Cyclone IQ80310
\ No newline at end of file diff --git a/doc/html/ref/channel-command.html b/doc/html/ref/channel-command.html new file mode 100644 index 00000000..b6a1258e --- /dev/null +++ b/doc/html/ref/channel-command.html @@ -0,0 +1,369 @@ + + + + + + + + +channel +
eCos Reference Manual
PrevNext

channel

Name

channel -- Select the system console channel

Description

With no arguments, the channel command displays the current console channel number.

When passed an argument of 0 upward, this command switches the console +channel to that channel number. The mapping between channel numbers and +physical channels is platform specific but will typically be something like +channel 0 is the first serial port, channel 1 is the second, etc.

When passed an argument of -1, this command reverts RedBoot to responding +to whatever channel receives input first, as happens when RedBoot initially +starts execution.

Examples

Show the current channel. +
 
+RedBoot> channel
+Current console channel id: 0

Change to an invalid channel. +
 
+RedBoot> channel 99
+**Error: bad channel number '99'

Revert to the default channel setting (any console mode). +
 
+RedBoot> channel -1
+


PrevHomeNext
cacheUpcksum
\ No newline at end of file diff --git a/doc/html/ref/cksum-command.html b/doc/html/ref/cksum-command.html new file mode 100644 index 00000000..b5ddfb6d --- /dev/null +++ b/doc/html/ref/cksum-command.html @@ -0,0 +1,364 @@ + + + + + + + + +cksum +
eCos Reference Manual
PrevNext

cksum

Name

cksum -- Compute POSIX checksums

Description

Computes the POSIX checksum on a range of memory (either RAM or FLASH). +The values printed (decimal cksum, decimal length, hexadecimal cksum, + hexadecimal length) can be compared with the output from the Linux program 'cksum'.

Examples

Checksum a buffer. +
 
+RedBoot> cksum -b 0x100000 -l 0x100
+POSIX cksum = 3286483632 256 (0xc3e3c2b0 0x00000100)
+

Checksum an area of memory after loading a file. Note that the base +address and length parameters are provided by the preceding +load command. +
 
+RedBoot> load -r -b %{FREEMEMLO} redboot.bin
+Raw file loaded 0x06012800-0x0602f0a8
+RedBoot> cksum
+Computing cksum for area 0x06012800-0x0602f0a8
+POSIX cksum = 2092197813 116904 (0x7cb467b5 0x0001c8a8)
+


PrevHomeNext
channelUpdisks
\ No newline at end of file diff --git a/doc/html/ref/common-commands.html b/doc/html/ref/common-commands.html new file mode 100644 index 00000000..ba7a1c45 --- /dev/null +++ b/doc/html/ref/common-commands.html @@ -0,0 +1,237 @@ + + + + + + + + +Common Commands +
eCos Reference Manual
PrevChapter 2. RedBoot Commands and ExamplesNext

Common Commands

Table of Contents
alias -- Manipulate command line aliases
baudrate -- Set the baud rate for the system serial console
cache -- Control hardware caches
channel -- Select the system console channel
cksum -- Compute POSIX checksums
disks -- List available disk partitions.
dump -- Display memory.
help -- Display help on available commands
ip_address -- Set IP addresses
load -- Download programs or data to the RedBoot platform
mcmp -- Compare two segments of memory
mfill -- Fill RAM with a specified pattern
ping -- Verify network connectivity
reset -- Reset the device
version -- Display RedBoot version information


PrevHomeNext
RedBoot Commands and ExamplesUpalias
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-configuration-faq.html b/doc/html/ref/compat-uitron-configuration-faq.html new file mode 100644 index 00000000..7696a6fc --- /dev/null +++ b/doc/html/ref/compat-uitron-configuration-faq.html @@ -0,0 +1,684 @@ + + + + + + + + +µITRON Configuration FAQ +
eCos Reference Manual
PrevChapter 32. µITRON APINext

µ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:

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:

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 ) )

PrevHomeNext
Network Support FunctionsUpTCP/IP Stack Support for eCos
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-extended-sync-comm-functions.html b/doc/html/ref/compat-uitron-extended-sync-comm-functions.html new file mode 100644 index 00000000..864fe7d0 --- /dev/null +++ b/doc/html/ref/compat-uitron-extended-sync-comm-functions.html @@ -0,0 +1,153 @@ + + + + + + + + +Extended Synchronization and Communication Functions +
eCos Reference Manual
PrevChapter 32. µITRON APINext


PrevHomeNext
Synchronization and Communication FunctionsUpInterrupt management functions
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-interrupt-management-functions.html b/doc/html/ref/compat-uitron-interrupt-management-functions.html new file mode 100644 index 00000000..6b5c8ad5 --- /dev/null +++ b/doc/html/ref/compat-uitron-interrupt-management-functions.html @@ -0,0 +1,537 @@ + + + + + + + + +Interrupt management functions +
eCos Reference Manual
PrevChapter 32. µITRON APINext

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.


PrevHomeNext
Extended Synchronization and Communication FunctionsUpMemory pool Management Functions
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-memory-pool-mgmt-functions.html b/doc/html/ref/compat-uitron-memory-pool-mgmt-functions.html new file mode 100644 index 00000000..b20fa288 --- /dev/null +++ b/doc/html/ref/compat-uitron-memory-pool-mgmt-functions.html @@ -0,0 +1,828 @@ + + + + + + + + + Memory pool Management Functions +
eCos Reference Manual
PrevChapter 32. µITRON APINext

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:

The following conditions are checked for, and can return error +codes, regardless of the setting of +CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS:


PrevHomeNext
Interrupt management functionsUpTime Management Functions
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-microitron-api.html b/doc/html/ref/compat-uitron-microitron-api.html new file mode 100644 index 00000000..a4631d8e --- /dev/null +++ b/doc/html/ref/compat-uitron-microitron-api.html @@ -0,0 +1,280 @@ + + + + + + + + +µITRON API +
eCos Reference Manual
PrevNext

Chapter 32. µITRON API

Introduction to µITRON

The µITRON specification +defines a highly flexible operating system architecture designed +specifically for application in embedded systems. The specification addresses +features which are common to the majority of processor architectures and +deliberately avoids virtualization which would adversely impact +real-time performance. The µITRON specification +may be implemented on many hardware platforms and provides significant +advantages by reducing the effort involved in understanding and +porting application software to new processor architectures.

Several revisions of the µITRON specification exist. + In this release, eCos supports the + µITRON version 3.02 specification, with complete + “Standard functionality” (level S), plus many + “Extended” (level E) functions. The definitive + reference on µITRON is Dr. Sakamura’s book: + µITRON 3.0, An Open and Portable Real-Time Operating + System for Embedded Systems. + The book can be purchased from the IEEE Press, and + an ASCII version of the standard can be found online at +http://www.itron.gr.jp/. +The old address +http://tron.um.u-tokyo.ac.jp/TRON/ITRON/ +still exists as a mirror site.


PrevHomeNext
µITRONUpµITRON and eCos
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-network-support-functions.html b/doc/html/ref/compat-uitron-network-support-functions.html new file mode 100644 index 00000000..ca66f799 --- /dev/null +++ b/doc/html/ref/compat-uitron-network-support-functions.html @@ -0,0 +1,154 @@ + + + + + + + + + Network Support Functions +
eCos Reference Manual
PrevChapter 32. µITRON APINext


PrevHomeNext
System Management FunctionsUpµITRON Configuration FAQ
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-over-ecos.html b/doc/html/ref/compat-uitron-over-ecos.html new file mode 100644 index 00000000..6801b633 --- /dev/null +++ b/doc/html/ref/compat-uitron-over-ecos.html @@ -0,0 +1,305 @@ + + + + + + + + +µITRON and eCos +
eCos Reference Manual
PrevChapter 32. µITRON APINext

µITRON and eCos

The eCos kernel implements the functionality +used by the µITRON compatibility subsystem. +The configuration of the kernel influences the behavior of µITRON +programs.

In particular, the default configuration has time slicing +(also known as round-robin scheduling) switched on; this means that +a task can be moved from RUN state +to READY state at any time, in +order that one of its peers may run. This is not strictly conformant +to the µITRON specification, which +states that timeslicing may be implemented by periodically issuing +a rot_rdq(0) call from +within a periodic task or cyclic handler; otherwise it is expected +that a task runs until it is pre-empted in consequence of synchronization +or communication calls it makes, or the effects of an interrupt +or other external event on a higher priority task cause that task +to become READY. To disable timeslicing +functionality in the kernel and µITRON +compatibility environment, please disable the +CYGSEM_KERNEL_SCHED_TIMESLICE +configuration option in the kernel package. A description of kernel +scheduling is in Kernel Overview.

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>

PrevHomeNext
µITRON APIUpTask Management Functions
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-sync-and-comm-functions.html b/doc/html/ref/compat-uitron-sync-and-comm-functions.html new file mode 100644 index 00000000..d9832307 --- /dev/null +++ b/doc/html/ref/compat-uitron-sync-and-comm-functions.html @@ -0,0 +1,1012 @@ + + + + + + + + + Synchronization and Communication Functions +
eCos Reference Manual
PrevChapter 32. µITRON APINext

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:

The following conditions are checked for, and can return error +codes, regardless of the setting of +CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS +:


PrevHomeNext
Task-Dependent Synchronization FunctionsUpExtended Synchronization and Communication Functions
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-system-mgmt-functions.html b/doc/html/ref/compat-uitron-system-mgmt-functions.html new file mode 100644 index 00000000..03324779 --- /dev/null +++ b/doc/html/ref/compat-uitron-system-mgmt-functions.html @@ -0,0 +1,309 @@ + + + + + + + + + System Management Functions +
eCos Reference Manual
PrevChapter 32. µITRON APINext


PrevHomeNext
Time Management FunctionsUpNetwork Support Functions
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-task-dependent-synch-functions.html b/doc/html/ref/compat-uitron-task-dependent-synch-functions.html new file mode 100644 index 00000000..d4f56edc --- /dev/null +++ b/doc/html/ref/compat-uitron-task-dependent-synch-functions.html @@ -0,0 +1,449 @@ + + + + + + + + +Task-Dependent Synchronization Functions +
eCos Reference Manual
PrevChapter 32. µITRON APINext

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”):

The following conditions are checked for, and can + return error codes, regardless of the setting of +CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS:


PrevHomeNext
Task Management FunctionsUpSynchronization and Communication Functions
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-task-management-functions.html b/doc/html/ref/compat-uitron-task-management-functions.html new file mode 100644 index 00000000..b14902c7 --- /dev/null +++ b/doc/html/ref/compat-uitron-task-management-functions.html @@ -0,0 +1,686 @@ + + + + + + + + +Task Management Functions +
eCos Reference Manual
PrevChapter 32. µITRON APINext

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:

The following conditions are checked for, and return + error codes if appropriate, regardless of the setting of +CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS +:


PrevHomeNext
µITRON and eCosUpTask-Dependent Synchronization Functions
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron-time-mgmt-functions.html b/doc/html/ref/compat-uitron-time-mgmt-functions.html new file mode 100644 index 00000000..c1a907ea --- /dev/null +++ b/doc/html/ref/compat-uitron-time-mgmt-functions.html @@ -0,0 +1,513 @@ + + + + + + + + +Time Management Functions +
eCos Reference Manual
PrevChapter 32. µITRON APINext

Time Management Functions

These functions are fully supported in this release:

ER set_tim( 
+    SYSTIME *pk_tim )

Caution

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:

The following conditions are checked for, and can return + error codes, regardless of the setting of +CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS +:


PrevHomeNext
Memory pool Management FunctionsUpSystem Management Functions
\ No newline at end of file diff --git a/doc/html/ref/compat-uitron.html b/doc/html/ref/compat-uitron.html new file mode 100644 index 00000000..904ec3e0 --- /dev/null +++ b/doc/html/ref/compat-uitron.html @@ -0,0 +1,161 @@ + + + + + + + + +µITRON +
eCos Reference Manual
PrevNext


PrevHomeNext
eCos POSIX compatibility layer µITRON API
\ No newline at end of file diff --git a/doc/html/ref/configuring-the-redboot-environment.html b/doc/html/ref/configuring-the-redboot-environment.html new file mode 100644 index 00000000..c642b4a5 --- /dev/null +++ b/doc/html/ref/configuring-the-redboot-environment.html @@ -0,0 +1,740 @@ + + + + + + + + +Configuring the RedBoot Environment +
eCos Reference Manual
PrevChapter 1. Getting Started with RedBootNext

Configuring the RedBoot Environment

Once installed, RedBoot will operate fairly generically. However, +there are some features that can be configured for a particular installation. +These depend primarily on whether flash and/or networking support are available. The remainder +of this discussion assumes that support for both of these options is included +in RedBoot.

Target Network Configuration

Each node in a networked +system needs to have a unique address. Since the network support in RedBoot +is based on TCP/IP, this address +is an IP (Internet Protocol) address. There are two ways for a system to “know” +its IP address. First, it can be stored locally on the platform. This is known +as having a static IP address. Second, the system can use the network itself +to discover its IP address. This is known as a dynamic IP address. RedBoot +supports this dynamic IP address mode by use of the BOOTP (a subset of DHCP) protocol. In this case, RedBoot will ask the network (actually +some generic server on the network) for the IP address to use.

The choice of IP +address type is made via the fconfig command. Once a selection +is made, it will be stored in flash memory. RedBoot only queries the flash +configuration information at reset, so any changes will require restarting +the platform.

Here is an example of the RedBoot fconfig +command, showing network addressing:

RedBoot> fconfig -l
+Run script at boot: false
+Use BOOTP for network configuration: false
+Local IP address: 192.168.1.29
+Default server IP address: 192.168.1.101
+DNS server IP address: 192.168.1.1
+GDB connection port: 9000
+Network debug at boot time: false  

In this case, the board has been configured with a static IP address +listed as the Local IP address. The default server IP address specifies which +network node to communicate with for TFTP service. This address can be overridden +directly in the TFTP +commands.

The DNS server IP address option +controls where RedBoot should make DNS lookups. A setting of 0.0.0.0 will disable DNS +lookups. The DNS server IP address can also be set at runtime.

If the selection for Use BOOTP for network configuration had been true, these IP +addresses would be determined at boot time, via the BOOTP protocol. The final +number which needs to be configured, regardless of IP address selection mode, +is the GDB connection port. RedBoot allows for incoming commands +on either the available serial ports or via the network. This port number +is the TCP port that RedBoot will use to accept incoming connections.

These connections can be used for GDB sessions, but they can also be +used for generic RedBoot commands. In particular, it is possible to communicate +with RedBoot via the telnet +protocol. For example, on Linux®:

% telnet redboot_board 9000
+Connected to redboot_board
+Escape character is ‘^]’.
+RedBoot>  

Host Network Configuration

RedBoot +may require three different classes of service from a network host:

Depending on the host system, these services may or may not be available +or enabled by default. See your system documentation for more details.

In particular, on Red Hat Linux, neither of these services will be configured +out of the box. The following will provide a limited explanation of how to +set them up. These configuration setups must be done as root on the host or server machine.

Enable BOOTP/DHCP server on Red Hat Linux

First, ensure that you have +the proper package, dhcp (not dhcpd) installed. The DHCP server provides Dynamic Host Configuration, +that is, IP address and other data to hosts on a network. It does this in +different ways. Next, there can be a fixed relationship between a certain +node and the data, based on that node’s unique Ethernet Station Address +(ESA, sometimes called a MAC address). The other possibility is simply to +assign addresses that are free. The sample DHCP configuration file shown does +both. Refer to the DHCP documentation for more details.

Once the DHCP package has been installed and the configuration file +set up, type:
# service dhcpd start

Enable DNS server on Red Hat Linux

First, ensure that you have the proper +RPM package, caching-nameserver +installed. Then change the configuration +(in /etc/named.conf) so that the +forwarders point to the primary +nameservers for your machine, normally using the nameservers listed in +/etc/resolv.conf.

Example 1-2. Sample /etc/named.conf for Red Hat Linux 7.x

--------------- /etc/named.conf -----------------------------
+// generated by named-bootconf.pl
+
+options {
+        directory "/var/named";
+        /*
+         * If there is a firewall between you and nameservers you want
+         * to talk to, you might need to uncomment the query-source
+         * directive below.  Previous versions of BIND always asked
+         * questions using port 53, but BIND 8.1 uses an unprivileged
+         * port by default.
+         */
+        // query-source address * port 53;
+
+
+        forward first;
+        forwarders {
+                212.242.40.3;
+                212.242.40.51;
+        };
+};
+
+//
+// a caching only nameserver config
+//
+// Uncomment the following for Red Hat Linux 7.2 or above:
+// controls {
+//         inet 127.0.0.1 allow { localhost; } keys { rndckey; };
+// };
+// include "/etc/rndc.key";
+zone "." IN {
+        type hint;
+        file "named.ca";
+};
+
+zone "localhost" IN {
+        type master;
+        file "localhost.zone";
+        allow-update { none; };
+};
+
+zone "0.0.127.in-addr.arpa" IN {
+        type master;
+        file "named.local";
+        allow-update { none; };
+};

Make sure the server is started with the command: +
# service named start
and is +started on next reboot with the command +
# chkconfig named on
+Finally, you may wish to change +/etc/resolv.conf to use +127.0.0.1 as the nameserver for your +local machine.


PrevHomeNext
RedBoot Resource UsageUpRedBoot Commands and Examples
\ No newline at end of file diff --git a/doc/html/ref/cpuload-functions.html b/doc/html/ref/cpuload-functions.html new file mode 100644 index 00000000..4cd355c3 --- /dev/null +++ b/doc/html/ref/cpuload-functions.html @@ -0,0 +1,389 @@ + + + + + + + + +CPU Load Measurements +
eCos Reference Manual
PrevNext

Chapter 51. CPU Load Measurements

CPU Load API

The package allows the CPU load to be estimated. The measurement code +must first be calibrated to the target it is running on. Once this +has been performed the measurement process can be started. This is a +continuous process, so always providing the most up to data +measurements. The process can be stopped at any time if required. Once +the process is active, the results can be retrieved.

Note that if the target/processor performs any power saving actions, +such as reducing the clock speed, or halting until the next interrupt +etc, these will interfere with the CPU load measurement. Under these +conditions the measurement results are undefined. The synthetic target +is one such system. See the implementation details at the foot of this +page for further information.

SMP systems are not supported, only uniprocessor system.

The API for load measuring functions can be +found in the file cyg/cpuload/cpuload.h.

Implementation details

This section gives a few details of how the measurements are +made. This should help to understand what the results mean.

When there are no other threads runnable, eCos will execute the idle +thread. This thread is always runnable and uses the lowest thread +priority. The idle thread does little. It is an endless loop which +increments the variable, idle_thread_loops and +executes the macro HAL_IDLE_THREAD_ACTION. The cpu +load measurement code makes use of the variable. It periodically +examines the value of the variable and sees how much it has +changed. The idler the system, the more it will have incremented. From +this it is simple to determine the load of the system.

The function cyg_cpuload_calibrate executes the +idle thread for 100ms to determine how much +idle_thread_loops is incremented on a system idle +for 100ms. cyg_cpuload_create starts an alarm which +every 100ms calls an alarm function. This function looks at the +difference in idle_thread_loops since the last +invocation of the alarm function and so calculated how idle or busy +the system has been. The structure cyg_cpuload is +updated during the alarm functions with the new results. The 100ms +result is simply the result from the last measurement period. A simple +filter is used to average the load over a period of time, namely 1s +and 10s. Due to rounding errors, the 1s and 10s value will probably +never reach 100% on a fully loaded system, but 99% is often seen.

As stated above, clever power management code will interfere with +these measurements. The basic assumption is that the idle thread will +be executed un-hindered and under the same conditions as when the +calibration function was executed. If the CPU clock rate is reduced, +the idle thread counter will be incremented less and so the CPU load +measurements will give values too high. If the CPU is halted entirely, +100% cpu load will be measured.


PrevHomeNext
CPU load measurementsUpApplication profiling
\ No newline at end of file diff --git a/doc/html/ref/crc-functions.html b/doc/html/ref/crc-functions.html new file mode 100644 index 00000000..9c36615a --- /dev/null +++ b/doc/html/ref/crc-functions.html @@ -0,0 +1,338 @@ + + + + + + + + +CRC Functions +
eCos Reference Manual
PrevNext

Chapter 50. CRC Functions

CRC API

The package implements a number of CRC functions as described below. +The API to these functions is in the include file +cyg/crc/crc.h.


PrevHomeNext
CRC AlgorithmsUpCPU load measurements
\ No newline at end of file diff --git a/doc/html/ref/devapi-api.html b/doc/html/ref/devapi-api.html new file mode 100644 index 00000000..c8ce51f6 --- /dev/null +++ b/doc/html/ref/devapi-api.html @@ -0,0 +1,2961 @@ + + + + + + + + +The API +
eCos Reference Manual
PrevChapter 18. Device Driver Interface to the KernelNext

The API

This section details the Driver Kernel +Interface. Note that most of these functions are identical to Kernel C +API calls, and will in most configurations be wrappers for them. In +non-kernel configurations they will be supported directly by the HAL, +or by code to emulate the required behavior.

This API is defined in the header file +<cyg/hal/drv_api.h>.

cyg_drv_cond_wait

Function:
void cyg_drv_cond_wait( cyg_drv_cond *cond )
Arguments:

cond - condition variable to wait on

Result:

None

Level:

Thread

Description:

Wait for a signal on the condition variable pointed to by + the cond argument. The thread must have + locked the associated mutex, supplied in + cyg_drv_cond_init(), before waiting on this + condition variable. While the thread waits, the mutex will be + unlocked, and will be re-locked before this function returns. It + is possible for threads waiting on a condition variable to + occasionally wake up spuriously. For this reason it is necessary + to use this function in a loop that re-tests the condition each + time it returns. Note that this function performs an implicit + scheduler unlock/relock sequence, so that it may be used within + an explicit + cyg_drv_dsr_lock()...cyg_drv_dsr_unlock() + structure.

cyg_drv_interrupt_create

Function:
void cyg_drv_interrupt_create( cyg_vector_t vector,
+                               cyg_priority_t priority,
+                               cyg_addrword_t data,
+                               cyg_ISR_t *isr,
+                               cyg_DSR_t *dsr,
+                               cyg_handle_t *handle,
+                               cyg_interrupt *intr
+                             )
Arguments:

vector - vector to attach to

priority - queuing priority

data - data pointer

isr - interrupt service routine

dsr - deferred service routine

handle - returned handle

intr - put interrupt object here

Result:

None

Level:

Thread

Description:

Create an interrupt object and returns a handle to it. The + object contains information about which interrupt vector to use + and the ISR and DSR that will be called after the interrupt + object is attached to the vector. The interrupt object will be + allocated in the memory passed in the + intr parameter. The interrupt object is + not immediately attached; it must be attached with the + cyg_interrupt_attach() call.

cyg_ISR_t

Type:
typedef cyg_uint32 cyg_ISR_t( cyg_vector_t vector,
+                              cyg_addrword_t data
+                            )
Fields:

vector - vector being delivered

data - data value supplied by client

Result:

Bit mask indicating whether interrupt was handled and + whether the DSR should be called.

Description:

Interrupt Service Routine definition. A pointer to a + function with this prototype is passed to + cyg_interrupt_create() when an interrupt + object is created. When an interrupt is delivered the function + will be called with the vector number and the data value that + was passed to cyg_interrupt_create(). +

The return value is a bit mask containing one or both of the + following bits:

cyg_DSR_t

Type:
typedef void cyg_DSR_t( cyg_vector_t vector,
+                        cyg_ucount32 count,
+                        cyg_addrword_t data
+                      )
Fields:

vector - vector being delivered

count - number of times DSR has been scheduled

data - data value supplied by client

Result:

None

Description:

Deferred Service Routine prototype. A pointer to a + function with this prototype is passed to + cyg_interrupt_create() when an interrupt + object is created. When the ISR requests the scheduling of its + DSR, this function will be called at some later point. In + addition to the vector and + data arguments, which will be the same as + those passed to the ISR, this routine is also passed a + count of the number of times the ISR has + requested that this DSR be scheduled. This counter is zeroed + each time the DSR actually runs, so it indicates how many + interrupts have occurred since it last ran.


PrevHomeNext
Synchronization LevelsUpFile System Support Infrastructure
\ No newline at end of file diff --git a/doc/html/ref/devapi-device-driver-interface-to-the-kernel.html b/doc/html/ref/devapi-device-driver-interface-to-the-kernel.html new file mode 100644 index 00000000..ac081634 --- /dev/null +++ b/doc/html/ref/devapi-device-driver-interface-to-the-kernel.html @@ -0,0 +1,251 @@ + + + + + + + + +Device Driver Interface to the Kernel +
eCos Reference Manual
PrevNext

Chapter 18. Device Driver Interface to the Kernel

This chapter describes the API that device drivers may use +to interact with the kernel and HAL. It is primarily concerned with +the control and management of interrupts and the synchronization of +ISRs, DSRs and threads.

The same API will be present in configurations where the kernel +is not present. In this case the functions will be supplied by code +acting directly on the HAL.

Interrupt Model

eCos presents a three level interrupt model to +device drivers. This consists of Interrupt Service Routines (ISRs) that are invoked +in response to a hardware interrupt; Deferred +Service Routines (DSRs) that are invoked in response to a request by +an ISR; and threads that are the clients of the driver.

Hardware interrupts are delivered with minimal intervention to an +ISR. The HAL decodes the hardware source of the interrupt and calls +the ISR of the attached interrupt object. This ISR may manipulate the +hardware but is only allowed to make a restricted set of calls on the +driver API. When it returns, an ISR may request that its DSR should be +scheduled to run.

A DSR will be run when it is safe to do so without interfering with +the scheduler. Most of the time the DSR will run immediately after the +ISR, but if the current thread is in the scheduler, it will be delayed +until the thread is finished. A DSR is allowed to make a larger set of +driver API calls, including, in particular, being able to call +cyg_drv_cond_signal() to wake up waiting +threads.

Finally, threads are able to make all API calls and in particular are +allowed to wait on mutexes and condition variables.

For a device driver to receive interrupts it must first define ISR and +DSR routines as shown below, and then call +cyg_drv_interrupt_create(). Using the handle +returned, the driver must then call +cyg_drv_interrupt_attach() to actually attach the +interrupt to the hardware vector.


PrevHomeNext
Serial testing with ser_filterUpSynchronization
\ No newline at end of file diff --git a/doc/html/ref/devapi-device-driver-models.html b/doc/html/ref/devapi-device-driver-models.html new file mode 100644 index 00000000..d4ec05b6 --- /dev/null +++ b/doc/html/ref/devapi-device-driver-models.html @@ -0,0 +1,229 @@ + + + + + + + + +Device Driver Models +
eCos Reference Manual
PrevChapter 18. Device Driver Interface to the KernelNext

Device Driver Models

There are several ways in which device drivers +may be built. The exact model chosen will depend on the properties of +the device and the behavior desired. There are three basic models that +may be adopted.

The first model is to do all device processing in the ISR. When it is +invoked the ISR programs the device hardware directly and accesses +data to be transferred directly in memory. The ISR should also call +cyg_drv_interrupt_acknowledge(). When it is +finished it may optionally request that its DSR be invoked. The DSR +does nothing but call cyg_drv_cond_signal() to +cause a thread to be woken up. Thread level code must call +cyg_drv_isr_lock(), or +cyg_drv_interrupt_mask() to prevent ISRs running +while it manipulates shared memory.

The second model is to defer device processing to the DSR. The ISR +simply prevents further delivery of interrupts by either programming +the device, or by calling +cyg_drv_interrupt_mask(). It must then call +cyg_drv_interrupt_acknowledge() to allow other +interrupts to be delivered and then request that its DSR be +called. When the DSR runs it does the majority of the device handling, +optionally signals a condition variable to wake a thread, and finishes +by calling cyg_drv_interrupt_unmask() to re-allow +device interrupts. Thread level code uses +cyg_drv_dsr_lock() to prevent DSRs running while +it manipulates shared memory. The eCos serial device drivers use this +approach.

The third model is to defer device processing even further to a +thread. The ISR behaves exactly as in the previous model and simply +blocks and acknowledges the interrupt before request that the DSR +run. The DSR itself only calls +cyg_drv_cond_signal() to wake the thread. When +the thread awakens it performs all device processing, and has full +access to all kernel facilities while it does so. It should finish by +calling cyg_drv_interrupt_unmask() to re-allow +device interrupts. The eCos ethernet device drivers are written to +this model.

The first model is good for devices that need immediate processing and +interact infrequently with thread level. The second model trades a +little latency in dealing with the device for a less intrusive +synchronization mechanism. The last model allows device processing to +be scheduled with other threads and permits more complex device +handling.


PrevHomeNext
SMP SupportUpSynchronization Levels
\ No newline at end of file diff --git a/doc/html/ref/devapi-smp-support.html b/doc/html/ref/devapi-smp-support.html new file mode 100644 index 00000000..e58caabf --- /dev/null +++ b/doc/html/ref/devapi-smp-support.html @@ -0,0 +1,201 @@ + + + + + + + + +SMP Support +
eCos Reference Manual
PrevChapter 18. Device Driver Interface to the KernelNext

SMP Support

Some eCos targets contain support for Symmetric Multi-Processing (SMP) +configurations, where more than one CPU may be present. This option +has a number of ramifications for the way in which device drivers must +be written if they are to be SMP-compatible.

Since it is possible for the ISR, DSR and thread components of a +device driver to execute on different CPUs, it is important that +SMP-compatible device drivers use the driver API routines correctly.

Synchronization between threads and DSRs continues to require that the +thread-side code use cyg_drv_dsr_lock() and +cyg_drv_dsr_unlock() to protect access to shared +data. While it is not strictly necessary for DSR code to claim the DSR +lock, since DSRs are run with it claimed already, it is good practice +to do so.

Synchronization between ISRs and DSRs or threads requires that access +to sensitive data be protected, in all places, by calls to +cyg_drv_isr_lock() and +cyg_drv_isr_unlock(). Disabling or masking +interrupts is not adequate, since the thread or DSR may be running on +a different CPU and interrupt enable/disable only work on the current +CPU.

The ISR lock, for SMP systems, not only disables local interrupts, but +also acquires a spinlock to protect against concurrent access from +other CPUs. This is necessary because ISRs are not run with the +scheduler lock claimed. Hence they can run in parallel with the other +components of the device driver.

The ISR lock provided by the driver API is just a shared spinlock that +is available for use by all drivers. If a driver needs to implement a +finer grain of locking, it can use private spinlocks, accessed via the +cyg_drv_spinlock_*() functions.


PrevHomeNext
SynchronizationUpDevice Driver Models
\ No newline at end of file diff --git a/doc/html/ref/devapi-synchronization-levels.html b/doc/html/ref/devapi-synchronization-levels.html new file mode 100644 index 00000000..a3627d1e --- /dev/null +++ b/doc/html/ref/devapi-synchronization-levels.html @@ -0,0 +1,239 @@ + + + + + + + + +Synchronization Levels +
eCos Reference Manual
PrevChapter 18. Device Driver Interface to the KernelNext

Synchronization Levels

Since it would be dangerous for an ISR or DSR to make a call +that might reschedule the current thread (by trying to lock a mutex +for example) all functions in this API have an associated synchronization +level. These levels are:

The following table shows, for each API function, the levels +at which is may be called:

                                  Callable from:
+Function                       ISR     DSR    Thread
+-------------------------------------------------------------------------
+
+cyg_drv_isr_lock                X       X       X
+cyg_drv_isr_unlock              X       X       X
+cyg_drv_spinlock_init                           X
+cyg_drv_spinlock_destroy                        X
+cyg_drv_spinlock_spin           X       X       X
+cyg_drv_spinlock_clear          X       X       X
+cyg_drv_spinlock_try            X       X       X
+cyg_drv_spinlock_test           X       X       X
+cyg_drv_spinlock_spin_intsave   X       X       X
+cyg_drv_spinlock_clear_intsave  X       X       X
+cyg_drv_dsr_lock                        X       X
+cyg_drv_dsr_unlock                      X       X
+cyg_drv_mutex_init                              X
+cyg_drv_mutex_destroy                           X
+cyg_drv_mutex_lock                              X
+cyg_drv_mutex_trylock                           X
+cyg_drv_mutex_unlock                            X
+cyg_drv_mutex_release                           X
+cyg_drv_cond_init                               X
+cyg_drv_cond_destroy                            X
+cyg_drv_cond_wait                               X
+cyg_drv_cond_signal                     X       X
+cyg_drv_cond_broadcast                  X       X
+cyg_drv_interrupt_create                        X
+cyg_drv_interrupt_delete                        X
+cyg_drv_interrupt_attach        X       X       X
+cyg_drv_interrupt_detach        X       X       X
+cyg_drv_interrupt_mask          X       X       X
+cyg_drv_interrupt_unmask        X       X       X
+cyg_drv_interrupt_acknowledge   X       X       X
+cyg_drv_interrupt_configure     X       X       X
+cyg_drv_interrupt_level         X       X       X
+cyg_drv_interrupt_set_cpu       X       X       X
+cyg_drv_interrupt_get_cpu       X       X       X

PrevHomeNext
Device Driver ModelsUpThe API
\ No newline at end of file diff --git a/doc/html/ref/devapi-synchronization.html b/doc/html/ref/devapi-synchronization.html new file mode 100644 index 00000000..3e1fc924 --- /dev/null +++ b/doc/html/ref/devapi-synchronization.html @@ -0,0 +1,218 @@ + + + + + + + + +Synchronization +
eCos Reference Manual
PrevChapter 18. Device Driver Interface to the KernelNext

Synchronization

There are three levels of synchronization supported:

  1. Synchronization with ISRs. This normally means disabling + interrupts to prevent the ISR running during a critical + section. In an SMP environment, this will also require the use of + a spinlock to synchronize with ISRs, DSRs or threads running on + other CPUs. This is implemented by the + cyg_drv_isr_lock() and + cyg_drv_isr_unlock() functions. This + mechanism should be used sparingly and for short periods only. + For finer grained synchronization, individual spinlocks are also + supplied. +

  2. Synchronization with DSRs. This will be implemented in the kernel + by taking the scheduler lock to prevent DSRs running during + critical sections. In non-kernel configurations it will be + implemented by non-kernel code. This is implemented by the + cyg_drv_dsr_lock() and + cyg_drv_dsr_unlock() functions. As with ISR + synchronization, this mechanism should be used sparingly. Only + DSRs and threads may use this synchronization mechanism, ISRs are + not allowed to do this. +

  3. Synchronization with threads. This is implemented with mutexes + and condition variables. Only threads may lock the mutexes and + wait on the condition variables, although DSRs may signal + condition variables. +

Any data that is accessed from more than one level must be protected +against concurrent access. Data that is accessed by ISRs must be +protected with the ISR lock, or a spinlock at all times, +even in ISRs. Data that is shared between DSRs +and threads should be protected with the DSR lock. Data that is only +accessed by threads must be protected with mutexes.


PrevHomeNext
Device Driver Interface to the KernelUpSMP Support
\ No newline at end of file diff --git a/doc/html/ref/devs-eth-synth-ecosynth-ref.html b/doc/html/ref/devs-eth-synth-ecosynth-ref.html new file mode 100644 index 00000000..27720578 --- /dev/null +++ b/doc/html/ref/devs-eth-synth-ecosynth-ref.html @@ -0,0 +1,161 @@ + + + + + + + + +Synthetic Target Ethernet Driver +
eCos Reference Manual
PrevNext

XXVII. Synthetic Target Ethernet Driver

Table of Contents
Synthetic Target Ethernet Driver -- Allow synthetic target applications to perform ethernet I/O

PrevHomeNext
NEC uPD985xx USB Device Driver Synthetic Target Ethernet Driver
\ No newline at end of file diff --git a/doc/html/ref/devs-eth-synth-ecosynth.html b/doc/html/ref/devs-eth-synth-ecosynth.html new file mode 100644 index 00000000..52c68ce1 --- /dev/null +++ b/doc/html/ref/devs-eth-synth-ecosynth.html @@ -0,0 +1,1045 @@ + + + + + + + + +Synthetic Target Ethernet Driver +
eCos Reference Manual
PrevNext

Synthetic Target Ethernet Driver

Name

Synthetic Target Ethernet Support -- Allow synthetic target applications to perform ethernet I/O

Overview

The synthetic target ethernet package can provide up to four network +devices, eth0 to eth3. These can +be used directly by the eCos application or, more commonly, by a +TCP/IP stack that is linked with the eCos application. Each eCos +device can be mapped on to a real Linux network device. For example, +if the Linux PC has two ethernet cards and eth1 is +not currently being used by Linux itself, then one of the eCos devices +can be mapped on to this Linux device. Alternatively, it is possible +to map some or all of the eCos devices on to the ethertap support +provided by the Linux kernel. +

The ethernet package depends on the I/O auxiliary provided by the +synthetic target architectural HAL package. During initialization the +eCos application will attempt to instantiate the desired devices, by +sending a request to the auxiliary. This will load a Tcl script +ethernet.tcl that is responsible for handling the +instantiation request and subsequent I/O operations, for example +transmitting an ethernet packet. However, some of the low-level I/O +operations cannot conveniently be done by a Tcl script so +ethernet.tcl will actually run a separate program +rawether to interact with the Linux network device. +

On the target-side there are configuration options to control which +network devices should be present. For many applications a single +device will be sufficient, but if the final eCos application is +something like a network bridge then the package can support multiple +devices. On the host-side each eCos network device needs to be mapped +on to a Linux one, either a real ethernet device or an ethertap +device. This is handled by an entry in the target definition file: +

synth_device ethernet {
+    eth0 real eth1
+    eth1 ethertap tap3 00:01:02:03:FE:05
+    …
+}

The ethernet package also comes with support for packet logging, +and provides various facilities for use by user Tcl scripts. +

Installation

Before a synthetic target eCos application can access ethernet devices +it is necessary to build and install host-side support. The relevant +code resides in the host +subdirectory of the synthetic target ethernet package, and building it +involves the standard configure, +make and make install steps. +The build involves a new executable rawether which +must be able to access a raw Linux network device. This is achieved by +installing it suid root, so the make install step +has to be run with superuser privileges. +

Caution

Installing rawether suid root introduces a +potential security problem. Although normally +rawether is executed only by the I/O auxiliary, +theoretically it can be run by any program. Effectively it gives any +user the ability to monitor all ethernet traffic and to inject +arbitrary packets into the network. Also, as with any suid root +programs there may be as yet undiscovered exploits. Users and system +administrators should consider the risks before running make +install. +

There are two main ways of building the host-side software. It is +possible to build both the generic host-side software and all +package-specific host-side software, including the ethernet support, +in a single build tree. This involves using the +configure script at the toplevel of the eCos +repository. For more information on this, see the +README.host file at the top of the repository. +Note that if you have an existing build tree which does not include +the synthetic target ethernet support then it will be necessary to +rerun the toplevel configure script: the search for appropriate +packages happens at configure time. +

The alternative is to build just the host-side for this package. +This requires a separate build directory, building directly in the +source tree is disallowed. The configure options +are much the same as for a build from the toplevel, and the +README.host file can be consulted for more +details. It is essential that the ethernet support be configured with +the same --prefix option as other eCos host-side +software, especially the I/O auxiliary provided by the architectural +synthetic target HAL package, otherwise the I/O auxiliary will be +unable to locate the ethernet support. +

Target-side Configuration Options

The target-side code can be configured to support up to four ethernet +devices, eth0 to eth3. By +default eth0 is enabled if the configuration +includes a TCP/IP stack, otherwise it is disabled. The other three +devices are always disabled by default. If any of the devices are +enabled then there will also be the usual configuration options +related to building this package. Other options related to network +devices, for example whether or not to use DHCP, are provided by +the generic network device package. +

Real Ethernet

One obvious way of providing a synthetic target eCos application with +ethernet I/O is to use a real ethernet device in the PC: transmitted +packets go out on a real network, and packets on the network addressed +to the right MAC address are passed on to eCos. This way synthetic +target networking behaves just like networking on a real target with +ethernet hardware. For example, if there is a DHCP server anywhere on +the network then eCos will be able to contact it during networking +startup and get hold of IP address information. +

Configuring the ethernet support to use a real ethernet device +requires a simple entry in the target definition file: +

synth_device ethernet {
+    <eCos device> real <linux device>
+    …
+}

For example, to map the eCos network device eth0 to +the Linux device eth1: +

synth_device ethernet {
+    eth0 real eth1
+    …
+}

It is not possible for an ethernet device to be shared by both the +eCos TCP/IP stack and the Linux one: there would be no simple way to +work out which stack incoming packets are intended for. In theory +it might be possible to do some demultiplexing using distinct IP +addresses, but it would be impossible to support some functionality +such as DHCP. Therefore the rawether program will +refuse to access any ethernet device already in use. On a typical +Linux system eth0 will be used for Linux +networking, and the PC will have to be equipped with additional +ethernet devices for use by eCos. +

The rawether program will access the hardware via +the appropriate Linux device driver, so it is important that the +system is set up such that the relevant module will be automatically +loaded or is already loaded. The details of this will depend on the +installed distribution and version, but typically it will involve an +entry in /etc/modules.conf. +

Ethertap

The Linux kernel's ethertap facility provides a virtual network +interface. A Linux application, for example the +rawether program, can open a special character +device /dev/net/tun, perform various +ioctl calls, and then write +and read ethernet packets. When the device is +opened the Linux kernel automatically creates a new network interface, +for example tap0. The Linux TCP/IP stack can be +made to use this network interface like any other interface, receiving +and transmitting ethernet packets. The net effect is a virtual network +connecting just the Linux and eCos TCP/IP stacks, with no other nodes +attached. By default all traffic remains inside this virtual network +and is never forwarded to a real network. +

Support for the ethertap facility may or may not be provided +automatically, depending on your Linux distribution and version. If +your system does not have a device /dev/net/tun +or a module tun.o then the appropriate kernel +documentation should be consulted, for example +/usr/src/linux-2.4/Documentation/networking/tuntap.txt. +If you are using an old Linux kernel then the ethertap functionality +may be missing completely. When the rawether +program is configured and built, the configure +script will check for a file /usr/include/linux/if_tun.h. If that +file is missing then rawether will be built without +ethertap functionality, and only real ethernet interfaces will be +supported. +

The target definition file is used to map eCos network devices on to +ethertap devices. The simplest usage is: +

synth_device ethernet {
+    eth0 ethertap
+    …
+}

The Linux kernel will automatically allocate the next available tap +network interface. Usually this will be tap0 but if +other software is using the ethertap facility, for example to +implement a VPN, then a different number may be allocated. Usually it +will be better to specify the particular tap device that should be +used for each eCos device, for example: +

synth_device ethernet {
+    eth0 ethertap tap3
+    eth1 ethertap tap4
+    …
+}

The user now knows exactly which eCos device is mapped onto which +Linux device, avoiding much potential confusion. Because the virtual +devices are emulated ethernet devices, they require MAC addresses. +There is no physical hardware to provide these addresses, so normally +MAC addresses will be invented. That means that each time the eCos +application is run it will have different MAC addresses, which makes +it more difficult to compare the results of different runs. To get +more deterministic behaviour it is possible to specify the MAC +addresses in the target definition file: +

synth_device ethernet {
+    eth0 ethertap tap3 00:01:02:03:FE:05
+    eth1 ethertap tap4 00:01:02:03:FE:06
+    …
+}

During the initialization phase the eCos application will instantiate +the various network devices. This will cause the I/O auxiliary to load +the ethernet.tcl script and spawn +rawether processes, which in turn will +open /dev/net/tun and +perform the appropriate ioctl calls. On the Linux +side there will now be new network interfaces such as +tap3, and these can be configured like any other +network interface using commands such as ifconfig. +In addition, if the Linux system is set up with hotplug support then +it may be possible to arrange for the network interface to become +active automatically. On a Red Hat Linux system this would require +files such as +/etc/sysconfig/network-scripts/ifcfg-tap3, +containing data like: +

DEVICE="tap3"
+BOOTPROTO="none"
+BROADCAST=10.2.2.255
+IPADDR="10.2.2.1"
+NETMASK="255.255.255.0"
+NETWORK=10.2.2.0
+ONBOOT="no"

This gives the Linux interface the address 10.2.2.1 +on the network 10.2.2.0. The eCos network device +should be configured with a compatible address. One way of doing this +would be to enable CYGHWR_NET_DRIVER_ETH0_ADDRS, +set CYGHWR_NET_DRIVER_ETH0_ADDRS_IP to +10.2.2.2, and similarly update the +NETMASK, BROADCAST, +GATEWAY and SERVER configuration +options. +

It should be noted that the ethertap facility provides a virtual +network, and any packets transmitted by the eCos application will +not appear on a real network. Therefore usually there will no +accessible DHCP server, and eCos cannot use DHCP or BOOTP to obtain IP +address information. Instead the eCos configuration should use manual +or static addresses. +

An alternative approach would be to set up the Linux box as a network +bridge, using commands like brctl to connect the +virtual network interface tap3 to a physical +network interface such as eth0. Any packets sent by +the eCos application will get forwarded automatically to the real +network, and some packets on the real network will get forwarded over +the virtual network to the eCos application. Note that the eCos +application might also get some packets that were not intended for it, +but usually those will just be discarded by the eCos TCP/IP stack. The +exact details of setting up a network bridge are left as an exercise +to the reader. +

Packet Logging

The ethernet support comes with support for logging the various +packets that are transferred, including a simple protocol analyser. +This generates simple text output using the filter mechanisms provided +by the I/O auxiliary, so it is possible to control the appearance and +visibility of different types of output. For example the user might +want to see IPv4 headers and all ICMPv4 and ARP operations, but not +TCP headers or any of the packet data. +

The protocol analyser is not intended to be a fully functional +analyser with knowledge of many different TCP/IP protocols, advanced +search facilities, graphical traffic displays, and so on. +Functionality like that is already provided by other tools such as +ethereal and +tcpdump. Achieving similar levels of +functionality would require a lot of work, for very little gain. It is +still useful to have some protocol analysis functionality available +because the output will be interleaved with other output, for example +printf calls from the application. That may make +it easier to understand the sequence of events. +

One problem with logging ethernet traffic is that it can involve very +large amounts of data. If the application is expected to run for a +long time or is very I/O intensive then it is easy to end up with many +megabytes. When running in graphical mode all the logging data will be +held in memory, even data that is not currently visible. At some point +the system will begin to run low on memory and performance will +suffer. To avoid problems, the ethernet script maintains a flag that +controls whether or not packet logging is active. The default is to +run with logging disabled, but this can be changed in the target +definition file: +

synth_device ethernet {
+    …
+    logging 1
+}

The ethernet script will add a toolbar button that allows this flag to +be changed at run-time, allowing the user to capture traffic for +certain periods of time while the application continues running. +

The target definition file can contain the following entries for the +various packet logging filters: +

synth_device ethernet {
+    …
+    filter ether  -hide 0 -background LightBlue -foreground "#000080"
+    filter arp    -hide 0 -background LightBlue -foreground "#000050"
+    filter ipv4   -hide 0 -background LightBlue -foreground "#000040"
+    filter ipv6   -hide 1 -background LightBlue -foreground "#000040"
+    filter icmpv4 -hide 0 -background LightBlue -foreground "#000070"
+    filter icmpv6 -hide 1 -background LightBlue -foreground "#000070"
+    filter udp    -hide 0 -background LightBlue -foreground "#000030"
+    filter tcp    -hide 0 -background LightBlue -foreground "#000020"
+    filter hexdata   -hide 1 -background LightBlue -foreground "#000080"
+    filter asciidata -hide 1 -background LightBlue -foreground "#000080"
+}

All output will show the eCos network device, for example +eth0, and the direction relative to the eCos +application. Some of the filters will show packet headers, for example +ether gives details of the ethernet packet header +and tcp gives information about TCP headers such as +whether or not the SYN flag is set. The TCP and UDP filters will also +show source and destination addresses, using numerical addresses and +if possible host names. However, host names will only be shown if the +host appears in /etc/hosts: doing full DNS +lookups while the data is being captured would add significantly to +complexity and overhead. The hexdata and +asciidata filters show the remainder of the packets +after the ethernet, IP and TCP or UDP headers have been stripped. +

Some of the filters will provide raw dumps of some of the packet data. +Showing up to 1500 bytes of data for each packet would be expensive, +and often the most interesting information is near the start of the +packet. Therefore it is possible to set a limit on the number of bytes +that will be shown using the target definition file. The default limit +is 64 bytes. +

synth_device ethernet {
+    …
+    max_show 128
+}

User Interface Additions

When running in graphical mode the ethernet script extends the user +interface in two ways: a button is added to the toolbar so that users +can enable or disable packet logging; and an entry is added to the +Help menu for the ethernet-specific documentation. +

Command Line Arguments

The synthetic target ethernet support does not use any command line +arguments. All configuration is handled through the target definition +file. +

Hooks

The ethernet support defines two hooks that can be used by other +scripts, especially user scripts: ethernet_tx and +ethernet_rx. The tx hook is called whenever eCos +tries to transmit a packet. The rx hook is called whenever an incoming +packet is passed to the eCos application. Note that this may be a +little bit after the packet was actually received by the I/O auxiliary +since it can buffer some packets. Both hooks are called with two +arguments, the name of the network device and the packet being +transferred. Typical usage might look like: +

  proc my_tx_hook { arg_list } {
+    set dev [lindex $arg_list 0]
+    incr ::my_ethernet_tx_packets($dev)
+    incr ::my_ethernet_tx_bytes($dev) [string length [lindex $arg_list 1]]
+  }
+  proc my_rx_hook { arg_list } {
+    set dev [lindex $arg_list 0]
+    incr ::my_ethernet_rx_packets($dev)
+    incr ::my_ethernet_rx_bytes($dev) [string length [lindex $arg_list 1]]
+  }
+  synth::hook_add "ethernet_tx" my_tx_hook
+  synth::hook_add "ethernet_rx" my_rx_hook

The global arrays my_ethernet_tx_packets etc. will +now be updated whenever there is ethernet traffic. Other code, +probably running at regular intervals by use of the Tcl +after procedure, can then use this information to +update a graphical monitor of some sort. +

Additional Tcl Procedures

The ethernet support provides one additional Tcl procedure that can be +used by other scripts; +

ethernet::devices_get_list    

This procedure returns a list of the ethernet devices that have been +instantiated, for example {eth0 eth1}. +


PrevHomeNext
Synthetic Target Ethernet DriverUpSynthetic Target Watchdog Device
\ No newline at end of file diff --git a/doc/html/ref/devs-usb-nec-upd985xx-ref.html b/doc/html/ref/devs-usb-nec-upd985xx-ref.html new file mode 100644 index 00000000..56350ecc --- /dev/null +++ b/doc/html/ref/devs-usb-nec-upd985xx-ref.html @@ -0,0 +1,161 @@ + + + + + + + + +NEC uPD985xx USB Device Driver +
eCos Reference Manual
PrevNext

XXVI. NEC uPD985xx USB Device Driver

Table of Contents
NEC uPD985xx USB Device Driver -- Device driver for the on-chip NEC uPD985xx USB device

PrevHomeNext
SA11X0 USB Device Driver NEC uPD985xx USB Device Driver
\ No newline at end of file diff --git a/doc/html/ref/devs-usb-nec-upd985xx.html b/doc/html/ref/devs-usb-nec-upd985xx.html new file mode 100644 index 00000000..13eef4f6 --- /dev/null +++ b/doc/html/ref/devs-usb-nec-upd985xx.html @@ -0,0 +1,484 @@ + + + + + + + + +NEC uPD985xx USB Device Driver +
eCos Reference Manual
PrevNext

NEC uPD985xx USB Device Driver

Name

NEC uPD985xx USB Support -- Device driver for the on-chip NEC uPD985xx USB device

NEC uPD985xx USB Hardware

The NEC uPD985xx family of processors is supplied with an on-chip USB +slave device, the UDC (USB Device Controller). This supports seven +endpoints. Endpoint 0 can only be used for control messages. Endpoints +1 and 2 are for isochronous transmits and receives respectively. +Endpoints 3 and 4 support bulk transmits and receives. Endpoints 5 and +6 normally support interrupt transmits and receives, but endpoint 5 can +also be configured to support bulk transmits. At this time only the +control endpoint 0, the bulk endpoints 3 and 4, and the interrupt +endpoint 5 are supported.

Endpoint Data Structures

The uPD985xx USB device driver can provide up to four data structures +corresponding to the four supported endpoints: a +usbs_control_endpoint structure +usbs_upd985xx_ep0; +usbs_tx_endpoint structures +usbs_upd985xx_ep3 and +usbs_upd985xx_ep5; and a +usbs_rx_endpoint +usbs_upd985xx_ep4. The header file +cyg/io/usb/usbs_nec_upd985xx.h +provides declarations for these.

Not all applications will require support for all the endpoints. For +example, if the intended use of the UDC only involves peripheral to +host transfers then usbs_upd985xx_ep4 is redundant. +The device driver provides configuration options to control the +presence of each endpoint:

  1. Endpoint 0 is controlled by +CYGFUN_DEVS_USB_UPD985XX_EP0. This defaults to +enabled if there are any higher-level packages that require USB +hardware or if the global preference +CYGGLO_IO_USB_SLAVE_APPLICATION is enabled, +otherwise it is disabled. Usually this has the desired effect. It may +be necessary to override this in special circumstances, for example if +the target board uses an external USB chip in preference to the UDC +and it is that external chip's device driver that should be used +rather than the on-chip UDC. It is not possible to disable endpoint 0 +and at the same time enable one or both of the other endpoints, since +a USB device is only usable if it can process the standard control +messages.

  2. Endpoint 3 is controlled by +CYGPKG_DEVS_USB_UPD985XX_EP3. By default this +endpoint is disabled: according to NEC erratum U3 there may be +problems when attempting bulk transfers of 192 bytes or greater. As an +alternative the device driver provides support for endpoint 5, +configured to allow bulk transfers. Endpoint 3 can be enabled if the +application only requires bulk transfers of less than 192 bytes, or if +this erratum is not applicable to the system being developed for other +reasons.

  3. Endpoint 4 is controlled by +CYGPKG_DEVS_USB_UPD985XX_EP4. This is enabled by +default whenever endpoint 0 is enabled, but it can be disabled +manually.

  4. Endpoint 5 is controlled by +CYGPKG_DEVS_USB_UPD985XX_EP5. This is enabled by +default whenever endpoint 0 is enabled, but it can be disabled +manually. There is also a configuration option +CYGIMP_DEVS_USB_UPD985XX_EP5_BULK, enabled by +default. This option allows the endpoint to be used for bulk +transfers rather than interrupt transfers.

The uPD985xx USB device driver implements the interface specified by the +common eCos USB Slave Support package. The documentation for that +package should be consulted for further details.

The device driver assumes a bulk packet size of 64 bytes, so this +value should be used in the endpoint descriptors in the enumeration +data provided by application code. The device driver also assumes +a control packet size of eight bytes, and again this should be +reflected in the enumeration data. If endpoint 5 is configured for +interrupt rather than bulk transfers then the maximum packet size is +limited to 64 bytes by the USB standard.

Devtab Entries

In addition to the endpoint data structures the uPD985xx USB device +driver can also provide devtab entries for each endpoint. This allows +higher-level code to use traditional I/O operations such as +open/read/write +rather than the USB-specific non-blocking functions like +usbs_start_rx_buffer. These devtab entries are +optional since they are not always required. The relevant +configuration options are +CYGVAR_DEVS_USB_UPD985XX_EP0_DEVTAB_ENTRY, +CYGVAR_DEVS_USB_UPD985XX_EP3_DEVTAB_ENTRY, +CYGVAR_DEVS_USB_UPD985XX_EP4_DEVTAB_ENTRY, and +CYGVAR_DEVS_USB_UPD985XX_EP5_DEVTAB_ENTRY. By +default these devtab entries are provided if the global preference +CYGGLO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES is enabled, +which is usually the case. Obviously a devtab entry for a given +endpoint will only be provided if the underlying endpoint is enabled. +For example, there will not be a devtab entry for endpoint 4 if +CYGPKG_DEVS_USB_UPD985XX_EP4 is disabled.

The names for the devtab entries are determined by using a +configurable base name and appending 0c, +3w, 4r or 5w. +The base name is determined by the configuration option +CYGDAT_DEVS_USB_UPD985XX_DEVTAB_BASENAME and has a +default value of /dev/usbs, so the devtab entry for +endpoint 4 would default to /dev/usbs4r. If the +target hardware involves multiple USB devices then application +developers may have to change the base name to prevent a name clash +with other USB device drivers.

Restrictions

The current device driver imposes a restriction on certain bulk +receives on endpoint 4. If the protocol being used involves +variable-length transfers, in other words if the host is allowed to +send less data than a maximum-sized transfer, then the buffer passed +to the device driver for receives must be aligned to a 16-byte +cacheline boundary and it must be a multiple of this 16-byte cacheline +size. This restriction does not apply if the protocol only involves +fixed-size transfers.

Optional Hardware Workarounds

The NEC errata list a number of other problems that affect the USB +device driver. The device driver contains workarounds for these, which +are enabled by default but can be disabled if the application +developer knows that the errata are not relevant to the system being +developed.

Erratum S1 lists a possible problem if the device driver attempts +multiple writes to the USB hardware. This is circumvented by a +dummy read operation after every write. If the workaround is not +required then the configuration option +CYGIMP_DEVS_USB_UPD985XX_IBUS_WRITE_LIMIT can be disabled.

Errata U3 and U4 describe various problems related to concurrent +transmissions on different endpoints. By default the device driver +works around this by serializing all transmit operations. For example +if the device driver needs to send a response to a control message on +endpoint 0 while there is an ongoing bulk transfer on endpoint 5, the +response is delayed until the bulk transfer has completed. Under +typical operating conditions this does not cause any problems: +endpoint 0 traffic usually happens only during initialization, when +the target is connected to the host, while endpoint 5 traffic only +happens after initialization. However if transmit serialization is +inappropriate for the system being developed then it can be disabled +using the configuration option +CYGIMP_DEVS_USB_UPD985XX_SERIALIZE_TRANSMITS.

Platform Dependencies

On some platforms it is necessary for the low-level USB device driver +to perform some additional operations during start-up. For example it +may be necessary to manipulate one of the processor's GPIO lines +before the host can detect a new USB peripheral and attempt to +communicate with it. This avoids problems if the target involves a +significant amount of work prior to device driver initialization, for +example a power-on self-test sequence. If the USB host attempted to +contact the target before the USB device driver had been initialized, +it would fail to get the expected responses and conclude that the +target was not a functional USB peripheral.

Platform-specific initialization code can be provided via a macro +UPD985XX_USB_PLATFORM_INIT. Typically this macro +would be defined in the platform HAL's header file +cyg/hal/plf_io.h. If the +current platform defines such a macro, the USB device driver will +invoke it during the endpoint 0 start-up operation.


PrevHomeNext
NEC uPD985xx USB Device DriverUpSynthetic Target Ethernet Driver
\ No newline at end of file diff --git a/doc/html/ref/devs-usb-sa11x0-ref.html b/doc/html/ref/devs-usb-sa11x0-ref.html new file mode 100644 index 00000000..2c8889da --- /dev/null +++ b/doc/html/ref/devs-usb-sa11x0-ref.html @@ -0,0 +1,161 @@ + + + + + + + + +SA11X0 USB Device Driver +
eCos Reference Manual
PrevNext

XXV. SA11X0 USB Device Driver

Table of Contents
SA11X0 USB Device Driver -- Device driver for the on-chip SA11X0 USB device

PrevHomeNext
Porting SA11X0 USB Device Driver
\ No newline at end of file diff --git a/doc/html/ref/devs-usb-sa11x0.html b/doc/html/ref/devs-usb-sa11x0.html new file mode 100644 index 00000000..03f33db4 --- /dev/null +++ b/doc/html/ref/devs-usb-sa11x0.html @@ -0,0 +1,456 @@ + + + + + + + + +SA11X0 USB Device Driver +
eCos Reference Manual
PrevNext

SA11X0 USB Device Driver

Name

SA11X0 USB Support -- Device driver for the on-chip SA11X0 USB device

SA11X0 USB Hardware

The Intel StrongARM SA11x0 family of processors is supplied with an +on-chip USB slave device, the UDC (USB Device Controller). This +supports three endpoints. Endpoint 0 can only be used for control +messages. Endpoint 1 can only be used for bulk transfers from host to +peripheral. Endpoint 2 can only be used for bulk transfers from +peripheral to host. Isochronous and interrupt transfers are not +supported.

Caution

Different revisions of the SA11x0 silicon have had various problems +with the USB support. The device driver has been tested primarily +against stepping B4 of the SA1110 processor, and may not function as +expected with other revisions. Application developers should obtain +the manufacturer's current errata sheets and specification updates. +The B4 stepping still has a number of problems, but the device driver +can work around these. However there is a penalty in terms of extra +code, extra cpu cycles, and increased dispatch latency because extra +processing is needed at DSR level. Interrupt latency should not be +affected.

There is one specific problem inherent in the UDC design of which +application developers should be aware: the hardware cannot fully +implement the USB standard for bulk transfers. A bulk transfer +typically consists of some number of full-size 64-byte packets and is +terminated by a packet less than the full size. If the amount of data +transferred is an exact multiple of 64 bytes then this requires a +terminating packet of 0 bytes of data (plus header and checksum). The +SA11x0 USB hardware does not allow a 0-byte packet to be transmitted, +so the device driver is forced to substitute a 1-byte packet and the +host receives more data than expected. Protocol support is needed so +that the appropriate host-side device driver can allow buffer space +for the extra byte, detect when it gets sent, and discard it. +Consequently certain standard USB class protocols cannot be +implemented using the SA11x0, and therefore custom host-side device +drivers will generally have to be provided, rather than re-using +existing ones that understand the standard protocol.

Endpoint Data Structures

The SA11x0 USB device driver can provide up to three data structures +corresponding to the three endpoints: a +usbs_control_endpoint structure +usbs_sa11x0_ep0; a +usbs_rx_endpoint +usbs_sa11x0_ep1; and a +usbs_tx_endpoint +usbs_sa11x0_ep2. The header file +cyg/io/usb/usbs_sa11x0.h +provides declarations for these.

Not all applications will require support for all the endpoints. For +example, if the intended use of the UDC only involves peripheral to +host transfers then usbs_sa11x0_ep1 is redundant. +The device driver provides configuration options to control the +presence of each endpoint:

  1. Endpoint 0 is controlled by +CYGFUN_DEVS_USB_SA11X0_EP0. This defaults to +enabled if there are any higher-level packages that require USB +hardware or if the global preference +CYGGLO_IO_USB_SLAVE_APPLICATION is enabled, +otherwise it is disabled. Usually this has the desired effect. It may +be necessary to override this in special circumstances, for example if +the target board uses an external USB chip in preference to the UDC +and it is that external chip's device driver that should be used +rather than the on-chip UDC. It is not possible to disable endpoint 0 +and at the same time enable one or both of the other endpoints, since +a USB device is only usable if it can process the standard control +messages.

  2. Endpoint 1 is controlled by +CYGPKG_DEVS_USB_SA11X0_EP1. By default it is +enabled whenever endpoint 0 is enabled, but it can be disabled +manually when not required.

  3. Similarly endpoint 2 is controlled by +CYGPKG_DEVS_USB_SA11X0_EP2. This is also enabled by +default whenever endpoint 0 is enabled, but it can be disabled manually.

The SA11X0 USB device driver implements the interface specified by the +common eCos USB Slave Support package. The documentation for that +package should be consulted for further details. There is only one +major deviation: when there is a peripheral to host transfer on +endpoint 2 which is an exact multiple of the bulk transfer packet size +(usually 64 bytes) the device driver has to pad the transfer with one +extra byte. This is because of a hardware limitation: the UDC is +incapable of transmitting 0-byte packets as required by the USB +specification. Higher-level code, including the host-side device +driver, needs to be aware of this and adapt accordingly.

The device driver assumes a bulk packet size of 64 bytes, so this +value should be used in the endpoint descriptors in the enumeration +data provided by application code. There is experimental code +for running with DMA disabled, +in which case the packet size will be 16 bytes rather than 64.

Devtab Entries

In addition to the endpoint data structures the SA11X0 USB device +driver can also provide devtab entries for each endpoint. This allows +higher-level code to use traditional I/O operations such as +open/read/write +rather than the USB-specific non-blocking functions like +usbs_start_rx_buffer. These devtab entries are +optional since they are not always required. The relevant +configuration options are +CYGVAR_DEVS_USB_SA11X0_EP0_DEVTAB_ENTRY, +CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY and +CYGVAR_DEVS_USB_SA11X0_EP2_DEVTAB_ENTRY. By default +these devtab entries are provided if the global preference +CYGGLO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES is enabled, +which is usually the case. Obviously a devtab entry for a given +endpoint will only be provided if the underlying endpoint is enabled. +For example, there will not be a devtab entry for endpoint 1 if +CYGPKG_DEVS_USB_SA11X0_EP1 is disabled.

The names for the three devtab entries are determined by using a +configurable base name and appending 0c, +1r or 2w. The base name is +determined by the configuration option +CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME and has a +default value of /dev/usbs, so the devtab entry for +endpoint 1 would default to /dev/usbs1r. If the +target hardware involves multiple USB devices then application +developers may have to change the base name to prevent a name clash.

DMA Engines

The SA11X0 UDC provides only limited fifos for bulk transfers on +endpoints 1 and 2; smaller than the normal 64-byte bulk packet size. +Therefore a typical transfer requires the use of DMA engines. The +SA11x0 provides six DMA engines that can be used for this, and the +endpoints require one each (assuming both endpoints are enabled). At +the time of writing there is no arbitration mechanism to control +access to the DMA engines. By default the device driver will use +DMA engine 4 for endpoint 1 and DMA engine 5 for endpoint 2, and it +assumes that no other code uses these particular engines.

The exact DMA engines that will be used are determined by the +configuration options +CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL and +CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL. These +options have the booldata flavor, allowing the use of DMA to be +disabled completely in addition to controlling which DMA engines are +used. If DMA is disabled then the device driver will attempt to +work purely using the fifos, and the packet size will be limited to +only 16 bytes. This limit should be reflected in the appropriate +endpoint descriptors in the enumeration data. The code for driving the +endpoints without DMA should be considered experimental. At best it +will be suitable only for applications where the amount of data +transferred is relatively small, because four times as many interrupts +will be raised and performance will suffer accordingly.


PrevHomeNext
SA11X0 USB Device DriverUpNEC uPD985xx USB Device Driver
\ No newline at end of file diff --git a/doc/html/ref/devs-watchdog-synth-ref.html b/doc/html/ref/devs-watchdog-synth-ref.html new file mode 100644 index 00000000..a448aa6e --- /dev/null +++ b/doc/html/ref/devs-watchdog-synth-ref.html @@ -0,0 +1,161 @@ + + + + + + + + +Synthetic Target Watchdog Device +
eCos Reference Manual
PrevNext


PrevHomeNext
Synthetic Target Ethernet Driver Synthetic Target Watchdog Device
\ No newline at end of file diff --git a/doc/html/ref/devs-watchdog-synth.html b/doc/html/ref/devs-watchdog-synth.html new file mode 100644 index 00000000..7d0cbf32 --- /dev/null +++ b/doc/html/ref/devs-watchdog-synth.html @@ -0,0 +1,632 @@ + + + + + + + + +Synthetic Target Watchdog Device +
eCos Reference Manual
Prev 

Synthetic Target Watchdog Device

Name

Synthetic Target Watchdog Device -- Emulate watchdog hardware in the synthetic target

Overview

Some target hardware comes equipped with a watchdog timer. Application +code can start this timer and after a certain period of time, +typically a second, the watchdog will trigger. Usually this causes the +hardware to reboot. The application can prevent this by regularly +resetting the watchdog. An automatic reboot can be very useful when +deploying hardware in the field: a hardware glitch could cause the +unit to hang; or the software could receive an unexpected sequence of +inputs, never seen in the laboratory, causing the system to lock up. +Often the hardware is still functional, and a reboot sorts out the +problem with only a brief interruption in service. +

The synthetic target watchdog package emulates watchdog hardware. +During system initialization watchdog device will be instantiated, +and the watchdog.tcl script will be loaded by the +I/O auxiliary. When the eCos application starts the watchdog device, +the watchdog.tcl script will start checking the +state of the eCos application at one second intervals. A watchdog +reset call simply involves a message to the I/O auxiliary. If the +watchdog.tcl script detects that a second has +elapsed +without a reset then it will send a SIGPWR signal +to the eCos application, causing the latter to terminate. If gdb is +being used to run the application, the user will get a chance to +investigate what is happening. This behaviour is different from real +hardware in that there is no automatic reboot, but the synthetic +target is used only for development purposes, not deployment in the +field: if a reboot is desired then this can be achieved very easily +by using gdb commands to run another instance of the application. +

Installation

Before a synthetic target eCos application can use a watchdog device +it is necessary to build and install host-side support. The relevant +code resides in the host +subdirectory of the synthetic target watchdog package, and building it +involves the standard configure, +make and make install steps. The +implementation of the watchdog support does not require any +executables, just a Tcl script watchdog.tcl and +some support files, so the make step is a no-op. +

There are two main ways of building the host-side software. It is +possible to build both the generic host-side software and all +package-specific host-side software, including the watchdog support, +in a single build tree. This involves using the +configure script at the toplevel of the eCos +repository. For more information on this, see the +README.host file at the top of the repository. +Note that if you have an existing build tree which does not include +the synthetic target watchdog support then it will be necessary to +rerun the toplevel configure script: the search for appropriate +packages happens at configure time. +

The alternative is to build just the host-side for this package. +This requires a separate build directory, building directly in the +source tree is disallowed. The configure options +are much the same as for a build from the toplevel, and the +README.host file can be consulted for more +details. It is essential that the watchdog support be configured with +the same --prefix option as other eCos host-side +software, especially the I/O auxiliary provided by the architectural +synthetic target HAL package, otherwise the I/O auxiliary will be +unable to locate the watchdog support. +

Target-side +Configuration

The watchdog device depends on the generic watchdog support, +CYGPKG_IO_WATCHDOG: if the generic support is +absent then the watchdog device will be inactive. Some templates +include this generic package by default, but not all. If the +configuration does not include the generic package then it can be +added using the eCos configuration tools, for example: +

$ ecosconfig add CYGPKG_IO_WATCHDOG

By default the configuration will use the hardware-specific support, +i.e. this package. However the generic watchdog package contains an +alternative implementation using the kernel alarm facility, and that +implementation can be selected if desired. However usually it will be +better to rely on an external watchdog facility as provided by the I/O +auxiliary and the watchdog.tcl script: if there +are serious problems within the application, for example memory +corruption, then an internal software-only implementation will not be +reliable. +

The watchdog resolution is currently fixed to one second: if the +device does not receive a reset signal at least once a second then +the watchdog will trigger and the eCos application will be terminated +with a SIGPWR signal. The current implementation +does not allow this resolution to be changed. +

On some targets the watchdog device does not perform a hard reset. +Instead the device works more or less via the interrupt subsystem, +allowing application code to install action routines that will be +called when the watchdog triggers. The synthetic target watchdog +support effectively does perform a hard reset, by sending a +SIGPWR signal to the eCos application, and there is +no support for action routines. +

The synthetic target watchdog package provides some configuration +options for manipulating the compiler flags used for building the +target-side code. That code is fairly simple, so for nearly all +applications the default flags will suffice. +

It should be noted that the watchdog device is subject to selective +linking. Unless some code explicitly references the device, for +example by calling the start and reset functions, the watchdog support +will not appear in the final executable. This is desirable because a +watchdog device has no effect until started. +

Wallclock versus Elapsed Time

On real hardware the watchdog device uses wallclock time: if the +device does not receive a reset signal within a set period of time +then the watchdog will trigger. When developing for the synthetic +target this is not always appropriate. There may be other processes +running, using up some or most of the cpu time. For example, the +application may be written such that it will issue a reset after some +calculations which are known to complete within half a second, well +within the one-second resolution of the watchdog device. However if +other Linux processes are running then the synthetic target +application may get timesliced, and half a second of computation may +take several seconds of wallclock time. +

Another problem with using wallclock time is that it interferes with +debugging: if the application hits a breakpoint then it is unlikely +that the user will manage to restart it in less than a second, and the +watchdog will not get reset in time. +

To avoid these problems the synthetic target watchdog normally uses +consumed cpu time rather than wallclock time. If the application is +timesliced or if it is halted inside gdb then it does not consume any +cpu time. The application actually has to spend a whole second's worth +of cpu cycles without issuing a reset before the watchdog triggers. +

However using consumed cpu time is not a perfect solution either. If +the application makes blocking system calls then it is not using cpu +time. Interaction with the I/O auxiliary involves system calls, but +these should take only a short amount of time so their effects can be +ignored. If the application makes direct system calls such as +cyg_hal_sys_read then the system behaviour +becomes undefined. In addition by default the idle thread will make +blocking select system calls, effectively waiting +until an interrupt occurs. If an application spends much of its time +idle then the watchdog device may take much longer to trigger than +expected. It may be desirable to enable the synthetic target HAL +configuration option CYGIMP_HAL_IDLE_THREAD_SPIN, +causing the idle thread to spin rather than block, at the cost of +wasted cpu cycles. +

The default is to use consumed cpu time, but this can be changed in +the target definition file: +

synth_device watchdog {
+    use wallclock_time
+    …
+}

User Interface

When the synthetic target is run in graphical mode the watchdog device +extends the user interface in two ways. The Help +menu is extended with an entry for the watchdog-specific +documentation. There is also a graphical display of the current state +of the watchdog. Initially the watchdog is asleep: +

When application code starts the device the watchdog will begin to +keep an eye on things (or occasionally both eyes). +

If the watchdog triggers the display will change again, and optionally +the user can receive an audible alert. The location of the watchdog +display within the I/O auxiliary's window can be controlled via +a watchdog_pack entry in the target definition +file. For example the following can be used to put the watchdog +display to the right of the central text window: +

synth_device watchdog {
+    watchdog_pack -in .main.e -side top
+    …
+}

The user interface section of the generic synthetic target HAL +documentation can be consulted for more information on window packing. +

By default the watchdog support will not generate an audible alert +when the watchdog triggers, to avoid annoying colleagues. Sound can be +enabled in the target definition file, and two suitable files +sound1.au and sound2.au are +supplied as standard: +

synth_device watchdog {
+    sound sound1.au
+    …
+}

An absolute path can be specified if desired: +

synth_device watchdog {
+    sound /usr/share/emacs/site-lisp/emacspeak/sounds/default-8k/alarm.au
+    …
+}

Sound facilities are not built into the I/O auxiliary itself, instead +an external program is used. The default player is +play, a front-end to the +sox application shipped with some Linux +distributions. If another player should be used then this can be +specified in the target definition file: +

synth_device watchdog {
+    …
+    sound_player my_sound_player

The specified program will be run in the background with a single +argument, the sound file. +

Command Line Arguments

The watchdog support does not use any command line arguments. All +configuration is handled through the target definition file. +

Hooks

The watchdog support does not provide any hooks for use by other +scripts. There is rarely any need for customizing the system's +behaviour when a watchdog triggers because those should be rare +events, even during application development. +

Additional Tcl Procedures

The watchdog support does not provide any additional Tcl procedures or +variables for use by other scripts. +


PrevHome 
Synthetic Target Watchdog DeviceUp 
\ No newline at end of file diff --git a/doc/html/ref/disks-command.html b/doc/html/ref/disks-command.html new file mode 100644 index 00000000..652fe41d --- /dev/null +++ b/doc/html/ref/disks-command.html @@ -0,0 +1,223 @@ + + + + + + + + +disks +
eCos Reference Manual
PrevNext

disks

Name

disks -- List available disk partitions.

Arguments

None.

Description

The disks command is used to list disk partitions recognized by RedBoot.

Examples

Show what disk partitions are available. +
 
+RedBoot> disks
+hda1     Linux Swap
+hda2     Linux
+00100000: 00 3E 00 06 00 06 00 06  00 00 00 00 00 00 00 00  |.>..............|
+00100010: 00 00 00 78 00 70 00 60  00 60 00 60 00 60 00 60  |...x.p.`.`.`.`.`|
+

\ No newline at end of file diff --git a/doc/html/ref/download-command.html b/doc/html/ref/download-command.html new file mode 100644 index 00000000..76b50285 --- /dev/null +++ b/doc/html/ref/download-command.html @@ -0,0 +1,741 @@ + + + + + + + + +load +
eCos Reference Manual
PrevNext

load

Name

load -- Download programs or data to the RedBoot platform

Arguments

NameTypeDescriptionDefault
-vBooleanDisplay a small spinner (indicator) +while the download is in progress. This is just for feedback, especially +during long loads. Note that the option has no effect when using a +serial download method since it would interfere with the protocol.quiet
-dBooleanDecompress data stream (gzip data)non-compressed data
-rBooleanRaw (or binary) dataformatted (S-records, ELF image, etc)
-m tftp Transfer data via the network using TFTP protocol.TFTP
-m http Transfer data via the network using HTTP protocol.TFTP
-m xmodem Transfer data using X-modem protocol.TFTP
-m ymodem Transfer data using Y-modem protocol.TFTP
-m disk Transfer data from a local disk.TFTP
-h server_IP_addressNumeric IP or DNS nameThe IP address of the TFTP or HTTP server.Value set by ip_address
-b locationNumberAddress in memory to load the data. Formatted data streams will have +an implied load address which this option may override.Depends on data format
-c channelNumberSpecify which I/O channel to +use for download. This option is only supported when using either +xmodem or ymodem protocol.Depends on data format
file_nameStringThe name of the file on the TFTP or HTTP +server or the local disk. Details of how this is specified for TFTP are +host-specific. For local disk files, the name must be in disk: +filename format. The disk portion must match one of the disk +names listed by the disks command.None

Description

The load command is used to download +data into the target system. Data can be loaded via a network connection, +using either the TFTP or HTTP protocols, or the console serial connection using the +X/Y modem protocol. Files may also be loaded directly from local filesystems +on disk. Files to be downloaded may either be executable images in +ELF executable program format, +Motorola S-record (SREC) +format or raw data. +

Examples

Download a Motorola S-record (or ELF) image, using TFTP, specifying the +base memory address. +
RedBoot> load redboot.ROM -b 0x8c400000
+Address offset = 0x0c400000
+Entry point: 0x80000000, address range: 0x80000000-0x8000fe80
+

Download a Motorola S-record (or ELF) image, using HTTP, specifying the +host [server] address. +
RedBoot> load /redboot.ROM -m HTTP -h 192.168.1.104
+Address offset = 0x0c400000
+Entry point: 0x80000000, address range: 0x80000000-0x8000fe80
+

Load an ELF file from /dev/hda1 which should be an EXT2 partition: +
RedBoot> load -mode disk hda1:hello.elf
+Entry point: 0x00020000, address range: 0x00020000-0x0002fd70
+


PrevHomeNext
ip_addressUpmcmp
\ No newline at end of file diff --git a/doc/html/ref/dump-command.html b/doc/html/ref/dump-command.html new file mode 100644 index 00000000..05979c9e --- /dev/null +++ b/doc/html/ref/dump-command.html @@ -0,0 +1,535 @@ + + + + + + + + +dump +
eCos Reference Manual
PrevNext

dump

Name

dump -- Display memory.

Description

Display a range of memory on the system console.

The x is a synonym for dump.

Note that this command could +be detrimental if used on memory mapped hardware registers.

The memory is displayed at most sixteen bytes per line, first as the +raw hex value, followed by an ASCII interpretation of the data.

Examples

Display a buffer, one byte at a time. +
 
+RedBoot> mfill -b 0x100000 -l 0x20 -p 0xDEADFACE
+RedBoot> x -b 0x100000
+00100000: CE FA AD DE CE FA AD DE  CE FA AD DE CE FA AD DE  |................|
+00100010: CE FA AD DE CE FA AD DE  CE FA AD DE CE FA AD DE  |................|

Display a buffer, one short (16 bit) word at a time. Note in this case that +the ASCII interpretation is suppressed. +
 
+RedBoot> dump -b 0x100000 -2
+00100000: FACE DEAD FACE DEAD  FACE DEAD FACE DEAD 
+00100010: FACE DEAD FACE DEAD  FACE DEAD FACE DEAD 

Display a buffer, one word (32 bit) word at a time. Note in this case that +the ASCII interpretation is suppressed. +
 
+RedBoot> dump -b 0x100000 -4
+00100000: DEADFACE DEADFACE DEADFACE DEADFACE 
+00100010: DEADFACE DEADFACE DEADFACE DEADFACE 

Display the same buffer, using Motorola S-record format. +
 
+RedBoot> dump -b 0x100000 -s
+S31500100000CEFAADDECEFAADDECEFAADDECEFAADDE8E
+S31500100010CEFAADDECEFAADDECEFAADDECEFAADDE7E

Display a buffer, with visible ASCII strings. +
 
+RedBoot> d -b 0xfe00b000 -l 0x80
+0xFE00B000: 20 25 70 0A 00 00 00 00  41 74 74 65 6D 70 74 20 | %p.....Attempt |
+0xFE00B010: 74 6F 20 6C 6F 61 64 20  53 2D 72 65 63 6F 72 64 |to load S-record|
+0xFE00B020: 20 64 61 74 61 20 74 6F  20 61 64 64 72 65 73 73 | data to address|
+0xFE00B030: 3A 20 25 70 20 5B 6E 6F  74 20 69 6E 20 52 41 4D |: %p [not in RAM|
+0xFE00B040: 5D 0A 00 00 2A 2A 2A 20  57 61 72 6E 69 6E 67 21 |]...*** Warning!|
+0xFE00B050: 20 43 68 65 63 6B 73 75  6D 20 66 61 69 6C 75 72 | Checksum failur|
+0xFE00B060: 65 20 2D 20 41 64 64 72  3A 20 25 6C 78 2C 20 25 |e - Addr: %lx, %|
+0xFE00B070: 30 32 6C 58 20 3C 3E 20  25 30 32 6C 58 0A 00 00 |02lX <> %02lX...|
+0xFE00B080: 45 6E 74 72 79 20 70 6F  69 6E 74 3A 20 25 70 2C |Entry point: %p,|
+

\ No newline at end of file diff --git a/doc/html/ref/e7t.html b/doc/html/ref/e7t.html new file mode 100644 index 00000000..c8cbdc27 --- /dev/null +++ b/doc/html/ref/e7t.html @@ -0,0 +1,467 @@ + + + + + + + + +ARM/ARM7 ARM Evaluator7T +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/ARM7 ARM Evaluator7T

Quick download instructions

Here are quick start instructions for downloading the prebuilt Redboot +image:

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=e7t
+export ARCH_DIR=arm
+export PLATFORM_DIR=e7t

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
Installation and TestingUpARM/ARM7+ARM9 ARM Integrator
\ No newline at end of file diff --git a/doc/html/ref/ebsa285.html b/doc/html/ref/ebsa285.html new file mode 100644 index 00000000..b0e56804 --- /dev/null +++ b/doc/html/ref/ebsa285.html @@ -0,0 +1,357 @@ + + + + + + + + +ARM/StrongARM(SA110) Intel EBSA 285 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/StrongARM(SA110) Intel EBSA 285

Memory Maps

Physical and virtual mapping are mapped one to one on the EBSA-285 using +a first level page table located at address 0x4000. No second level tables +are used.

Address Range            C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x01ffffff  Y Y  SDRAM
+0x40000000 - 0x400fffff  N N  21285 Registers
+0x41000000 - 0x413fffff  Y N  flash
+0x42000000 - 0x420fffff  N N  21285 CSR Space
+0x50000000 - 0x50ffffff  Y Y  Cache Clean
+0x78000000 - 0x78ffffff  N N  Outbound Write Flush
+0x79000000 - 0x7c0fffff  N N  PCI IACK/Config/IO
+0x80000000 - 0xffffffff  N Y  PCI Memory 

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=ebsa285
+export ARCH_DIR=arm
+export PLATFORM_DIR=ebsa285

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/ARM9 Altera ExcaliburUpARM/StrongARM(SA1100) Intel Brutus
\ No newline at end of file diff --git a/doc/html/ref/ecos-pci-library.html b/doc/html/ref/ecos-pci-library.html new file mode 100644 index 00000000..90a8e5ac --- /dev/null +++ b/doc/html/ref/ecos-pci-library.html @@ -0,0 +1,787 @@ + + + + + + + + +The eCos PCI Library +
eCos Reference Manual
PrevNext

Chapter 30. The eCos PCI Library

The PCI library is an optional part of eCos, and is only + applicable to some platforms.

PCI Library

The eCos PCI library provides the following functionality:

  1. Scan the PCI bus for specific devices or devices of a certain +class.

  2. Read and change generic PCI information.

  3. Read and change device-specific PCI information.

  4. Allocate PCI memory and IO space to devices.

  5. Translate a device's PCI interrupts to equivalent HAL +vectors.

Example code fragments are from the pci1 test (see io/pci/<release>/tests/pci1.c).

All of the functions described below are declared in the header +file <cyg/io/pci.h> which all +clients of the PCI library should include.

PCI Overview

The PCI bus supports several address spaces: memory, IO, and configuration. All PCI +devices must support mandatory configuration space registers. Some devices may also present +IO mapped and/or memory mapped resources. Before devices on the bus can be used, they must +be configured. Basically, configuration will assign PCI IO and/or memory address ranges to +each device and then enable that device. All PCI devices have a unique address in +configuration space. This address is comprised of a bus number, a device number, and a +function number. Special devices called bridges are used to connect two PCI busses together. +The PCI standard supports up to 255 busses with each bus having up to 32 devices and each +device having up to 8 functions.

The environment in which a platform operates will dictate if and how eCos should +configure devices on the PCI bus. If the platform acts as a host on a single PCI bus, +then devices may be configured individually from the relevant device driver. If the +platform is not the primary host, such as a PCI card plugged into a PC, configuration +of PCI devices may be left to the PC BIOS. If PCI-PCI bridges are involved, configuration +of all devices is best done all at once early in the boot process. This is because all +devices on the secondary side of a bridge must be evaluated for their IO and memory space +requirements before the bridge can be configured.

Scanning for devices

After the bus has been initialized, it is possible to scan +it for devices. This is done using the function:

cyg_bool cyg_pci_find_next(  cyg_pci_device_id cur_devid, 
+	                     cyg_pci_device_id *next_devid );

It will scan the bus for devices starting at cur_devid. If a device is found, its devid is stored in next_devid and the function returns true.

The pci1 test's outer loop looks like:

    cyg_pci_init();
+    if (cyg_pci_find_next(CYG_PCI_NULL_DEVID, &devid)) {
+        do {
+             <use devid>
+        } while (cyg_pci_find_next(devid, &devid));
+    }

What happens is that the bus gets initialized and a scan is +started. CYG_PCI_NULL_DEVID causes cyg_pci_find_next() to restart its scan. If the bus does not +contain any devices, the first call to cyg_pci_find_next() +will return false.

If the call returns true, a loop is entered where +the found devid is used. After devid processing has completed, the next device +on the bus is searched for; cyg_pci_find_next() +continues its scan from the current devid. The loop terminates when +no more devices are found on the bus.

This is the generic way of scanning the bus, enumerating all +the devices on the bus. But if the application is looking for a +device of a given device class (e.g., a SCSI controller), or a specific +vendor device, these functions simplify the task a bit:

cyg_bool cyg_pci_find_class(  cyg_uint32 dev_class,
+                              cyg_pci_device_id *devid );
+cyg_bool cyg_pci_find_device(  cyg_uint16 vendor, cyg_uint16 device,
+                               cyg_pci_device_id *devid );

They work just like cyg_pci_find_next(), +but only return true when the dev_class or vendor/device +qualifiers match those of a device on the bus. The devid serves +as both an input and an output operand: the scan starts at the given +device, and if a device is found devid is updated with the value +for the found device.

The <cyg/io/pci_cfg.h> header +file (included by pci.h) contains definitions for PCI +class, vendor and device codes which can be used as arguments to the find +functions. +The list of vendor and device codes is not complete: add new codes +as necessary. If possible also register the codes at the PCI Code +List (http://www.yourvote.com/pci) which is where the eCos definitions are generated from.

Generic config information

When a valid device ID (devid) is found using one of the above +functions, the associated device can be queried and controlled using +the functions:

void cyg_pci_get_device_info (  cyg_pci_device_id devid, 
+                                cyg_pci_device *dev_info );
+void cyg_pci_set_device_info (  cyg_pci_device_id devid, 
+                                cyg_pci_device *dev_info );

The cyg_pci_device structure (defined in +pci.h) primarily holds information as described by the PCI + specification [1]. +The pci1 test prints out some of this information:

            // Get device info
+            cyg_pci_get_device_info(devid, &dev_info);
+            diag_printf("\n Command   0x%04x, Status 0x%04x\n",
+                        dev_info.command, dev_info.status);

The command register can also be written to, controlling (among +other things) whether the device responds to IO and memory access +from the bus.

Specific config information

The above functions only allow access to generic PCI config +registers. A device can have extra config registers not specified +by the PCI specification. These can be accessed with these functions:

void cyg_pci_read_config_uint8(  cyg_pci_device_id devid,
+                                 cyg_uint8 offset, cyg_uint8 *val);
+void cyg_pci_read_config_uint16(  cyg_pci_device_id devid,
+                                  cyg_uint8 offset, cyg_uint16 *val);
+void cyg_pci_read_config_uint32(  cyg_pci_device_id devid,
+                                  cyg_uint8 offset, cyg_uint32 *val);
+void cyg_pci_write_config_uint8(  cyg_pci_device_id devid,
+                                  cyg_uint8 offset, cyg_uint8 val);
+void cyg_pci_write_config_uint16(  cyg_pci_device_id devid,
+                                   cyg_uint8 offset, cyg_uint16 val);
+void cyg_pci_write_config_uint32(  cyg_pci_device_id devid,
+                                   cyg_uint8 offset, cyg_uint32 val);

The write functions should only be used for device-specific +config registers since using them on generic registers may invalidate +the contents of a previously fetched cyg_pci_device +structure.

Allocating memory

A PCI device ignores all IO and memory access from the PCI +bus until it has been activated. Activation cannot happen until +after device configuration. Configuration means telling the device +where it should map its IO and memory resources. This is done with +one of the following functions::

cyg_bool cyg_pci_configure_device( cyg_pci_device *dev_info );
+cyg_bool cyg_pci_configure_bus( cyg_uint8 bus, cyg_uint8 *next_bus );

The cyg_pci_configure_device handles all IO +and memory regions that need configuration on non-bridge devices. On +platforms with multiple busses connected by bridges, the cyg_pci_configure_bus function should be used. It will recursively +configure all devices on the given bus and all +subordinate busses. cyg_pci_configure_bus will +use cyg_pci_configure_device to configure +individual non-bridge devices.

Each region is represented in the PCI device's config space by BARs +(Base Address Registers) and is handled individually according to type +using these functions:

cyg_bool cyg_pci_allocate_memory(  cyg_pci_device *dev_info,
+                                   cyg_uint32 bar, 
+                                   CYG_PCI_ADDRESS64 *base );
+cyg_bool cyg_pci_allocate_io(  cyg_pci_device *dev_info,
+                               cyg_uint32 bar, 
+                               CYG_PCI_ADDRESS32 *base );

The memory bases (in two distinct address spaces) are increased +as memory regions are allocated to devices. Allocation will fail +(the function returns false) if the base exceeds the limits of the +address space (IO is 1MB, memory is 2^32 or 2^64 bytes).

These functions can also be called directly by the application/driver +if necessary, but this should not be necessary.

The bases are initialized with default values provided by +the HAL. It is possible for an application to override these using +the following functions:

void cyg_pci_set_memory_base(  CYG_PCI_ADDRESS64 base );
+void cyg_pci_set_io_base( CYG_PCI_ADDRESS32 base );

When a device has been configured, the cyg_pci_device +structure will contain the physical address in the CPU's +address space where the device's memory regions can be +accessed.

This information is provided in base_map[] - +there is a 32 bit word for each of the device's BARs. For +32 bit PCI memory regions, each 32 bit word will be an actual pointer +that can be used immediately by the driver: the memory space will normally +be linearly addressable by the CPU.

However, for 64 bit PCI memory regions, some (or all) of the +region may be outside of the CPUs address space. In this case the +driver will need to know how to access the region in segments. This +functionality may be adopted by the eCos HAL if deemed useful in +the future. The 2GB available on many systems should suffice though.

Interrupts

A device may generate interrupts. The HAL vector associated +with a given device on the bus is platform specific. This function +allows a driver to find the actual interrupt vector for a given +device:

cyg_bool cyg_pci_translate_interrupt(  cyg_pci_device *dev_info,
+                                       CYG_ADDRWORD *vec );

If the function returns false, no interrupts will be generated +by the device. If it returns true, the CYG_ADDRWORD pointed +to by vec is updated with the HAL interrupt vector the device will +be using. This is how the function is used in the pci1 +test:

            if (cyg_pci_translate_interrupt(&dev_info, &irq))
+                diag_printf(" Wired to HAL vector %d\n", irq);
+            else
+                diag_printf(" Does not generate interrupts.\n");

The application/drive should attach an interrupt +handler to a device's interrupt before activating the device.

Activating a device

When the device has been allocated memory space it can be +activated. This is not done by the library since a driver may have +to initialize more state on the device before it can be safely activated.

Activating the device is done by enabling flags in its command +word. As an example, see the pci1 test which can be +configured to enable the devices it finds. This allows these to be accessed from +GDB (if a breakpoint is set on cyg_test_exit):

#ifdef ENABLE_PCI_DEVICES
+      {
+          cyg_uint16 cmd;
+
+          // Don't use cyg_pci_set_device_info since it clears
+          // some of the fields we want to print out below.
+          cyg_pci_read_config_uint16(dev_info.devid,
+                                     CYG_PCI_CFG_COMMAND, &cmd);
+          cmd |= CYG_PCI_CFG_COMMAND_IO|CYG_PCI_CFG_COMMAND_MEMORY;
+          cyg_pci_write_config_uint16(dev_info.devid,
+                                      CYG_PCI_CFG_COMMAND, cmd);
+      }
+      diag_printf(" **** Device IO and MEM access enabled\n");
+#endif

Links

See these links for more information about PCI:

  1. http://www.pcisig.com/ - information on the PCI specifications

  2. http://www.yourvote.com/pci/ - list of vendor and device IDs

  3. http://www.picmg.org/ - PCI Industrial Computer Manufacturers Group


PrevHomeNext
PCI LibraryUpPCI Library reference
\ No newline at end of file diff --git a/doc/html/ref/ecos-ref.html b/doc/html/ref/ecos-ref.html new file mode 100644 index 00000000..2adb1015 --- /dev/null +++ b/doc/html/ref/ecos-ref.html @@ -0,0 +1,2148 @@ + + + + + + + + +eCos Reference Manual +

eCos Reference Manual

Copyright © 1998, 1999, 2000, 2001, 2002, 2003 by Red Hat, Inc., Nick Garnett (eCosCentric), Jonathan Larmour (eCosCentric), Andrew Lunn (Ascom), Gary Thomas (MLB Associates), Bart Veer (eCosCentric)

Documentation licensing terms

This material may be distributed only subject to the terms +and conditions set forth in the Open Publication License, v1.0 +or later (the latest version is presently available at +http://www.opencontent.org/openpub/).

Distribution of substantively modified versions of this +document is prohibited without the explicit permission of the +copyright holder.

Distribution of the work or derivative of the work in any +standard (paper) book form is prohibited unless prior +permission is obtained from the copyright holder.

Trademarks

Red Hat, the Red Hat Shadow Man logo®, eCos™, RedBoot™, +GNUPro®, and Insight™ are trademarks of Red Hat, Inc.

Sun Microsystems® and Solaris® are registered trademarks of +Sun Microsystems, Inc.

SPARC® is a registered trademark of SPARC International, Inc., and +is used under license by Sun Microsystems, Inc.

Intel® is a registered trademark of Intel Corporation.

Motorola™ is a trademark of Motorola, Inc.

ARM® is a registered trademark of Advanced RISC Machines, Ltd.

MIPS™ is a trademark of MIPS Technologies, Inc.

Toshiba® is a registered trademark of the Toshiba Corporation.

NEC® is a registered trademark if the NEC Corporation.

Cirrus Logic® is a registered trademark of Cirrus Logic, Inc.

Compaq® is a registered trademark of the Compaq Computer Corporation.

Matsushita™ is a trademark of the Matsushita Electric Corporation.

Samsung® and CalmRISC™ are trademarks or registered trademarks +of Samsung, Inc.

Linux® is a registered trademark of Linus Torvalds.

UNIX® is a registered trademark of The Open Group.

Microsoft®, Windows®, and Windows NT® are registered trademarks +of Microsoft Corporation, Inc.

All other brand and product names, trademarks, and copyrights are the +property of their respective owners.

Warranty

eCos and RedBoot are open source software, covered by a +modified version of the GNU +General Public Licence, +and you are welcome to change it and/or distribute copies of it under certain +conditions. See http://sources.redhat.com/ecos/license-overview.html for more information about the license.

eCos and RedBoot software have NO WARRANTY.

Because this software is licensed free of charge, there are no warranties +for it, to the extent permitted by applicable law. Except when otherwise stated +in writing, the copyright holders and/or other parties provide the software +“as is” without warranty of any kind, either expressed or implied, +including, but not limited to, the implied warranties of merchantability and +fitness for a particular purpose. The entire risk as to the quality and performance +of the software is with you. Should the software prove defective, you assume +the cost of all necessary servicing, repair or correction.

In no event, unless required by applicable law or agreed to in writing, +will any copyright holder, or any other party who may modify and/or redistribute +the program as permitted above, be liable to you for damages, including any +general, special, incidental or consequential damages arising out of the use +or inability to use the program (including but not limited to loss of data +or data being rendered inaccurate or losses sustained by you or third parties +or a failure of the program to operate with any other programs), even if such +holder or other party has been advised of the possibility of such damages.


Table of Contents
I. The eCos Kernel
Kernel Overview -- Overview of the eCos Kernel
SMP Support -- Support Symmetric Multiprocessing Systems
Thread creation -- Create a new thread
Thread information -- Get basic thread information
Thread control -- Control whether or not a thread is running
Thread termination -- Allow threads to terminate
Thread priorities -- Examine and manipulate thread priorities
Per-thread data -- Manipulate per-thread data
Thread destructors -- Call functions on thread termination
Exception handling -- Handle processor exceptions
Counters -- Count event occurrences
Clocks -- Provide system clocks
Alarms -- Run an alarm function when a number of events have occurred
Mutexes -- Synchronization primitive
Condition Variables -- Synchronization primitive
Semaphores -- Synchronization primitive
Mail boxes -- Synchronization primitive
Event Flags -- Synchronization primitive
Spinlocks -- Low-level Synchronization Primitive
Scheduler Control -- Control the state of the scheduler
Interrupt Handling -- Manage interrupt handlers
Kernel Real-time Characterization -- Measure the performance of the eCos kernel
II. RedBoot™ User's Guide
1. Getting Started with RedBoot
More information about RedBoot on the web
Installing RedBoot
User Interface
RedBoot Editing Commands
RedBoot Startup Mode
RedBoot Resource Usage
Configuring the RedBoot Environment
2. RedBoot Commands and Examples
Introduction
Common Commands
Flash Image System (FIS)
Persistent State Flash-based Configuration and Control
Executing Programs from RedBoot
3. Rebuilding RedBoot
Introduction
4. Updating RedBoot
Introduction
5. Installation and Testing
AM3x/MN103E010 Matsushita MN103E010 (AM33/2.0) ASB2305 Board
ARM/ARM7 ARM Evaluator7T
ARM/ARM7+ARM9 ARM Integrator
ARM/ARM7+ARM9 ARM PID Board and EPI Dev7+Dev9
ARM/ARM7 Atmel AT91 Evaluation Board (EB40)
ARM/ARM7 Cirrus Logic EP7xxx (EDB7211, EDB7212, EDB7312)
ARM/ARM9 Agilent AAED2000
ARM/ARM9 Altera Excalibur
ARM/StrongARM(SA110) Intel EBSA 285
ARM/StrongARM(SA1100) Intel Brutus
ARM/StrongARM(SA1100) Intel SA1100 Multimedia Board
ARM/StrongARM(SA1110) Intel SA1110 (Assabet)
ARM/StrongARM(SA11X0) Bright Star Engineering commEngine and nanoEngine
ARM/StrongARM(SA11X0) Compaq iPAQ PocketPC
ARM/StrongARM(SA11X0) Intrinsyc CerfCube
ARM/Xscale Cyclone IQ80310
ARM/Xscale Intel IQ80321
CalmRISC/CalmRISC16 Samsung CalmRISC16 Core Evaluation Board
CalmRISC/CalmRISC32 Samsung CalmRISC32 Core Evaluation Board
FRV/FRV400 Fujitsu FR-V 400 (MB-93091)
IA32/x86 x86-Based PC
MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Atlas Board
MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Malta Board
MIPS/RM7000 PMC-Sierra Ocelot
MIPS/VR4375 NEC DDB-VRC4375
PowerPC/MPC860T Analogue & Micro PowerPC 860T
PowerPC/MPC8XX Motorola MBX
SuperH/SH3(SH7708) Hitachi EDK7708
SuperH/SH3(SH7709) Hitachi Solution Engine 7709
SuperH/SH3(SH7729) Hitachi HS7729PCI
SuperH/SH3(SH77X9) Hitachi Solution Engine 77X9
SuperH/SH4(SH7751) Hitachi Solution Engine 7751
III. The eCos Hardware Abstraction Layer (HAL)
6. Introduction
7. Architecture, Variant and Platform
8. General principles
9. HAL Interfaces
Base Definitions
Architecture Characterization
Interrupt Handling
HAL I/O
Cache Control
Linker Scripts
Diagnostic Support
SMP Support
10. Exception Handling
HAL Startup
Vectors and VSRs
Default Synchronous Exception Handling
Default Interrupt Handling
11. Porting Guide
Introduction
HAL Structure
Virtual Vectors (eCos/ROM Monitor Calling Interface)
HAL Coding Conventions
Platform HAL Porting
Variant HAL Porting
Architecture HAL Porting
12. Future developments
IV. The ISO Standard C and Math Libraries
13. C and math library overview
Included non-ISO functions
Math library compatibility modes
Some implementation details
Thread safety
C library startup
V. I/O Package (Device Drivers)
14. Introduction
15. User API
16. Serial driver details
Raw Serial Driver
TTY driver
17. How to Write a Driver
How to Write a Serial Hardware Interface Driver
Serial testing with ser_filter
18. Device Driver Interface to the Kernel
Interrupt Model
Synchronization
SMP Support
Device Driver Models
Synchronization Levels
The API
VI. File System Support Infrastructure
19. Introduction
20. File System Table
21. Mount Table
22. File Table
23. Directories
24. Synchronization
25. Initialization and Mounting
26. Sockets
27. Select
28. Devices
29. Writing a New Filesystem
VII. PCI Library
30. The eCos PCI Library
PCI Library
PCI Library reference
VIII. eCos POSIX compatibility layer
31. POSIX Standard Support
Process Primitives [POSIX Section 3]
Process Environment [POSIX Section 4]
Files and Directories [POSIX Section 5]
Input and Output [POSIX Section 6]
Device and Class Specific Functions [POSIX Section 7]
C Language Services [POSIX Section 8]
System Databases [POSIX Section 9]
Data Interchange Format [POSIX Section 10]
Synchronization [POSIX Section 11]
Memory Management [POSIX Section 12]
Execution Scheduling [POSIX Section 13]
Clocks and Timers [POSIX Section 14]
Message Passing [POSIX Section 15]
Thread Management [POSIX Section 16]
Thread-Specific Data [POSIX Section 17]
Thread Cancellation [POSIX Section 18]
Non-POSIX Functions
References and Bibliography
IX. µITRON
32. µITRON API
Introduction to µITRON
µITRON and eCos
Task Management Functions
Task-Dependent Synchronization Functions
Synchronization and Communication Functions
Extended Synchronization and Communication Functions
Interrupt management functions
Memory pool Management Functions
Time Management Functions
System Management Functions
Network Support Functions
µITRON Configuration FAQ
X. TCP/IP Stack Support for eCos
33. Ethernet Driver Design
34. Sample Code
35. Configuring IP Addresses
36. Tests and Demonstrations
Loopback tests
Building the Network Tests
Standalone Tests
Performance Test
Interactive Tests
Maintenance Tools
37. Support Features
TFTP
DHCP
38. TCP/IP Library Reference
getdomainname
gethostname
byteorder
ethers
getaddrinfo
gethostbyname
getifaddrs
getnameinfo
getnetent
getprotoent
getrrsetbyname
getservent
if_nametoindex
inet
inet6_option_space
inet6_rthdr_space
inet_net
ipx
iso_addr
link_addr
net_addrcmp
ns
resolver
accept
bind
connect
getpeername
getsockname
getsockopt
ioctl
poll
select
send
shutdown
socket
socketpair
XI. FreeBSD TCP/IP Stack port for eCos
39. Networking Stack Features
40. Freebsd TCP/IP stack port
Targets
Building the Network Stack
41. APIs
Standard networking
Enhanced Select()
XII. OpenBSD TCP/IP Stack port for eCos
42. Networking Stack Features
43. OpenBSD TCP/IP stack port
Targets
Building the Network Stack
44. APIs
Standard networking
Enhanced Select()
XIII. DNS for eCos and RedBoot
45. DNS
DNS API
XIV. Ethernet Device Drivers
46. Generic Ethernet Device Driver
Generic Ethernet API
Review of the functions
Upper Layer Functions
Calling graph for Transmission and Reception
XV. SNMP
47. SNMP for eCos
Version
SNMP packages in the eCos source repository
MIBs supported
Changes to eCos sources
Starting the SNMP Agent
Configuring eCos
Test cases
SNMP clients and package use
Unimplemented features
MIB Compiler
snmpd.conf
XVI. Embedded HTTP Server
48. Embedded HTTP Server
Intrduction
Server Organization
Server Configuration
Support Functions and Macros
System Monitor
XVII. FTP Client for eCos TCP/IP Stack
49. FTP Client Features
FTP Client API
XVIII. CRC Algorithms
50. CRC Functions
CRC API
XIX. CPU load measurements
51. CPU Load Measurements
CPU Load API
XX. Application profiling
52. Profiling functions
API
XXI. eCos Power Management Support
Introduction -- eCos support for Power Management
Power Management Information -- finding out about the various power controllers in the system
Changing Power Modes -- reducing or increasing power consumption as needed
Support for Policy Modules -- closer integration with higher-level code
Attached and Detached Controllers -- control which power controllers are affected by global changes
Implementing a Power Controller -- adding power management support to device drivers and +other packages
XXII. eCos USB Slave Support
Introduction -- eCos support for USB slave devices
USB Enumeration Data -- The USB enumeration data structures
Starting up a USB Device -- Starting up a USB Device
Devtab Entries -- Data endpoint data structure
Receiving Data from the Host -- Receiving Data from the Host
Sending Data to the Host -- Sending Data to the Host
Halted Endpoints -- Support for Halting and Halted Endpoints
Control Endpoints -- Control endpoint data structure
Data Endpoints -- Data endpoint data structures
Writing a USB Device Driver -- USB Device Driver Porting Guide
Testing -- Testing of USB Device Drivers
XXIII. eCos Support for Developing USB-ethernet Peripherals
Introduction -- eCos support for developing USB ethernet peripherals
Initializing the USB-ethernet Package -- Initializing the USB-ethernet Package
USB-ethernet Data Transfers -- Exchanging ethernet packets with the USB host
USB-ethernet State Handling -- Maintaining the USB-ethernet connection with the host
Network Device for the eCos TCP/IP Stack -- USB-ethernet support for the eCos TCP/IP Stack
Example Host-side Device Driver -- Provide host-side support for the eCos USB-ethernet package
Communication Protocol -- Protocol used between the host-side device driver and the eCos +USB-ethernet package
XXIV. eCos Synthetic Target
Overview -- Overview
Installation -- Preparing to use the synthetic target
Running a Synthetic Target Application -- Arguments and configuration files
The I/O Auxiliary's User Interface -- Controlling the I/O Auxiliary
The Console Device -- Show output from the eCos application
System Calls -- Access Linux system facilities
Writing New Devices - target -- extending the synthetic target, target-side
Writing New Devices - host -- extending the synthetic target, host-side
Porting -- Adding support for other hosts
XXV. SA11X0 USB Device Driver
SA11X0 USB Device Driver -- Device driver for the on-chip SA11X0 USB device
XXVI. NEC uPD985xx USB Device Driver
NEC uPD985xx USB Device Driver -- Device driver for the on-chip NEC uPD985xx USB device
XXVII. Synthetic Target Ethernet Driver
Synthetic Target Ethernet Driver -- Allow synthetic target applications to perform ethernet I/O
XXVIII. Synthetic Target Watchdog Device
Synthetic Target Watchdog Device -- Emulate watchdog hardware in the synthetic target

  Next
  The eCos Kernel
\ No newline at end of file diff --git a/doc/html/ref/edb7xxx.html b/doc/html/ref/edb7xxx.html new file mode 100644 index 00000000..5d39f71a --- /dev/null +++ b/doc/html/ref/edb7xxx.html @@ -0,0 +1,386 @@ + + + + + + + + +ARM/ARM7 Cirrus Logic EP7xxx (EDB7211, EDB7212, EDB7312) +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/ARM7 Cirrus Logic EP7xxx (EDB7211, EDB7212, EDB7312)

Memory Maps

The MMU page tables and LCD display buffer, if enabled, are located +at the end of DRAM.

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x01ffffff    NOR Flash (EDB7211, EDB7212)
+0x00000000 - 0x00ffffff    NOR Flash (EDB7312)
+0x10000000 - 0x11ffffff    NAND Flash
+0x20000000 - 0x2fffffff    Expansion 2
+0x30000000 - 0x3fffffff    Expansion 3
+0x40000000 - 0x4fffffff    PCMCIA 0
+0x50000000 - 0x5fffffff    PCMCIA 1
+0x60000000 - 0x600007ff    On-chip SRAM
+0x80000000 - 0x8fffffff    I/O registers
+0xc0000000 - 0xc1ffffff    DRAM (EDB7211, EDB7212)
+0xc0000000 - 0xc0ffffff    DRAM (EDB7312)
+
+Virtual Address Range    C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x01ffffff  Y Y  DRAM 
+0x00000000 - 0x00fcffff  Y Y  DRAM (EDB7312)
+0x20000000 - 0x2fffffff  N N  Expansion 2
+0x30000000 - 0x3fffffff  N N  Expansion 3
+0x40000000 - 0x4fffffff  N N  PCMCIA 0
+0x50000000 - 0x5fffffff  N N  PCMCIA 1
+0x60000000 - 0x600007ff  Y Y  On-chip SRAM
+0x80000000 - 0x8fffffff  N N  I/O registers
+0xc0000000 - 0xc001ffff  N Y  LCD buffer (if configured)
+0xe0000000 - 0xe1ffffff  Y Y  NOR Flash (EDB7211, EDB7212)
+0xe0000000 - 0xe0ffffff  Y Y  NOR Flash (EDB7312)
+0xf0000000 - 0xf1ffffff  Y Y  NAND Flash
+
+The flash based RedBoot image occupies virtual addresses 0xe0000000 - 0xe003ffff.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=edb7211
+export TARGET=edb7212
+export TARGET=edb7312
+export ARCH_DIR=arm
+export PLATFORM_DIR=edb7xxx
+ +Use one of the TARGET settings only.

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/ARM7 Atmel AT91 Evaluation Board (EB40)UpARM/ARM9 Agilent AAED2000
\ No newline at end of file diff --git a/doc/html/ref/edk7708.html b/doc/html/ref/edk7708.html new file mode 100644 index 00000000..9204fa5f --- /dev/null +++ b/doc/html/ref/edk7708.html @@ -0,0 +1,306 @@ + + + + + + + + +SuperH/SH3(SH7708) Hitachi EDK7708 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

SuperH/SH3(SH7708) Hitachi EDK7708

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=edk7708
+export ARCH_DIR=sh
+export PLATFORM_DIR=edk7708

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
PowerPC/MPC8XX Motorola MBXUpSuperH/SH3(SH7709) Hitachi Solution Engine 7709
\ No newline at end of file diff --git a/doc/html/ref/excaliburarm9.html b/doc/html/ref/excaliburarm9.html new file mode 100644 index 00000000..66f5d3f2 --- /dev/null +++ b/doc/html/ref/excaliburarm9.html @@ -0,0 +1,522 @@ + + + + + + + + +ARM/ARM9 Altera Excalibur +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/ARM9 Altera Excalibur

Special RedBoot Commands

The exec command which allows the loading +and execution of Linux kernels, +is supported for this board (see the Section called Executing Programs from RedBoot in Chapter 2). The exec parameters used for the Excalibur are:

-b <addr>

Location Linux kernel was loaded to

-l <len>

Length of kernel

-c "params"

Parameters passed to kernel

-r <addr>

'initrd' ramdisk location

-s <len>

Length of initrd ramdisk

The parameters for kernel image base and size are automatically +set after a load operation. So one way of starting the kernel would +be: + +
RedBoot> load -r -b 0x100000 zImage
+Raw file loaded 0x00100000-0x001a3d6c
+RedBoot> exec -c "console=ttyUA0,57600"
+Using base address 0x00100000 and length 0x000a3d6c
+Uncompressing Linux.....
+ +An image could also be put in flash and started directly: + +
RedBoot> exec -b 0x40400000 -l 0xc0000 -c "console=ttyUA0,57600"
+Uncompressing Linux.....

Memory Maps

The MMU page tables are located at 0x4000.

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x07ffffff    SDRAM
+0x08000000 - 0x0805ffff    On-chip SRAM
+0x40000000 - 0x40ffffff    Flash
+0x7fffc000 - 0x7fffffff    I/O registers
+0x80000000 - 0x8001ffff    PLD
+
+Virtual Address Range    C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x07ffffff  Y Y  SDRAM
+0x08000000 - 0x0805ffff  Y Y  On-chip SRAM
+0x40000000 - 0x403fffff  N Y  Flash
+0x7fffc000 - 0x7fffffff  N N  I/O registers
+0x80000000 - 0x8001ffff  N N  PLD

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=excalibur_arm9
+export ARCH_DIR=arm
+export PLATFORM_DIR=arm9/excalibur

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/ARM9 Agilent AAED2000UpARM/StrongARM(SA110) Intel EBSA 285
\ No newline at end of file diff --git a/doc/html/ref/exec-command.html b/doc/html/ref/exec-command.html new file mode 100644 index 00000000..ab8cc415 --- /dev/null +++ b/doc/html/ref/exec-command.html @@ -0,0 +1,578 @@ + + + + + + + + +exec +
eCos Reference Manual
PrevNext

exec

Name

exec -- Execute a Linux kernel

Description

The exec command is used to execute a non-eCos application, typically a +Linux kernel. Additional information may be passed to the kernel at startup +time. This command is quite special (and unique from the go command) in +that the program being executed may expect certain environmental setups, for +example that the MMU is turned off, etc.

The Linux kernel expects to have been loaded to a particular memory +location which is architecture dependent(0xC0008000 in the case of the SA1110). +Since this memory is used +by RedBoot internally, it is not possible to load the kernel to that location +directly. Thus the requirement for the "-b" option which tells the command +where the kernel has been loaded. When the exec command runs, the image will +be relocated to the appropriate location before being started. The "-r" and +"-s" options are used to pass information to the kernel about where a statically +loaded ramdisk (initrd) is located.

The "-c" option can be used to pass textual "command line" information +to the kernel. If the command line data contains any punctuation (spaces, +etc), then it must be quoted using the double-quote character '"'. If the +quote character is required, it should be written as '\"'. +

Examples

Execute a Linux kernel, passing a command line, which needs relocation. +The result from RedBoot is normally quiet, with the target platform being +passed over to Linux immediately. +
RedBoot> exec -b 0x100000 -l 0x80000 -c "noinitrd root=/dev/mtdblock3 console=ttySA0"
+

Execute a Linux kernel, default entry address and no relocation required, with a timeout. +The emphasized lines are output from the loaded kernel. +
 
+RedBoot> exec -c "console=ttyS0,38400 ip=dhcp nfsroot=/export/elfs-sh" -w 5
+Now booting linux kernel:
+Base address 0x8c001000 Entry 0x8c210000
+Cmdline : console=ttyS0,38400 ip=dhcp nfsroot=/export/elfs-sh
+About to start execution at 0x8x210000 - abort with ^C within 5 seconds
+Linux version 2.4.10-pre6 (...) (gcc version 3.1-stdsh-010931) #3 Thu Sep 27 11:04:23 BST 2001
+


PrevHomeNext
goUpRebuilding RedBoot
\ No newline at end of file diff --git a/doc/html/ref/executing-programs.html b/doc/html/ref/executing-programs.html new file mode 100644 index 00000000..865f6c4e --- /dev/null +++ b/doc/html/ref/executing-programs.html @@ -0,0 +1,194 @@ + + + + + + + + +Executing Programs from RedBoot +
eCos Reference Manual
PrevChapter 2. RedBoot Commands and ExamplesNext

Executing Programs from RedBoot

Table of Contents
go -- Execute a program
exec -- Execute a Linux kernel

Once +an image has been loaded into memory, either via the load command or the fis load +command, execution may be transfered to that image.

NOTE: The image is assumed to be a stand-alone entity, as RedBoot gives the +entire platform over to it. Typical examples would be an eCos application +or a Linux kernel.


PrevHomeNext
Persistent State Flash-based Configuration and ControlUpgo
\ No newline at end of file diff --git a/doc/html/ref/fileio-devices.html b/doc/html/ref/fileio-devices.html new file mode 100644 index 00000000..c8ed0c5d --- /dev/null +++ b/doc/html/ref/fileio-devices.html @@ -0,0 +1,164 @@ + + + + + + + + +Devices +
eCos Reference Manual
PrevNext


PrevHomeNext
SelectUpWriting a New Filesystem
\ No newline at end of file diff --git a/doc/html/ref/fileio-directories.html b/doc/html/ref/fileio-directories.html new file mode 100644 index 00000000..cc5b3c46 --- /dev/null +++ b/doc/html/ref/fileio-directories.html @@ -0,0 +1,275 @@ + + + + + + + + +Directories +
eCos Reference Manual
PrevNext

Chapter 23. Directories

Filesystem operations all take a directory pointer as one of their +arguments. A directory pointer is an opaque handle managed by the +filesystem. It should encapsulate a reference to a specific directory +within the filesystem. For example, it may be a pointer to the data +structure that represents that directory (such as an inode), or a +pointer to a pathname for the directory.

The chdir() filesystem function pointer has two +modes of use. When passed a pointer in the +dir_out argument, it should locate the named +directory and place a directory pointer there. If the +dir_out argument is NULL then the +dir argument is a previously generated +directory pointer that can now be disposed of. When the infrastructure +is implementing the chdir() function it makes two +calls to filesystem chdir() functions. The first +is to get a directory pointer for the new current directory. If this +succeeds the second is to dispose of the old current directory +pointer.

The opendir() function is used to open a +directory for reading. This results in an open file object that can be +read to return a sequence of struct dirent +objects. The only operations that are allowed on this file are +read, lseek and +close. Each read operation on this file should +return a single struct dirent object. When +the end of the directory is reached, zero should be returned. The only +seek operation allowed is a rewind to the start of the directory, by +supplying an offset of zero and a whence +specifier of SEEK_SET.

Most of these considerations are invisible to clients of a filesystem +since they will access directories via the POSIX +opendir(), readdir() and +closedir() functions.

Support for the getcwd() function is provided by +three mechanisms. The first is to use the +FS_INFO_GETCWD getinfo key on the filesystem to use +any internal support that it has for this. If that fails it falls back +on one of the two other mechanisms. If +CYGPKG_IO_FILEIO_TRACK_CWD is set then the current +directory is tracked textually in chdir() and the result of that is +reported in getcwd(). Otherwise an attempt is made to traverse the +directory tree to its root using ".." entries.

This last option is complicated and expensive, and relies on the +filesystem supporting "." and ".." entries. This is not always the +case, particularly if the filesystem has been ported from a +non-UNIX-compatible source. Tracking the pathname textually will +usually work, but might not produce optimum results when symbolic +links are being used.


PrevHomeNext
File TableUpSynchronization
\ No newline at end of file diff --git a/doc/html/ref/fileio-file-table.html b/doc/html/ref/fileio-file-table.html new file mode 100644 index 00000000..a3e13141 --- /dev/null +++ b/doc/html/ref/fileio-file-table.html @@ -0,0 +1,415 @@ + + + + + + + + +File Table +
eCos Reference Manual
PrevNext

Chapter 22. File Table

Once a file has been opened it is represented by an open file +object. These are allocated from an array of available file +objects. User code accesses these open file objects via a second array +of pointers which is indexed by small integer offsets. This gives the +usual Unix file descriptor functionality, complete with the various +duplication mechanisms.

A file table entry has the following structure:

struct CYG_FILE_TAG
+{
+    cyg_uint32	                f_flag;		/* file state                   */
+    cyg_uint16                  f_ucount;       /* use count                    */
+    cyg_uint16                  f_type;		/* descriptor type              */
+    cyg_uint32                  f_syncmode;     /* synchronization protocol     */
+    struct CYG_FILEOPS_TAG      *f_ops;         /* file operations              */
+    off_t       	        f_offset;       /* current offset               */
+    CYG_ADDRWORD	        f_data;		/* file or socket               */
+    CYG_ADDRWORD                f_xops;         /* extra type specific ops      */
+    cyg_mtab_entry              *f_mte;         /* mount table entry            */
+};

The f_flag field contains some FILEIO +control bits and some bits propagated from the +flags argument of the +open() call (defined by +CYG_FILE_MODE_MASK).

The f_ucount field contains a use count that +controls when a file will be closed. Each duplicate in the file +descriptor array counts for one reference here. It is also +incremented around each I/O operation to ensure that the file cannot +be closed while it has current I/O operations.

The f_type field indicates the type of the +underlying file object. Some of the possible values here are +CYG_FILE_TYPE_FILE, +CYG_FILE_TYPE_SOCKET or CYG_FILE_TYPE_DEVICE.

The f_syncmode field is copied from the +syncmode field of the implementing +filesystem. Its use is described in Chapter 24.

The f_offset field records the current file +position. It is the responsibility of the file operation functions to +keep this field up to date.

The f_data field contains private data +placed here by the underlying filesystem. Normally this will be a +pointer to, or handle on, the filesystem object that implements this +file.

The f_xops field contains a pointer to any +extra type specific operation functions. For example, the socket I/O +system installs a pointer to a table of functions that implement the +standard socket operations.

The f_mte field contains a pointer to the +parent mount table entry for this file. It is used mainly to implement +the synchronization protocol. This may contain a pointer to some other +data structure in file objects not derived from a filesystem.

The f_ops field contains a pointer to a +table of file I/O operations. This has the following structure:

struct CYG_FILEOPS_TAG
+{
+        int	(*fo_read)      (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio);
+        int	(*fo_write)     (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio);
+        int     (*fo_lseek)     (struct CYG_FILE_TAG *fp, off_t *pos, int whence );
+        int	(*fo_ioctl)     (struct CYG_FILE_TAG *fp, CYG_ADDRWORD com,
+                                 CYG_ADDRWORD data);
+        int	(*fo_select)    (struct CYG_FILE_TAG *fp, int which, CYG_ADDRWORD info);
+        int     (*fo_fsync)     (struct CYG_FILE_TAG *fp, int mode );        
+        int	(*fo_close)     (struct CYG_FILE_TAG *fp);
+        int     (*fo_fstat)     (struct CYG_FILE_TAG *fp, struct stat *buf );
+        int     (*fo_getinfo)   (struct CYG_FILE_TAG *fp, int key, char *buf, int len );
+        int     (*fo_setinfo)   (struct CYG_FILE_TAG *fp, int key, char *buf, int len );
+};

It should be obvious from the names of most of these functions what +their responsibilities are. The fo_getinfo() +and fo_setinfo() function pointers, like their +counterparts in the filesystem structure, implement minor control and +info functions such as fpathconf().

The second argument to the fo_read() and +fo_write() function pointers is a pointer to a +UIO structure:

struct CYG_UIO_TAG
+{
+    struct CYG_IOVEC_TAG *uio_iov;	/* pointer to array of iovecs */
+    int	                 uio_iovcnt;	/* number of iovecs in array */
+    off_t       	 uio_offset;	/* offset into file this uio corresponds to */
+    ssize_t     	 uio_resid;	/* residual i/o count */
+    enum cyg_uio_seg     uio_segflg;    /* see above */
+    enum cyg_uio_rw      uio_rw;        /* see above */
+};
+
+struct CYG_IOVEC_TAG
+{
+    void           *iov_base;           /* Base address. */
+    ssize_t        iov_len;             /* Length. */
+};

This structure encapsulates the parameters of any data transfer +operation. It provides support for scatter/gather operations and +records the progress of any data transfer. It is also compatible with +the I/O operations of any BSD-derived network stacks and filesystems.

When a file is opened (or a file object created by some other means, +such as socket() or accept()) it is the +responsibility of the filesystem open operation to initialize all the +fields of the object except the f_ucount, +f_syncmode and +f_mte fields. Since the +f_flag field will already contain bits belonging to the FILEIO +infrastructure, any changes to it must be made with the appropriate +logical operations.


PrevHomeNext
Mount TableUpDirectories
\ No newline at end of file diff --git a/doc/html/ref/fileio-fstab.html b/doc/html/ref/fileio-fstab.html new file mode 100644 index 00000000..726b2d58 --- /dev/null +++ b/doc/html/ref/fileio-fstab.html @@ -0,0 +1,287 @@ + + + + + + + + +File System Table +
eCos Reference Manual
PrevNext

Chapter 20. File System Table

The filesystem table is an array of entries that describe each +filesystem implementation that is part of the system image. Each +resident filesystem should export an entry to this table using the +FSTAB_ENTRY() macro.

The table entries are described by the following structure:

struct cyg_fstab_entry
+{
+    const char          *name;          // filesystem name
+    CYG_ADDRWORD        data;           // private data value
+    cyg_uint32          syncmode;       // synchronization mode
+    
+    int     (*mount)    ( cyg_fstab_entry *fste, cyg_mtab_entry *mte );
+    int     (*umount)   ( cyg_mtab_entry *mte );
+    int     (*open)     ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                          int mode,  cyg_file *fte );
+    int     (*unlink)   ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
+    int     (*mkdir)    ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
+    int     (*rmdir)    ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
+    int     (*rename)   ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
+                          cyg_dir dir2, const char *name2 );
+    int     (*link)     ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
+                          cyg_dir dir2, const char *name2, int type );
+    int     (*opendir)  ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                          cyg_file *fte );
+    int     (*chdir)    ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                          cyg_dir *dir_out );
+    int     (*stat)     ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                          struct stat *buf);
+    int     (*getinfo)  ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                          int key, char *buf, int len );
+    int     (*setinfo)  ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                          int key, char *buf, int len );
+};

The name field points to a string that +identifies this filesystem implementation. Typical values might be +"romfs", "msdos", "ext2" etc.

The data field contains any private data +that the filesystem needs, perhaps the root of its data structures.

The syncmode field contains a description of +the locking protocol to be used when accessing this filesystem. It +will be described in more detail in Chapter 24.

The remaining fields are pointers to functions that implement +filesystem operations that apply to files and directories as whole +objects. The operation implemented by each function should be obvious +from the names, with a few exceptions:

The opendir() function pointer opens a directory +for reading. See Chapter 23 for details.

The getinfo() and +setinfo() function pointers provide support for +various minor control and information functions such as +pathconf() and access().

With the exception of the mount() and +umount() functions, all of these functions +take three standard arguments, a pointer to a mount table entry (see +later) a directory pointer (also see later) and a file name relative +to the directory. These should be used by the filesystem to locate the +object of interest.


PrevHomeNext
IntroductionUpMount Table
\ No newline at end of file diff --git a/doc/html/ref/fileio-intro.html b/doc/html/ref/fileio-intro.html new file mode 100644 index 00000000..ff42c8a9 --- /dev/null +++ b/doc/html/ref/fileio-intro.html @@ -0,0 +1,183 @@ + + + + + + + + +Introduction +
eCos Reference Manual
PrevNext

Chapter 19. Introduction

This document describes the filesystem infrastructure provided in +eCos. This is implemented by the FILEIO package and provides POSIX +compliant file and IO operations together with the BSD socket +API. These APIs are described in the relevant standards and original +documentation and will not be described here. See Chapter 31 for details of which parts of the +POSIX standard are supported.

This document is concerned with the interfaces presented to client +filesystems and network protocol stacks.

The FILEIO infrastructure consist mainly of a set of tables containing +pointers to the primary interface functions of a file system. This +approach avoids problems of namespace pollution (for example several +filesystems can have a function called read(), so long as they are +static). The system is also structured to eliminate the need for +dynamic memory allocation.

New filesystems can be written directly to the interfaces described +here. Existing filesystems can be ported very easily by the +introduction of a thin veneer porting layer that translates FILEIO +calls into native filesystem calls.

The term filesystem should be read fairly loosely in this +document. Object accessed through these interfaces could equally be +network protocol sockets, device drivers, fifos, message queues or any +other object that can present a file-like interface.


PrevHomeNext
File System Support InfrastructureUpFile System Table
\ No newline at end of file diff --git a/doc/html/ref/fileio-mount-table.html b/doc/html/ref/fileio-mount-table.html new file mode 100644 index 00000000..e898f936 --- /dev/null +++ b/doc/html/ref/fileio-mount-table.html @@ -0,0 +1,346 @@ + + + + + + + + +Mount Table +
eCos Reference Manual
PrevNext

Chapter 21. Mount Table

The mount table records the filesystems that are actually active. +These can be seen as being analogous to mount points in Unix systems.

There are two sources of mount table entries. Filesystems (or other +components) may export static entries to the table using the +MTAB_ENTRY() macro. Alternatively, new entries may +be installed at run time using the mount() +function. Both types of entry may be unmounted with the +umount() function.

A mount table entry has the following structure:

struct cyg_mtab_entry
+{
+    const char          *name;          // name of mount point
+    const char          *fsname;        // name of implementing filesystem
+    const char          *devname;       // name of hardware device
+    CYG_ADDRWORD        data;           // private data value
+    cyg_bool            valid;          // Valid entry?
+    cyg_fstab_entry     *fs;            // pointer to fstab entry
+    cyg_dir             root;           // root directory pointer
+};

The name field identifies the mount +point. This is used to direct rooted filenames (filenames that +begin with "/") to the correct filesystem. When a file +name that begins with "/" is submitted, it is matched +against the name fields of all valid mount +table entries. The entry that yields the longest match terminating +before a "/", or end of string, wins and the appropriate +function from the filesystem table entry is then passed the remainder +of the file name together with a pointer to the table entry and the +value of the root field as the directory +pointer.

For example, consider a mount table that contains the following +entries:

	{ "/",    "msdos", "/dev/hd0", ... }
+	{ "/fd",  "msdos", "/dev/fd0", ... }
+	{ "/rom", "romfs", "", ... }
+	{ "/tmp", "ramfs", "", ... }
+	{ "/dev", "devfs", "", ... }

An attempt to open "/tmp/foo" would be directed to the RAM +filesystem while an open of "/bar/bundy" would be directed +to the hard disc MSDOS filesystem. Opening "/dev/tty0" would +be directed to the device management filesystem for lookup in the +device table.

Unrooted file names (those that do not begin with a '/') are passed +straight to the filesystem that contains the current directory. The +current directory is represented by a pair consisting of a mount table +entry and a directory pointer.

The fsname field points to a string that +should match the name field of the +implementing filesystem. During initialization the mount table is +scanned and the fsname entries looked up in +the filesystem table. For each match, the filesystem's _mount_ +function is called and if successful the mount table entry is marked +as valid and the fs pointer installed.

The devname field contains the name of the +device that this filesystem is to use. This may match an entry in the +device table (see later) or may be a string that is specific to the +filesystem if it has its own internal device drivers.

The data field is a private data value. This +may be installed either statically when the table entry is defined, or +may be installed during the mount() operation.

The valid field indicates whether this mount +point has actually been mounted successfully. Entries with a false +valid field are ignored when searching for a +name match.

The fs field is installed after a successful +mount() operation to point to the implementing +filesystem.

The root field contains a directory pointer +value that the filesystem can interpret as the root of its directory +tree. This is passed as the dir argument of +filesystem functions that operate on rooted filenames. This field must +be initialized by the filesystem's mount() +function.


PrevHomeNext
File System TableUpFile Table
\ No newline at end of file diff --git a/doc/html/ref/fileio-mounting.html b/doc/html/ref/fileio-mounting.html new file mode 100644 index 00000000..6521d7e2 --- /dev/null +++ b/doc/html/ref/fileio-mounting.html @@ -0,0 +1,346 @@ + + + + + + + + +Initialization and Mounting +
eCos Reference Manual
PrevNext

Chapter 25. Initialization and Mounting

As mentioned previously, mount table entries can be sourced from two +places. Static entries may be defined by using the +MTAB_ENTRY() macro. Such entries will be +automatically mounted on system startup. For each entry in the mount +table that has a non-null name field the +filesystem table is searched for a match with the +fsname field. If a match is found the +filesystem's mount entry is called and if +successful the mount table entry marked valid and the +fs field initialized. The +mount() function is responsible for initializing +the root field.

The size of the mount table is defined by the configuration value +CYGNUM_FILEIO_MTAB_MAX. Any entries that have not +been statically defined are available for use by dynamic mounts.

A filesystem may be mounted dynamically by calling mount(). This +function has the following prototype:

int mount( const char *devname,
+           const char *dir,
+	   const char *fsname);

The devname argument identifies a device that +will be used by this filesystem and will be assigned to the +devname field of the mount table entry.

The dir argument is the mount point name, it +will be assigned to the name field of the +mount table entry.

The fsname argument is the name of the +implementing filesystem, it will be assigned to the +fsname entry of the mount table entry.

The process of mounting a filesystem dynamically is as follows. First +a search is made of the mount table for an entry with a NULL +name field to be used for the new mount +point. The filesystem table is then searched for an entry whose name +matches fsname. If this is successful then +the mount table entry is initialized and the filesystem's +mount() operation called. If this is successful, +the mount table entry is marked valid and the +fs field initialized.

Unmounting a filesystem is done by the umount() +function. This can unmount filesystems whether they were mounted +statically or dynamically.

The umount() function has the following prototype:

int umount( const char *name );

The mount table is searched for a match between the +name argument and the entry +name field. When a match is found the +filesystem's umount() operation is called and if +successful, the mount table entry is invalidated by setting its +valid field false and the +name field to NULL.


PrevHomeNext
SynchronizationUpSockets
\ No newline at end of file diff --git a/doc/html/ref/fileio-select.html b/doc/html/ref/fileio-select.html new file mode 100644 index 00000000..a6b86e2f --- /dev/null +++ b/doc/html/ref/fileio-select.html @@ -0,0 +1,256 @@ + + + + + + + + +Select +
eCos Reference Manual
PrevNext

Chapter 27. Select

The infrastructure provides support for implementing a select +mechanism. This is modeled on the mechanism in the BSD kernel, but has +been modified to make it implementation independent.

The main part of the mechanism is the select() +API call. This processes its arguments and calls the +fo_select() function pointer on all file objects +referenced by the file descriptor sets passed to it. If the same +descriptor appears in more than one descriptor set, the +fo_select() function will be called separately +for each appearance.

The which argument of the +fo_select() function will either be +CYG_FREAD to test for read conditions, +CYG_FWRITE to test for write conditions or zero to +test for exceptions. For each of these options the function should +test whether the condition is satisfied and if so return true. If it +is not satisfied then it should call +cyg_selrecord() with the +info argument that was passed to the function +and a pointer to a cyg_selinfo structure.

The cyg_selinfo structure is used to record information about current +select operations. Any object that needs to support select must +contain an instance of this structure. Separate cyg_selinfo +structures should be kept for each of the options that the object can +select on - read, write or exception.

If none of the file objects report that the select condition is +satisfied, then the select() API function puts +the calling thread to sleep waiting either for a condition to become +satisfied, or for the optional timeout to expire.

A selectable object must have some asynchronous activity that may +cause a select condition to become true - either via interrupts or the +activities of other threads. Whenever a selectable condition is +satisfied, the object should call cyg_selwakeup() with a pointer to +the appropriate cyg_selinfo structure. If the thread is still waiting, +this will cause it to wake up and repeat its poll of the file +descriptors. This time around, the object that caused the wakeup +should indicate that the select condition is satisfied, and the +select() API call will return.

Note that select() does not exhibit real time +behaviour: the iterative poll of the descriptors, and the wakeup +mechanism mitigate against this. If real time response to device or +socket I/O is required then separate threads should be devoted to each +device of interest and should use blocking calls to wait for a +condition to become ready.


PrevHomeNext
SocketsUpDevices
\ No newline at end of file diff --git a/doc/html/ref/fileio-sockets.html b/doc/html/ref/fileio-sockets.html new file mode 100644 index 00000000..0fb005d5 --- /dev/null +++ b/doc/html/ref/fileio-sockets.html @@ -0,0 +1,341 @@ + + + + + + + + +Sockets +
eCos Reference Manual
PrevNext

Chapter 26. Sockets

If a network stack is present, then the FILEIO infrastructure also +provides access to the standard BSD socket calls.

The netstack table contains entries which describe the network +protocol stacks that are in the system image. Each resident stack +should export an entry to this table using the +NSTAB_ENTRY() macro.

Each table entry has the following structure:

struct cyg_nstab_entry
+{
+    cyg_bool            valid;          // true if stack initialized
+    cyg_uint32          syncmode;       // synchronization protocol
+    char                *name;          // stack name
+    char                *devname;       // hardware device name
+    CYG_ADDRWORD        data;           // private data value
+
+    int     (*init)( cyg_nstab_entry *nste );
+    int     (*socket)( cyg_nstab_entry *nste, int domain, int type,
+		       int protocol, cyg_file *file );
+};

This table is analogous to a combination of the filesystem and mount +tables.

The valid field is set +true if the stack's init() +function returned successfully and the +syncmode field contains the +CYG_SYNCMODE_SOCK_* bits described above.

The name field contains the name of the +protocol stack.

The devname field names the device that the stack is using. This may +reference a device under "/dev", or may be a name that is only +meaningful to the stack itself.

The init() function pointer is called during +system initialization to start the protocol stack running. If it +returns non-zero the valid field is set +false and the stack will be ignored subsequently.

The socket() function is called to attempt to create a socket in the +stack. When the socket() API function is called the netstack table is +scanned and for each valid entry the socket() +function pointer is called. If +this returns non-zero then the scan continues to the next valid stack, +or terminates with an error if the end of the table is reached.

The result of a successful socket call is an initialized file object +with the f_xops field pointing to the +following structure:

struct cyg_sock_ops
+{
+    int (*bind)      ( cyg_file *fp, const sockaddr *sa, socklen_t len );
+    int (*connect)   ( cyg_file *fp, const sockaddr *sa, socklen_t len );
+    int (*accept)    ( cyg_file *fp, cyg_file *new_fp,
+                       struct sockaddr *name, socklen_t *anamelen );
+    int (*listen)    ( cyg_file *fp, int len );
+    int (*getname)   ( cyg_file *fp, sockaddr *sa, socklen_t *len, int peer );
+    int (*shutdown)  ( cyg_file *fp, int flags );
+    int (*getsockopt)( cyg_file *fp, int level, int optname,
+                       void *optval, socklen_t *optlen);
+    int (*setsockopt)( cyg_file *fp, int level, int optname,
+                       const void *optval, socklen_t optlen);
+    int (*sendmsg)   ( cyg_file *fp, const struct msghdr *m,
+                       int flags, ssize_t *retsize );
+    int (*recvmsg)   ( cyg_file *fp, struct msghdr *m,
+                       socklen_t *namelen, ssize_t *retsize );
+};

It should be obvious from the names of these functions which API calls +they provide support for. The getname() function +pointer provides support for both getsockname() +and getpeername() while the +sendmsg() and recvmsg() +function pointers provide support for send(), +sendto(), sendmsg(), +recv(), recvfrom() and +recvmsg() as appropriate.


PrevHomeNext
Initialization and MountingUpSelect
\ No newline at end of file diff --git a/doc/html/ref/fileio-synchronization.html b/doc/html/ref/fileio-synchronization.html new file mode 100644 index 00000000..ae455892 --- /dev/null +++ b/doc/html/ref/fileio-synchronization.html @@ -0,0 +1,265 @@ + + + + + + + + +Synchronization +
eCos Reference Manual
PrevNext

Chapter 24. Synchronization

The FILEIO infrastructure provides a synchronization mechanism for +controlling concurrent access to filesystems. This allows existing +filesystems to be ported to eCos, even if they do not have their own +synchronization mechanisms. It also allows new filesystems to be +implemented easily without having to consider the synchronization +issues.

The infrastructure maintains a mutex for each entry in each of +the main tables: filesystem table, mount table and file table. For +each class of operation each of these mutexes may be locked before the +corresponding filesystem operation is invoked.

The synchronization protocol required by a filesystem is described +by the syncmode field of the filesystem +table entry. This is a combination of the following flags:

The value of the syncmode field in the +filesystem table entry will be copied by the infrastructure to the +open file object after a successful open() operation.


PrevHomeNext
DirectoriesUpInitialization and Mounting
\ No newline at end of file diff --git a/doc/html/ref/fileio-writing.html b/doc/html/ref/fileio-writing.html new file mode 100644 index 00000000..3ba8b014 --- /dev/null +++ b/doc/html/ref/fileio-writing.html @@ -0,0 +1,421 @@ + + + + + + + + +Writing a New Filesystem +
eCos Reference Manual
PrevNext

Chapter 29. Writing a New Filesystem

To create a new filesystem it is necessary to define the fstab entry +and the file IO operations. The easiest way to do this is to copy an +existing filesystem: either the test filesystem in the FILEIO package, +or the RAM or ROM filesystem packages.

To make this clearer, the following is a brief tour of the FILEIO +relevant parts of the RAM filesystem.

First, it is necessary to provide forward definitions of the functions +that constitute the filesystem interface:

//==========================================================================
+// Forward definitions
+
+// Filesystem operations
+static int ramfs_mount    ( cyg_fstab_entry *fste, cyg_mtab_entry *mte );
+static int ramfs_umount   ( cyg_mtab_entry *mte );
+static int ramfs_open     ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                             int mode,  cyg_file *fte );
+static int ramfs_unlink   ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
+static int ramfs_mkdir    ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
+static int ramfs_rmdir    ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
+static int ramfs_rename   ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
+                             cyg_dir dir2, const char *name2 );
+static int ramfs_link     ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
+                             cyg_dir dir2, const char *name2, int type );
+static int ramfs_opendir  ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                             cyg_file *fte );
+static int ramfs_chdir    ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                             cyg_dir *dir_out );
+static int ramfs_stat     ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                             struct stat *buf);
+static int ramfs_getinfo  ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                             int key, void *buf, int len );
+static int ramfs_setinfo  ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+                             int key, void *buf, int len );
+
+// File operations
+static int ramfs_fo_read      (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio);
+static int ramfs_fo_write     (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio);
+static int ramfs_fo_lseek     (struct CYG_FILE_TAG *fp, off_t *pos, int whence );
+static int ramfs_fo_ioctl     (struct CYG_FILE_TAG *fp, CYG_ADDRWORD com,
+                                CYG_ADDRWORD data);
+static int ramfs_fo_fsync     (struct CYG_FILE_TAG *fp, int mode );        
+static int ramfs_fo_close     (struct CYG_FILE_TAG *fp);
+static int ramfs_fo_fstat     (struct CYG_FILE_TAG *fp, struct stat *buf );
+static int ramfs_fo_getinfo   (struct CYG_FILE_TAG *fp, int key, void *buf, int len );
+static int ramfs_fo_setinfo   (struct CYG_FILE_TAG *fp, int key, void *buf, int len );
+
+// Directory operations
+static int ramfs_fo_dirread      (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio);
+static int ramfs_fo_dirlseek     (struct CYG_FILE_TAG *fp, off_t *pos, int whence );

We define all of the fstab entries and all of the file IO +operations. We also define alternatives for the +fo_read and +fo_lseek file IO operations.

We can now define the filesystem table entry. There is a macro, +FSTAB_ENTRY to do this:

//==========================================================================
+// Filesystem table entries
+
+// -------------------------------------------------------------------------
+// Fstab entry.
+// This defines the entry in the filesystem table.
+// For simplicity we use _FILESYSTEM synchronization for all accesses since
+// we should never block in any filesystem operations.
+
+FSTAB_ENTRY( ramfs_fste, "ramfs", 0,
+             CYG_SYNCMODE_FILE_FILESYSTEM|CYG_SYNCMODE_IO_FILESYSTEM,
+             ramfs_mount,
+             ramfs_umount,
+             ramfs_open,
+             ramfs_unlink,
+             ramfs_mkdir,
+             ramfs_rmdir,
+             ramfs_rename,
+             ramfs_link,
+             ramfs_opendir,
+             ramfs_chdir,
+             ramfs_stat,
+             ramfs_getinfo,
+             ramfs_setinfo);

The first argument to this macro gives the fstab entry a name, the +remainder are initializers for the field of the structure.

We must also define the file operations table that is installed in all +open file table entries:

// -------------------------------------------------------------------------
+// File operations.
+// This set of file operations are used for normal open files.
+
+static cyg_fileops ramfs_fileops =
+{
+    ramfs_fo_read,
+    ramfs_fo_write,
+    ramfs_fo_lseek,
+    ramfs_fo_ioctl,
+    cyg_fileio_seltrue,
+    ramfs_fo_fsync,
+    ramfs_fo_close,
+    ramfs_fo_fstat,
+    ramfs_fo_getinfo,
+    ramfs_fo_setinfo
+};

These all point to functions supplied by the filesystem except the +fo_select field which is filled with a +pointer to cyg_fileio_seltrue(). This is provided +by the FILEIO package and is a select function that always returns +true to all operations.

Finally, we need to define a set of file operations for use when +reading directories. This table only defines the +fo_read and +fo_lseek operations. The rest are filled +with stub functions supplied by the FILEIO package that just return an +error code.

// -------------------------------------------------------------------------
+// Directory file operations.
+// This set of operations are used for open directories. Most entries
+// point to error-returning stub functions. Only the read, lseek and
+// close entries are functional.
+
+static cyg_fileops ramfs_dirops =
+{
+    ramfs_fo_dirread,
+    (cyg_fileop_write *)cyg_fileio_enosys,
+    ramfs_fo_dirlseek,
+    (cyg_fileop_ioctl *)cyg_fileio_enosys,
+    cyg_fileio_seltrue,
+    (cyg_fileop_fsync *)cyg_fileio_enosys,
+    ramfs_fo_close,
+    (cyg_fileop_fstat *)cyg_fileio_enosys,
+    (cyg_fileop_getinfo *)cyg_fileio_enosys,
+    (cyg_fileop_setinfo *)cyg_fileio_enosys
+};

If the filesystem wants to have an instance automatically mounted on +system startup, it must also define a mount table entry. This is done +with the MTAB_ENTRY macro. This is an example from +the test filesystem of how this is used:

MTAB_ENTRY( testfs_mte1,
+                   "/",
+                   "testfs",
+                   "",
+                   0);

The first argument provides a name for the table entry. The following +arguments provide initialization for the +name, fsname, +devname and data +fields respectively.

These definitions are adequate to let the new filesystem interact +with the FILEIO package. The new filesystem now needs to be fleshed +out with implementations of the functions defined above. Obviously, +the exact form this takes will depend on what the filesystem is +intended to do. Take a look at the RAM and ROM filesystems for +examples of how this has been done.


PrevHomeNext
DevicesUpPCI Library
\ No newline at end of file diff --git a/doc/html/ref/fileio.html b/doc/html/ref/fileio.html new file mode 100644 index 00000000..fcae8cc8 --- /dev/null +++ b/doc/html/ref/fileio.html @@ -0,0 +1,211 @@ + + + + + + + + +File System Support Infrastructure +
eCos Reference Manual
PrevNext


PrevHomeNext
The API Introduction
\ No newline at end of file diff --git a/doc/html/ref/filters.png b/doc/html/ref/filters.png new file mode 100644 index 00000000..ed89b284 Binary files /dev/null and b/doc/html/ref/filters.png differ diff --git a/doc/html/ref/fis-create-command.html b/doc/html/ref/fis-create-command.html new file mode 100644 index 00000000..be677309 --- /dev/null +++ b/doc/html/ref/fis-create-command.html @@ -0,0 +1,576 @@ + + + + + + + + +fis create +
eCos Reference Manual
PrevNext

fis create

Name

fis create -- Create flash image

Arguments

NameTypeDescriptionDefault
-bNumberAddress of data to be written to the flash.Address of last loaded file. If not set in a load + operation, it must be specified.
-lNumberLength of flash area to occopy. If specified, and + the named image already exists, the length must match + the value in the FIS directory.Length of area reserved in FIS directory if the + image already exists, or the length of the last loaded + file. If neither are set, it must be specified.
-fNumberAddress of flash area to occopy.The address of an area reserved in the FIS + directory for extant images. Otherwise the first free block + which is large enough will be used.
-eNumberEntry address for an executable image, used by + the fis load command.The entry address of last loaded file.
-rNumberAddress where the image should be relocated to by + the fis load command. This is only + relevant for images that will be loaded with the + fis load command.The load address of the last loaded file.
-sNumberActual length of data written to image. This is + used to control the range over which the checksum is + made.It defaults to the length of the last loaded + file.
-n When set, no image data will be written to the + flash. Only the FIS directory will be updated. 
nameStringName of flash image. 

Description

This command creates an image in the FIS directory. The data for the +image must exist in RAM memory before the copy. Typically, you would use the +RedBoot load command to load file into +RAM and then the fis create command to write +it to a flash image.

Examples

Trying to create an extant image, will require the action + to be verified. +
RedBoot> fis create RedBoot -f 0xa0000000 -b 0x8c400000 -l 0x20000
+An image named ‘RedBoot’ exists - continue (y/n)? n

Create a new test image, let the command find a suitable place. +
RedBoot> fis create junk -b 0x8c400000 -l 0x20000
+... Erase from 0xa0040000-0xa0060000: .
+... Program from 0x8c400000-0x8c420000 at 0xa0040000: .
+... Erase from 0xa0fe0000-0xa1000000: .
+... Program from 0x8c7d0000-0x8c7f0000 at 0xa0fe0000: .

Update the RedBoot[RAM] image. +
RedBoot> load redboot_RAM.img
+Entry point: 0x060213c0, address range: 0x06020000-0x06036cc0                   
+RedBoot> fis create RedBoot[RAM]
+No memory address set.
+An image named 'RedBoot[RAM]' exists - continue (y/n)? y
+* CAUTION * about to program 'RedBoot[RAM]'
+            at 0x00020000..0x00036cbf from 0x06020000 - continue (y/n)? y
+... Erase from 0x00020000-0x00040000: ..
+... Program from 0x06020000-0x06036cc0 at 0x00020000: ..
+... Erase from 0x00070000-0x00080000: .
+... Program from 0x0606f000-0x0607f000 at 0x00070000: .


PrevHomeNext
fis freeUpfis load
\ No newline at end of file diff --git a/doc/html/ref/fis-delete-command.html b/doc/html/ref/fis-delete-command.html new file mode 100644 index 00000000..fa05a716 --- /dev/null +++ b/doc/html/ref/fis-delete-command.html @@ -0,0 +1,314 @@ + + + + + + + + +fis delete +
eCos Reference Manual
PrevNext

fis delete

Name

fis delete -- Delete flash image

Description

This command removes an image from the FIS. The flash memory will be +erased as part of the execution of this command, as well as removal of the +name from the FIS directory.

Note: Certain images are reserved by RedBoot and cannot be deleted. +RedBoot will issue a warning if this is attempted.

Examples

RedBoot> fis list
+Name              flash addr   Mem addr    Length    Entry point
+RedBoot          0xA0000000   0xA0000000  0x020000  0x80000000
+RedBoot config   0xA0FC0000   0xA0FC0000  0x020000  0x00000000
+FIS directory    0xA0FE0000   0xA0FE0000  0x020000  0x00000000
+junk             0xA0040000   0x8C400000  0x020000  0x80000000
+RedBoot> fis delete junk
+Delete image ‘junk’ - continue (y/n)? y
+... Erase from 0xa0040000-0xa0060000: .
+... Erase from 0xa0fe0000-0xa1000000: .
+... Program from 0x8c7d0000-0x8c7f0000 at 0xa0fe0000: .


PrevHomeNext
fis loadUpfis lock
\ No newline at end of file diff --git a/doc/html/ref/fis-erase-command.html b/doc/html/ref/fis-erase-command.html new file mode 100644 index 00000000..5ff674ee --- /dev/null +++ b/doc/html/ref/fis-erase-command.html @@ -0,0 +1,317 @@ + + + + + + + + +fis erase +
eCos Reference Manual
PrevNext

fis erase

Name

fis erase -- Erase flash area

Description

This command is used to erase a portion of flash memory forcibly. There +is no cross-checking to ensure that the area being erased does not correspond +to an existing image.

Examples

Erase an area of the flash +
RedBoot> fis erase -f 0xa0040000 -l 0x20000
+... Erase from 0xa0040000-0xa0060000: .


PrevHomeNext
fis unlockUpfis write
\ No newline at end of file diff --git a/doc/html/ref/fis-free-command.html b/doc/html/ref/fis-free-command.html new file mode 100644 index 00000000..fc9a910e --- /dev/null +++ b/doc/html/ref/fis-free-command.html @@ -0,0 +1,223 @@ + + + + + + + + +fis free +
eCos Reference Manual
PrevNext

fis free

Name

fis free -- Free flash image

Description

This command shows which areas of the flash memory are currently +not in use. When a block contains non-erased contents it is considered +in use. Since it is possible to force an image to be loaded at a +particular flash location, this command can be used to check whether +that location is in use by any other image.

Note: There is currently no cross-checking between actual flash +contents and the FIS directory, which mans that there could be a +segment of flash which is not erased that does not correspond to a +named image, or vice-versa.

Examples

Show free flash areas. +
RedBoot> fis free
+        0xA0040000 .. 0xA07C0000
+        0xA0840000 .. 0xA0FC0000


PrevHomeNext
fis listUpfis create
\ No newline at end of file diff --git a/doc/html/ref/fis-init-command.html b/doc/html/ref/fis-init-command.html new file mode 100644 index 00000000..30d2141d --- /dev/null +++ b/doc/html/ref/fis-init-command.html @@ -0,0 +1,342 @@ + + + + + + + + +fis init +
eCos Reference Manual
PrevNext

fis init

Name

fis init -- Initialize Flash Image System (FIS)

Description

This command is used to initialize the Flash Image System + (FIS). It should normally only be executed once, when RedBoot + is first installed on the hardware. If the reserved images or + their sizes in the FIS change, due to a different configuration + of RedBoot being used, it may be necessary to issue the command + again though. + +

Note: Subsequent executions will cause loss of + previously stored information in the FIS.

+

Examples

Initialize the FIS directory. +
 
+RedBoot> fis init
+About to initialize [format] flash image system - continue (y/n)? y
+*** Initialize FLASH Image System
+    Warning: device contents not erased, some blocks may not be usable
+... Erase from 0x00070000-0x00080000: .
+... Program from 0x0606f000-0x0607f000 at 0x00070000: .

Initialize the FIS directory and all of flash memory, except for first +blocks of the flash where the boot monitor resides. +
 
+RedBoot> fis init -f
+About to initialize [format] flash image system - continue (y/n)? y
+*** Initialize FLASH Image System                                               
+... Erase from 0x00020000-0x00070000: .....                                     
+... Erase from 0x00080000-0x00080000:                                           
+... Erase from 0x00070000-0x00080000: .                                         
+... Program from 0x0606f000-0x0607f000 at 0x00070000: .                         


PrevHomeNext
Flash Image System (FIS)Upfis list
\ No newline at end of file diff --git a/doc/html/ref/fis-list-command.html b/doc/html/ref/fis-list-command.html new file mode 100644 index 00000000..61ad4b4b --- /dev/null +++ b/doc/html/ref/fis-list-command.html @@ -0,0 +1,391 @@ + + + + + + + + +fis list +
eCos Reference Manual
PrevNext

fis list

Name

fis list -- List Flash Image System directory

Description

This command lists the images currently available in the FIS. Certain +images used by RedBoot have fixed names and have reserved slots in the +FIS (these can be seen after using the fis init +command). Other images can be manipulated by the user.

Note: The images are listed in the order they appear in the FIS +directory, not by name or creation time.

Examples

List the FIS directory. +
 
+RedBoot> fis list
+Name              FLASH addr  Mem addr    Length      Entry point               
+RedBoot           0x00000000  0x00000000  0x00020000  0x00000000                
+RedBoot config    0x0007F000  0x0007F000  0x00001000  0x00000000                
+FIS directory     0x00070000  0x00070000  0x0000F000  0x00000000                

List the FIS directory, with image checksums substituted for +memory addresses. +
 
+RedBoot> fis list -c
+Name              FLASH addr  Checksum    Length      Entry point               
+RedBoot           0x00000000  0x00000000  0x00020000  0x00000000                
+RedBoot config    0x0007F000  0x00000000  0x00001000  0x00000000                
+FIS directory     0x00070000  0x00000000  0x0000F000  0x00000000                

List the FIS directory with image data lengths substituted for flash +block reservation lengths. +
 
+RedBoot> fis list
+Name              FLASH addr  Mem addr    Datalen     Entry point               
+RedBoot           0x00000000  0x00000000  0x00000000  0x00000000                
+RedBoot config    0x0007F000  0x0007F000  0x00000000  0x00000000                
+FIS directory     0x00070000  0x00070000  0x00000000  0x00000000                


PrevHomeNext
fis initUpfis free
\ No newline at end of file diff --git a/doc/html/ref/fis-load-command.html b/doc/html/ref/fis-load-command.html new file mode 100644 index 00000000..ac921f8a --- /dev/null +++ b/doc/html/ref/fis-load-command.html @@ -0,0 +1,364 @@ + + + + + + + + +fis load +
eCos Reference Manual
PrevNext

fis load

Name

fis load -- Load flash image

Description

This command is used to transfer an image from flash memory to RAM.

Once the image has been loaded, it may be executed using the +go command.

Examples

Load and run RedBoot[RAM] image. +
RedBoot> fis load RedBoot[RAM]
+RedBoot> go


PrevHomeNext
fis createUpfis delete
\ No newline at end of file diff --git a/doc/html/ref/fis-lock-command.html b/doc/html/ref/fis-lock-command.html new file mode 100644 index 00000000..5bf4e85e --- /dev/null +++ b/doc/html/ref/fis-lock-command.html @@ -0,0 +1,333 @@ + + + + + + + + +fis lock +
eCos Reference Manual
PrevNext

fis lock

Name

fis lock -- Lock flash area

Description

This command is used to write-protect (lock) a portion of flash memory, +to prevent accidental overwriting of images. In order to make make any modifications +to the flash, a matching fis unlock command must be +issued. This command is optional and will only be provided on hardware +which can support write-protection of the flash space.

Note: Depending on the system, attempting to write to write-protected flash +may generate errors or warnings, or be benignly quiet.

Examples

Lock an area of the flash +
RedBoot> fis lock -f 0xa0040000 -l 0x20000
+... Lock from 0xa0040000-0xa0060000: .


PrevHomeNext
fis deleteUpfis unlock
\ No newline at end of file diff --git a/doc/html/ref/fis-unlock-command.html b/doc/html/ref/fis-unlock-command.html new file mode 100644 index 00000000..f50503df --- /dev/null +++ b/doc/html/ref/fis-unlock-command.html @@ -0,0 +1,328 @@ + + + + + + + + +fis unlock +
eCos Reference Manual
PrevNext

fis unlock

Name

fis unlock -- Unlock flash area

Description

This command is used to unlock a portion of flash memory forcibly, allowing +it to be updated. It must be issued for regions which have been locked before +the FIS can reuse those portions of flash.

Note: Some flash devices power up in locked state and always need to +be manually unlocked before they can be written to.

Examples

Unlock an area of the flash +
RedBoot> fis unlock -f 0xa0040000 -l 0x20000
+... Unlock from 0xa0040000-0xa0060000: .


PrevHomeNext
fis lockUpfis erase
\ No newline at end of file diff --git a/doc/html/ref/fis-write-command.html b/doc/html/ref/fis-write-command.html new file mode 100644 index 00000000..9103237c --- /dev/null +++ b/doc/html/ref/fis-write-command.html @@ -0,0 +1,357 @@ + + + + + + + + +fis write +
eCos Reference Manual
PrevNext

fis write

Name

fis write -- Write flash area

Description

This command is used to write data from memory to flash. There +is no cross-checking to ensure that the area being written to does not +correspond to an existing image.

Examples

Write an area of data to the flash +
RedBoot> fis write -b 0x0606f000 -l 0x1000 -f 0x00020000
+* CAUTION * about to program FLASH
+            at 0x00020000..0x0002ffff from 0x0606f000 - continue (y/n)? y
+... Erase from 0x00020000-0x00030000: .
+... Program from 0x0606f000-0x0607f000 at 0x00020000: .


PrevHomeNext
fis eraseUpPersistent State Flash-based Configuration and Control
\ No newline at end of file diff --git a/doc/html/ref/flash-image-system.html b/doc/html/ref/flash-image-system.html new file mode 100644 index 00000000..a3fdad34 --- /dev/null +++ b/doc/html/ref/flash-image-system.html @@ -0,0 +1,218 @@ + + + + + + + + +Flash Image System (FIS) +
eCos Reference Manual
PrevChapter 2. RedBoot Commands and ExamplesNext

Flash Image System (FIS)

Table of Contents
fis init -- Initialize Flash Image System (FIS)
fis list -- List Flash Image System directory
fis free -- Free flash image
fis create -- Create flash image
fis load -- Load flash image
fis delete -- Delete flash image
fis lock -- Lock flash area
fis unlock -- Unlock flash area
fis erase -- Erase flash area
fis write -- Write flash area

If the platform +has flash memory, RedBoot can use this for image storage. Executable images, +as well as data, can be stored in flash in a simple file store. The fis command (fis is short for Flash Image System) is used to +manipulate and maintain flash images.


PrevHomeNext
versionUpfis init
\ No newline at end of file diff --git a/doc/html/ref/frv400.html b/doc/html/ref/frv400.html new file mode 100644 index 00000000..ac00b133 --- /dev/null +++ b/doc/html/ref/frv400.html @@ -0,0 +1,345 @@ + + + + + + + + +FRV/FRV400 Fujitsu FR-V 400 (MB-93091) +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

FRV/FRV400 Fujitsu FR-V 400 (MB-93091)

Memory Maps

The memory map of this platform is fixed by the hardware (cannot +be changed by software). The only attributes which can be modified are +control over cacheability, as noted below. +
Address                 Cache?      Resource
+00000000-03EFFFFF         Yes       SDRAM (via plugin DIMM)
+03F00000-03FFFFFF         No        SDRAM (used for PCI window)
+10000000-1FFFFFFF         No        MB86943 PCI bridge
+20000000-201FFFFF         No        SRAM
+21000000-23FFFFFF         No        Motherboard resources
+24000000-25FFFFFF         No        PCI I/O space
+26000000-2FFFFFFF         No        PCI Memory space
+30000000-FDFFFFFF         ??        Unused
+FE000000-FEFFFFFF         No        I/O devices
+FF000000-FF1FFFFF         No        IC7 - RedBoot FLASH
+FF200000-FF3FFFFF         No        IC8 - unused FLASH
+FF400000-FFFFFFFF         No        Misc other I/O

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=frv400
+export ARCH_DIR=frv
+export PLATFORM_DIR=frv400

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
CalmRISC/CalmRISC32 Samsung CalmRISC32 Core Evaluation BoardUpIA32/x86 x86-Based PC
\ No newline at end of file diff --git a/doc/html/ref/getting-started-with-redboot.html b/doc/html/ref/getting-started-with-redboot.html new file mode 100644 index 00000000..ac185bae --- /dev/null +++ b/doc/html/ref/getting-started-with-redboot.html @@ -0,0 +1,284 @@ + + + + + + + + +Getting Started with RedBoot +
eCos Reference Manual
PrevNext

Chapter 1. Getting Started with RedBoot

RedBoot™ is an acronym for "Red Hat Embedded Debug and Bootstrap", +and is the standard embedded system debug/bootstrap environment from Red Hat, +replacing the previous generation of debug firmware: CygMon and GDB +stubs. It provides a complete bootstrap environment for a range of embedded +operating systems, such as embedded Linux™ and eCos™, and includes facilities +such as network downloading and debugging. It also provides a simple flash +file system for boot images.

RedBoot provides a wide set of tools for downloading and executing programs +on embedded target systems, as well as tools for manipulating the target system's +environment. It can be used for both product development (debug support) and +for end product deployment (flash and network booting).

Here are some highlights of RedBoot’s capabilities:

  • Boot scripting support

  • Simple command line interface for RedBoot configuration and +management, accessible via serial (terminal) or Ethernet (telnet)

  • Integrated GDB stubs for connection to a host-based debugger +via serial or ethernet. (Ethernet connectivity is limited to local network +only)

  • Attribute Configuration - user control of aspects such as +system time and date (if applicable), default Flash image to boot from, default +failsafe image, static IP address, etc.

  • Configurable and extensible, specifically adapted to the target +environment

  • Network bootstrap support including setup and download, via +BOOTP, DHCP and TFTP

  • X/YModem support for image download via serial

  • Power On Self Test

Although RedBoot is derived from eCos, it may be used as a generalized +system debug and bootstrap control software for any embedded system and any +operating system. For example, with appropriate additions, RedBoot could replace +the commonly used BIOS of PC (and certain other) architectures. Red Hat is +currently installing RedBoot on all embedded platforms as a standard practice, +and RedBoot is now generally included as part of all Red Hat Embedded Linux +and eCos ports. Users who specifically wish to use RedBoot with the eCos operating +system should refer to the Getting Started with eCos +document, which provides information about the portability and extendability +of RedBoot in an eCos environment.

More information about RedBoot on the web

The RedBoot Net +Distribution web site contains downloadable sources and documentation +for all publically released targets, including the latest features and updates.


PrevHomeNext
RedBoot™ User's GuideUpInstalling RedBoot
\ No newline at end of file diff --git a/doc/html/ref/go-command.html b/doc/html/ref/go-command.html new file mode 100644 index 00000000..4191cb7b --- /dev/null +++ b/doc/html/ref/go-command.html @@ -0,0 +1,371 @@ + + + + + + + + +go +
eCos Reference Manual
PrevNext

go

Name

go -- Execute a program

Description

The go command causes RedBoot to give control of the target platform to +another program. This program must execute stand alone, e.g. an eCos +application or a Linux kernel. +

If the -w option is used, RedBoot will print a message and then +wait for a period of time before starting the execution. This is +most useful in a script, giving the user a chance to abort executing +a program and move on in the script. +

Examples

Execute a program - no explicit output from RedBoot. +
RedBoot> go 0x40040
+

Execute a program with a timeout. +
RedBoot> go -w 10
+About to start execution at 0x00000000 - abort with ^C within 10 seconds
+^C
+RedBoot>
+Note that the starting address was implied (0x00000000 in this example). +The user is prompted that execution will commence in 10 seconds. At +anytime within that 10 seconds the user may type Ctrl+C +on the console and RedBoot will abort execution and return for the next +command, either from a script or the console. +


PrevHomeNext
Executing Programs from RedBootUpexec
\ No newline at end of file diff --git a/doc/html/ref/hal-architecture-characterization.html b/doc/html/ref/hal-architecture-characterization.html new file mode 100644 index 00000000..5434d745 --- /dev/null +++ b/doc/html/ref/hal-architecture-characterization.html @@ -0,0 +1,782 @@ + + + + + + + + +Architecture Characterization +
eCos Reference Manual
PrevChapter 9. HAL InterfacesNext

Architecture Characterization

These are definition that are related to the basic architecture of the +CPU. These include the CPU context save format, context switching, bit +twiddling, breakpoints, stack sizes and address translation.

Most of these definition are found in +cyg/hal/hal_arch.h. This file is supplied by the +architecture HAL. If there are variant or platform specific +definitions then these will be found in +cyg/hal/var_arch.h or +cyg/hal/plf_arch.h. These files are include +automatically by this header, so need not be included explicitly.

Thread Context Initialization

HAL_THREAD_INIT_CONTEXT( sp, arg, entry, id )

This macro initializes a thread's context so that +it may be switched to by HAL_THREAD_SWITCH_CONTEXT(). +The arguments are:

sp

A location containing the current value of the thread's stack + pointer. This should be a variable or a structure field. The SP + value will be read out of here and an adjusted value written + back. +

arg

A value that is passed as the first argument to the entry + point function. +

entry

The address of an entry point function. This will be called + according the C calling conventions, and the value of + arg will be passed as the first + argument. This function should have the following type signature + void entry(CYG_ADDRWORD arg). +

id

A thread id value. This is only used for debugging purposes, + it is ORed into the initialization pattern for unused registers + and may be used to help identify the thread from its register dump. + The least significant 16 bits of this value should be zero to allow + space for a register identifier. +

Thread Context Switching

HAL_THREAD_LOAD_CONTEXT( to )
+HAL_THREAD_SWITCH_CONTEXT( from, to )

These macros implement the thread switch code. The arguments are:

For HAL_THREAD_LOAD_CONTEXT() the current CPU +state is discarded and the state of the destination thread is +loaded. This is only used once, to load the first thread when the +scheduler is started.

For HAL_THREAD_SWITCH_CONTEXT() the state of the +current thread is saved onto its stack, using the current value of the +stack pointer, and the address of the saved state placed in +*from. The value in +*to is then read and the state of the new +thread is loaded from it.

While these two operations may be implemented with inline assembler, +they are normally implemented as calls to assembly code functions in +the HAL. There are two advantages to doing it this way. First, the +return link of the call provides a convenient PC value to be used in +the saved context. Second, the calling conventions mean that the +compiler will have already saved the caller-saved registers before the +call, so the HAL need only save the callee-saved registers.

The implementation of HAL_THREAD_SWITCH_CONTEXT() +saves the current CPU state on the stack, including the current +interrupt state (or at least the register that contains it). For +debugging purposes it is useful to save the entire register set, but +for performance only the ABI-defined callee-saved registers need be +saved. If it is implemented, the option +CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM controls +how many registers are saved.

The implementation of HAL_THREAD_LOAD_CONTEXT() +loads a thread context, destroying the current context. With a little +care this can be implemented by sharing code with +HAL_THREAD_SWITCH_CONTEXT(). To load a thread +context simply requires the saved registers to be restored from the +stack and a jump or return made back to the saved PC.

Note that interrupts are not disabled during this process, any +interrupts that occur will be delivered onto the stack to which the +current CPU stack pointer points. Hence the stack pointer +should never be invalid, or loaded with a value that might cause the +saved state to become corrupted by an interrupt. However, the current +interrupt state is saved and restored as part of the thread +context. If a thread disables interrupts and does something to cause a +context switch, interrupts may be re-enabled on switching to another +thread. Interrupts will be disabled again when the original thread +regains control.

GDB support

HAL_THREAD_GET_SAVED_REGISTERS( sp, regs )
+HAL_GET_GDB_REGISTERS( regval, regs )
+HAL_SET_GDB_REGISTERS( regs, regval )

These macros provide support for interfacing GDB to the HAL.

HAL_THREAD_GET_SAVED_REGISTERS() extracts a +pointer to a HAL_SavedRegisters structure +from a stack pointer value. The stack pointer passed in should be the +value saved by the thread context macros. The macro will assign a +pointer to the HAL_SavedRegisters structure +to the variable passed as the second argument.

HAL_GET_GDB_REGISTERS() translates a register +state as saved by the HAL and into a register dump in the format +expected by GDB. It takes a pointer to a +HAL_SavedRegisters structure in the +regs argument and a pointer to the memory to +contain the GDB register dump in the regval +argument.

HAL_SET_GDB_REGISTERS() translates a GDB format +register dump into a the format expected by the HAL. It takes a +pointer to the memory containing the GDB register dump in the +regval argument and a pointer to a +HAL_SavedRegisters structure +in the regs argument.

Setjmp and longjmp support

CYGARC_JMP_BUF_SIZE
+hal_jmp_buf[CYGARC_JMP_BUF_SIZE]
+hal_setjmp( hal_jmp_buf env )
+hal_longjmp( hal_jmp_buf env, int val )

These functions provide support for the C +setjmp() and longjmp() +functions. Refer to the C library for further information.

Stack Sizes

CYGNUM_HAL_STACK_SIZE_MINIMUM
+CYGNUM_HAL_STACK_SIZE_TYPICAL

The values of these macros define the minimum and typical sizes of +thread stacks.

CYGNUM_HAL_STACK_SIZE_MINIMUM defines the minimum +size of a thread stack. This is enough for the thread to function +correctly within eCos and allows it to take interrupts and context +switches. There should also be enough space for a simple thread entry +function to execute and call basic kernel operations on objects like +mutexes and semaphores. However there will not be enough room for much +more than this. When creating stacks for their own threads, +applications should determine the stack usage needed for application +purposes and then add +CYGNUM_HAL_STACK_SIZE_MINIMUM.

CYGNUM_HAL_STACK_SIZE_TYPICAL is a reasonable increment over +CYGNUM_HAL_STACK_SIZE_MINIMUM, usually about 1kB. This should be +adequate for most modest thread needs. Only threads that need to +define significant amounts of local data, or have very deep call trees +should need to use a larger stack size.

Address Translation

CYGARC_CACHED_ADDRESS(addr)
+CYGARC_UNCACHED_ADDRESS(addr)
+CYGARC_PHYSICAL_ADDRESS(addr)

These macros provide address translation between different views of +memory. In many architectures a given memory location may be visible +at different addresses in both cached and uncached forms. It is also +possible that the MMU or some other address translation unit in the +CPU presents memory to the program at a different virtual address to +its physical address on the bus.

CYGARC_CACHED_ADDRESS() translates the given +address to its location in cached memory. This is typically where the +application will access the memory.

CYGARC_UNCACHED_ADDRESS() translates the given +address to its location in uncached memory. This is typically where +device drivers will access the memory to avoid cache problems. It may +additionally be necessary for the cache to be flushed before the +contents of this location is fully valid.

CYGARC_PHYSICAL_ADDRESS() translates the given +address to its location in the physical address space. This is +typically the address that needs to be passed to device hardware such +as a DMA engine, ethernet device or PCI bus bridge. The physical +address may not be directly accessible to the program, it may be +re-mapped by address translation.


PrevHomeNext
HAL InterfacesUpInterrupt Handling
\ No newline at end of file diff --git a/doc/html/ref/hal-architecture-variant-and-platform.html b/doc/html/ref/hal-architecture-variant-and-platform.html new file mode 100644 index 00000000..5336ef68 --- /dev/null +++ b/doc/html/ref/hal-architecture-variant-and-platform.html @@ -0,0 +1,202 @@ + + + + + + + + +Architecture, Variant and Platform +
eCos Reference Manual
PrevNext

Chapter 7. Architecture, Variant and Platform

We have identified three levels at which the HAL must operate.

The boundaries between these three HAL levels are necessarily blurred +since functionality shifts between levels on a target-by-target basis. +For example caches and MMU may be either an architecture feature or a +variant feature. Similarly, memory and interrupt controllers may be +on-chip and in the variant HAL, or off-chip and in the platform HAL.

Generally there is a separate package for each of the architecture, +variant and package HALs for a target. For some of the older targets, +or where it would be essentially empty, the variant HAL is omitted.


PrevHomeNext
IntroductionUpGeneral principles
\ No newline at end of file diff --git a/doc/html/ref/hal-cache-control.html b/doc/html/ref/hal-cache-control.html new file mode 100644 index 00000000..17610382 --- /dev/null +++ b/doc/html/ref/hal-cache-control.html @@ -0,0 +1,583 @@ + + + + + + + + +Cache Control +
eCos Reference Manual
PrevChapter 9. HAL InterfacesNext

Cache Control

This section contains definitions for supporting control +of the caches on the CPU.

These definitions are usually found in the header file +cyg/hal/hal_cache.h. This file may be defined in +the architecture, variant or platform HAL, depending on where the +caches are implemented for the target. Often there will be a generic +implementation of the cache control macros in the architecture HAL +with the ability to override or undefine them in the variant or +platform HAL. Even when the implementation of the cache macros is in +the architecture HAL, the cache dimensions will be defined in the +variant or platform HAL. As with other files, the variant or platform +specific definitions are usually found in +cyg/hal/var_cache.h and +cyg/hal/plf_cache.h respectively. These files +are include automatically by this header, so need not be included +explicitly.

There are versions of the macros defined here for both the Data and +Instruction caches. these are distinguished by the use of either +DCACHE or ICACHE in the macro +names. Some architectures have a unified cache, where both data and +instruction share the same cache. In these cases the control macros +use UCACHE and the DCACHE and +ICACHE macros will just be calls to the +UCACHE version. In the following descriptions, +XCACHE is used to stand for any of these. Where +there are issues specific to a particular cache, this will be +explained in the text.

There might be target specific restrictions on the use of some of the +macros which it is the user's responsibility to comply with. Such +restrictions are documented in the header file with the macro +definition.

Note that destructive cache macros should be used with caution. +Preceding a cache invalidation with a cache synchronization is not +safe in itself since an interrupt may happen after the synchronization +but before the invalidation. This might cause the state of dirty data +lines created during the interrupt to be lost.

Depending on the architecture's capabilities, it may be possible to +temporarily disable the cache while doing the synchronization and +invalidation which solves the problem (no new data would be cached +during an interrupt). Otherwise it is necessary to disable interrupts +while manipulating the cache which may take a long time.

Some platform HALs now support a pair of cache state query +macros: HAL_ICACHE_IS_ENABLED( x ) and +HAL_DCACHE_IS_ENABLED( x ) which set the argument +to true if the instruction or data cache is enabled, +respectively. Like most cache control macros, these are optional, +because the capabilities of different targets and boards can vary +considerably. Code which uses them, if it is to be considered +portable, should test for their existence first by means of +#ifdef. Be sure to include +<cyg/hal/hal_cache.h> in order to do this +test and (maybe) use the macros.

Global Cache Control

HAL_XCACHE_ENABLE()
+HAL_XCACHE_DISABLE()
+HAL_XCACHE_INVALIDATE_ALL()
+HAL_XCACHE_SYNC()
+HAL_XCACHE_BURST_SIZE( size )
+HAL_DCACHE_WRITE_MODE( mode )
+HAL_XCACHE_LOCK( base, size )
+HAL_XCACHE_UNLOCK( base, size )
+HAL_XCACHE_UNLOCK_ALL()

These macros affect the state of the entire cache, or a large part of +it.

HAL_XCACHE_ENABLE() and HAL_XCACHE_DISABLE()

Enable and disable the cache.

HAL_XCACHE_INVALIDATE_ALL()

Causes the entire contents of the cache to be invalidated. + Depending on the hardware, this may require the cache to be disabled + during the invalidation process. If so, the implementation must + use HAL_XCACHE_IS_ENABLED() to save and + restore the previous state. +

HAL_XCACHE_SYNC()

Causes the contents of the cache to be brought into synchronization + with the contents of memory. In some implementations this may be + equivalent to HAL_XCACHE_INVALIDATE_ALL(). +

HAL_XCACHE_BURST_SIZE()

Allows the size of cache to/from memory bursts to + be controlled. This macro will only be defined if this functionality + is available. +

HAL_DCACHE_WRITE_MODE()

Controls the way in which data cache lines are written back to + memory. There will be definitions for the possible + modes. Typical definitions are + HAL_DCACHE_WRITEBACK_MODE and + HAL_DCACHE_WRITETHRU_MODE. This macro will + only be defined if this functionality is available. +

HAL_XCACHE_LOCK()

Causes data to be locked into the cache. The base and size + arguments define the memory region that will be locked into the + cache. It is architecture dependent whether more than one locked + region is allowed at any one time, and whether this operation + causes the cache to cease acting as a cache for addresses + outside the region during the duration of the lock. This macro + will only be defined if this functionality is available. +

HAL_XCACHE_UNLOCK()

Cancels the locking of the memory region given. This should + normally correspond to a region supplied in a matching lock + call. This macro will only be defined if this functionality is + available. +

HAL_XCACHE_UNLOCK_ALL()

Cancels all existing locked memory regions. This may be required + as part of the cache initialization on some architectures. This + macro will only be defined if this functionality is available. +

Cache Line Control

HAL_DCACHE_ALLOCATE( base , size )
+HAL_DCACHE_FLUSH( base , size )
+HAL_XCACHE_INVALIDATE( base , size )
+HAL_DCACHE_STORE( base , size )
+HAL_DCACHE_READ_HINT( base , size )
+HAL_DCACHE_WRITE_HINT( base , size )
+HAL_DCACHE_ZERO( base , size )

All of these macros apply a cache operation to all cache lines that +match the memory address region defined by the base and size +arguments. These macros will only be defined if the described +functionality is available. Also, it is not guaranteed that the cache +function will only be applied to just the described regions, in some +architectures it may be applied to the whole cache.

HAL_DCACHE_ALLOCATE()

Allocates lines in the cache for the given region without + reading their contents from memory, hence the contents of the lines + is undefined. This is useful for preallocating lines which are to + be completely overwritten, for example in a block copy + operation. +

HAL_DCACHE_FLUSH()

Invalidates all cache lines in the region after writing any + dirty lines to memory. +

HAL_XCACHE_INVALIDATE()

Invalidates all cache lines in the region. Any dirty lines + are invalidated without being written to memory. +

HAL_DCACHE_STORE()

Writes all dirty lines in the region to memory, but does not + invalidate any lines. +

HAL_DCACHE_READ_HINT()

Hints to the cache that the region is going to be read from + in the near future. This may cause the region to be speculatively + read into the cache. +

HAL_DCACHE_WRITE_HINT()

Hints to the cache that the region is going to be written + to in the near future. This may have the identical behavior to + HAL_DCACHE_READ_HINT(). +

HAL_DCACHE_ZERO()

Allocates and zeroes lines in the cache for the given + region without reading memory. This is useful if a large area of + memory is to be cleared. +


PrevHomeNext
HAL I/OUpLinker Scripts
\ No newline at end of file diff --git a/doc/html/ref/hal-calling-if.html b/doc/html/ref/hal-calling-if.html new file mode 100644 index 00000000..5985fc1a --- /dev/null +++ b/doc/html/ref/hal-calling-if.html @@ -0,0 +1,1432 @@ + + + + + + + + +Virtual Vectors (eCos/ROM Monitor Calling Interface) +
eCos Reference Manual
PrevChapter 11. Porting GuideNext

Virtual Vectors (eCos/ROM Monitor Calling Interface)

Some eCos platforms have supported full debugging capabilities via +CygMon since day one. Platforms of the architectures PowerPC, ARM, and +SH do not provide those features unless a GDB stub is included in the +application.

This is going to change. All platforms will (eventually) support +all the debugging features by relying on a ROM/RAM calling interface +(also referred to as virtual vector table) provided by the ROM +monitor. This calling interface is based on the tables used by libbsp +and is thus backwards compatible with the existing CygMon supported +platforms.

Virtual Vectors

What are virtual vectors, what do they do, and why are they +needed?

"Virtual vectors" is the name of a table located at a static +location in the target address space. This table contains 64 vectors +that point to service functions or data.

The fact that the vectors are always placed at the same location in +the address space means that both ROM and RAM startup configurations +can access these and thus the services pointed to.

The primary goal is to allow services to be provided by ROM +configurations (ROM monitors such as RedBoot in particular) with +clients in RAM configurations being able to use these +services.

Without the table of pointers this would be impossible since the +ROM and RAM applications would be linked separately - in effect having +separate name spaces - preventing direct references from one to the +other.

This decoupling of service from client is needed by RedBoot, +allowing among other things debugging of applications which do not +contain debugging client code (stubs).

Initialization (or Mechanism vs. Policy)

Virtual vectors are a mechanism for decoupling services +from clients in the address space.

The mechanism allows services to be implemented by a ROM +monitor, a RAM application, to be switched out at run-time, to be +disabled by installing pointers to dummy functions, etc.

The appropriate use of the mechanism is specified loosely by a +policy. The general policy dictates that the vectors are +initialized in whole by ROM monitors (built for ROM or RAM), or by +stand-alone applications.

For configurations relying on a ROM monitor environment, the policy +is to allow initialization on a service by service basis. The default +is to initialize all services, except COMMS services since these are +presumed to already be carrying a communication session to the +debugger / console which was used for launching the application. This +means that the bulk of the code gets tested in normal builds, and not +just once in a blue moon when building new stubs or a ROM +configuration.

The configuration options are written to comply with this policy by +default, but can be overridden by the user if desired. Defaults +are:

Pros and Cons of Virtual Vectors

There are pros and cons associated with the use of virtual +vectors. We do believe that the pros generally outweigh the cons by a +great margin, but there may be situations where the opposite is +true.

The use of the services are implemented by way of macros, meaning +that it is possible to circumvent the virtual vectors if +desired. There is (as yet) no implementation for doing this, but it is +possible.

Here is a list of pros and cons:

Pro: Allows debugging without including stubs

This is the primary reason for using virtual vectors. It + allows the ROM monitor to provide most of the debugging + infrastructure, requiring only the application to provide + hooks for asynchronous debugger interrupts and for accessing + kernel thread information.

Pro: Allows debugging to be initiated from arbitrary + channel

While this is only true where the application does not + actively override the debugging channel setup, it is a very + nice feature during development. In particular it makes it + possible to launch (and/or debug) applications via Ethernet + even though the application configuration does not contain + networking support.

Pro: Image smaller due to services being provided by ROM + monitor

All service functions except HAL IO are included in the + default configuration. But if these are all disabled the + image for download will be a little smaller. Probably + doesn't matter much for regular development, but it is a + worthwhile saving for the 20000 daily tests run in the Red + Hat eCos test farm.

Con: The vectors add a layer of indirection, increasing application + size and reducing performance.

The size increase is a fraction of what is required to + implement the services. So for RAM configurations there is + a net saving, while for ROM configurations there is a small + overhead.

The performance loss means little for most of the + services (of which the most commonly used is diagnostic IO + which happens via polled routines + anyway).

Con: The layer of indirection is another point of + failure.

The concern primarily being that of vectors being + trashed by rogue writes from bad code, causing a complete + loss of the service and possibly a crash. But this does + not differ much from a rogue write to anywhere else in the + address space which could cause the same amount of + mayhem. But it is arguably an additional point of failure + for the service in question.

Con: All the indirection stuff makes it harder to bring a HAL + up

This is a valid concern. However, seeing as most of the + code in question is shared between all HALs and should + remain unchanged over time, the risk of it being broken + when a new HAL is being worked on should be + minimal.

When starting a new port, be sure to implement the HAL + IO drivers according to the scheme used in other drivers, + and there should be no problem.

However, it is still possible to circumvent the vectors + if they are suspect of causing problems: simply change the + HAL_DIAG_INIT and HAL_DIAG_WRITE_CHAR macros to use the raw + IO functions.

The COMMS channels

As all HAL IO happens via the COMMS channels these deserve to be +described in a little more detail. In particular the controls of where +diagnostic output is routed and how it is treated to allow for display +in debuggers.

Console and Debugging Channels

There are two COMMS channels - one for console IO and one for +debugging IO. They can be individually configured to use any of the +actual IO ports (serial or Ethernet) available on the platform.

The console channel is used for any IO initiated by calling the +diag_*() functions. Note that these should only be used during +development for debugging, assertion and possibly tracing +messages. All proper IO should happen via proper devices. This means +it should be possible to remove the HAL device drivers from production +configurations where assertions are disabled.

The debugging channel is used for communication between the +debugger and the stub which remotely controls the target for the +debugger (the stub runs on the target). This usually happens via some +protocol, encoding commands and replies in some suitable form.

Having two separate channels allows, e.g., for simple logging +without conflicts with the debugger or interactive IO which some +debuggers do not allow.

Controlling the Console Channel

Console output configuration is either inherited from the ROM +monitor launching the application, or it is specified by the +application. This is controlled by the new option +CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE which +defaults to enabled when the configuration is set to use a ROM +monitor.

If the user wants to specify the console configuration in the +application image, there are two new options that are used for +this.

Defaults are to direct diagnostic output via a mangler to the +debugging channel (CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +enabled). The mangler type is controlled by the option +CYGSEM_HAL_DIAG_MANGLER. At present there are only +two mangler types:

Finally, by disabling CYGDBG_HAL_DIAG_TO_DEBUG_CHAN, the diagnostic +output is directed in raw form to the specified console IO port.

In summary this results in the following common configuration +scenarios for RAM startup configurations:

And for ROM startup configurations:

Footnote: Design Reasoning for Control of Console Channel

The current code for controlling the console channel is a +replacement for an older implementation which had some shortcomings +which addressed by the new implementation.

This is what the old implementation did: on initialization it would +check if the CDL configured console channel differed from the active +debug channel - and if so, set the console channel, thereby disabling +mangling.

The idea was that whatever channel was configured to be used for +console (i.e., diagnostic output) in the application was what should +be used. Also, it meant that if debug and console channels were +normally the same, a changed console channel would imply a request for +unmangled output.

But this prevented at least two things:

The calling Interface API

The calling interface API is defined by hal_if.h and hal_if.c in +hal/common.

The API provides a set of services. Different platforms, or +different versions of the ROM monitor for a single platform, may +implement fewer or extra service. The table has room for growth, and +any entries which are not supported map to a NOP-service (when called +it returns 0 (false)).

A client of a service should either be selected by configuration, +or have suitable fall back alternatives in case the feature is not +implemented by the ROM monitor.

The header file cyg/hal/hal_if.h defines + the table layout and accessor macros (allowing primitive type + checking and alternative implementations should it become necessary).

The source file hal_if.c defines the table + initialization function. All HALs should call this during platform + initialization - the table will get initialized according to + configuration. Also defined here are wrapper functions which map + between the calling interface API and the API of the used eCos + functions.

Implemented Services

This is a brief description of the services, some of which are +described in further detail below.

VERSION

Version of table. Serves as a way to check for how many + features are available in the table. This is the index of the + last service in the table.

KILL_VECTOR

[Presently unused by the stub code, but initialized] This + vector defines a function to execute when the system receives + a kill signal from the debugger. It is initialized with the + reset function (see below), but the application (or eCos) can + override it if necessary.

CONSOLE_PROCS

The communication procedure table used for console IO + (see the Section called IO channels.

DEBUG_PROCS

The communication procedure table used for debugger IO + (see the Section called IO channels).

FLUSH_DCACHE

Flushes the data cache for the specified + region. Some implementations may flush the entire data cache.

FLUSH_ICACHE

Flushes (invalidates) the instruction cache + for the specified region. Some implementations may flush the + entire instruction cache.

SET_DEBUG_COMM

Change debugging communication channel.

SET_CONSOLE_COMM

Change console communication channel.

DBG_SYSCALL

Vector used to communication between debugger functions in + ROM and in RAM. RAM eCos configurations may install a function + pointer here which the ROM monitor uses to get thread + information from the kernel running in RAM.

RESET

Resets the board on call. If it is not possible to reset + the board from software, it will jump to the ROM entry point + which will perform a "software" reset of the board.

CONSOLE_INTERRUPT_FLAG

Set if a debugger interrupt request was detected while + processing console IO. Allows the actual breakpoint action to + be handled after return to RAM, ensuring proper backtraces + etc.

DELAY_US

Will delay the specified number of microseconds. The + precision is platform dependent to some extend - a small value + (<100us) is likely to cause bigger delays than requested.

FLASH_CFG_OP

For accessing configuration settings kept in flash memory.

INSTALL_BPT_FN

Installs a breakpoint at the specified address. This is + used by the asynchronous breakpoint support + (see ).

IO channels

The calling interface provides procedure tables for all IO channels on +the platform. These are used for console (diagnostic) and debugger IO, +allowing a ROM monitor to provided all the needed IO routines. At +the same time, this makes it easy to switch console/debugger channels +at run-time (the old implementation had hardwired drivers for console +and debugger IO, preventing these to change at run-time).

The hal_if provides wrappers which interface these services to the +eCos infrastructure diagnostics routines. This is done in a way which +ensures proper string mangling of the diagnostics output when required +(e.g. O-packetization when using a GDB compatible ROM monitor).

Available Procedures

This is a brief description of the procedures

CH_DATA

Pointer to the controller IO base (or a pointer to a per-device + structure if more data than the IO base is required). All the + procedures below are called with this data item as the first + argument.

WRITE

Writes the buffer to the device.

READ

Fills a buffer from the device.

PUTC

Write a character to the device.

GETC

Read a character from the device.

CONTROL

Device feature control. Second argument specifies function:

DBG_ISR

ISR used to handle receive interrupts from the + device (see ).

GETC_TIMEOUT

Read a character from the device with timeout.

Usage

The standard eCos diagnostics IO functions use the channel +procedure table when CYGSEM_HAL_VIRTUAL_VECTOR_DIAG is enabled. That +means that when you use diag_printf (or the libc printf function) the +stream goes through the selected console procedure table. If you use +the virtual vector function SET_CONSOLE_COMM you can change the device +which the diagnostics output goes to at run-time.

You can also use the table functions directly if desired +(regardless of the CYGSEM_HAL_VIRTUAL_VECTOR_DIAG setting - assuming +the ROM monitor provides the services). Here is a small example which +changes the console to use channel 2, fetches the comm procs pointer +and calls the write function from that table, then restores the +console to the original channel:

#define T "Hello World!\n"
+
+int
+main(void)
+{
+    hal_virtual_comm_table_t* comm;
+    int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
+
+    CYGACC_CALL_IF_SET_CONSOLE_COMM(2);
+
+    comm = CYGACC_CALL_IF_CONSOLE_PROCS();
+    CYGACC_COMM_IF_WRITE(*comm, T, strlen(T));
+
+    CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
+}

Beware that if doing something like the above, you should only do +it to a channel which does not have GDB at the other end: GDB ignores +raw data, so you would not see the output.

Implementation Details

There is an array of procedure tables (raw comm channels) for each +IO device of the platform which get initialized by the ROM monitor, or +optionally by a RAM startup configuration (allowing the RAM +configuration to take full control of the target). In addition to +this, there's a special table which is used to hold mangler +procedures.

The vector table defines which of these channels are selected for +console and debugging IO respectively: console entry can be empty, +point to mangler channel, or point to a raw channel. The debugger +entry should always point to a raw channel.

During normal console output (i.e., diagnostic output) the console +table will be used to handle IO if defined. If not defined, the debug +table will be used.

This means that debuggers (such as GDB) which require text streams +to be mangled (O-packetized in the case of GDB), can rely on the ROM +monitor install mangling IO routines in the special mangler table and +select this for console output. The mangler will pass the mangled data +on to the selected debugging channel.

If the eCos configuration specifies a different console channel +from that used by the debugger, the console entry will point to the +selected raw channel, thus overriding any mangler provided by the ROM +monitor.

See hal_if_diag_* routines in hal_if.c for more details of the stream +path of diagnostic output. See cyg_hal_gdb_diag_*() routines in +hal_stub.c for the mangler used for GDB communication.

New Platform Ports

Define CDL options CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS, +CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL, and +CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL.

If CYGSEM_HAL_VIRTUAL_VECTOR_DIAG is set, make sure the infra diag +code uses the hal_if diag functions:

 #define HAL_DIAG_INIT() hal_if_diag_init()
+ #define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_)
+ #define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_)

In addition to the above functions, the platform HAL must also +provide a function cyg_hal_plf_comms_init which initializes the +drivers and the channel procedure tables.

Most of the other functionality in the table is more or less +possible to copy unchanged from existing ports. Some care is necessary +though to ensure the proper handling of interrupt vectors and timeouts +for various devices handled by the same driver. See PowerPC/Cogent +platform HAL for an example implementation.


PrevHomeNext
HAL StructureUpHAL Coding Conventions
\ No newline at end of file diff --git a/doc/html/ref/hal-default-interrupt-handling.html b/doc/html/ref/hal-default-interrupt-handling.html new file mode 100644 index 00000000..2fb425f1 --- /dev/null +++ b/doc/html/ref/hal-default-interrupt-handling.html @@ -0,0 +1,301 @@ + + + + + + + + +Default Interrupt Handling +
eCos Reference Manual
PrevChapter 10. Exception HandlingNext

Default Interrupt Handling

Most asynchronous external interrupt vectors will point to a default +interrupt VSR which decodes the actual interrupt being delivered from +the interrupt controller and invokes the appropriate ISR.

The default interrupt VSR has a number of responsibilities if it is +going to interact with the Kernel cleanly and allow interrupts to +cause thread preemption.

To support this VSR an ISR vector table is needed. For each valid +vector three pointers need to be stored: the ISR, its data pointer and +an opaque (to the HAL) interrupt object pointer needed by the +kernel. It is implementation defined whether these are stored in a +single table of triples, or in three separate tables.

The VSR follows the following approximate plan:

  1. Save the CPU state. In non-debug configurations, it may be + possible to get away with saving less than the entire machine + state. The option + CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + is supported in some targets to do this. +

  2. Increment the kernel scheduler lock. This is a static member of + the Cyg_Scheduler class, however it has also been aliased to + cyg_scheduler_sched_lock so that it can be + accessed from assembly code. +

  3. (Optional) Switch to an interrupt stack if not already running on + it. This allows nested interrupts to be delivered without needing + every thread to have a stack large enough to take the maximum + possible nesting. It is implementation defined how to detect + whether this is a nested interrupt but there are two basic + techniques. The first is to inspect the stack pointer and switch + only if it is not currently within the interrupt stack range; the + second is to maintain a counter of the interrupt nesting level and + switch only if it is zero. The option + CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK + controls whether this happens. +

  4. Decode the actual external interrupt being delivered from + the interrupt controller. This will yield the ISR vector + number. The code to do this usually needs to come from the + variant or platform HAL, so is usually present in the form of a + macro or procedure callout. +

  5. (Optional) Re-enable interrupts to permit nesting. At this point + we can potentially allow higher priority interrupts to occur. It + depends on the interrupt architecture of the CPU and platform + whether more interrupts will occur at this point, or whether they + will only be delivered after the current interrupt has been + acknowledged (by a call to + HAL_INTERRUPT_ACKNOWLEDGE() in the ISR). +

  6. Using the ISR vector number as an index, retrieve the + ISR pointer and its data pointer from the ISR vector table. +

  7. Construct a C call stack frame. This may involve making stack + space for call frames, and arguments, and initializing the back + pointers to halt a GDB backtrace operation. +

  8. Call the ISR, passing the vector number and data pointer. The + vector number and a pointer to the saved state should be preserved + across this call, preferably by storing them in registers that are + defined to be callee-saved by the calling conventions. +

  9. If this is an un-nested interrupt and a separate interrupt + stack is being used, switch back to the interrupted thread's + own stack. +

  10. Use the saved ISR vector number to get the interrupt object + pointer from the ISR vector table. +

  11. Call interrupt_end() passing it the return + value from the ISR, the interrupt object pointer and a pointer to + the saved CPU state. This function is implemented by the Kernel + and is responsible for finishing off the interrupt + handling. Specifically, it may post a DSR depending on the ISR + return value, and will decrement the scheduler lock. If the lock + is zeroed by this operation then any posted DSRs may be called and + may in turn result in a thread context switch. +

  12. The return from interrupt_end() may occur + some time after the call. Many other threads may have executed in + the meantime. So here all we may do is restore the machine state + and resume execution of the interrupted thread. Depending on the + architecture, it may be necessary to disable interrupts again for + part of this. +

The detailed order of these steps may vary slightly depending on the +architecture, in particular where interrupts are enabled and disabled.


PrevHomeNext
Default Synchronous Exception HandlingUpPorting Guide
\ No newline at end of file diff --git a/doc/html/ref/hal-default-synchronous-exception-handling.html b/doc/html/ref/hal-default-synchronous-exception-handling.html new file mode 100644 index 00000000..1007333e --- /dev/null +++ b/doc/html/ref/hal-default-synchronous-exception-handling.html @@ -0,0 +1,180 @@ + + + + + + + + +Default Synchronous Exception Handling +
eCos Reference Manual
PrevChapter 10. Exception HandlingNext

Default Synchronous Exception Handling

Most synchronous exception VSR table entries will point to a default +exception VSR which is responsible for handling all exceptions in a +generic manner. The default VSR simply saves the CPU state, makes any +adjustments to the CPU state that is necessary, and calls +cyg_hal_exception_handler().

cyg_hal_exception_handler() needs to pass the +exception on to some handling code. There are two basic destinations: +enter GDB or pass the exception up to eCos. Exactly which +destination is taken depends on the configuration. When the GDB stubs are +included then the exception is passed to them, otherwise it is passed +to eCos.

If an eCos application has been loaded by RedBoot then the VSR table +entries will all point into RedBoot's exception VSR, and will +therefore enter GDB if an exception occurs. If the eCos application +wants to handle an exception itself, it needs to replace the the VSR +table entry with one pointing to its own VSR. It can do this with the +HAL_VSR_SET_TO_ECOS_HANDLER() macro.


PrevHomeNext
Vectors and VSRsUpDefault Interrupt Handling
\ No newline at end of file diff --git a/doc/html/ref/hal-diagnostic-support.html b/doc/html/ref/hal-diagnostic-support.html new file mode 100644 index 00000000..fdfc0233 --- /dev/null +++ b/doc/html/ref/hal-diagnostic-support.html @@ -0,0 +1,191 @@ + + + + + + + + +Diagnostic Support +
eCos Reference Manual
PrevChapter 9. HAL InterfacesNext

Diagnostic Support

The HAL provides support for low level diagnostic IO. This is +particularly useful during early development as an aid to bringing up +a new platform. Usually this diagnostic channel is a UART or some +other serial IO device, but it may equally be a a memory +buffer, a simulator supported output channel, a ROM emulator virtual +UART, and LCD panel, a memory mapped video buffer or any other output +device.

HAL_DIAG_INIT() performs any initialization +required on the device being used to generate diagnostic output. This +may include, for a UART, setting baud rate, and stop, parity and +character bits. For other devices it may include initializing a +controller or establishing contact with a remote device.

HAL_DIAG_WRITE_CHAR(c) writes +the character supplied to the diagnostic output device.

HAL_DIAG_READ_CHAR(c) reads a character from the +diagnostic device into the supplied variable. This is not supported +for all diagnostic devices.

These macros are defined in the header file +cyg/hal/hal_diag.h. This file is usually supplied +by the variant or platform HAL, depending on where the IO device being +used is located. For example for on-chip UARTs it would be in the +variant HAL, but for a board-level LCD panel it would be in the +platform HAL.


PrevHomeNext
Linker ScriptsUpSMP Support
\ No newline at end of file diff --git a/doc/html/ref/hal-exception-handling.html b/doc/html/ref/hal-exception-handling.html new file mode 100644 index 00000000..3a8f0c32 --- /dev/null +++ b/doc/html/ref/hal-exception-handling.html @@ -0,0 +1,439 @@ + + + + + + + + +Exception Handling +
eCos Reference Manual
PrevNext

Chapter 10. Exception Handling

Most of the HAL consists of simple macros or functions that are +called via the interfaces described in the previous section. These +just perform whatever operation is required by accessing the hardware +and then return. The exception to this is the handling of exceptions: +either synchronous hardware traps or asynchronous device +interrupts. Here control is passed first to the HAL, which then passed +it on to eCos or the application. After eCos has finished with it, +control is then passed back to the HAL for it to tidy up the CPU state +and resume processing from the point at which the exception occurred.

The HAL exceptions handling code is usually found in the file +vectors.S in the architecture HAL. Since the +reset entry point is usually implemented as one of these it also deals +with system startup.

The exact implementation of this code is under the control of the HAL +implementer. So long as it interacts correctly with the interfaces +defined previously it may take any form. However, all current +implementation follow the same pattern, and there should be a very +good reason to break with this. The rest of this section describes +these operate.

Exception handling normally deals with the following broad areas of +functionality:

  • Startup and initialization.

  • Hardware exception delivery.

  • Default handling of synchronous exceptions.

  • Default handling of asynchronous interrupts.

HAL Startup

Execution normally begins at the reset vector with +the machine in a minimal startup state. From here the HAL needs to get +the machine running, set up the execution environment for the +application, and finally invoke its entry point.

The following is a list of the jobs that need to be done in +approximately the order in which they should be accomplished. Many +of these will not be needed in some configurations.


PrevHomeNext
SMP SupportUpVectors and VSRs
\ No newline at end of file diff --git a/doc/html/ref/hal-future-developments.html b/doc/html/ref/hal-future-developments.html new file mode 100644 index 00000000..f52e9fdd --- /dev/null +++ b/doc/html/ref/hal-future-developments.html @@ -0,0 +1,229 @@ + + + + + + + + +Future developments +
eCos Reference Manual
PrevNext

Chapter 12. Future developments

The HAL is not complete, and will evolve and increase over +time. Among the intended developments are:


PrevHomeNext
Architecture HAL PortingUpThe ISO Standard C and Math Libraries
\ No newline at end of file diff --git a/doc/html/ref/hal-general-principles.html b/doc/html/ref/hal-general-principles.html new file mode 100644 index 00000000..9fbeb6db --- /dev/null +++ b/doc/html/ref/hal-general-principles.html @@ -0,0 +1,183 @@ + + + + + + + + +General principles +
eCos Reference Manual
PrevNext

Chapter 8. General principles

The HAL has been implemented according to the following general +principles:

  1. The HAL is implemented in C and assembler, although the + eCos kernel is largely implemented in C++. + This is to permit the HAL the widest possible + applicability.

  2. All interfaces to the HAL are implemented by + CPP macros. This allows them to be implemented as inline + C code, inline assembler or function calls to external C + or assembler code. This allows the most efficient + implementation to be selected without affecting the + interface. It also allows them to be redefined if the + platform or variant HAL needs to replace or enhance a definition + from the architecture HAL.

  3. The HAL provides simple, portable mechanisms for dealing +with the hardware of a wide range of architectures and platforms. +It is always possible to bypass the HAL and program the hardware +directly, but this may lead to a loss of portability.


PrevHomeNext
Architecture, Variant and PlatformUpHAL Interfaces
\ No newline at end of file diff --git a/doc/html/ref/hal-input-and-output.html b/doc/html/ref/hal-input-and-output.html new file mode 100644 index 00000000..2f863b10 --- /dev/null +++ b/doc/html/ref/hal-input-and-output.html @@ -0,0 +1,357 @@ + + + + + + + + +HAL I/O +
eCos Reference Manual
PrevChapter 9. HAL InterfacesNext

HAL I/O

This section contains definitions for supporting access +to device control registers in an architecture neutral +fashion.

These definitions are normally found in the header file +cyg/hal/hal_io.h. This file itself contains +macros that are generic to the architecture. If there are variant or +platform specific IO access macros then these will be found in +cyg/hal/var_io.h and +cyg/hal/plf_io.h in the variant or platform HALs +respectively. These files are include automatically by this header, so +need not be included explicitly.

This header (or more likely cyg/hal/plf_io.h) also +defines the PCI access macros. For more information on these see the Section called PCI Library reference in Chapter 30.


PrevHomeNext
Interrupt HandlingUpCache Control
\ No newline at end of file diff --git a/doc/html/ref/hal-interfaces.html b/doc/html/ref/hal-interfaces.html new file mode 100644 index 00000000..f9137c6b --- /dev/null +++ b/doc/html/ref/hal-interfaces.html @@ -0,0 +1,375 @@ + + + + + + + + +HAL Interfaces +
eCos Reference Manual
PrevNext

Chapter 9. HAL Interfaces

This section describes the main HAL interfaces.

Base Definitions

These are definitions that characterize the properties of the base +architecture that are used to compile the portable parts of the +kernel. They are concerned with such things a portable type +definitions, endianness, and labeling.

These definitions are supplied by the +cyg/hal/basetype.h header file which is supplied +by the architecture HAL. It is included automatically by +cyg/infra/cyg_type.h.


PrevHomeNext
General principlesUpArchitecture Characterization
\ No newline at end of file diff --git a/doc/html/ref/hal-interrupt-handling.html b/doc/html/ref/hal-interrupt-handling.html new file mode 100644 index 00000000..0170863d --- /dev/null +++ b/doc/html/ref/hal-interrupt-handling.html @@ -0,0 +1,749 @@ + + + + + + + + +Interrupt Handling +
eCos Reference Manual
PrevChapter 9. HAL InterfacesNext

Interrupt Handling

These interfaces contain definitions related to interrupt +handling. They include definitions of exception and interrupt numbers, +interrupt enabling and masking, and realtime clock operations.

These definitions are normally found in +cyg/hal/hal_intr.h. This file is supplied by the +architecture HAL. Any variant or platform specific definitions will +be found in cyg/hal/var_intr.h, +cyg/hal/plf_intr.h or +cyg/hal/hal_platform_ints.h in the variant or platform +HAL, depending on the exact target. These files are include +automatically by this header, so need not be included explicitly.

Vector numbers

CYGNUM_HAL_VECTOR_XXXX
+CYGNUM_HAL_VSR_MIN
+CYGNUM_HAL_VSR_MAX
+CYGNUM_HAL_VSR_COUNT
+
+CYGNUM_HAL_INTERRUPT_XXXX
+CYGNUM_HAL_ISR_MIN
+CYGNUM_HAL_ISR_MAX
+CYGNUM_HAL_ISR_COUNT
+
+CYGNUM_HAL_EXCEPTION_XXXX
+CYGNUM_HAL_EXCEPTION_MIN
+CYGNUM_HAL_EXCEPTION_MAX
+CYGNUM_HAL_EXCEPTION_COUNT

All possible VSR, interrupt and exception vectors are specified here, +together with maximum and minimum values for range checking. While the +VSR and exception numbers will be defined in this file, the interrupt +numbers will normally be defined in the variant or platform HAL file +that is included by this header.

There are two ranges of numbers, those for the vector service +routines and those for the interrupt service routines. The relationship +between these two ranges is undefined, and no equivalence should +be assumed if vectors from the two ranges coincide.

The VSR vectors correspond to the set of exception vectors that can be +delivered by the CPU architecture, many of these will be internal +exception traps. The ISR vectors correspond to the set of external +interrupts that can be delivered and are usually determined by extra +decoding of the interrupt controller by the interrupt VSR.

Where a CPU supports synchronous exceptions, the range of such +exceptions allowed are defined by CYGNUM_HAL_EXCEPTION_MIN and +CYGNUM_HAL_EXCEPTION_MAX. The +CYGNUM_HAL_EXCEPTION_XXXX definitions are +standard names used by target independent code to test for the +presence of particular exceptions in the architecture. The actual +exception numbers will normally correspond to the VSR exception +range. In future other exceptions generated by the system software +(such as stack overflow) may be added.

CYGNUM_HAL_ISR_COUNT, CYGNUM_HAL_VSR_COUNT and +CYGNUM_HAL_EXCEPTION_COUNT define the number of +ISRs, VSRs and EXCEPTIONs respectively for the purposes of defining +arrays etc. There might be a translation from the supplied vector +numbers into array offsets. Hence +CYGNUM_HAL_XXX_COUNT may not simply be +CYGNUM_HAL_XXX_MAX - CYGNUM_HAL_XXX_MIN or CYGNUM_HAL_XXX_MAX+1.

Interrupt state control

CYG_INTERRUPT_STATE
+HAL_DISABLE_INTERRUPTS( old )
+HAL_RESTORE_INTERRUPTS( old )
+HAL_ENABLE_INTERRUPTS()
+HAL_QUERY_INTERRUPTS( state )

These macros provide control over the state of the CPUs interrupt mask +mechanism. They should normally manipulate a CPU status register to +enable and disable interrupt delivery. They should not access an +interrupt controller.

CYG_INTERRUPT_STATE is a data type that should be +used to store the interrupt state returned by +HAL_DISABLE_INTERRUPTS() and +HAL_QUERY_INTERRUPTS() and passed to +HAL_RESTORE_INTERRUPTS().

HAL_DISABLE_INTERRUPTS() disables the delivery of +interrupts and stores the original state of the interrupt mask in the +variable passed in the old argument.

HAL_RESTORE_INTERRUPTS() restores the state of +the interrupt mask to that recorded in old.

HAL_ENABLE_INTERRUPTS() simply enables interrupts +regardless of the current state of the mask.

HAL_QUERY_INTERRUPTS() stores the state of the +interrupt mask in the variable passed in the state argument. The state stored here should also be +capable of being passed to +HAL_RESTORE_INTERRUPTS() at a later point.

It is at the HAL implementer’s discretion exactly +which interrupts are masked by this mechanism. Where a CPU has more +than one interrupt type that may be masked separately (e.g. the +ARM's IRQ and FIQ) only those that can raise DSRs need +to be masked here. A separate architecture specific mechanism may +then be used to control the other interrupt types.

ISR and VSR management

HAL_INTERRUPT_IN_USE( vector, state )
+HAL_INTERRUPT_ATTACH( vector, isr, data, object )
+HAL_INTERRUPT_DETACH( vector, isr )
+HAL_VSR_SET( vector, vsr, poldvsr )
+HAL_VSR_GET( vector, pvsr )
+HAL_VSR_SET_TO_ECOS_HANDLER( vector, poldvsr )

These macros manage the attachment of interrupt and vector service +routines to interrupt and exception vectors respectively.

HAL_INTERRUPT_IN_USE() tests the state of the +supplied interrupt vector and sets the value of the state parameter to +either 1 or 0 depending on whether there is already an ISR attached to +the vector. The HAL will only allow one ISR to be attached to each +vector, so it is a good idea to use this function before using +HAL_INTERRUPT_ATTACH().

HAL_INTERRUPT_ATTACH() attaches +the ISR, data pointer and object pointer to the given +vector. When an interrupt occurs on this +vector the ISR is called using the C calling convention and the vector +number and data pointer are passed to it as the first and second +arguments respectively.

HAL_INTERRUPT_DETACH() detaches the ISR from the +vector.

HAL_VSR_SET() replaces the VSR attached to the +vector with the replacement supplied in +vsr. The old VSR is returned in the location +pointed to by pvsr.

HAL_VSR_GET() assigns +a copy of the VSR to the location pointed to by pvsr.

HAL_VSR_SET_TO_ECOS_HANDLER() ensures that the +VSR for a specific exception is pointing at the eCos exception VSR and +not one for RedBoot or some other ROM monitor. The default when +running under RedBoot is for exceptions to be handled by RedBoot and +passed to GDB. This macro diverts the exception to eCos so that it may +be handled by application code. The arguments are the VSR vector to be +replaces, and a location in which to store the old VSR pointer, so +that it may be replaced at a later point.

Interrupt controller management

HAL_INTERRUPT_MASK( vector )
+HAL_INTERRUPT_UNMASK( vector )
+HAL_INTERRUPT_ACKNOWLEDGE( vector )
+HAL_INTERRUPT_CONFIGURE( vector, level, up )
+HAL_INTERRUPT_SET_LEVEL( vector, level )

These macros exert control over any prioritized interrupt +controller that is present. If no priority controller exists, then +these macros should be empty.

HAL_INTERRUPT_MASK() causes the interrupt +associated with the given vector to be blocked.

HAL_INTERRUPT_UNMASK() causes the interrupt +associated with the given vector to be unblocked.

HAL_INTERRUPT_ACKNOWLEDGE() acknowledges the +current interrupt from the given vector. This is usually executed from +the ISR for this vector when it is prepared to allow further +interrupts. Most interrupt controllers need some form of acknowledge +action before the next interrupt is allowed through. Executing this +macro may cause another interrupt to be delivered. Whether this +interrupts the current code depends on the state of the CPU interrupt +mask.

HAL_INTERRUPT_CONFIGURE() provides +control over how an interrupt signal is detected. The arguments +are:

HAL_INTERRUPT_SET_LEVEL() provides control over +the hardware priority of the interrupt. The arguments are:

Clock control

HAL_CLOCK_INITIALIZE( period )
+HAL_CLOCK_RESET( vector, period )
+HAL_CLOCK_READ( pvalue )

These macros provide control over a clock or timer device that may be +used by the kernel to provide time-out, delay and scheduling +services. The clock is assumed to be implemented by some form of +counter that is incremented or decremented by some external source and +which raises an interrupt when it reaches a predetermined value.

HAL_CLOCK_INITIALIZE() initializes the timer +device to interrupt at the given period. The period is essentially the +value used to initialize the timer counter and must be calculated from +the timer frequency and the desired interrupt rate. The timer device +should generate an interrupt every period cycles.

HAL_CLOCK_RESET() re-initializes the timer to +provoke the next interrupt. This macro is only really necessary when +the timer device needs to be reset in some way after each interrupt.

HAL_CLOCK_READ() reads the current value of the +timer counter and puts the value in the location pointed to by +pvalue. The value stored will always be the +number of timer cycles since the last interrupt, and hence ranges +between zero and the initial period value. If this is a count-down +cyclic timer, some arithmetic may be necessary to generate this value.


PrevHomeNext
Architecture CharacterizationUpHAL I/O
\ No newline at end of file diff --git a/doc/html/ref/hal-introduction.html b/doc/html/ref/hal-introduction.html new file mode 100644 index 00000000..03b008f5 --- /dev/null +++ b/doc/html/ref/hal-introduction.html @@ -0,0 +1,177 @@ + + + + + + + + +Introduction +
eCos Reference Manual
PrevNext


PrevHomeNext
The eCos Hardware Abstraction Layer (HAL)UpArchitecture, Variant and Platform
\ No newline at end of file diff --git a/doc/html/ref/hal-linker-scripts.html b/doc/html/ref/hal-linker-scripts.html new file mode 100644 index 00000000..84311d57 --- /dev/null +++ b/doc/html/ref/hal-linker-scripts.html @@ -0,0 +1,322 @@ + + + + + + + + +Linker Scripts +
eCos Reference Manual
PrevChapter 9. HAL InterfacesNext

Linker Scripts

When an eCos application is linked it must be done under the control +of a linker script. This script defines the memory areas, addresses +and sized, into which the code and data are to be put, and allocates +the various sections generated by the compiler to these.

The linker script actually used is in +lib/target.ld in the install directory. This is +actually manufactured out of two other files: a base linker script and +an .ldi file that was generated by the memory +layout tool.

The base linker script is usually supplied either by the architecture +HAL or the variant HAL. It consists of a set of linker script +fragments, in the form of C preprocessor macros, that define the major +output sections to be generated by the link operation. The +.ldi file, which is #include'ed +by the base linker script, uses these macro definitions to assign the +output sections to the required memory areas and link addresses.

The .ldi file is supplied by the platform HAL, and +contains knowledge of the memory layout of the target platform. These +files generally conform to a standard naming convention, each file +being of the form:

pkgconf/mlt_<architecture>_<variant>_<platform>_<startup>.ldi

where <architecture>, +<variant> and +<platform> are the respective HAL package +names and <startup> is the startup type which +is usually one of ROM, RAM or +ROMRAM.

In addition to the .ldi file, there is also a +congruously name .h file. This may be used by the +application to access information defined in the +.ldi file. Specifically it contains the memory +layout defined there, together with any additional section names +defined by the user. Examples of the latter are heap areas or PCI bus +memory access windows.

The .ldi is manufactured by the Memory +Layout Tool (MLT). The MLT saves the memory +configuration into a file named

include/pkgconf/mlt_<architecture>_<variant>_<platform>_<startup>.mlt

in the platform HAL. This file is used by the +MLT to manufacture both the +.ldi and .h files. Users should +beware that direct edits the either of these files may be overwritten +if the MLT is run and regenerates them from the +.mlt file.

The names of the .ldi and .h +files are defined by macro definitions in +pkgconf/system.h. These are +CYGHWR_MEMORY_LAYOUT_LDI and +CYGHWR_MEMORY_LAYOUT_H respectively. While there +will be little need for the application to refer to the +.ldi file directly, it may include the +.h file as follows:

#include CYGHWR_MEMORY_LAYOUT_H

PrevHomeNext
Cache ControlUpDiagnostic Support
\ No newline at end of file diff --git a/doc/html/ref/hal-porting-architecture.html b/doc/html/ref/hal-porting-architecture.html new file mode 100644 index 00000000..9b939df7 --- /dev/null +++ b/doc/html/ref/hal-porting-architecture.html @@ -0,0 +1,1337 @@ + + + + + + + + +Architecture HAL Porting +
eCos Reference Manual
PrevChapter 11. Porting GuideNext

Architecture HAL Porting

A new architecture HAL is the most complex HAL to write, and it the +least easily described. Hence this section is presently nothing more +than a place holder for the future.

HAL Architecture Porting Process

The easiest way to make a new architecture HAL is simply to copy an +existing architecture HAL of an, if possible, closely matching +architecture and change all the files to match the new +architecture. The MIPS architecture HAL should be used if possible, as +it has the appropriate layout and coding conventions. Other HALs +may deviate from that norm in various ways.

The following gives a rough outline of the steps needed to create a +new architecture HAL. The exact order and set of steps needed will +vary greatly from architecture to architecture, so a lot of +flexibility is required. And of course, if the architecture HAL is to +be tested, it is necessary to do variant and platform ports for the +initial target simultaneously.

  1. Make a new directory for the new architecture under the +hal directory in the source repository. Make an +arch directory under this and populate this with +the standard set of package directories.

  2. Copy the CDL file from an example HAL changing its name to match the +new HAL. Edit the file, changing option names as appropriate. Delete +any options that are specific to the original HAL, and and any new +options that are necessary for the new architecture. This is likely to +be a continuing process during the development of the HAL. See the Section called CDL Requirements for more details.

  3. Copy the hal_arch.h file from an example +HAL. Within this file you need to change or define the following:

    • Define the HAL_SavedRegisters structure. This +may need to reflect the save order of any group register save/restore +instructions, the interrupt and exception save and restore formats, +and the procedure calling conventions. It may also need to cater for +optional FPUs and other functional units. It can be quite difficult to +develop a layout that copes with all requirements.

    • Define the bit manipulation routines, +HAL_LSBIT_INDEX() and +HAL_MSBIT_INDEX(). If the architecture contains +instructions to perform these, or related, operations, then these +should be defined as inline assembler fragments. Otherwise make them +calls to functions.

    • Define HAL_THREAD_INIT_CONTEXT(). This initializes +a restorable CPU context onto a stack pointer so that a later call to +HAL_THREAD_LOAD_CONTEXT() or +HAL_THREAD_SWITCH_CONTEXT() will execute it +correctly. This macro needs to take account of the same optional +features of the architecture as the definition of +HAL_SavedRegisters.

    • Define HAL_THREAD_LOAD_CONTEXT() and +HAL_THREAD_SWITCH_CONTEXT(). These should just be +calls to functions in context.S.

    • Define HAL_REORDER_BARRIER(). This prevents code +being moved by the compiler and is necessary in some order-sensitive +code. This macro is actually defined identically in all architecture, +so it can just be copied.

    • Define breakpoint support. The macro +HAL_BREAKPOINT(label) needs to be an inline assembly +fragment that invokes a breakpoint. The breakpoint instruction should +be labeled with the label +argument. HAL_BREAKINST and +HAL_BREAKINST_SIZE define the breakpoint +instruction for debugging purposes.

    • Define GDB support. GDB views the registers of the target as a linear +array, with each register having a well defined offset. This array may +differ from the ordering defined in +HAL_SavedRegisters. The macros +HAL_GET_GDB_REGISTERS() and +HAL_SET_GDB_REGISTERS() translate between the GDB +array and the HAL_SavedRegisters structure. +The HAL_THREAD_GET_SAVED_REGISTERS() translates a +stack pointer saved by the context switch macros into a pointer to a +HAL_SavedRegisters structure. Usually this is +a one-to-one translation, but this macro allows it to differ if +necessary.

    • Define long jump support. The type hal_jmp_buf and the +functions hal_setjmp() and +hal_longjmp() provide the underlying implementation +of the C library setjmp() and +longjmp().

    • Define idle thread action. Generally the macro +HAL_IDLE_THREAD_ACTION() is defined to call a +function in hal_misc.c.

    • Define stack sizes. The macros +CYGNUM_HAL_STACK_SIZE_MINIMUM and +CYGNUM_HAL_STACK_SIZE_TYPICAL should be defined to +the minimum size for any thread stack and a reasonable default for +most threads respectively. It is usually best to construct these out +of component sizes for the CPU save state and procedure call stack +usage. These definitions should not use anything other than numerical +values since they can be used from assembly code in some HALs.

    • Define memory access macros. These macros provide translation between +cached and uncached and physical memory spaces. They usually consist +of masking out bits of the supplied address and ORing in alternative +address bits.

    • Define global pointer save/restore macros. These really only need +defining if the calling conventions of the architecture require a +global pointer (as does the MIPS architecture), they may be empty +otherwise. If it is necessary to define these, then take a look at the +MIPS implementation for an example.

  4. Copy hal_intr.h from an example HAL. Within this +file you should change or define the following:

    • Define the exception vectors. These should be detailed in the +architecture specification. Essentially for each exception entry point +defined by the architecture there should be an entry in the VSR +table. The offsets of these VSR table entries should be defined here +by CYGNUM_HAL_VECTOR_* definitions. The size of the +VSR table also needs to be defined here.

    • Map any hardware exceptions to standard names. There is a group of +exception vector name of the form +CYGNUM_HAL_EXCEPTION_* that define a wide variety +of possible exceptions that many architectures raise. Generic code +detects whether the architecture can raise a given exception by +testing whether a given CYGNUM_HAL_EXCEPTION_* +definition is present. If it is present then its value is the vector +that raises that exception. This does not need to be a one-to-one +correspondence, and several CYGNUM_HAL_EXCEPTION_* +definitions may have the same value.

      Interrupt vectors are usually defined in the variant or platform +HALs. The interrupt number space may either be continuous with the VSR +number space, where they share a vector table (as in the i386) or may +be a separate space where a separate decode stage is used (as in MIPS +or PowerPC).

    • Declare any static data used by the HAL to handle interrupts and +exceptions. This is usually three vectors for interrupts: +hal_interrupt_handlers[], +hal_interrupt_data[] and +hal_interrupt_objects[], which are sized according +to the interrupt vector definitions. In addition a definition for the +VSR table, hal_vsr_table[] should be made. These +vectors are normally defined in either vectors.S +or hal_misc.c.

    • Define interrupt enable/disable macros. These are normally inline +assembly fragments to execute the instructions, or manipulate the CPU +register, that contains the CPU interrupt enable bit.

    • A feature that many HALs support is the ability to execute DSRs on the +interrupt stack. This is not an essential feature, and is better left +unimplemented in the initial porting effort. If this is required, then +the macro HAL_INTERRUPT_STACK_CALL_PENDING_DSRS() +should be defined to call a function in +vectors.S.

    • Define the interrupt and VSR attachment macros. If the same arrays as +for other HALs have been used for VSR and interrupt vectors, then +these macro can be copied across unchanged.

  5. A number of other header files also need to be filled in:

    • basetype.h. This file defines the basic types +used by eCos, together with the endianness and some other +characteristics. This file only really needs to contain definitions +if the architecture differs significantly from the defaults defined +in cyg_type.h

    • hal_io.h. This file contains macros for accessing +device IO registers. If the architecture uses memory mapped IO, then +these can be copied unchanged from an existing HAL such as MIPS. If +the architecture uses special IO instructions, then these macros must +be defined as inline assembler fragments. See the I386 HAL for an +example. PCI bus access macros are usually defined in the variant or +platform HALs.

    • hal_cache.h. This file contains cache access +macros. If the architecture defines cache instructions, or control +registers, then the access macros should be defined here. Otherwise +they must be defined in the variant or platform HAL. Usually the cache +dimensions (total size, line size, ways etc.) are defined in the +variant HAL.

    • arch.inc and +<architecture>.inc. These files are +assembler headers used by vectors.S and +context.S. +<architecture>.inc is a general purpose +header that should contain things like register aliases, ABI +definitions and macros useful to general assembly +code. If there are no such definitions, then this file need not be +provided. arch.inc contains macros for performing +various eCos related operations such as initializing the CPU, caches, +FPU etc. The definitions here may often be configured or overridden by +definitions in the variant or platform HALs. See the MIPS HAL for an +example of this.

  6. Write vectors.S. This is the most important file +in the HAL. It contains the CPU initialization code, exception and +interrupt handlers. While other HALs should be consulted for +structures and techniques, there is very little here that can be +copied over without major edits.

    The main pieces of code that need to be defined here are:

    • Reset vector. This usually need to be positioned at the start of the +ROM or FLASH, so should be in a linker section of its own. It can then be +placed correctly by the linker script. Normally this code is little +more than a jump to the label _start.

    • Exception vectors. These are the trampoline routines connected to the +hardware exception entry points that vector through the VSR table. In +many architectures these are adjacent to the reset vector, and should +occupy the same linker section. If the architecture allow the vectors +to be moved then it may be necessary for these trampolines to be +position independent so they can be relocated at runtime.

      The trampolines should do the minimum necessary to transfer control +from the hardware vector to the VSR pointed to by the matching table +entry. Exactly how this is done depends on the architecture. Usually +the trampoline needs to get some working registers by either saving +them to CPU special registers (e.g. PowerPC SPRs), using reserved +general registers (MIPS K0 and K1), using only memory based +operations (IA32), or just jumping directly (ARM). The VSR table index +to be used is either implicit in the entry point taken (PowerPC, IA32, +ARM), or must be determined from a CPU register (MIPS).

    • Write kernel startup code. This is the location the reset vector jumps +to, and can be in the main text section of the executable, rather than +a special section. The code here should first initialize the CPU and other +hardware subsystems. The best approach is to use a set of macro +calls that are defined either in arch.inc or +overridden in the variant or platform HALs. Other jobs that this code +should do are: initialize stack pointer; copy the data section from +ROM to RAM if necessary; zero the BSS; call variant and platform +initializers; call cyg_hal_invoke_constructors(); +call initialize_stub() if necessary. Finally it +should call cyg_start(). See the Section called HAL Startup in Chapter 10 for details.

    • Write the default exception VSR. This VSR is installed in the VSR +table for all synchronous exception vectors. See the Section called Default Synchronous Exception Handling in Chapter 10 for details of +what this VSR does.

    • Write the default interrupt VSR. This is installed in all VSR table +entries that correspond to external interrupts. See the Section called Default Synchronous Exception Handling in Chapter 10 for details of +what this VSR does.

    • Write +hal_interrupt_stack_call_pending_dsrs(). If this +function is defined in hal_arch.h then it should +appear here. The purpose of this function is to call DSRs on the +interrupt stack rather than the current thread's stack. This is not an +essential feature, and may be left until later. However it interacts +with the stack switching that goes on in the interrupt VSR, so it may +make sense to write these pieces of code at the same time to ensure +consistency.

      When this function is implemented it should do the following:

      • Take a copy of the current SP and then switch to the interrupt stack.

      • Save the old SP, together with the CPU status register (or whatever +register contains the interrupt enable status) and any other +registers that may be corrupted by a function call (such as any link +register) to locations in the interrupt stack.

      • Enable interrupts.

      • Call cyg_interrupt_call_pending_DSRs(). This is a +kernel functions that actually calls any pending DSRs.

      • Retrieve saved registers from the interrupt stack and switch back to +the current thread stack.

      • Merge the interrupt enable state recorded in the save CPU status +register with the current value of the status register to restore the +previous enable state. If the status register does not contain any +other persistent state then this can be a simple restore of the +register. However if the register contains other state bits that might +have been changed by a DSR, then care must be taken not to disturb +these.

    • Define any data items needed. Typically vectors.S +may contain definitions for the VSR table, the interrupt tables and the +interrupt stack. Sometimes these are only default definitions that may +be overridden by the variant or platform HALs.

  7. Write context.S. This file contains the context +switch code. See the Section called Thread Context Switching in Chapter 9 for details of +how these functions operate. This file may also contain the +implementation of hal_setjmp() and +hal_longjmp().

  8. Write hal_misc.c. This file contains any C +data and functions needed by the HAL. These might include:

    • hal_interrupt_*[]. In some HALs, if these arrays +are not defined in vectors.S then they must be +defined here.

    • cyg_hal_exception_handler(). This function is +called from the exception VSR. It usually does extra decoding of the +exception and invokes any special handlers for things like FPU traps, +bus errors or memory exceptions. If there is nothing special to be +done for an exception, then it either calls into the GDB stubs, by +calling __handle_exception(), or +invokes the kernel by calling +cyg_hal_deliver_exception().

    • hal_arch_default_isr(). The +hal_interrupt_handlers[] array is usually +initialized with pointers to hal_default_isr(), +which is defined in the common HAL. This function handles things like +Ctrl-C processing, but if that is not relevant, then it will call +hal_arch_default_isr(). Normally this function +should just return zero.

    • cyg_hal_invoke_constructors(). This calls the +constructors for all static objects before the program starts. eCos +relies on these being called in the correct order for it to function +correctly. The exact way in which constructors are handled may differ +between architectures, although most use a simple table of function +pointers between labels __CTOR_LIST__ and +__CTOR_END__ which must called in order from the +top down. Generally, this function can be copied directly from an +existing architecture HAL.

    • Bit indexing functions. If the macros +HAL_LSBIT_INDEX() and +HAL_MSBIT_INDEX() are defined as function calls, +then the functions should appear here. The main reason for doing this +is that the architecture does not have support for bit indexing and +these functions must provide the functionality by conventional +means. While the trivial implementation is a simple for loop, it is +expensive and non-deterministic. Better, constant time, +implementations can be found in several HALs (MIPS for example).

    • hal_delay_us(). If the macro +HAL_DELAY_US() is defined in hal_intr.h then it should be defined to +call this function. While most of the time this function is called +with very small values, occasionally (particularly in some ethernet +drivers) it is called with values of several seconds. Hence the +function should take care to avoid overflow in any calculations.

    • hal_idle_thread_action(). This function is called +from the idle thread via the +HAL_IDLE_THREAD_ACTION() macro, if so +defined. While normally this function does nothing, during development +this is often a good place to report various important system +parameters on LCDs, LED or other displays. This function can also +monitor system state and report any anomalies. If the architecture +supports a halt instruction then this is a good +place to put an inline assembly fragment to execute it. It is also a +good place to handle any power saving activity.

  9. Create the <architecture>.ld file. While +this file may need to be moved to the variant HAL in the future, it +should initially be defined here, and only moved if necessary.

    This file defines a set of macros that are used by the platform +.ldi files to generate linker scripts. Most GCC +toolchains are very similar so the correct approach is to copy the +file from an existing architecture and edit it. The main things that +will need editing are the OUTPUT_FORMAT() directive +and maybe the creation or allocation of extra sections to various +macros. Running the target linker with just the +--verbose argument will cause it to output its +default linker script. This can be compared with the +.ld file and appropriate edits made.

  10. If GDB stubs are to be supported in RedBoot or eCos, then support must +be included for these. The most important of these are include/<architecture>-stub.h and +src/<architecture>-stub.c. In all existing +architecture HALs these files, and any support files they need, have +been derived from files supplied in libgloss, as +part of the GDB toolchain package. If this is a totally new +architecture, this may not have been done, and they must be created +from scratch.

    include/<architecture>-stub.h +contains definitions that are used by the GDB stubs to describe the +size, type, number and names of CPU registers. This information is +usually found in the GDB support files for the architecture. It also +contains prototypes for the functions exported by +src/<architecture>-stub.c; however, since +this is common to all architectures, it can be copied from some other +HAL.

    src/<architecture>-stub.c implements the +functions exported by the header. Most of this is fairly straight +forward: the implementation in existing HALs should show exactly what +needs to be done. The only complex part is the support for +single-stepping. This is used a lot by GDB, so it cannot be +avoided. If the architecture has support for a trace or single-step +trap then that can be used for this purpose. If it does not then this +must be simulated by planting a breakpoint in the next +instruction. This can be quite involved since it requires some +analysis of the current instruction plus the state of the CPU to +determine where execution is going to go next.

CDL Requirements

The CDL needed for any particular architecture HAL depends to a large +extent on the needs of that architecture. This includes issues such as +support for different variants, use of FPUs, MMUs and caches. The +exact split between the architecture, variant and platform HALs for +various features is also somewhat fluid.

To give a rough idea about how the CDL for an architecture is +structured, we will take as an example the I386 CDL.

This first section introduces the CDL package and placed it under the +main HAL package. Include files from this package will be put in the +include/cyg/hal directory, and definitions from +this file will be placed in +include/pkgconf/hal_i386.h. The +compile line specifies the files in the +src directory that are to be compiled as part of +this package.

cdl_package CYGPKG_HAL_I386 {
+    display       "i386 architecture"
+    parent        CYGPKG_HAL
+    hardware
+    include_dir   cyg/hal
+    define_header hal_i386.h
+    description   "
+        The i386 architecture HAL package provides generic
+        support for this processor architecture. It is also
+        necessary to select a specific target platform HAL
+        package."
+
+    compile       hal_misc.c context.S i386_stub.c hal_syscall.c

Next we need to generate some files using non-standard make rules. The +first is vectors.S, which is not put into the +library, but linked explicitly with all applications. The second is +the generation of the target.ld file from +i386.ld and the startup-selected +.ldi file. Both of these are essentially +boilerplate code that can be copied and edited.


    make {
+        <PREFIX>/lib/vectors.o : <PACKAGE>/src/vectors.S
+        $(CC) -Wp,-MD,vectors.tmp $(INCLUDE_PATH) $(CFLAGS) -c -o $@ $<
+        @echo $@ ": \\" > $(notdir $@).deps
+        @tail +2 vectors.tmp >> $(notdir $@).deps
+        @echo >> $(notdir $@).deps
+        @rm vectors.tmp
+    }
+
+    make {
+        <PREFIX>/lib/target.ld: <PACKAGE>/src/i386.ld
+        $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $<
+        @echo $@ ": \\" > $(notdir $@).deps
+        @tail +2 target.tmp >> $(notdir $@).deps
+        @echo >> $(notdir $@).deps
+        @rm target.tmp
+    }

The i386 is currently the only architecture that supports SMP. The +following CDL simply enabled the HAL SMP support if +required. Generally this will get enabled as a result of a +requires statement in the kernel. The +requires statement here turns off lazy FPU +switching in the FPU support code, since it is inconsistent with SMP +operation.


    cdl_component CYGPKG_HAL_SMP_SUPPORT {
+	display       "SMP support"
+	default_value 0
+	requires { CYGHWR_HAL_I386_FPU_SWITCH_LAZY == 0 }
+	
+	cdl_option CYGPKG_HAL_SMP_CPU_MAX {
+	    display       "Max number of CPUs supported"
+	    flavor        data
+	    default_value 2
+	}
+    }

The i386 HAL has optional FPU support, which is enabled by default. It +can be disabled to improve system performance. There are two FPU +support options: either to save and restore the FPU state on every +context switch, or to only switch the FPU state when necessary.

        
+    cdl_component CYGHWR_HAL_I386_FPU {
+	display       "Enable I386 FPU support"
+	default_value 1
+	description   "This component enables support for the
+	              I386 floating point unit."
+
+	cdl_option CYGHWR_HAL_I386_FPU_SWITCH_LAZY {
+	    display       "Use lazy FPU state switching"
+	    flavor        bool
+	    default_value 1
+
+	    description "
+	                This option enables lazy FPU state switching.
+                        The default behaviour for eCos is to save and
+                        restore FPU state on every thread switch, interrupt
+	                and exception. While simple and deterministic, this
+	                approach can be expensive if the FPU is not used by
+	                all threads. The alternative, enabled by this option,
+	                is to use hardware features that allow the FPU state
+	                of a thread to be left in the FPU after it has been
+	                descheduled, and to allow the state to be switched to
+	                a new thread only if it actually uses the FPU. Where
+	                only one or two threads use the FPU this can avoid a
+	                lot of unnecessary state switching."
+	}
+    }

The i386 HAL also has support for different classes of CPU. In +particular, Pentium class CPUs have extra functional units, and some +variants of GDB expect more registers to be reported. These options +enable these features. Generally these are enabled by +requires statements in variant or platform +packages, or in .ecm files.


    cdl_component CYGHWR_HAL_I386_PENTIUM {
+	display       "Enable Pentium class CPU features"
+	default_value 0
+	description   "This component enables support for various
+	              features of Pentium class CPUs."
+
+	cdl_option CYGHWR_HAL_I386_PENTIUM_SSE {
+	    display       "Save/Restore SSE registers on context switch"
+	    flavor        bool
+	    default_value 0
+
+	    description "
+	                This option enables SSE state switching. The default
+                        behaviour for eCos is to ignore the SSE registers.
+                        Enabling this option adds SSE state information to
+                        every thread context."
+	}
+
+	cdl_option CYGHWR_HAL_I386_PENTIUM_GDB_REGS {
+	    display       "Support extra Pentium registers in GDB stub"
+	    flavor        bool
+	    default_value 0
+
+	    description "
+	                This option enables support for extra Pentium registers
+			in the GDB stub. These are registers such as CR0-CR4, and
+                        all MSRs. Not all GDBs support these registers, so the
+                        default behaviour for eCos is to not include them in the
+			GDB stub support code."
+	}
+    }

In the i386 HALs, the linker script is provided by the architecture +HAL. In other HALs, for example MIPS, it is provided in the variant +HAL. The following option provides the name of the linker script to +other elements in the configuration system.

    cdl_option CYGBLD_LINKER_SCRIPT {
+        display "Linker script"
+        flavor data
+	no_define
+        calculated  { "src/i386.ld" }
+    }

Finally, this interface indicates whether the platform supplied an +implementation of the +hal_i386_mem_real_region_top() function. If it +does then it will contain a line of the form: implements +CYGINT_HAL_I386_MEM_REAL_REGION_TOP. This allows packages +such as RedBoot to detect the presence of this function so that they +may call it.


    cdl_interface CYGINT_HAL_I386_MEM_REAL_REGION_TOP {
+        display  "Implementations of hal_i386_mem_real_region_top()"
+    }
+    
+}

PrevHomeNext
Variant HAL PortingUpFuture developments
\ No newline at end of file diff --git a/doc/html/ref/hal-porting-coding-conventions.html b/doc/html/ref/hal-porting-coding-conventions.html new file mode 100644 index 00000000..953df93b --- /dev/null +++ b/doc/html/ref/hal-porting-coding-conventions.html @@ -0,0 +1,377 @@ + + + + + + + + +HAL Coding Conventions +
eCos Reference Manual
PrevChapter 11. Porting GuideNext

HAL Coding Conventions

To get changes and larger submissions included into the eCos source +repository, we ask that you adhere to a set of coding conventions. +The conventions are defined as an attempt to make a consistent +tree. Consistency makes it easier for people to read, understand and +maintain the code, which is important when many people work on the +same project.

The below is only a brief, and probably incomplete, summary of the +rules. Please look through files in the area where you are making +changes to get a feel for any additional conventions. Also feel free +to ask on the list if you have specific questions.

Implementation issues

There are a few implementation issues that should be kept in mind:

HALs

HALs must be written in C and assembly only. C++ must not + be used. This is in part to keep the HALs simple since this is + usually the first part of eCos a newcomer will see, and in + part to maintain the existing de facto standard.

IO access

Use HAL IO access macros for code that might be reused on + different platforms than the one you are writing it for.

MMU

If it is necessary to use the MMU (e.g., to prevent + caching of IO areas), use a simple 1-1 mapping of memory if + possible. On most platforms where using the MMU is necessary, + it will be possible to achieve the 1-1 mapping using the MMU's + provision for mapping large continuous areas (hardwired TLBs or + BATs). This reduces the footprint (no MMU table) and avoids + execution overhead (no MMU-related exceptions).

Assertions

The code should contain assertions to validate argument + values, state information and any assumptions the code may be + making. Assertions are not enabled in production builds, so + liberally sprinkling assertions throughout the code is + good.

Testing

The ability to test your code is very important. In + general, do not add new code to the eCos runtime unless you + also add a new test to exercise that code. The test also + serves as an example of how to use the new code.

Source code details

Line length

Keep line length below 78 columns whenever possible.

Comments

Whenever possible, use // comments instead of /**/.

Indentation

Use spaces instead of TABs. Indentation level is 4. Braces + start on the same line as the expression. See below for emacs + mode details.

;;=================================================================
+;; eCos C/C++ mode Setup.
+;;
+;; bsd mode: indent = 4
+;; tail comments are at col 40.
+;; uses spaces not tabs in C
+
+(defun ecos-c-mode ()
+  "C mode with adjusted defaults for use with the eCos sources."
+  (interactive)
+  (c++-mode)
+  (c-set-style "bsd")
+  (setq comment-column 40)
+  (setq indent-tabs-mode nil)
+  (show-paren-mode 1)
+  (setq c-basic-offset 4)
+
+  (set-variable 'add-log-full-name "Your Name")
+  (set-variable 'add-log-mailing-address "Your email address"))
+
+(defun ecos-asm-mode ()
+  "ASM mode with adjusted defaults for use with the eCos sources."
+  (interactive)
+  (setq comment-column 40)
+  (setq indent-tabs-mode nil)
+  (asm-mode)
+  (setq c-basic-offset 4)
+
+  (set-variable 'add-log-full-name "Your Name")
+  (set-variable 'add-log-mailing-address "Your email address"))
+
+(setq auto-mode-alist
+      (append '(("/local/ecc/.*\\.C$"   . ecos-c-mode)
+                ("/local/ecc/.*\\.cc$"  . ecos-c-mode)
+                ("/local/ecc/.*\\.cpp$" . ecos-c-mode)
+                ("/local/ecc/.*\\.inl$" . ecos-c-mode)
+                ("/local/ecc/.*\\.c$"   . ecos-c-mode)
+                ("/local/ecc/.*\\.h$"   . ecos-c-mode)
+		("/local/ecc/.*\\.S$"   . ecos-asm-mode) 
+		("/local/ecc/.*\\.inc$" . ecos-asm-mode)
+		("/local/ecc/.*\\.cdl$" . tcl-mode)
+                ) auto-mode-alist))

Nested Headers

In order to allow platforms to define all necessary details, while +still maintaining the ability to share code between common platforms, +all HAL headers are included in a nested fashion.

The architecture header (usually hal_XXX.h) includes the +variant equivalent of the header (var_XXX.h) which in turn +includes the platform equivalent of the header +(plf_XXX.h).

All definitions that may need to be overridden by a platform are +then only conditionally defined, depending on whether a lower layer +has already made the definition:

hal_intr.h:     #include <var_intr.h>
+
+                #ifndef MACRO_DEFINED
+                # define MACRO ...
+                # define MACRO_DEFINED
+                #endif
+
+
+
+var_intr.h:     #include <plf_intr.h>
+
+                #ifndef MACRO_DEFINED
+                # define MACRO ...
+                # define MACRO_DEFINED
+                #endif
+
+
+plf_intr.h:
+
+                # define MACRO ...
+                # define MACRO_DEFINED

This means a platform can opt to rely on the variant or +architecture implementation of a feature, or implement it itself.


PrevHomeNext
Virtual Vectors (eCos/ROM Monitor Calling Interface)UpPlatform HAL Porting
\ No newline at end of file diff --git a/doc/html/ref/hal-porting-guide.html b/doc/html/ref/hal-porting-guide.html new file mode 100644 index 00000000..1802e561 --- /dev/null +++ b/doc/html/ref/hal-porting-guide.html @@ -0,0 +1,275 @@ + + + + + + + + + Porting Guide +
eCos Reference Manual
PrevNext

Chapter 11. Porting Guide

Introduction

eCos has been designed to be fairly easy to port to new targets. A +target is a specific platform (board) using a given architecture (CPU +type). The porting is facilitated by the hierarchical layering of the +eCos sources - all architecture and platform specific code is +implemented in a HAL (hardware abstraction layer).

By porting the eCos HAL to a new target the core functionality of eCos +(infra, kernel, uITRON, etc) will be able to run on the target. It may +be necessary to add further platform specific code such as serial +drivers, display drivers, ethernet drivers, etc. to get a fully +capable system.

This document is intended as a help to the HAL porting process. Due to +the nature of a porting job, it is impossible to give a complete +description of what has to be done for each and every potential +target. This should not be considered a clear-cut recipe - you will +probably need to make some implementation decisions, tweak a few +things, and just plain have to rely on common sense.

However, what is covered here should be a large part of the +process. If you get stuck, you are advised to read the +ecos-discuss archive +where you may find discussions which apply to the problem at +hand. You are also invited to ask questions on the +ecos-discuss mailing list +to help you resolve problems - but as is always the case +with community lists, do not consider it an oracle for any and all +questions. Use common sense - if you ask too many questions which +could have been answered by reading the +documentation, +FAQ or +source code, you are likely to be ignored.

This document will be continually improved by Red Hat engineers as +time allows. Feedback and help with improving the document is sought, +so if you have any comments at all, please do not hesitate to post +them on +ecos-discuss +(please prefix the subject with [porting]).

At the moment this document is mostly an outline. There are many +details to fill in before it becomes complete. Many places you'll just +find a list of keywords / concepts that should be described (please +post on ecos-discuss if there are areas you think are not covered).

All pages or sections where the caption ends in [TBD] contain little +more than key words and/or random thoughts - there has been no work +done as such on the content. The word FIXME may appear in the text to +highlight places where information is missing.


PrevHomeNext
Default Interrupt HandlingUpHAL Structure
\ No newline at end of file diff --git a/doc/html/ref/hal-porting-platform.html b/doc/html/ref/hal-porting-platform.html new file mode 100644 index 00000000..d1fe81a1 --- /dev/null +++ b/doc/html/ref/hal-porting-platform.html @@ -0,0 +1,1675 @@ + + + + + + + + +Platform HAL Porting +
eCos Reference Manual
PrevChapter 11. Porting GuideNext

Platform HAL Porting

This is the type of port that takes the least effort. It basically +consists of describing the platform (board) for the HAL: memory +layout, early platform initialization, interrupt controllers, and a +simple serial device driver.

Doing a platform port requires a preexisting architecture and +possibly a variant HAL port.

HAL Platform Porting Process

Brief overview

The easiest way to make a new platform HAL is simply to copy an +existing platform HAL of the same architecture/variant and change all +the files to match the new one. In case this is the first platform for +the architecture/variant, a platform HAL from another architecture +should be used as a template.

The best way to start a platform port is to concentrate on getting +RedBoot to run. RedBoot is a simpler environment than full eCos, it +does not use interrupts or threads, but covers most of the +basic startup requirements.

RedBoot normally runs out of FLASH or ROM and provides program loading +and debugging facilities. This allows further HAL development to +happen using RAM startup configurations, which is desirable for the +simple reason that downloading an image which you need to test is +often many times faster than either updating a flash part, or indeed, +erasing and reprogramming an EPROM.

There are two approaches to getting to this first goal:

  1. The board is equipped with a ROM monitor which allows "load and go" of +ELF, binary, S-record or some other image type which can be created +using objcopy. This allows you to develop +RedBoot by downloading and running the code (saving time).

    When the stub is running it is a good idea to examine the various +hardware registers to help you write the platform initialization code.

    Then you may have to fiddle a bit going through step two (getting it +to run from ROM startup). If at all possible, preserve the original +ROM monitor so you can revert to it if necessary.

  2. The board has no ROM monitor. You need to get the platform +initialization and stub working by repeatedly making changes, updating +flash or EPROM and testing the changes. If you are lucky, you have a +JTAG or similar CPU debugger to help you. If not, you will probably +learn to appreciate LEDs. This approach may also be needed during the +initial phase of moving RedBoot from RAM startup to ROM, since it is +very unlikely to work first time.

Step-by-step

Given that no two platforms are exactly the same, you may have to +deviate from the below. Also, you should expect a fair amount of +fiddling - things almost never go right the first time. See the hints +section below for some suggestions that might help debugging.

The description below is based on the HAL layout used in the MIPS, +PC and MN10300 HALs. Eventually all HALs should be converted to look like +these - but in a transition period there will be other HALs which look +substantially different. Please try to adhere to the following as much is +possible without causing yourself too much grief integrating with a +HAL which does not follow this layout.

Minimal requirements

These are the changes you must make before you attempt to build +RedBoot. You are advised to read all the sources though.

  1. Copy an existing platform HAL from the same or another + architecture. Rename the files as necessary to follow the + standard: CDL and MLT related files should contain the + <arch>_<variant>_<platform> triplet.

  2. Adjust CDL options. Primarily option naming, real-time + clock/counter, and CYGHWR_MEMORY_LAYOUT variables, but also other + options may need editing. Look through the architecture/variant + CDL files to see if there are any requirements/features which + where not used on the platform you copied. If so, add appropriate + ones. See the Section called HAL Platform CDL for more + details.

  3. Add the necessary packages and target descriptions to the + top-level ecos.db file. See the Section called eCos Database. Initially, the target entry + should only contain the HAL packages. Other hardware support + packages will be added later.

  4. Adjust the MLT files in + include/pkgconf to match the memory layout on + the platform. For initial testing it should be enough to just hand + edit .h and .ldi files, but eventually you should generate all + files using the memory layout editor in the configuration + tool. See the Section called Platform Memory Layout for + more details.

  5. Edit the misc/redboot_<STARTUP>.ecm for + the startup type you have chosen to begin with. Rename any + platform specific options and remove any that do not apply. In the + cdl_configuration section, comment out any + extra packages that are added, particularly packages such as + CYGPKG_IO_FLASH and + CYGPKG_IO_ETH_DRIVERS. These are not needed for + initial porting and will be added back later. +

  6. If the default IO macros are not correct, override them in + plf_io.h. This may be necessary if the platform uses a different + endianness from the default for the CPU.

  7. Leave out/comment out code that enables caches and/or MMU if + possible. Execution speed will not be a concern until the port is + feature complete.

  8. Implement a simple serial driver (polled mode only). Make sure the + initialization function properly hooks the procedures up in the + virtual vector IO channel tables. RedBoot will call the serial + driver via these tables.

    By copying an existing platform HAL most of this code will be + already done, and will only need the platform specific hardware + access code to be written. +

  9. Adjust/implement necessary platform + initialization. This can be found in + platform.inc and + platform.S files (ARM: + hal_platform_setup.h and + <platform>_misc.c, PowerPC: + <platform>.S). This step can be + postponed if you are doing a RAM startup RedBoot first and the + existing ROM monitor handles board initialization.

  10. Define HAL_STUB_PLATFORM_RESET + (optionally empty) and + HAL_STUB_PLATFORM_RESET_ENTRY so that RedBoot + can reset-on-detach - this is very handy, often removing the need + for physically resetting the board between downloads.

You should now be able to build RedBoot. For ROM startup:

% ecosconfig new <target_name> redboot
+% ecosconfig import $(ECOS_REPOSITORY)/hal/<architecture>/<platform>/<version>/misc/redboot_ROM.ecm
+% ecosconfig tree
+% make

You may have to make further changes than suggested above to get +the make command to succeed. But when it does, you should find a +RedBoot image in install/bin. To program this image into flash or +EPROM, you may need to convert to some other file type, and possibly +adjust the start address. When you have the correct +objcopy command to do this, add it to the +CYGBLD_BUILD_GDB_STUBS custom build rule in the +platform CDL file.

Having updated the flash/EPROM on the board, you should see output +on the serial port looking like this when powering on the board:

RedBoot(tm) bootstrap and debug environment [ROMRAM]
+Non-certified release, version UNKNOWN - built 15:42:24, Mar 14 2002
+
+Platform: <PLATFORM> (<ARCHITECTURE> <VARIANT>)
+Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
+
+RAM: 0x00000000-0x01000000, 0x000293e8-0x00ed1000 available
+FLASH: 0x24000000 - 0x26000000, 256 blocks of 0x00020000 bytes each.
+RedBoot> 

If you do not see this output, you need to go through all your +changes and figure out what's wrong. If there's a user programmable +LED or LCD on the board it may help you figure out how far RedBoot +gets before it hangs. Unfortunately there's no good way to describe +what to do in this situation - other than that you have to play with +the code and the board.

Adding features

Now you should have a basic RedBoot running on the board. This +means you have a the correct board initialization and a working serial +driver. It's time to flesh out the remaining HAL features.

  1. Reset. As mentioned above it is desirable to get the board to +reset when GDB disconnects. When GDB disconnects it sends RedBoot +a kill-packet, and RedBoot first calls HAL_STUB_PLATFORM_RESET(), +attempting to perform a software-invoked reset. Most embedded +CPUs/boards have a watchdog which is capable of triggering a reset. +If your target does not have a watchdog, leave +HAL_STUB_PLATFORM_RESET() empty and rely on the fallback approach.

    If HAL_STUB_PLATFORM_RESET() did not cause a reset, RedBoot will +jump to HAL_STUB_PLATFORM_RESET_ENTRY - this should be the address +where the CPU will start execution after a reset. Re-initializing the +board and drivers will usually be good enough to make a +hardware reset unnecessary.

    After the reset caused by the kill-packet, the target will be ready +for GDB to connect again. During a days work, this will save you from +pressing the reset button many times.

    Note that it is possible to disconnect from the board without +causing it to reset by using the GDB command "detach".

  2. Single-stepping is necessary for both instruction-level debugging +and for breakpoint support. Single-stepping support should already be +in place as part of the architecture/variant HAL, but you want to give +it a quick test since you will come to rely on it.

  3. Real-time clock interrupts drive the eCos scheduler clock. Many +embedded CPUs have an on-core timer (e.g. SH) or decrementer +(e.g. MIPS, PPC) that can be used, and in this case it will already be +supported by the architecture/variant HAL. You only have to calculate +and enter the proper CYGNUM_HAL_RTC_CONSTANTS +definitions in the platform CDL file.

    On some targets it may be necessary to use a platform-specific +timer source for driving the real-time clock. In this case you also +have to enter the proper CDL definitions, but must also define +suitable versions of the HAL_CLOCK_XXXX macros.

  4. Interrupt decoding usually differs between platforms because the +number and type of devices on the board differ. In +plf_intr.h (ARM: +hal_platform_ints.h) you must either extend or +replace the default vector definitions provided by the architecture +or variant interrupt headers. You may also have to define +HAL_INTERRUPT_XXXX control macros.

  5. Caching may also differ from architecture/variant definitions. +This maybe just the cache sizes, but there can also be bigger +differences for example if the platform supports 2nd level caches.

    When cache definitions are in place, enable the caches on +startup. First verify that the system is stable for RAM startups, then +build a new RedBoot and install it. This will test if caching, and in +particular the cache sync/flush operations, also work for ROM startup.

  6. Asynchronous breakpoints allow you to stop application execution +and enter the debugger. Asynchronous breakpoint details are described +in .

You should now have a completed platform HAL port. Verify its +stability and completeness by running all the eCos tests and fix any +problems that show up (you have a working RedBoot now, remember! That +means you can debug the code to see why it fails).

Given the many configuration options in eCos, there may be hidden +bugs or missing features that do not show up even if you run all the +tests successfully with a default configuration. A comprehensive test +of the entire system will take many configuration permutations and +many many thousands of tests executed.

Hints

HAL Platform CDL

The platform CDL both contains details necessary for the building +of eCos, and platform-specific configuration options. For this reason +the options differ between platforms, and the below is just a brief +description of the most common options.

See Components Writers Guide +for more details on CDL. Also have a quick look around in +existing platform CDL files to get an idea of what is possible and how +various configuration issues can be represented with CDL.

eCos Database

The eCos configuration system is made aware of a package by +adding a package description in ecos.db. As an +example we use the TX39/JMR3904 platform:

package CYGPKG_HAL_MIPS_TX39_JMR3904 {
+	alias		{ "Toshiba JMR-TX3904 board" hal_tx39_jmr3904 tx39_jmr3904_hal }
+	directory	hal/mips/jmr3904
+	script		hal_mips_tx39_jmr3904.cdl
+	hardware
+	description "
+           The JMR3904 HAL package should be used when targeting the
+           actual hardware. The same package can also be used when
+           running on the full simulator, since this provides an
+           accurate simulation of the hardware including I/O devices.
+           To use the simulator in this mode the command
+           `target sim --board=jmr3904' should be used from inside gdb."
+}

This contains the title and description presented in the +Configuration Tool when the package is selected. It also specifies +where in the tree the package files can be found (directory) +and the name of the CDL file which contains the package details +(script).

To be able to build and test a configuration for the new target, there +also needs to be a target entry in the +ecos.db file.

target jmr3904 {
+        alias		{ "Toshiba JMR-TX3904 board" jmr tx39 }
+	packages        { CYGPKG_HAL_MIPS
+                          CYGPKG_HAL_MIPS_TX39
+                          CYGPKG_HAL_MIPS_TX39_JMR3904
+        }
+        description "
+           The jmr3904 target provides the packages needed to run
+           eCos on a Toshiba JMR-TX3904 board. This target can also
+           be used when running in the full simulator, since the simulator provides an
+           accurate simulation of the hardware including I/O devices.
+           To use the simulator in this mode the command
+           `target sim --board=jmr3904' should be used from inside gdb."
+}

The important part here is the packages section +which defines the various hardware specific packages that contribute +to support for this target. In this case the MIPS architecture +package, the TX39 variant package, and the JMR-TX3904 platform +packages are selected. Other packages, for serial drivers, ethernet +drivers and FLASH memory drivers may also appear here.

CDL File Layout

All the platform options are contained in a CDL package named +CYGPKG_HAL_<architecture>_<variant>_<platform>. +They all share more or less the same cdl_package +details:

cdl_package CYGPKG_HAL_MIPS_TX39_JMR3904 {
+    display       "JMR3904 evaluation board"
+    parent        CYGPKG_HAL_MIPS
+    requires      CYGPKG_HAL_MIPS_TX39
+    define_header hal_mips_tx39_jmr3904.h
+    include_dir   cyg/hal
+    description   "
+           The JMR3904 HAL package should be used when targeting the
+           actual hardware. The same package can also be used when
+           running on the full simulator, since this provides an
+           accurate simulation of the hardware including I/O devices.
+           To use the simulator in this mode the command
+           `target sim --board=jmr3904' should be used from inside gdb."
+
+    compile       platform.S plf_misc.c plf_stub.c
+
+    define_proc {
+        puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H   <pkgconf/hal_mips_tx39.h>"
+        puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_mips_tx39_jmr3904.h>"
+    }
+
+    ...
+}

This specifies that the platform package should be parented under +the MIPS packages, requires the TX39 variant HAL and all configuration +settings should be saved in +cyg/hal/hal_mips_tx39_jmt3904.h.

The compile line specifies which files should be built +when this package is enabled, and the define_proc defines +some macros that are used to access the variant or architecture (the +_TARGET_ name is a bit of a misnomer) and platform +configuration options.

Startup Type

eCos uses an option to select between a set of valid startup +configurations. These are normally RAM, ROM and possibly ROMRAM. This +setting is used to select which linker map to use (i.e., where to link +eCos and the application in the memory space), and how the startup +code should behave.

cdl_component CYG_HAL_STARTUP {
+    display       "Startup type"
+    flavor        data
+    legal_values  {"RAM" "ROM"}
+    default_value {"RAM"}
+	no_define
+	define -file system.h CYG_HAL_STARTUP
+    description   "
+       When targeting the JMR3904 board it is possible to build
+       the system for either RAM bootstrap, ROM bootstrap, or STUB
+       bootstrap. RAM bootstrap generally requires that the board
+       is equipped with ROMs containing a suitable ROM monitor or
+       equivalent software that allows GDB to download the eCos
+       application on to the board. The ROM bootstrap typically
+       requires that the eCos application be blown into EPROMs or
+       equivalent technology."
+}

The no_define and define +pair is used to make the setting of this option appear in the file +system.h instead of the default specified in the +header.

Build options

A set of options under the components +CYGBLD_GLOBAL_OPTIONS and +CYGHWR_MEMORY_LAYOUT specify how eCos should be +built: what tools and compiler options should be used, and which +linker fragments should be used.


cdl_component CYGBLD_GLOBAL_OPTIONS {
+    display "Global build options"
+    flavor  none
+    parent  CYGPKG_NONE
+    description   "
+	    Global build options including control over
+	    compiler flags, linker flags and choice of toolchain."
+
+
+    cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX {
+        display "Global command prefix"
+        flavor  data
+        no_define
+        default_value { "mips-tx39-elf" }
+        description "
+            This option specifies the command prefix used when
+            invoking the build tools."
+    }
+
+    cdl_option CYGBLD_GLOBAL_CFLAGS {
+        display "Global compiler flags"
+        flavor  data
+        no_define
+        default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" }
+        description   "
+            This option controls the global compiler flags which
+            are used to compile all packages by
+            default. Individual packages may define
+            options which override these global flags."
+    }
+
+    cdl_option CYGBLD_GLOBAL_LDFLAGS {
+        display "Global linker flags"
+        flavor  data
+        no_define
+        default_value { "-g -nostdlib -Wl,--gc-sections -Wl,-static" }
+        description   "
+            This option controls the global linker flags. Individual
+            packages may define options which override these global flags."
+    }
+}
+
+cdl_component CYGHWR_MEMORY_LAYOUT {
+    display "Memory layout"
+    flavor data
+    no_define
+    calculated { CYG_HAL_STARTUP == "RAM" ? "mips_tx39_jmr3904_ram" : \
+                                            "mips_tx39_jmr3904_rom" }
+
+    cdl_option CYGHWR_MEMORY_LAYOUT_LDI {
+        display "Memory layout linker script fragment"
+        flavor data
+        no_define
+        define -file system.h CYGHWR_MEMORY_LAYOUT_LDI
+        calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_mips_tx39_jmr3904_ram.ldi>" : \
+                                                "<pkgconf/mlt_mips_tx39_jmr3904_rom.ldi>" }
+    }
+
+    cdl_option CYGHWR_MEMORY_LAYOUT_H {
+        display "Memory layout header file"
+        flavor data
+        no_define
+        define -file system.h CYGHWR_MEMORY_LAYOUT_H
+        calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_mips_tx39_jmr3904_ram.h>" : \
+                                                "<pkgconf/mlt_mips_tx39_jmr3904_rom.h>" }
+    }
+}

Common Target Options

All platforms also specify real-time clock details:

# Real-time clock/counter specifics
+cdl_component CYGNUM_HAL_RTC_CONSTANTS {
+    display       "Real-time clock constants."
+    flavor        none
+
+    cdl_option CYGNUM_HAL_RTC_NUMERATOR {
+        display       "Real-time clock numerator"
+        flavor        data
+        calculated    1000000000
+    }
+    cdl_option CYGNUM_HAL_RTC_DENOMINATOR {
+        display       "Real-time clock denominator"
+        flavor        data
+        calculated    100
+    }
+    # Isn't a nice way to handle freq requirement!
+    cdl_option CYGNUM_HAL_RTC_PERIOD {
+        display       "Real-time clock period"
+        flavor        data
+        legal_values  { 15360 20736 }
+        calculated     { CYGHWR_HAL_MIPS_CPU_FREQ == 50 ? 15360 : \
+                         CYGHWR_HAL_MIPS_CPU_FREQ == 66 ? 20736 : 0 }
+    }
+}

The NUMERATOR divided by the +DENOMINATOR gives the number of nanoseconds per +tick. The PERIOD is the divider to be programmed +into a hardware timer that is driven from an appropriate hardware +clock, such that the timer overflows once per tick (normally +generating a CPU interrupt to mark the end of a tick). The tick +default rate is typically 100Hz.

Platforms that make use of the virtual vector +ROM calling interface (see the Section called Virtual Vectors (eCos/ROM Monitor Calling Interface)) will also +specify details necessary to define configuration channels (these +options are from the SH/EDK7707 HAL) :

cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS {
+    display      "Number of communication channels on the board"
+    flavor       data
+    calculated   1
+}
+
+cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
+    display          "Debug serial port"
+    flavor data
+    legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
+    default_value    0
+    description      "
+       The EDK/7708 board has only one serial port. This option
+       chooses which port will be used to connect to a host
+       running GDB."
+}
+
+cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
+    display          "Diagnostic serial port"
+    flavor data
+    legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
+    default_value    0
+    description      "
+       The EDK/7708 board has only one serial port.  This option
+       chooses which port will be used for diagnostic output."
+}

The platform usually also specify an option controlling the ability + to co-exist with a ROM monitor:

cdl_option CYGSEM_HAL_USE_ROM_MONITOR {
+    display       "Work with a ROM monitor"
+    flavor        booldata
+    legal_values  { "Generic" "CygMon" "GDB_stubs" }
+    default_value { CYG_HAL_STARTUP == "RAM" ? "CygMon" : 0 }
+    parent        CYGPKG_HAL_ROM_MONITOR
+    requires      { CYG_HAL_STARTUP == "RAM" }
+    description   "
+        Support can be enabled for three different varieties of ROM monitor.
+        This support changes various eCos semantics such as the encoding
+        of diagnostic output, or the overriding of hardware interrupt
+        vectors.
+        Firstly there is \"Generic\" support which prevents the HAL
+        from overriding the hardware vectors that it does not use, to
+        instead allow an installed ROM monitor to handle them. This is
+        the most basic support which is likely to be common to most
+        implementations of ROM monitor.
+        \"CygMon\" provides support for the Cygnus ROM Monitor.
+        And finally, \"GDB_stubs\" provides support when GDB stubs are
+        included in the ROM monitor or boot ROM."
+}

Or the ability to be configured as a ROM monitor:

cdl_option CYGSEM_HAL_ROM_MONITOR {
+    display       "Behave as a ROM monitor"
+    flavor        bool
+    default_value 0
+    parent        CYGPKG_HAL_ROM_MONITOR
+    requires      { CYG_HAL_STARTUP == "ROM" }
+    description   "
+        Enable this option if this program is to be used as a ROM monitor,
+        i.e. applications will be loaded into RAM on the board, and this
+        ROM monitor may process exceptions or interrupts generated from the
+        application. This enables features such as utilizing a separate
+        interrupt stack when exceptions are generated."
+}

The latter option is accompanied by a special build rule that +extends the generic ROM monitor build rule in the common HAL:

cdl_option CYGBLD_BUILD_GDB_STUBS {
+    display "Build GDB stub ROM image"
+    default_value 0
+    requires { CYG_HAL_STARTUP == "ROM" }
+    requires CYGSEM_HAL_ROM_MONITOR
+    requires CYGBLD_BUILD_COMMON_GDB_STUBS
+    requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
+    requires ! CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
+    requires ! CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
+    requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT
+    requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM
+    no_define
+    description "
+        This option enables the building of the GDB stubs for the
+        board. The common HAL controls takes care of most of the
+        build process, but the final conversion from ELF image to
+        binary data is handled by the platform CDL, allowing
+        relocation of the data if necessary."
+
+    make -priority 320 {
+        <PREFIX>/bin/gdb_module.bin : <PREFIX>/bin/gdb_module.img
+        $(OBJCOPY) -O binary $< $@
+    }
+}

Most platforms support RedBoot, and some options are needed to +configure for RedBoot.

    cdl_component CYGPKG_REDBOOT_HAL_OPTIONS {
+        display       "Redboot HAL 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."
+    
+        cdl_option CYGBLD_BUILD_REDBOOT_BIN {
+            display       "Build Redboot ROM binary image"
+            active_if     CYGBLD_BUILD_REDBOOT
+            default_value 1
+            no_define
+            description "This option enables the conversion of the Redboot ELF
+                         image to a binary image suitable for ROM programming."
+    
+            make -priority 325 {
+                <PREFIX>/bin/redboot.bin : <PREFIX>/bin/redboot.elf
+                $(OBJCOPY) --strip-debug $< $(@:.bin=.img) 
+                $(OBJCOPY) -O srec $< $(@:.bin=.srec)
+                $(OBJCOPY) -O binary $< $@
+            }
+        }
+    }

The important part here is the make command in the +CYGBLD_BUILD_REDBOOT_BIN option which emits +makefile commands to translate the .elf file +generated by the link phase into both a binary file and an S-Record +file. If a different format is required by a PROM programmer or ROM +monitor, then different output formats would need to be generated here.

Platform Memory Layout

The platform memory layout is defined using the Memory +Configuration Window in the Configuration Tool.

Platform Serial Device Support

The first step is to set up the CDL definitions. The configuration +options that need to be set are the following:

The code in hal_diag.c need to be converted to +support the new serial device. +If this the same as a device already supported, copy that.

The following functions and types need to be rewritten to support a new serial +device.

struct channel_data_t;

Structure containing base address, timeout and ISR vector number + for each serial device supported. Extra fields my be added if + necessary for the device. For example some devices have + write-only control registers, so keeping a shadow of the last + value written here can be useful. +

xxxx_ser_channels[];

Array of channel_data_t, initialized with parameters of each + channel. The index into this array is the channel number used + in the CDL options above and is used by the virtual vector + mechanism to refer to each channel. +

void cyg_hal_plf_serial_init_channel(void + *__ch_data)

Initialize the serial device. The parameter is actually a pointer to a + channel_data_t and should be cast back to + this type before use. This function should use the CDL + definition for the baud rate for the channel it is initializing. +

void cyg_hal_plf_serial_putc(void * __ch_data, + char *c)

Send a character to the serial device. This function should + poll for the device being ready to send and then write the character. + Since this is intended to be a diagnostic/debug channel, it is + often also a good idea to poll for end of transmission + too. This ensures that as much data gets out of the system as + possible. +

bool cyg_hal_plf_serial_getc_nonblock(void* + __ch_data, cyg_uint8* ch)

This function tests the device and if a character is + available, places it in *ch and returns + TRUE. If no character is available, then + the function returns FALSE immediately. +

int cyg_hal_plf_serial_control(void *__ch_data, + __comm_control_cmd_t __func, + ...)

This is an IOCTL-like function for controlling various aspects + of the serial device. The only part in which you may need to + do some work initially is in the + __COMMCTL_IRQ_ENABLE and + __COMMCTL_IRQ_DISABLE cases to + enable/disable interrupts. +

int cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD + __data)

This interrupt handler, called from the spurious interrupt + vector, is specifically for dealing with + Ctrl-C interrupts from GDB. When called + this function should do the following: +

  1. Check for an incoming character. The code here is very + similar to that in + cyg_hal_plf_serial_getc_nonblock(). +

  2. Read the character and call + cyg_hal_is_break(). +

  3. If result is true, set *__ctrlc to + 1. +

  4. Return CYG_ISR_HANDLED. +

+

void cyg_hal_plf_serial_init()

Initialize each of the serial channels. + First call cyg_hal_plf_serial_init_channel() for each channel. + Then call the CYGACC_COMM_IF_* macros for + each channel. This latter set of calls are identical for all + channels, so the best way to do this is to copy and edit an + existing example. +


PrevHomeNext
HAL Coding ConventionsUpVariant HAL Porting
\ No newline at end of file diff --git a/doc/html/ref/hal-porting-structure.html b/doc/html/ref/hal-porting-structure.html new file mode 100644 index 00000000..87f8e7b9 --- /dev/null +++ b/doc/html/ref/hal-porting-structure.html @@ -0,0 +1,1215 @@ + + + + + + + + +HAL Structure +
eCos Reference Manual
PrevChapter 11. Porting GuideNext

HAL Structure

In order to write an eCos HAL it's a good idea to have at least a +passing understanding of how the HAL interacts with the rest of the +system.

HAL Classes

The eCos HAL consists of four HAL sub-classes. This table gives a +brief description of each class and partly reiterates the description +in Chapter 7. The links +refer to the on-line CVS tree (specifically to the sub-HALs used by +the PowerPC MBX target).

HAL typeDescriptionFunctionality Overview
Common HAL (hal/common)Configuration options and functionality shared by all HALs.Generic debugging functionality, driver API, eCos/ROM monitor + calling interface, and tests.
Architecture HAL (hal/<architecture>/arch)Functionality specific to the given architecture. Also default + implementations of some functionality which can be overridden by + variant or platform HALs.Architecture specific debugger functionality (handles single + stepping, exception-to-signal conversion, etc.), + exception/interrupt vector definitions and handlers, cache + definition and control macros, context switching code, assembler + functions for early system initialization, configuration options, + and possibly tests.
Variant HAL (hal/<architecture>/<variant>)Some CPU architectures consist of a number variants, for example + MIPS CPUs come in both 32 and 64 bit versions, and some variants + have embedded features additional to the CPU core.Variant extensions to the architecture code (cache, + exception/interrupt), configuration options, possibly drivers for + variant on-core devices, and possibly tests.
Platform HAL (hal/<architecture>/<platform>)Contains functionality and configuration options specific to the + platform.Early platform initialization code, platform memory layout + specification, configuration options (processor speed, compiler + options), diagnostic IO functions, debugger IO functions, + platform specific extensions to architecture or variant code + (off-core interrupt controller), and possibly tests.
Auxiliary HAL (hal/<architecture>/<module>)Some variants share common modules on the core. Motorola's PowerPC + QUICC is an example of such a module.Module specific functionality (interrupt controller, simple + device drivers), possibly tests.

File Descriptions

Listed below are the files found in various HALs, with a short +description of what each file contains. When looking in existing HALs +beware that they do not necessarily follow this naming scheme. +If you are writing a new HAL, please try to follow it as +closely as possible. Still, no two targets are the same, so sometimes +it makes sense to use additional files.

Common HAL

FileDescription
include/dbg-thread-syscall.hDefines the thread debugging syscall function. This is used by + the ROM monitor to access the thread debugging API in the RAM + application. .
include/dbg-threads-api.hDefines the thread debugging API. .
include/drv_api.hDefines the driver API.
include/generic-stub.hDefines the generic stub features.
include/hal_if.hDefines the ROM/RAM calling interface API.
include/hal_misc.hDefines miscellaneous helper functions shared by all HALs.
include/hal_stub.hDefines eCos mappings of GDB stub features.
src/dbg-threads-syscall.cThread debugging implementation.
src/drv_api.cDriver API implementation. Depending on configuration this + provides either wrappers for the kernel API, or a minimal + implementation of these features. This allows drivers to be written + relying only on HAL features.
src/dummy.cEmpty dummy file ensuring creation of libtarget.a.
src/generic-stub.cGeneric GDB stub implementation. This provides the + communication protocol used to communicate with GDB over a serial + device or via the network.
src/hal_if.cROM/RAM calling interface implementation. Provides wrappers from + the calling interface API to the eCos features used for the + implementation.
src/hal_misc.cVarious helper functions shared by all platforms and + architectures.
src/hal_stub.cWrappers from eCos HAL features to the features required by the + generic GDB stub.
src/stubrom/stubrom.cThe file used to build eCos GDB stub images. Basically a + cyg_start function with a hard coded breakpoint.
src/thread-packets.cMore thread debugging related functions.
src/thread-pkts.hDefines more thread debugging related function.

Architecture HAL

Some architecture HALs may add extra files for architecture +specific serial drivers, or for handling interrupts and exceptions if it +makes sense.

Note that many of the definitions in these files are only +conditionally defined - if the equivalent variant or platform headers +provide the definitions, those override the generic architecture +definitions.

FileDescription
include/arch.incVarious assembly macros used during system initialization.
include/basetype.hEndian, label, alignment, and type size definitions. These + override common defaults in CYGPKG_INFRA.
include/hal_arch.hSaved register frame format, various thread, register and stack + related macros.
include/hal_cache.hCache definitions and cache control macros.
include/hal_intr.hException and interrupt definitions. Macros for configuring and + controlling interrupts. eCos real-time clock control macros.
include/hal_io.hMacros for accessing IO devices.
include/<arch>_regs.hArchitecture register definitions.
include/<arch>_stub.hArchitecture stub definitions. In particular the register frame + layout used by GDB. This may differ from the one used by eCos.
include/<arch>.incArchitecture convenience assembly macros.
src/<arch>.ldLinker macros.
src/context.SFunctions handling context switching and setjmp/longjmp.
src/hal_misc.cException and interrupt handlers in C. Various other utility + functions.
src/hal_mk_defs.cUsed to export definitions from C header files to assembler + header files.
src/hal_intr.cAny necessary interrupt handling functions.
src/<arch>stub.cArchitecture stub code. Contains functions for translating eCos + exceptions to UNIX signals and functions for single-stepping.
src/vectors.SException, interrupt and early initialization code.

Variant HAL

Some variant HALs may add extra files for variant specific serial +drivers, or for handling interrupts/exceptions if it makes sense.

Note that these files may be mostly empty if the CPU variant can be +controlled by the generic architecture macros. The definitions present +are only conditionally defined - if the equivalent platform headers +provide the definitions, those override the variant definitions.

Platform HAL

Extras files may be added for platform specific serial +drivers. Extra files for handling interrupts and exceptions will be +present if it makes sense.

FileDescription
include/hal_diag.hDefines functions used for HAL diagnostics output. This would + normally be the ROM calling interface wrappers, but may also be the + low-level IO functions themselves, saving a little overhead.
include/platform.incPlatform initialization code. This includes memory controller, + vectors, and monitor initialization. Depending on the architecture, + other things may need defining here as well: interrupt decoding, + status register initialization value, etc.
include/plf_cache.hPlatform specific cache handling.
include/plf_intr.hPlatform specific interrupt handling.
include/plf_io.hPCI IO definitions and macros. May also be used to override + generic HAL IO macros if the platform endianness differs from that of + the CPU.
include/plf_stub.hDefines stub initializer and board reset details.
src/hal_diag.cMay contain the low-level device drivers. But these may also + reside in plf_stub.c
src/platform.SMemory controller setup macro, and if necessary interrupt + springboard code.
src/plf_misc.cPlatform initialization code.
src/plf_mk_defs.cUsed to export definitions from C header files to assembler + header files.
src/plf_stub.cPlatform specific stub initialization and possibly the low-level + device driver.

The platform HAL also contains files specifying the platform's +memory layout. These files are located in +include/pkgconf.


PrevHomeNext
Porting GuideUpVirtual Vectors (eCos/ROM Monitor Calling Interface)
\ No newline at end of file diff --git a/doc/html/ref/hal-porting-variant.html b/doc/html/ref/hal-porting-variant.html new file mode 100644 index 00000000..ff1f5474 --- /dev/null +++ b/doc/html/ref/hal-porting-variant.html @@ -0,0 +1,443 @@ + + + + + + + + +Variant HAL Porting +
eCos Reference Manual
PrevChapter 11. Porting GuideNext

Variant HAL Porting

A variant port can be a fairly limited job, but can also +require quite a lot of work. A variant HAL describes how a specific +CPU variant differs from the generic CPU architecture. The variant HAL +can re-define cache, MMU, interrupt, and other features which override +the default implementation provided by the architecture HAL.

Doing a variant port requires a preexisting architecture HAL port. It +is also likely that a platform port will have to be done at the same +time if it is to be tested.

HAL Variant Porting Process

The easiest way to make a new variant HAL is simply to copy an +existing variant HAL and change all the files to match the new +variant. If this is the first variant for an architecture, it may be +hard to decide which parts should be put in the variant - knowledge of +other variants of the architecture is required.

Looking at existing variant HALs (e.g., MIPS tx39, tx49) may be a +help - usually things such as caching, interrupt and exception +handling differ between variants. Initialization code, and code for +handling various core components (FPU, DSP, MMU, etc.) may also differ +or be missing altogether on some variants. Linker scripts may also require +specific variant versions.

HAL Variant CDL

The CDL in a variant HAL tends to depend on the exact functionality +supported by the variant. If it implements some of the devices +described in the platform HAL, then the CDL for those will be here +rather than there (for example the real-time clock).

There may also be CDL to select options in the architecture HAL to +configure it to a particular architectural variant.

Each variant needs an entry in the ecos.db +file. This is the one for the SH3:

package CYGPKG_HAL_SH_SH3 {
+    alias         { "SH3 architecture" hal_sh_sh3 }
+    directory     hal/sh/sh3
+    script        hal_sh_sh3.cdl
+    hardware
+    description   "
+        The SH3 (SuperH 3) variant HAL package provides generic
+        support for SH3 variant CPUs."
+}

As you can see, it is very similar to the platform entry.

The variant CDL file will contain a package entry named for the +architecture and variant, matching the package name in the +ecos.db file. Here is the initial part of the +MIPS VR4300 CDL file:

cdl_package CYGPKG_HAL_MIPS_VR4300 {
+    display       "VR4300 variant"
+    parent        CYGPKG_HAL_MIPS
+    implements    CYGINT_HAL_MIPS_VARIANT
+    hardware
+    include_dir   cyg/hal
+    define_header hal_mips_vr4300.h
+    description   "
+           The VR4300 variant HAL package provides generic support
+           for this processor architecture. It is also necessary to
+           select a specific target platform HAL package."

This defines the package, placing it under the MIPS architecture +package in the hierarchy. The implements line +indicates that this is a MIPS variant. The architecture package uses +this to check that exactly one variant is configured in.

The variant defines some options that cause the architecture HAL to +configure itself to support this variant.

    cdl_option CYGHWR_HAL_MIPS_64BIT {
+        display    "Variant 64 bit architecture support"
+        calculated 1
+    }
+
+    cdl_option CYGHWR_HAL_MIPS_FPU {
+        display    "Variant FPU support"
+        calculated 1
+    }
+
+    cdl_option CYGHWR_HAL_MIPS_FPU_64BIT {
+        display    "Variant 64 bit FPU support"
+        calculated 1
+    }

These tell the architecture that this is a 64 bit MIPS architecture, +that it has a floating point unit, and that we are going to use it in +64 bit mode rather than 32 bit mode.

The CDL file finishes off with some build options.

    define_proc {
+        puts $::cdl_header "#include <pkgconf/hal_mips.h>"
+    }
+
+    compile       var_misc.c
+
+    make {
+        <PREFIX>/lib/target.ld: <PACKAGE>/src/mips_vr4300.ld
+        $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $<
+        @echo $@ ": \\" > $(notdir $@).deps
+        @tail +2 target.tmp >> $(notdir $@).deps
+        @echo >> $(notdir $@).deps
+        @rm target.tmp
+    }
+
+    cdl_option CYGBLD_LINKER_SCRIPT {
+        display "Linker script"
+        flavor data
+	no_define
+        calculated  { "src/mips_vr4300.ld" }
+    }
+
+}

The define_proc causes the architecture +configuration file to be included into the configuration file for the +variant. The compile causes the single source file +for this variant, var_misc.c to be compiled. The +make command emits makefile rules to combine the +linker script with the .ldi file to generate +target.ld. Finally, in the MIPS HALs, the main +linker script is defined in the variant, rather than the architecture, +so CYGBLD_LINKER_SCRIPT is defined here.

Cache Support

The main area where the variant is likely to be involved is in cache +support. Often the only thing that distinguishes one CPU variant from +another is the size of its caches.

In architectures such as the MIPS and PowerPC where cache instructions +are part of the ISA, most of the actual cache operations are +implemented in the architecture HAL. In this case the variant HAL only +needs to define the cache dimensions. The following are the cache +dimensions defined in the MIPS VR4300 variant +var_cache.h.

// Data cache
+#define HAL_DCACHE_SIZE                 (8*1024)        // Size of data cache in bytes
+#define HAL_DCACHE_LINE_SIZE            16              // Size of a data cache line
+#define HAL_DCACHE_WAYS                 1               // Associativity of the cache
+
+// Instruction cache
+#define HAL_ICACHE_SIZE                 (16*1024)       // Size of cache in bytes
+#define HAL_ICACHE_LINE_SIZE            32              // Size of a cache line
+#define HAL_ICACHE_WAYS                 1               // Associativity of the cache
+
+#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS))
+#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS))

Additional cache macros, or overrides for the defaults, may also +appear in here. While some architectures have instructions for +managing cache lines, overall enable/disable operations may be handled +via variant specific registers. If so then +var_cache.h should also define the +HAL_XCACHE_ENABLE() and +HAL_XCACHE_DISABLE() macros.

If there are any generic features that the variant does not support +(cache locking is a typical example) then +var_cache.h may need to disable definitions of +certain operations. It is architecture dependent exactly how this is +done.


PrevHomeNext
Platform HAL PortingUpArchitecture HAL Porting
\ No newline at end of file diff --git a/doc/html/ref/hal-smp-support.html b/doc/html/ref/hal-smp-support.html new file mode 100644 index 00000000..11f64222 --- /dev/null +++ b/doc/html/ref/hal-smp-support.html @@ -0,0 +1,756 @@ + + + + + + + + +SMP Support +
eCos Reference Manual
PrevChapter 9. HAL InterfacesNext

SMP Support

eCos contains support for limited Symmetric Multi-Processing +(SMP). This is only available on selected architectures and platforms.

Target Hardware Limitations

To allow a reasonable implementation of SMP, and to reduce the +disruption to the existing source base, a number of assumptions have +been made about the features of the target hardware.

HAL Support

SMP support in any platform depends on the HAL supplying the +appropriate operations. All HAL SMP support is defined in the +cyg/hal/hal_smp.h header. Variant and platform +specific definitions will be in cyg/hal/var_smp.h +and cyg/hal/plf_smp.h respectively. These files +are include automatically by this header, so need not be included +explicitly.

SMP support falls into a number of functional groups.

CPU Control

This group consists of descriptive and control macros for managing the +CPUs in an SMP system.

HAL_SMP_CPU_TYPE

A type that can contain a CPU id. A CPU id is +usually a small integer that is used to index +arrays of variables that are managed on an +per-CPU basis.

HAL_SMP_CPU_MAX

The maximum number of CPUs that can be +supported. This is used to provide the size of +any arrays that have an element per CPU.

HAL_SMP_CPU_COUNT()

Returns the number of CPUs currently +operational. This may differ from +HAL_SMP_CPU_MAX depending on the runtime +environment.

HAL_SMP_CPU_THIS()

Returns the CPU id of the current CPU.

HAL_SMP_CPU_NONE

A value that does not match any real CPU +id. This is uses where a CPU type variable +must be set to a null value.

HAL_SMP_CPU_START( cpu )

Starts the given CPU executing at a defined +HAL entry point. After performing any HAL +level initialization, the CPU calls up into +the kernel at cyg_kernel_cpu_startup().

HAL_SMP_CPU_RESCHEDULE_INTERRUPT( cpu, wait )

Sends the CPU a reschedule interrupt, and if +wait is non-zero, waits for an +acknowledgment. The interrupted CPU should call +cyg_scheduler_set_need_reschedule() in its DSR to +cause the reschedule to occur.

HAL_SMP_CPU_TIMESLICE_INTERRUPT( cpu, wait )

Sends the CPU a timeslice interrupt, and if +wait is non-zero, waits for an +acknowledgment. The interrupted CPU should call +cyg_scheduler_timeslice_cpu() to cause the +timeslice event to be processed.

Spinlocks

Spinlocks provide inter-CPU locking. Normally they will be implemented +on top of the test-and-set mechanism above, but may also be +implemented by other means if, for example, the hardware has more +direct support for spinlocks.

HAL_SPINLOCK_TYPE

The type for all spinlock variables.

HAL_SPINLOCK_INIT_CLEAR

A value that may be assigned to a spinlock +variable to initialize it to clear.

HAL_SPINLOCK_INIT_SET

A value that may be assigned to a spinlock +variable to initialize it to set.

HAL_SPINLOCK_SPIN( lock )

The caller spins in a busy loop waiting for +the lock to become clear. It then sets it and +continues. This is all handled atomically, so +that there are no race conditions between CPUs.

HAL_SPINLOCK_CLEAR( lock )

The caller clears the lock. One of any waiting +spinners will then be able to proceed.

HAL_SPINLOCK_TRY( lock, val )

Attempts to set the lock. The value put in +val will be true if the lock was +claimed successfully, and false if it was +not.

HAL_SPINLOCK_TEST( lock, val )

Tests the current value of the lock. The value +put in val will be true if the lock is +claimed and false of it is clear.

Scheduler Lock

The scheduler lock is the main protection for all kernel data +structures. By default the kernel implements the scheduler lock itself +using a spinlock. However, if spinlocks cannot be supported by the +hardware, or there is a more efficient implementation available, the +HAL may provide macros to implement the scheduler lock.

HAL_SMP_SCHEDLOCK_DATA_TYPE

A data type, possibly a structure, that +contains any data items needed by the +scheduler lock implementation. A variable of +this type will be instantiated as a static +member of the Cyg_Scheduler_SchedLock class +and passed to all the following macros.

HAL_SMP_SCHEDLOCK_INIT( lock, data )

Initialize the scheduler lock. The lock +argument is the scheduler lock counter and the +data argument is a variable of +HAL_SMP_SCHEDLOCK_DATA_TYPE type.

HAL_SMP_SCHEDLOCK_INC( lock, data )

Increment the scheduler lock. The first +increment of the lock from zero to one for any +CPU may cause it to wait until the lock is +zeroed by another CPU. Subsequent increments +should be less expensive since this CPU +already holds the lock.

HAL_SMP_SCHEDLOCK_ZERO( lock, data )

Zero the scheduler lock. This operation will +also clear the lock so that other CPUs may +claim it.

HAL_SMP_SCHEDLOCK_SET( lock, data, new )

Set the lock to a different value, in +new. This is only called when the lock is +already known to be owned by the current CPU. It is never called to +zero the lock, or to increment it from zero.


PrevHomeNext
Diagnostic SupportUpException Handling
\ No newline at end of file diff --git a/doc/html/ref/hal-synth-arch.html b/doc/html/ref/hal-synth-arch.html new file mode 100644 index 00000000..1b4a79ca --- /dev/null +++ b/doc/html/ref/hal-synth-arch.html @@ -0,0 +1,201 @@ + + + + + + + + +eCos Synthetic Target +
eCos Reference Manual
PrevNext

XXIV. eCos Synthetic Target

Table of Contents
Overview -- Overview
Installation -- Preparing to use the synthetic target
Running a Synthetic Target Application -- Arguments and configuration files
The I/O Auxiliary's User Interface -- Controlling the I/O Auxiliary
The Console Device -- Show output from the eCos application
System Calls -- Access Linux system facilities
Writing New Devices - target -- extending the synthetic target, target-side
Writing New Devices - host -- extending the synthetic target, host-side
Porting -- Adding support for other hosts

PrevHomeNext
Communication Protocol Overview
\ No newline at end of file diff --git a/doc/html/ref/hal-vectors-and-vsrs.html b/doc/html/ref/hal-vectors-and-vsrs.html new file mode 100644 index 00000000..1abe2d4e --- /dev/null +++ b/doc/html/ref/hal-vectors-and-vsrs.html @@ -0,0 +1,328 @@ + + + + + + + + +Vectors and VSRs +
eCos Reference Manual
PrevChapter 10. Exception HandlingNext

Vectors and VSRs

The CPU delivers all exceptions, whether +synchronous faults or asynchronous interrupts, to a set of hardware +defined vectors. Depending on the architecture, these may be +implemented in a number of different ways. Examples of existing +mechanisms are:

PowerPC

Exceptions are vectored to locations 256 bytes apart starting at + either zero or 0xFFF00000. There are 16 such + vectors defined by the basic architecture and extra vectors may + be defined by specific variants. One of the base vectors is for + all external interrupts, and another is for the architecture + defined timer. +

MIPS

Most exceptions and all interrupts are vectored to a single + address at either 0x80000000 or + 0xBFC00180. Software is responsible for + reading the exception code from the CPU cause + register to discover its true source. Some TLB and debug + exceptions are delivered to different vector addresses, but + these are not used currently by eCos. One of the exception codes + in the cause register indicates an external + interrupt. Additional bits in the cause + register provide a first-level decode for the interrupt source, + one of which represents an architecture defined timer. +

IA32

Exceptions are delivered via an Interrupt Descriptor Table (IDT) + which is essentially an indirection table indexed by exception + number. The IDT may be placed anywhere in memory. In PC hardware + the standard interrupt controller can be programmed to deliver + the external interrupts to a block of 16 vectors at any offset + in the IDT. There is no hardware supplied mechanism for + determining the vector taken, other than from the address jumped + to. +

ARM

All exceptions, including the FIQ and IRQ interrupts, are + vectored to locations four bytes apart starting at zero. There + is only room for one instruction here, which must immediately + jump out to handling code higher in memory. Interrupt sources + have to be decoded entirely from the interrupt controller. +

With such a wide variety of hardware approaches, it is not possible to +provide a generic mechanism for the substitution of exception vectors +directly. Therefore, eCos translates all of these mechanisms in to a +common approach that can be used by portable code on all platforms.

The mechanism implemented is to attach to each hardware vector a short +piece of trampoline code that makes an indirect jump via a table to +the actual handler for the exception. This handler is called the +Vector Service Routine (VSR) and the table is called the VSR table.

The trampoline code performs the absolute minimum processing necessary +to identify the exception source, and jump to the VSR. The VSR is then +responsible for saving the CPU state and taking the necessary actions +to handle the exception or interrupt. The entry conditions for the VSR +are as close to the raw hardware exception entry state as possible - +although on some platforms the trampoline will have had to move or +reorganize some registers to do its job.

To make this more concrete, consider how the trampoline code operates +in each of the architectures described above:

PowerPC

A separate trampoline is contained in each of the vector + locations. This code saves a few work registers away to the + special purposes registers available, loads the exception number + into a register and then uses that to index the VSR table and + jump to the VSR. The VSR is entered with some registers move to + the SPRs, and one of the data register containing the number of + the vector taken. +

MIPS

A single trampoline routine attached to the common vector reads + the exception code out of the cause register + and uses that value to index the VSR table and jump to the VSR. + The trampoline uses the two registers defined in the ABI for + kernel use to do this, one of these will contain the exception + vector number for the VSR. +

IA32

There is a separate 3 or 4 instruction trampoline pointed to by + each active IDT table entry. The trampoline for exceptions that + also have an error code pop it from the stack and put it into a + memory location. Trampolines for non-error-code exceptions just + zero the memory location. Then all trampolines push an + interrupt/exception number onto the stack, and take an indirect + jump through a precalculated offset in the VSR table. This is + all done without saving any registers, using memory-only + operations. The VSR is entered with the vector number pushed + onto the stack on top of the standard hardware saved state. +

ARM

The trampoline consists solely of the single instruction at the + exception entry point. This is an indirect jump via a location + 32 bytes higher in memory. These locations, from + 0x20 up, form the VSR table. Since each VSR + is entered in a different CPU mode + (SVC,UNDEF,ABORT,IRQ or FIQ) there has to be a + different VSR for each exception that knows how to save the CPU + state correctly. +


PrevHomeNext
Exception HandlingUpDefault Synchronous Exception Handling
\ No newline at end of file diff --git a/doc/html/ref/help-command.html b/doc/html/ref/help-command.html new file mode 100644 index 00000000..2d005368 --- /dev/null +++ b/doc/html/ref/help-command.html @@ -0,0 +1,382 @@ + + + + + + + + +help +
eCos Reference Manual
PrevNext

help

Name

help -- Display help on available commands

Description

The help command displays information about the available +RedBoot commands. If a topic is given, then the display +is restricted to information about that specific command. +

If the command has sub-commands, e.g. fis, then the topic +specific display will print additional information about the available sub-commands. +special (ICMP) packets to a specific host. These packets should be automatically +returned by that host. The command will indicate how many of these round-trips +were successfully completed. +

Examples

Show generic help. Note that the contents of this display will depend on the various configuration +options for RedBoot when it was built. +
RedBoot> help
+Manage aliases kept in FLASH memory
+   alias name [value]
+Manage machine caches
+   cache [ON | OFF]
+Display/switch console channel
+   channel [-1|<channel number>]
+Compute a 32bit checksum [POSIX algorithm] for a range of memory
+   cksum -b <location> -l <length>
+Display (hex dump) a range of memory
+   dump -b <location> [-l <length>] [-s] [-1|2|4]
+Manage FLASH images
+   fis {cmds}
+Manage configuration kept in FLASH memory
+   fconfig [-i] [-l] [-n] [-f] [-d] | [-d] nickname [value]
+Execute code at a location
+   go [-w <timeout>] [entry]
+Help about help?
+   help [<topic>]
+Set/change IP addresses
+   ip_address [-l <local_ip_address>] [-h <server_address>]
+Load a file
+   load [-r] [-v] [-d] [-h <host>] [-m {TFTP | HTTP | {x|y}MODEM -c <channel_number>}]
+        [-b <base_address>] <file_name>
+Compare two blocks of memory
+   mcmp -s <location> -d <location> -l <length> [-1|-2|-4]
+Fill a block of memory with a pattern
+   mfill -b <location> -l <length> -p <pattern> [-1|-2|-4]
+Network connectivity test
+   ping [-v] [-n <count>] [-l <length>] [-t <timeout>] [-r <rate>]
+        [-i <IP_addr>] -h <IP_addr>
+Reset the system
+   reset 
+Display RedBoot version information
+   version 
+Display (hex dump) a range of memory
+   x -b <location> [-l <length>] [-s] [-1|2|4]
+

Help about a command with sub-commands. +
RedBoot> help fis
+Manage FLASH images
+   fis {cmds}
+Create an image
+  fis create -b <mem_base> -l <image_length> [-s <data_length>]
+      [-f <flash_addr>] [-e <entry_point>] [-r <ram_addr>] [-n] <name>
+Display an image from FLASH Image System [FIS]
+  fis delete name
+Erase FLASH contents
+  fis erase -f <flash_addr> -l <length>
+Display free [available] locations within FLASH Image System [FIS]
+  fis free 
+Initialize FLASH Image System [FIS]
+  fis init [-f]
+Display contents of FLASH Image System [FIS]
+  fis list [-c] [-d]
+Load image from FLASH Image System [FIS] into RAM
+  fis load [-d] [-b <memory_load_address>] [-c] name
+Write raw data directly to FLASH
+  fis write -f <flash_addr> -b <mem_base> -l <image_length>
+


PrevHomeNext
dumpUpip_address
\ No newline at end of file diff --git a/doc/html/ref/hs7729pci.html b/doc/html/ref/hs7729pci.html new file mode 100644 index 00000000..f0f745e4 --- /dev/null +++ b/doc/html/ref/hs7729pci.html @@ -0,0 +1,523 @@ + + + + + + + + +SuperH/SH3(SH7729) Hitachi HS7729PCI +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

SuperH/SH3(SH7729) Hitachi HS7729PCI

Initial Installation Method

A ROM mode RedBoot image must be programmed +into the two EPROMs. Two files with a split version of the ROM mode +image is +provided: it is also possible to recreate these from the +redboot.bin +file, but requires the split_word.c program in +hal/sh/hs7729pci/VERSION/misc +to be built and executed with the redboot.bin +filename as sole argument.

After doing this it is advised that another ROM mode image of +RedBoot is programmed into the on-board flash, and that copy be used +for booting the board. This allows for software programmed updates of +RedBoot instead of having to reprogram the EPROMs.

  1. Program the EPROMs with RedBoot. The .lo image should +go in socket M1 and the .hi image in socket M2.

  2. Set switch SW1-6 to ON [boot from EPROM]

  3. Follow the instructions under Flash management for +updating the flash copy of RedBoot, but force the flash destination +address with +
    -f 0x80400000
    due to setting of +the SW1-6 switch.

  4. Set switch SW1-6 to OFF [boot from flash] and reboot the board. You +should now see the RedBoot banner. At this time you may want to issue +the command fis init to initialize +the flash table with the correct addresses.

Special RedBoot Commands

The exec command which allows the loading +and execution of Linux kernels +is supported for this board (see the Section called Executing Programs from RedBoot in Chapter 2). The exec parameters used for the HS7729PCI are:

-b <addr>

Parameter block address. This is normally the first +page of the kernel image and defaults to 0x8c101000

-i <addr>

Start address of initrd +image

-j <size>

Size of initrd image

-c "args"

Kernel arguments string

-m <flags>

Mount rdonly flags. If set to a non-zero value the +root partition will be mounted read-only.

-f <flags>

RAM disk flags. Should normally be 0x4000

-r <device number>

Root device specification. /dev/ram is 0x0101

-l <type>

Loader type

Finally the kernel entry address can be specified as an optional +argument. The default is 0x8c102000

On the HS7729PCI, Linux expects to be loaded at address 0x8c101000 with +the entry point at 0x8c102000. This is configurable in the kernel +using the CONFIG_MEMORY_START option.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=hs7729pci
+export ARCH_DIR=sh
+export PLATFORM_DIR=hs7729pci

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
SuperH/SH3(SH7709) Hitachi Solution Engine 7709UpSuperH/SH3(SH77X9) Hitachi Solution Engine 77X9
\ No newline at end of file diff --git a/doc/html/ref/installation-and-testing.html b/doc/html/ref/installation-and-testing.html new file mode 100644 index 00000000..7c0d73f4 --- /dev/null +++ b/doc/html/ref/installation-and-testing.html @@ -0,0 +1,1245 @@ + + + + + + + + +Installation and Testing +
eCos Reference Manual
PrevNext

Chapter 5. Installation and Testing

Table of Contents
AM3x/MN103E010 Matsushita MN103E010 (AM33/2.0) ASB2305 Board
ARM/ARM7 ARM Evaluator7T
ARM/ARM7+ARM9 ARM Integrator
ARM/ARM7+ARM9 ARM PID Board and EPI Dev7+Dev9
ARM/ARM7 Atmel AT91 Evaluation Board (EB40)
ARM/ARM7 Cirrus Logic EP7xxx (EDB7211, EDB7212, EDB7312)
ARM/ARM9 Agilent AAED2000
ARM/ARM9 Altera Excalibur
ARM/StrongARM(SA110) Intel EBSA 285
ARM/StrongARM(SA1100) Intel Brutus
ARM/StrongARM(SA1100) Intel SA1100 Multimedia Board
ARM/StrongARM(SA1110) Intel SA1110 (Assabet)
ARM/StrongARM(SA11X0) Bright Star Engineering commEngine and nanoEngine
ARM/StrongARM(SA11X0) Compaq iPAQ PocketPC
ARM/StrongARM(SA11X0) Intrinsyc CerfCube
ARM/Xscale Cyclone IQ80310
ARM/Xscale Intel IQ80321
CalmRISC/CalmRISC16 Samsung CalmRISC16 Core Evaluation Board
CalmRISC/CalmRISC32 Samsung CalmRISC32 Core Evaluation Board
FRV/FRV400 Fujitsu FR-V 400 (MB-93091)
IA32/x86 x86-Based PC
MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Atlas Board
MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Malta Board
MIPS/RM7000 PMC-Sierra Ocelot
MIPS/VR4375 NEC DDB-VRC4375
PowerPC/MPC860T Analogue & Micro PowerPC 860T
PowerPC/MPC8XX Motorola MBX
SuperH/SH3(SH7708) Hitachi EDK7708
SuperH/SH3(SH7709) Hitachi Solution Engine 7709
SuperH/SH3(SH7729) Hitachi HS7729PCI
SuperH/SH3(SH77X9) Hitachi Solution Engine 77X9
SuperH/SH4(SH7751) Hitachi Solution Engine 7751

AM3x/MN103E010 Matsushita MN103E010 (AM33/2.0) ASB2305 Board

Initial Installation

Unless a pre-programmed system flash module is available to be plugged into a new board, +RedBoot must be installed with the aid of a JTAG interface unit. To achieve this, the RAM mode +RedBoot must be loaded directly into RAM by JTAG and started, and then that +must be used to store the ROM mode RedBoot into the boot PROM.

These instructions assume that you have binary images of the RAM-based and boot PROM-based +RedBoot images available.

Preparing to use the JTAG debugger

The JTAG debugger will also need setting up:

  1. Install the JTAG debugger software (WICE103E) on a PC running Windows (WinNT is +probably the best choice for this) in “C:/PanaX”.

  2. Install the Matsushita provided “project” into the +“C:/Panax/wice103e/prj” directory.

  3. Install the RedBoot image files into the “C:/Panax/wice103e/prj” +directory under the names redboot.ram and redboot.prom.

  4. Make sure the PC's BIOS has the parallel port set to full bidirectional +mode.

  5. Connect the JTAG debugger to the PC's parallel port.

  6. Connect the JTAG debugger to the board.

  7. Set the switch on the front of the board to boot from “boot +PROM”.

  8. Power up the JTAG debugger and then power up the board.

  9. Connect the board's Debug Serial port to a computer by a null modem cable.

  10. Start minicom or some other serial communication software and set for 115200 baud, +1-N-8 with hardware (RTS/CTS) flow control.

Loading the RAM-based RedBoot via JTAG

To perform the first half of the operation, the following steps should be followed:

  1. Start the JTAG debugger software.

  2. Run the following commands at the JTAG debugger's prompt to set up the MMU registers on the +CPU.

    ed 0xc0002000, 0x12000580
    +
    +ed 0xd8c00100, 0x8000fe01
    +ed 0xd8c00200, 0x21111000
    +ed 0xd8c00204, 0x00100200
    +ed 0xd8c00208, 0x00000004
    +
    +ed 0xd8c00110, 0x8400fe01
    +ed 0xd8c00210, 0x21111000
    +ed 0xd8c00214, 0x00100200
    +ed 0xd8c00218, 0x00000004
    +
    +ed 0xd8c00120, 0x8600ff81
    +ed 0xd8c00220, 0x21111000
    +ed 0xd8c00224, 0x00100200
    +ed 0xd8c00228, 0x00000004
    +
    +ed 0xd8c00130, 0x8680ff81
    +ed 0xd8c00230, 0x21111000
    +ed 0xd8c00234, 0x00100200
    +ed 0xd8c00238, 0x00000004
    +
    +ed 0xd8c00140, 0x9800f801
    +ed 0xd8c00240, 0x00140000
    +ed 0xd8c00244, 0x11011100
    +ed 0xd8c00248, 0x01000001
    +
    +ed 0xda000000, 0x55561645
    +ed 0xda000004, 0x000003c0
    +ed 0xda000008, 0x9000fe01
    +ed 0xda00000c, 0x9200fe01
    +ed 0xda000000, 0xa89b0654
  3. Run the following commands at the JTAG debugger's prompt to tell it what regions of the CPU's +address space it can access:

    ex 0x80000000,0x81ffffff,/mexram
    +ex 0x84000000,0x85ffffff,/mexram
    +ex 0x86000000,0x867fffff,/mexram
    +ex 0x86800000,0x87ffffff,/mexram
    +ex 0x8c000000,0x8cffffff,/mexram
    +ex 0x90000000,0x93ffffff,/mexram
  4. Instruct the debugger to load the RAM RedBoot image into RAM:

    _pc=90000000
    +u_pc
    +rd redboot.ram,90000000
  5. Load the boot PROM RedBoot into RAM:

    rd redboot.prom,91020000
  6. Start RedBoot in RAM:

    g

    Note that RedBoot may take some time to start up, as it will attempt to query a BOOTP or DHCP +server to try and automatically get an IP address for the board. Note, however, that it should send +a plus over the serial port immediately, and the 7-segment LEDs should display “rh +8”.

Loading the boot PROM-based RedBoot via the RAM mode RedBoot

Once the RAM mode RedBoot is up and running, it can be communicated with by way of the serial +port. Commands can now be entered directly to RedBoot for flashing the boot PROM.

  1. Instruct RedBoot to initialise the boot PROM:

    RedBoot> fi init
  2. Write the previously loaded redboot.prom image into the boot PROM:

    RedBoot> fi write -f 0x80000000 -b 0x91020000 -l 0x00020000
  3. Check that RedBoot has written the image:

    RedBoot> dump -b 0x91020000
    +RedBoot> dump -b 0x80000000

    Barring the difference in address, the two dumps should be the same.

  4. Close the JTAG software and power-cycle the board. The RedBoot banners should be +displayed again over the serial port, followed by the RedBoot prompt. The boot PROM-based RedBoot +will now be running.

  5. Power off the board and unjumper ST18 to write-protect the contents of the boot +PROM. Then power the board back up.

  6. Run the following command to initialise the system flash:

    RedBoot> fi init

    Then program the system flash based RedBoot into the system flash:

    RedBoot> load -r -b %{FREEMEMLO} redboot_FLASH.bin
    +RedBoot> fi write -f 0x84000000 -b %{FREEMEMLO} -l 0x00020000
  7. A similar sequence of commands can be used to program the boot PROM when RedBoot has been +booted from an image stored in the system flash.

    RedBoot> load -r -b %{FREEMEMLO} /tftpboot/redboot_ROM.bin
    +RedBoot> fi write -f 0x80000000 -b %{FREEMEMLO} -l 0x00020000

    See the Section called Persistent State Flash-based Configuration and Control in Chapter 2 for details on configuring the RedBoot in +general, and also the Section called Flash Image System (FIS) in Chapter 2 for more details on programming the system +flash.

Additional Commands

The exec command which allows the loading and execution of +Linux kernels, is supported for this architecture (see the Section called Executing Programs from RedBoot in Chapter 2). The +exec parameters used for ASB2305 board are:

-w <time>

Wait time in seconds before starting kernel

-c "params"

Parameters passed to kernel

<addr>

Kernel entry point, defaulting to the entry point of the last image +loaded

The parameter string is stored in the on-chip memory at location 0x8C001000, and is prefixed +by “cmdline:” if it was supplied.

Memory Maps

RedBoot sets up the following memory map on the ASB2305 board.

Physical Address Range   Description
+-----------------------  -----------
+0x80000000 - 0x9FFFFFFF  Cached Region
+0x80000000 - 0x81FFFFFF  Boot PROM
+0x84000000 - 0x85FFFFFF  System Flash
+0x86000000 - 0x86007FFF  64Kbit Sys Config EEPROM
+0x86F90000 - 0x86F90003  4x 7-segment LEDs
+0x86FA0000 - 0x86FA0003  Software DIP Switches
+0x86FB0000 - 0x86FB001F  PC16550 Debug Serial Port
+0x8C000000 - 0x8FFFFFFF  On-Chip Memory (repeated 16Kb SRAM)
+0x90000000 - 0x93FFFFFF  SDRAM
+0x98000000 - 0x9BFFFFFF  Paged PCI Memory Space (64Mb)
+0x9C000000 - 0x9DFFFFFF  PCI Local SRAM (32Mb)
+0x9E000000 - 0x9E03FFFF  PCI I/O Space
+0x9E040000 - 0x9E0400FF  AM33-PCI Bridge Registers
+0x9FFFFFF4 - 0x9FFFFFF7  PCI Memory Page Register
+0x9FFFFFF8 - 0x9FFFFFFF  PCI Config Registers
+0xA0000000 - 0xBFFFFFFF  Uncached Mirror Region
+0xC0000000 - 0xDFFFFFFF  CPU Control Registers

The ASB2305 HAL makes use of the on-chip memory in the following way:

0x8C000000 - 0x8C0000FF  hal_vsr_table
+0x8C000100 - 0x8C0001FF  hal_virtual_vector_table
+0x8C001000 -             Linux command line (RedBoot exec command)
+           - 0x8C003FFF  Emergency DoubleFault Exception Stack

Currently the CPU's interrupt table lies at the beginning of the RedBoot image, which must +therefore be aligned to a 0xFF000000 mask.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=asb2305
+export ARCH_DIR=mn10300
+export PLATFORM_DIR=asb2305

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
Updating RedBootUpARM/ARM7 ARM Evaluator7T
\ No newline at end of file diff --git a/doc/html/ref/installing-redboot.html b/doc/html/ref/installing-redboot.html new file mode 100644 index 00000000..86f5e29e --- /dev/null +++ b/doc/html/ref/installing-redboot.html @@ -0,0 +1,179 @@ + + + + + + + + +Installing RedBoot +
eCos Reference Manual
PrevChapter 1. Getting Started with RedBootNext

Installing RedBoot

To install the RedBoot +package, follow the procedures detailed in the accompanying README.

Although there are other possible configurations, RedBoot is usually +run from the target platform’s flash boot sector or boot ROM, and is +designed to run when your system is initially powered on. The method used +to install the RedBoot image into non-volatile storage varies from platform +to platform. In general, it requires that the image be programmed into flash +in situ or programmed into the flash or ROM using a device programmer. In +some cases this will be done at manufacturing time; the platform being delivered +with RedBoot already in place. In other cases, you will have to program RedBoot +into the appropriate device(s) yourself. Installing to flash in situ may require +special cabling or interface devices and software provided by the board manufacturer. +The details of this installation process for a given platform will be found +in Installation and Testing. Once installed, user-specific configuration options +may be applied, using the fconfig command, +providing that persistent data storage in flash is present in the relevant +RedBoot version. See the Section called Configuring the RedBoot Environment +for details.


PrevHomeNext
Getting Started with RedBootUpUser Interface
\ No newline at end of file diff --git a/doc/html/ref/integrator.html b/doc/html/ref/integrator.html new file mode 100644 index 00000000..c52dfb80 --- /dev/null +++ b/doc/html/ref/integrator.html @@ -0,0 +1,493 @@ + + + + + + + + +ARM/ARM7+ARM9 ARM Integrator +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/ARM7+ARM9 ARM Integrator

Quick download instructions

Here are quick start instructions for downloading the prebuilt Redboot +image:

Memory Maps

RedBoot sets up the following memory map on the Integrator board.

+

ARM7TDMI
+--------
+
+Physical Address Range  C B  Description
+----------------------- - -  -----------
+0x00000000 - 0x0007ffff N N  SSRAM
+0x00080000 - 0x0fffffff N N  SDRAM (depends on part fitted)
+0x10000000 - 0x1fffffff N N  System control and peripheral registers
+0x20000000 - 0x23ffffff N N  Boot ROM (contains boot Monitor)
+0x24000000 - 0x27ffffff N N  FLASH ROM (contains RedBoot)
+0x28000000 - 0x2bffffff N N  SSRAM echo area
+0x40000000 - 0x5fffffff N N  PCI Memory access windows
+0x60000000 - 0x60ffffff N N  PCI IO access window
+0x61000000 - 0x61ffffff N N  PCI config space window
+0x62000000 - 0x6200ffff N N  PCI bridge register window
+0x80000000 - 0x8fffffff N N  SDRAM echo area (used for PCI accesses)
+
+
+ARM966E
+-------
+
+Physical Address Range  C B  Description
+----------------------- - -  -----------
+0x00000000 - 0x000fffff N N  SSRAM
+0x00100000 - 0x0fffffff N N  SDRAM (depends on part fitted)
+0x10000000 - 0x1fffffff N N  System control and peripheral registers
+0x20000000 - 0x23ffffff N N  Boot ROM (contains boot Monitor)
+0x24000000 - 0x27ffffff N N  FLASH ROM (contains RedBoot)
+0x28000000 - 0x2bffffff N N  SSRAM echo area
+0x40000000 - 0x5fffffff N N  PCI Memory access windows
+0x60000000 - 0x60ffffff N N  PCI IO access window
+0x61000000 - 0x61ffffff N N  PCI config space window
+0x62000000 - 0x6200ffff N N  PCI bridge register window
+0x80000000 - 0x8fffffff N N  SDRAM echo area (used for PCI accesses)

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=integrator
+export ARCH_DIR=arm
+export PLATFORM_DIR=integrator

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/ARM7 ARM Evaluator7TUpARM/ARM7+ARM9 ARM PID Board and EPI Dev7+Dev9
\ No newline at end of file diff --git a/doc/html/ref/io-eth-call-graph.html b/doc/html/ref/io-eth-call-graph.html new file mode 100644 index 00000000..776596dc --- /dev/null +++ b/doc/html/ref/io-eth-call-graph.html @@ -0,0 +1,404 @@ + + + + + + + + +Calling graph for Transmission and Reception +
eCos Reference Manual
PrevChapter 46. Generic Ethernet Device DriverNext

Calling graph for Transmission and Reception

It may be worth clarifying further the flow of control in the transmit and +receive cases, where the hardware driver does use interrupts and so DSRs to +tell the “foreground” when something asynchronous has occurred.

Transmission

  1. Some foreground task such as the application, SNMP “daemon”, +DHCP management thread or whatever, calls into network stack to send a +packet, or the stack decides to send a packet in response to incoming +traffic such as a “ping” or ARP request.

  2. The driver calls the +HRDWR_can_send() +function in the hardware driver.

  3. HRDWR_can_send() +returns the number of available "slots" in which it +can store a pending transmit packet. +If it cannot send at this time, the packet is queued outside the +hardware driver for later; in this case, the hardware is already busy +transmitting, so expect an interrupt as described below for completion +of the packet currently outgoing.

  4. If it can send right now, HRDWR_send() is called. +HRDWR_send() copies the +data into special hardware buffers, or instructs the hardware to +“send that.” It also remembers the key that is associated with +this tx request.

  5. These calls return … time passes …

  6. Asynchronously, the hardware makes an interrupt to say +“transmit is done.” +The ISR quietens the interrupt source in the hardware and +requests that the associated DSR be run.

  7. The DSR calls (or is) the +eth_drv_dsr() function in the generic driver.

  8. eth_drv_dsr() in the generic driver awakens the +“Network Delivery Thread” which calls the deliver function +HRDWR_deliver() in the driver.

  9. The deliver function realizes that a transmit request has completed, +and calls the callback tx-done function +(sc->funs->eth_drv->tx_done)() +with the same key that it remembered for this tx.

  10. The callback tx-done function +uses the key to find the resources associated with +this transmit request; thus the stack knows that the transmit has +completed and its resources can be freed.

  11. The callback tx-done function +also enquires whether HRDWR_can_send() now says +“yes, we can send” +and if so, dequeues a further transmit request +which may have been queued as described above. If so, then +HRDWR_send() copies the data into the hardware buffers, or +instructs the hardware to "send that" and remembers the new key, as above. +These calls then all return to the “Network Delivery Thread” +which then sleeps, awaiting the next asynchronous event.

  12. All done …

Receive

  1. Asynchronously, the hardware makes an interrupt to say +“there is ready data in a receive buffer.” +The ISR quietens the interrupt source in the hardware and +requests that the associated DSR be run.

  2. The DSR calls (or is) the +eth_drv_dsr() function in the generic driver.

  3. eth_drv_dsr() in the generic driver awakens the +“Network Delivery Thread” which calls the deliver function +HRDWR_deliver() in the driver.

  4. The deliver function realizes that there is data ready and calls +the callback receive function +(sc->funs->eth_drv->recv)() +to tell it how many bytes to prepare for.

  5. The callback receive function allocates memory within the stack +(eg. MBUFs in BSD/Unix style stacks) and prepares +a set of scatter-gather buffers that can +accommodate the packet.

  6. It then calls back into the hardware driver routine +HRDWR_recv(). +HRDWR_recv() must copy the data from the +hardware's buffers into the scatter-gather buffers provided, and return.

  7. The network stack now has the data in-hand, and does with it what it will. +This might include recursive calls to transmit a response packet. +When this all is done, these calls return, and the +“Network Delivery Thread” +sleeps once more, awaiting the next asynchronous event.


PrevHomeNext
Upper Layer FunctionsUpSNMP
\ No newline at end of file diff --git a/doc/html/ref/io-eth-drv-api-funcs.html b/doc/html/ref/io-eth-drv-api-funcs.html new file mode 100644 index 00000000..39983e4a --- /dev/null +++ b/doc/html/ref/io-eth-drv-api-funcs.html @@ -0,0 +1,942 @@ + + + + + + + + +Review of the functions +
eCos Reference Manual
PrevChapter 46. Generic Ethernet Device DriverNext

Review of the functions

Now a brief review of the functions. This discussion will use generic +names for the functions — your driver should use hardware-specific +names to maintain uniqueness against any other drivers.

Init function

static bool DRV_HDWR_init(struct cyg_netdevtab_entry *tab)
+This function is called as part of system initialization. Its primary +function is to decide if the hardware (as indicated via +tab->device_instance) +is working and if the interface needs to be made +available in the system. If this is the case, this function needs to +finish with a call to the ethernet driver function: +
    struct eth_drv_sc *sc = (struct eth_drv_sc *)tab->device_instance;
+    ....initialization code....
+    // Initialize upper level driver
+    (sc->funs->eth_drv->init)( sc, unsigned char *enaddr );
+where enaddr +is a pointer to the ethernet station address for this unit, to inform +the stack of this device's readiness and availability.

Start function

static void
+HRDWR_start(struct eth_drv_sc *sc, unsigned char *enaddr, int flags)
+This function is called, perhaps much later than system initialization +time, when the system (an application) is ready for the interface to +become active. The purpose of this function is to set up the hardware +interface to start accepting packets from the network and be able to +send packets out. The receiver hardware should not be enabled prior to +this call.

Control function

static int
+HRDWR_control(
+	struct eth_drv_sc *sc, unsigned long key,
+	void *data, int len)
+This function is used to perform low-level “control” +operations on the +interface. These operations would typically be initiated via +ioctl() calls in the BSD +stack, and would be anything that might require the hardware setup to +change (i.e. cannot be performed totally by the +platform-independent layers).

The key parameter selects the operation, and the +data and len params point describe, +as required, some data for the operation in question.

Available Operations:

ETH_DRV_SET_MAC_ADDRESS

This operation sets the ethernet station address (ESA or MAC) for the +device. Normally this address is kept in non-volatile memory and is +unique in the world. This function must at least set the interface to +use the new address. It may also update the NVM as appropriate.

ETH_DRV_GET_IF_STATS_UD, ETH_DRV_GET_IF_STATS

These acquire a set of statistical counters from the interface, and write +the information into the memory pointed to by data. +The “UD” variant explicitly instructs the driver to acquire +up-to-date values. This is a separate option because doing so may take +some time, depending on the hardware.

The definition of the data structure is in +cyg/io/eth/eth_drv_stats.h.

This call is typically made by SNMP, see Chapter 47.

ETH_DRV_SET_MC_LIST

This entry instructs the device to set up multicast packet filtering +to receive only packets addressed to the multicast ESAs in the list pointed +to by data.

The format of the data is a 32-bit count of the ESAs in the list, followed +by packed bytes which are the ESAs themselves, thus: +
#define ETH_DRV_MAX_MC 8
+struct eth_drv_mc_list {
+    int len;
+    unsigned char addrs[ETH_DRV_MAX_MC][ETHER_ADDR_LEN];
+};

ETH_DRV_SET_MC_ALL

This entry instructs the device to receive all multicast packets, and +delete any explicit filtering which had been set up.

This function should return zero if the specified operation was +completed successfully. It should return non-zero if the operation +could not be performed, for any reason.

Send function

struct eth_drv_sg {
+    CYG_ADDRESS  buf;
+    CYG_ADDRWORD len;
+};
+
+static void
+HRDWR_send(
+	struct eth_drv_sc *sc,
+	struct eth_drv_sg *sg_list, int sg_len,
+        int total_len, unsigned long key)
+This function is used to send a packet of data to the network. It is +the responsibility of this function to somehow hand the data over to the +hardware interface. This will most likely require copying, but just the +address/length values could be used by smart hardware.

Once the data has been successfully sent by the interface (or if an +error occurs), the driver should call +(sc->funs->eth_drv->tx_done)() +(see the Section called Callback Tx-Done function) +using the specified key. +Only then will the upper layers release the resources +for that packet and start another transmission.

Note: In future, this function may be extended so that the data need not be +copied by having the function return a “disposition” code +(done, send pending, etc). At this point, you should move the data to some +“safe” location before returning.

Deliver function

static void
+HRDWR_deliver(struct eth_drv_sc *sc)
+This function is called from the “Network Delivery Thread” in +order to let the device driver do the time-consuming work associated with +receiving a packet — usually copying the entire packet from the +hardware or a special memory location into the network stack's memory.

After handling any outstanding incoming packets or pending transmission +status, it can unmask the device's interrupts, and free any relevant +resources so it can process further packets.

It will be called when the interrupt handler for the network device +has called +
    eth_drv_dsr( vector, count, (cyg_addrword_t)sc );
+to alert the system that “something requires attention.” +This eth_drv_dsr() call must occur from within the +interrupt handler's DSR (not the ISR) or actually be +the DSR, whenever it is determined that +the device needs attention from the foreground. The third parameter +(data in the prototype of +eth_drv_dsr() must +be a valid struct eth_drv_sc pointer sc.

The reason for this slightly convoluted train of events is to keep the DSR +(and ISR) execution time as short as possible, so that other activities of +higher priority than network servicing are not denied the CPU by network +traffic.

To deliver a newly-received packet into the network stack, the deliver +routine must call +
(sc->funs->eth_drv->recv)(sc, len);
+which will in turn call the receive function, which we talk about next. +See also
the Section called Callback Receive function below.


PrevHomeNext
Generic Ethernet Device DriverUpUpper Layer Functions
\ No newline at end of file diff --git a/doc/html/ref/io-eth-drv-generic.html b/doc/html/ref/io-eth-drv-generic.html new file mode 100644 index 00000000..51a703d2 --- /dev/null +++ b/doc/html/ref/io-eth-drv-generic.html @@ -0,0 +1,161 @@ + + + + + + + + +Ethernet Device Drivers +
eCos Reference Manual
PrevNext


PrevHomeNext
DNS Generic Ethernet Device Driver
\ No newline at end of file diff --git a/doc/html/ref/io-eth-drv-generic1.html b/doc/html/ref/io-eth-drv-generic1.html new file mode 100644 index 00000000..2177b004 --- /dev/null +++ b/doc/html/ref/io-eth-drv-generic1.html @@ -0,0 +1,575 @@ + + + + + + + + +Generic Ethernet Device Driver +
eCos Reference Manual
PrevNext

Chapter 46. Generic Ethernet Device Driver

Generic Ethernet API

This file provides a simple description of how to write a low-level, +hardware dependent ethernet driver.

There is a high-level driver (which is only code — with no state of +its own) that is part of the stack. There will be one or more low-level +drivers tied to the actual network hardware. Each of these drivers +contains one or more driver instances. The intent is that the +low-level drivers know nothing of the details of the stack that will be +using them. Thus, the same driver can be used by the +eCos +supported +TCP/IP +stack, +RedBoot, +or any other, with no changes.

A driver instance is contained within a +struct eth_drv_sc: +
struct eth_hwr_funs {
+    // Initialize hardware (including startup)
+    void (*start)(struct eth_drv_sc *sc,
+                  unsigned char *enaddr,
+                  int flags);
+    // Shut down hardware
+    void (*stop)(struct eth_drv_sc *sc);
+    // Device control (ioctl pass-thru)
+    int  (*control)(struct eth_drv_sc *sc,
+                    unsigned long key,
+                    void *data,
+                    int   data_length);
+    // Query - can a packet be sent?
+    int  (*can_send)(struct eth_drv_sc *sc);
+    // Send a packet of data
+    void (*send)(struct eth_drv_sc *sc,
+                 struct eth_drv_sg *sg_list,
+                 int sg_len,
+                 int total_len,
+                 unsigned long key);
+    // Receive [unload] a packet of data
+    void (*recv)(struct eth_drv_sc *sc,
+                 struct eth_drv_sg *sg_list,
+                 int sg_len);
+    // Deliver data to/from device from/to stack memory space
+    // (moves lots of memcpy()s out of DSRs into thread)
+    void (*deliver)(struct eth_drv_sc *sc);
+    // Poll for interrupts/device service
+    void (*poll)(struct eth_drv_sc *sc);
+    // Get interrupt information from hardware driver
+    int (*int_vector)(struct eth_drv_sc *sc);
+    // Logical driver interface
+    struct eth_drv_funs *eth_drv, *eth_drv_old;
+};
+
+struct eth_drv_sc {
+    struct eth_hwr_funs *funs;
+    void                *driver_private;
+    const char          *dev_name;
+    int                  state;
+    struct arpcom        sc_arpcom; /* ethernet common */
+};

There is another structure which is used to communicate with the rest of +the stack: +
struct eth_drv_funs {
+    // Logical driver - initialization
+    void (*init)(struct eth_drv_sc *sc, 
+                 unsigned char *enaddr);
+    // Logical driver - incoming packet notifier
+    void (*recv)(struct eth_drv_sc *sc, 
+                 int total_len);
+    // Logical driver - outgoing packet notifier
+    void (*tx_done)(struct eth_drv_sc *sc, 
+                    CYG_ADDRESS key, 
+                    int status);
+};
+Your driver does not create an instance of this +structure. It is provided for driver code to use in the +eth_drv member of the function record. +Its usage is described below in
the Section called Upper Layer Functions

One more function completes the API with which your driver communicates +with the rest of the stack: +
extern void eth_drv_dsr(cyg_vector_t vector,
+                        cyg_ucount32 count,
+                        cyg_addrword_t data);

This function is designed so that it can be registered as the DSR for your +interrupt handler. It will awaken the +“Network Delivery Thread” +to call your deliver routine. See the Section called Deliver function.

You create an instance of struct eth_drv_sc +using the +ETH_DRV_SC() +macro which +sets up the structure, including the prototypes for the functions, etc. +By doing things this way, if the internal design of the ethernet drivers +changes (e.g. we need to add a new low-level implementation function), +existing drivers will no longer compile until updated. This is much +better than to have all of the definitions in the low-level drivers +themselves and have them be (quietly) broken if the interfaces change.

The “magic” +which gets the drivers started (and indeed, linked) is +similar to what is used for the I/O subsystem. +This is done using the +NETDEVTAB_ENTRY() +macro, which defines an initialization function +and the basic data structures for the low-level driver.

  typedef struct cyg_netdevtab_entry {
+      const char        *name;
+      bool             (*init)(struct cyg_netdevtab_entry *tab);
+      void              *device_instance;
+      unsigned long     status;
+  } cyg_netdevtab_entry_t;
+The device_instance +entry here would point to the struct eth_drv_sc +entry previously defined. This allows the network driver +setup to work with any class of driver, not just ethernet drivers. In +the future, there will surely be serial PPP +drivers, etc. These will +use the NETDEVTAB_ENTRY() +setup to create the basic driver, but they will +most likely be built on top of other high-level device driver layers.

To instantiate itself, and connect it to the system, +a hardware driver will have a template +(boilerplate) which looks something like this: +
#include <cyg/infra/cyg_type.h>
+#include <cyg/hal/hal_arch.h>
+#include <cyg/infra/diag.h>
+#include <cyg/hal/drv_api.h>
+#include <cyg/io/eth/netdev.h>
+#include <cyg/io/eth/eth_drv.h>
+
+ETH_DRV_SC(DRV_sc,
+           0,             // No driver specific data needed
+           "eth0",        // Name for this interface
+           HRDWR_start,
+           HRDWR_stop,
+           HRDWR_control,
+           HRDWR_can_send
+           HRDWR_send,
+           HRDWR_recv,
+           HRDWR_deliver,
+           HRDWR_poll,
+           HRDWR_int_vector
+);
+
+NETDEVTAB_ENTRY(DRV_netdev, 
+                "DRV", 
+                DRV_HRDWR_init, 
+                &DRV_sc);

This, along with the referenced functions, completely define the driver.

Note: If one needed the same low-level driver to handle +multiple similar hardware interfaces, you would need multiple invocations +of the +ETH_DRV_SC()/NETDEVTAB_ENTRY() +macros. You would add a pointer +to some instance specific data, e.g. containing base addresses, interrupt +numbers, etc, where the +
	0, // No driver specific data
+is currently.


PrevHomeNext
Ethernet Device DriversUpReview of the functions
\ No newline at end of file diff --git a/doc/html/ref/io-eth-drv-upper-api.html b/doc/html/ref/io-eth-drv-upper-api.html new file mode 100644 index 00000000..05eef29f --- /dev/null +++ b/doc/html/ref/io-eth-drv-upper-api.html @@ -0,0 +1,326 @@ + + + + + + + + +Upper Layer Functions +
eCos Reference Manual
PrevChapter 46. Generic Ethernet Device DriverNext

Upper Layer Functions

Upper layer functions are called by drivers to deliver received packets +or transmission completion status back up into the network stack.

These functions are defined by the hardware independent upper layers of +the networking driver support. They are present to hide the interfaces +to the actual networking stack so that the hardware drivers may +be used by different network stack implementations without change.

These functions require a pointer to a struct eth_drv_sc +which describes the interface at a logical level. It is assumed that the +low level hardware driver will keep track of this pointer so +it may be passed “up” as appropriate.

Callback Init function

void (sc->funs->eth_drv->init)(
+		struct eth_drv_sc *sc, unsigned char *enaddr)
+This function establishes the device at initialization time. +It should be called once per device instance only, from the +initialization function, if all is well +(see the Section called Init function). +The hardware should be totally initialized +(not “started”) +when this function is called.


PrevHomeNext
Review of the functionsUpCalling graph for Transmission and Reception
\ No newline at end of file diff --git a/doc/html/ref/io-how-to-write-a-driver.html b/doc/html/ref/io-how-to-write-a-driver.html new file mode 100644 index 00000000..82be9e42 --- /dev/null +++ b/doc/html/ref/io-how-to-write-a-driver.html @@ -0,0 +1,1154 @@ + + + + + + + + +How to Write a Driver +
eCos Reference Manual
PrevNext

Chapter 17. How to Write a Driver

A device driver is nothing more than a +named entity that supports the basic I/O functions - read, write, get +config, and set config. Typically a device driver also uses and +manages interrupts from the device. While the interface is generic and +device driver independent, the actual driver implementation is +completely up to the device driver designer.

That said, the reason for using a device driver is to provide +access to a device from application code in as general purpose a +fashion as reasonable. Most driver writers are also concerned with +making this access as simple as possible while being as efficient +as possible.

Most device drivers are concerned with the movement of information, +for example data bytes along a serial interface, or packets in a +network. In order to make the most efficient use of system resources, +interrupts are used. This will allow other application processing +to take place while the data transfers are under way, with interrupts +used to indicate when various events have occurred. For example, +a serial port typically generates an interrupt after a character +has been sent “down the wire” and the interface +is ready for another. It makes sense to allow further application +processing while the data is being sent since this can take quite +a long time. The interrupt can be used to allow the driver to send +a character as soon as the current one is complete, without any +active participation by the application code.

The main building blocks for device drivers are found in the +include file: <cyg/io/devtab.h>

All device drivers in eCos are described +by a device table entry, using the cyg_devtab_entry_t type. +The entry should be created using the DEVTAB_ENTRY() macro, +like this:

DEVTAB_ENTRY(l, name, dep_name, handlers, init, lookup, priv)

Arguments

l

The "C" label for this device table entry.

name

The "C" string name for the device.

dep_name

For a layered device, the "C" string name of the + device this device is built upon.

handlers

A pointer to the I/O function "handlers" (see below).

init

A function called when eCos is initialized. This + function can query the device, setup hardware, etc.

lookup

A function called when cyg_io_lookup() is called + for this device.

priv

A placeholder for any device specific data + required by the driver.

The interface to the driver is through the handlers field. This is a pointer to +a set of functions which implement the various cyg_io_XXX() +routines. This table is defined by the macro:

DEVIO_TABLE(l, write, read, get_config, set_config)

Arguments

l

The "C" label for this table of handlers.

write

The function called as a result of + cyg_io_write().

read

The function called as a result of + cyg_io_read().

get_config

The function called as a result of + cyg_io_get_config().

set_config

The function called as a result of + cyg_io_set_config().

When eCos is initialized (sometimes called +“boot” time), the init() function is called +for all devices in the system. The init() function is +allowed to return an error in which case the device will be placed +“off line” and all I/O requests to that device will be +considered in error.

The lookup() function is called whenever +the cyg_io_lookup() function +is called with this device name. The lookup function may cause the device +to come “on line” which would then allow I/O +operations to proceed. Future versions of the I/O system +will allow for other states, including power saving modes, +etc.

How to Write a Serial Hardware Interface Driver

The standard serial driver supplied with +eCos is structured as a hardware independent +portion and a hardware dependent interface module. To add support for +a new serial port, the user should be able to use the existing +hardware independent portion and just add their own interface driver which handles the details of the +actual device. The user should have no need to change the hardware +independent portion.

The interfaces used by the serial driver and serial implementation +modules are contained in the file <cyg/io/serial.h>

DevTab Entry

The interface module contains the devtab entry (or entries +if a single module supports more than one interface). This entry +should have the form:

DEVTAB_ENTRY(<<module_name>>, 
+             <<device_name>>,
+             0,
+             &serial_devio, 
+             <<module_init>>, 
+             <<module_lookup>>,
+             &<<serial_channel>>
+            );

Serial Channel Structure

Each serial device must have a “serial channel”. +This is a set of data which describes all operations on the device. +It also contains buffers, etc., if the device is to be buffered. +The serial channel is created by the macro:

SERIAL_CHANNEL_USING_INTERRUPTS(l, funs, dev_priv, baud,stop, parity, word_length,
+                                flags, out_buf, out_buflen, in_buf, in_buflen)

If either buffer length is zero, no buffering will take place +in that direction and only polled mode functions will be used.

The interface from the hardware independent driver into the +hardware interface module is contained in the funs table. +This is defined by the macro:

Serial Functions Structure

SERIAL_FUNS(l, putc, getc, set_config, start_xmit, stop_xmit)

Arguments

l

The "C" label for this structure.

putc

bool (*putc)(serial_channel *priv, unsigned char + c)

This function sends one character to the interface. It should + return true if the character is actually consumed. It should + return false if there is no space in the interface +

getc

unsigned char (*getc)(serial_channel *priv)

This function fetches one character from the interface. It will + be only called in a non-interrupt driven mode, thus it should + wait for a character by polling the device until ready. +

set_config

bool (*set_config)(serial_channel + *priv,cyg_serial_info_t *config)

This function is used to configure the port. It should return + true if the hardware is updated to match the desired + configuration. It should return false if the port cannot + support some parameter specified by the given + configuration. E.g. selecting 1.5 stop bits and 8 data bits is + invalid for most serial devices and should not be allowed. +

start_xmit

void (*start_xmit)(serial_channel *priv)

In interrupt mode, turn on the transmitter and allow for + transmit interrupts. +

stop_xmit

void (*stop_xmit)(serial_channel *priv)

In interrupt mode, turn off the transmitter.

Callbacks

The device interface module can execute functions in the +hardware independent driver via chan->callbacks. +These functions are available:

void (*serial_init)( serial_channel *chan )

This function is used to initialize the serial channel. It +is only required if the channel is being used in interrupt +mode.

void (*xmt_char)( serial_channel *chan )

This function would be called from an interrupt handler after a +transmit interrupt indicating that additional characters may be +sent. The upper driver will call the putc +function as appropriate to send more data to the device.

void (*rcv_char)( serial_channel *chan, unsigned char c )

This function is used to tell the driver that a character has arrived +at the interface. This function is typically called from the interrupt +handler.

Furthermore, if the device has a FIFO it should require the hardware +independent driver to provide block transfer functionality (driver CDL +should include "implements +CYGINT_IO_SERIAL_BLOCK_TRANSFER"). In that case, the following +functions are available as well:

bool (*data_xmt_req)(serial_channel *chan,
+                     int space,
+                     int* chars_avail,
+                     unsigned char** chars)
+void (*data_xmt_done)(serial_channel *chan)

Instead of calling xmt_char() to get a single +character for transmission at a time, the driver should call +data_xmt_req() in a loop, requesting character +blocks for transfer. Call with a space argument of how much space +there is available in the FIFO.

If the call returns true, the driver can read +chars_avail characters from +chars and copy them into the FIFO.

If the call returns false, there are +no more buffered characters and the driver should continue without +filling up the FIFO.

When all data has been unloaded, the +driver must call data_xmt_done().

bool (*data_rcv_req)(serial_channel *chan,
+                     int avail,
+                     int* space_avail,
+                     unsigned char** space)
+void (*data_rcv_done)(serial_channel *chan)

Instead of calling rcv_char() with a single +character at a time, the driver should call +data_rcv_req() in a loop, requesting space to +unload the FIFO to. avail is the number of +characters the driver wishes to unload.

If the call returns true, the driver can copy +space_avail characters to +space.

If the call returns false, the input buffer is +full. It is up to the driver to decide what to do in that case +(callback functions for registering overflow are being planned for +later versions of the serial driver).

When all data has been unloaded, the driver must call +data_rcv_done().


PrevHomeNext
TTY driverUpSerial testing with ser_filter
\ No newline at end of file diff --git a/doc/html/ref/io-package-intro.html b/doc/html/ref/io-package-intro.html new file mode 100644 index 00000000..d8621caa --- /dev/null +++ b/doc/html/ref/io-package-intro.html @@ -0,0 +1,216 @@ + + + + + + + + +Introduction +
eCos Reference Manual
PrevNext

Chapter 14. Introduction

The I/O package is designed as a general purpose framework for +supporting device drivers. This includes all classes of +drivers from simple serial to networking stacks and beyond.

Components of the I/O package, such as device drivers, are +configured into the system just like all other components. +Additionally, end users may add their own drivers to this set.

While the set of drivers (and the devices they represent) may be +considered static, they must be accessed via an opaque +“handle”. Each device in the system has a unique name and +the cyg_io_lookup() function is used to map that +name onto the handle for the device. This “hiding” of the +device implementation allows for generic, named devices, as well as +more flexibility. Also, the cyg_io_lookup() +function provides drivers the opportunity to initialize the device +when usage actually starts.

All devices have a name. The standard provided devices use names such +as “/dev/console” and +“/dev/serial0”, where the +“/dev/” prefix indicates that this is +the name of a device.

The entire I/O package API, as well as the standard +set of provided drivers, is written in C.

Basic functions are provided to send data to and receive data +from a device. The details of how this is done is left to the device [class] itself. +For example, writing data to a block device like a disk drive may +have different semantics than writing to a serial port.

Additional functions are provided to manipulate the state +of the driver and/or the actual device. These functions +are, by design, quite specific to the actual driver.

This driver model supports layering; in other words, a device +may actually be created “on top of” another device. +For example, the “tty” (terminal-like) devices are +built on top of simple serial devices. The upper layer then has +the flexibility to add features and functions not found at the lower +layers. In this case the “tty” device provides +for line buffering and editing not available from the simple serial +drivers.

Some drivers will support visibility of the layers they depend +upon. The “tty” driver allows information about +the actual serial device to be manipulated by passing get/set +config calls that use a serial driver “key” down +to the serial driver itself.


PrevHomeNext
I/O Package (Device Drivers)UpUser API
\ No newline at end of file diff --git a/doc/html/ref/io-pci.html b/doc/html/ref/io-pci.html new file mode 100644 index 00000000..c5d97cb7 --- /dev/null +++ b/doc/html/ref/io-pci.html @@ -0,0 +1,161 @@ + + + + + + + + +PCI Library +
eCos Reference Manual
PrevNext


PrevHomeNext
Writing a New Filesystem The eCos PCI Library
\ No newline at end of file diff --git a/doc/html/ref/io-serial-driver-details.html b/doc/html/ref/io-serial-driver-details.html new file mode 100644 index 00000000..2fa225be --- /dev/null +++ b/doc/html/ref/io-serial-driver-details.html @@ -0,0 +1,1031 @@ + + + + + + + + +Serial driver details +
eCos Reference Manual
PrevNext

Chapter 16. Serial driver details

Two different classes of serial drivers are provided as a standard +part of the eCos system. These are described as “raw +serial” (serial) and “tty-like” (tty).

Raw Serial Driver

Use the include file <cyg/io/serialio.h> for +this driver.

The raw serial driver is capable of sending +and receiving blocks of raw data to a serial device. Controls are +provided to configure the actual hardware, but there is no manipulation +of the data by this driver.

There may be many instances of this driver in a given system, +one for each serial channel. Each channel corresponds to a physical +device and there will typically be a device module created for this +purpose. The device modules themselves are configurable, allowing +specification of the actual hardware details, as well as such details +as whether the channel should be buffered by the serial driver, +etc.

Runtime Configuration

Runtime configuration is achieved by exchanging data structures with +the driver via the cyg_io_set_config() and +cyg_io_get_config() functions.

typedef struct {
+ cyg_serial_baud_rate_t baud;
+ cyg_serial_stop_bits_t stop;
+ cyg_serial_parity_t parity;
+ cyg_serial_word_length_t word_length;
+ cyg_uint32 flags;
+} cyg_serial_info_t;

The field word_length contains the number of data bits per word +(character). This must be one of the values:

 CYGNUM_SERIAL_WORD_LENGTH_5
+ CYGNUM_SERIAL_WORD_LENGTH_6
+ CYGNUM_SERIAL_WORD_LENGTH_7
+ CYGNUM_SERIAL_WORD_LENGTH_8

The field baud contains a baud rate selection. This must be +one of the values:

 CYGNUM_SERIAL_BAUD_50
+ CYGNUM_SERIAL_BAUD_75
+ CYGNUM_SERIAL_BAUD_110
+ CYGNUM_SERIAL_BAUD_134_5
+ CYGNUM_SERIAL_BAUD_150
+ CYGNUM_SERIAL_BAUD_200
+ CYGNUM_SERIAL_BAUD_300
+ CYGNUM_SERIAL_BAUD_600
+ CYGNUM_SERIAL_BAUD_1200
+ CYGNUM_SERIAL_BAUD_1800
+ CYGNUM_SERIAL_BAUD_2400
+ CYGNUM_SERIAL_BAUD_3600
+ CYGNUM_SERIAL_BAUD_4800
+ CYGNUM_SERIAL_BAUD_7200
+ CYGNUM_SERIAL_BAUD_9600
+ CYGNUM_SERIAL_BAUD_14400
+ CYGNUM_SERIAL_BAUD_19200
+ CYGNUM_SERIAL_BAUD_38400
+ CYGNUM_SERIAL_BAUD_57600
+ CYGNUM_SERIAL_BAUD_115200
+ CYGNUM_SERIAL_BAUD_234000

The field stop contains the number of stop bits. This must be +one of the values:

 CYGNUM_SERIAL_STOP_1
+ CYGNUM_SERIAL_STOP_1_5
+ CYGNUM_SERIAL_STOP_2

The field parity contains the parity mode. This must be one of +the values:

 CYGNUM_SERIAL_PARITY_NONE
+ CYGNUM_SERIAL_PARITY_EVEN
+ CYGNUM_SERIAL_PARITY_ODD
+ CYGNUM_SERIAL_PARITY_MARK
+ CYGNUM_SERIAL_PARITY_SPACE

The field flags is a bitmask which controls the behavior of the +serial device driver. It should be built from the values +CYG_SERIAL_FLAGS_xxx defined below:

#define CYG_SERIAL_FLAGS_RTSCTS 0x0001

If this bit is set then the port is placed in “hardware +handshake” mode. In this mode, the CTS and RTS pins control +when data is allowed to be sent/received at the port. This +bit is ignored if the hardware does not support this level of +handshake.

typedef struct {
+  cyg_int32 rx_bufsize;
+  cyg_int32 rx_count;
+  cyg_int32 tx_bufsize;
+  cyg_int32 tx_count;
+} cyg_serial_buf_info_t;     

The field rx_bufsize contains +the total size of the incoming data buffer. This is set to zero on +devices that do not support buffering (i.e. polled devices).

The field rx_count contains the +number of bytes currently occupied in the incoming data buffer. +This is set to zero on devices that do not support buffering (i.e. polled +devices).

The field tx_bufsize contains the +total size of the transmit data buffer. This is set to zero on devices +that do not support buffering (i.e. polled devices).

The field tx_count contains the +number of bytes currently occupied in the transmit data buffer. This +is set to zero on devices that do not support buffering (i.e. polled +devices).

API Details

cyg_io_write

cyg_io_write(handle, buf, len)

Send the data from buf to the device. The +driver maintains a buffer to hold the data. The size of the +intermediate buffer is configurable within the interface module. The +data is not modified at all while it is being buffered. On return, +*len contains the amount of characters actually +consumed .

It is possible to configure the write call to be blocking +(default) or non-blocking. Non-blocking mode requires both the configuration +option CYGOPT_IO_SERIAL_SUPPORT_NONBLOCKING +to be enabled, and the specific device to be set to non-blocking +mode for writes (see cyg_io_set_config()).

In blocking mode, the call will not return until there is space in the +buffer and the entire contents of buf have been +consumed.

In non-blocking mode, as much as possible gets consumed from +buf. If everything was consumed, the call +returns ENOERR. If only part of the +buf contents was consumed, +-EAGAIN is returned and the caller must try +again. On return, *len contains the number of characters actually +consumed .

The call can also return -EINTR if interrupted +via the cyg_io_get_config()/ABORT key.

cyg_io_read

cyg_io_read(handle, buf, len)

Receive data into the buffer, buf, from the +device. No manipulation of the data is performed before being +transferred. An interrupt driven interface module will support data +arriving when no read is pending by buffering the data in the serial +driver. Again, this buffering is completely configurable. On return, +*len contains the number of characters actually +received.

It is possible to configure the read call to be blocking (default) +or non-blocking. Non-blocking mode requires both the configuration +option CYGOPT_IO_SERIAL_SUPPORT_NONBLOCKING +to be enabled, and the specific device to be set to non-blocking +mode for reads (see cyg_io_set_config()).

In blocking mode, the call will not return until the requested +amount of data has been read.

In non-blocking mode, data waiting in the device buffer is copied to +buf, and the call returns immediately. If there +was enough data in the buffer to fulfill the request, +ENOERR is returned. If only part of the request +could be fulfilled, -EAGAIN is returned and the +caller must try again. On return, *len contains +the number of characters actually received.

The call can also return -EINTR if interrupted via +the cyg_io_get_config()/ABORT +key.

cyg_io_get_config

cyg_io_get_config(handle, key, buf, len)

This function returns current [runtime] information +about the device and/or driver.

CYG_IO_GET_CONFIG_SERIAL_INFO

CYG_IO_GET_CONFIG_SERIAL_BUFFER_INFO

CYG_IO_GET_CONFIG_SERIAL_OUTPUT_DRAIN

CYG_IO_GET_CONFIG_SERIAL_OUTPUT_FLUSH

CYG_IO_GET_CONFIG_SERIAL_INPUT_DRAIN

CYG_IO_GET_CONFIG_SERIAL_ABORT

CYG_IO_GET_CONFIG_SERIAL_READ_BLOCKING

CYG_IO_GET_CONFIG_SERIAL_WRITE_BLOCKING

cyg_io_set_config

cyg_io_set_config(handle, key, buf,len)

This function is used to update or change runtime configuration +of a port.

CYG_IO_SET_CONFIG_SERIAL_INFO

CYG_IO_SET_CONFIG_SERIAL_READ_BLOCKING

CYG_IO_SET_CONFIG_SERIAL_WRITE_BLOCKING


PrevHomeNext
User APIUpTTY driver
\ No newline at end of file diff --git a/doc/html/ref/io-serial-testing-with-serfilter.html b/doc/html/ref/io-serial-testing-with-serfilter.html new file mode 100644 index 00000000..87be39a5 --- /dev/null +++ b/doc/html/ref/io-serial-testing-with-serfilter.html @@ -0,0 +1,706 @@ + + + + + + + + +Serial testing with ser_filter +
eCos Reference Manual
PrevChapter 17. How to Write a DriverNext

Serial testing with ser_filter

Rationale

Since some targets only have one serial connection, a serial testing harness +needs to be able to share the connection with GDB +(however, the test and GDB can also run on separate +lines).

The serial filter (ser_filter) +sits between the serial port and GDB and monitors +the exchange of data between GDB and the target. +Normally, no changes are made to the data.

When a test request packet is sent from the test on the target, it is +intercepted by the filter.

The filter and target then enter a loop, exchanging protocol data between +them which GDB never sees.

In the event of a timeout, or a crash on the target, the filter falls +back into its pass-through mode. If this happens due to a crash it should be +possible to start regular debugging with GDB. The +filter will stay in the pass-though mode until GDB +disconnects.

The Protocol

The protocol commands are prefixed with an "@" +character which the serial filter is looking for. The protocol +commands include:

PING

Allows the test on the target to probe for the filter. The + filter responds with OK, while + GDB would just ignore the + command. This allows the tests to do nothing if they require the + filter and it is not present.

CONFIG

Requests a change of serial line configuration. Arguments + to the command specify baud rate, data bits, stop bits, and + parity. [This command is not fully implemented yet - there is no + attempt made to recover if the new configuration turns out to + cause loss of data.]

BINARY

Requests data to be sent from the filter to the + target. The data is checksummed, allowing errors in the transfer + to be detected. Sub-options of this command control how the + data transfer is made:

TEXT

This is a test of the text translations in the TTY layer. + Requests a transfer of text data from the target to the filter + and possibly back again. The filter treats this as a binary + transfer, while the target ma be doing translations on the + data. The target provides the filter with checksums for what it + should expect to see. This test is not implemented yet. +

The above commands may be extended, and new commands added, as +required to test (new) parts of the serial drivers in +eCos.

Serial Filter Usage

Running the ser_filter program with no (or wrong) arguments results in +the following output:

Usage: ser_filter [-t -S] TcpIPport SerialPort BaudRate 
+or: ser_filter -n [-t -S] SerialPort BaudRate 
+-t: Enable tracing. 
+-S: Output data read from serial line. 
+-c: Output data on console instead of via GDB. 
+-n: No GDB. 

The normal way to use it with GDB is to start the filter:

$ ser_filter -t 9000 com1 38400

In this case, the filter will be listening on port 9000 and connect to the +target via the serial port COM1 at 38400 baud. On a UNIX +host, replace "COM1" with a device such as +"/dev/ttyS0".

The -t option enables tracing which will cause the +filter to describe its actions on the console.

Now start GDB with one of the tests as an +argument:

$ mips-tx39-elf-gdb -nw install/tests/io_serial/serial3

Then connect to the filter:

(gdb) target remote localhost:9000

This should result in a connection in exactly the same way as if you +had connected directly to the target on the serial line.

(gdb) c

Which should result in output similar to the below:

Continuing. 
+INFO: <BINARY:16:1!> 
+PASS: <Binary test completed>
+INFO: <BINARY:128:1!> 
+PASS: <Binary test completed>
+INFO: <BINARY:256:1!> 
+PASS: <Binary test completed>
+INFO: <BINARY:1024:1!> 
+PASS: <Binary test completed>
+INFO: <BINARY:512:0!>
+PASS: <Binary test completed>
+... 
+PASS: <Binary test completed>
+INFO: <BINARY:16384:0!>
+PASS: <Binary test completed>
+PASS: <serial13 test OK>
+EXIT: <done>

If any of the individual tests fail the testing will terminate with a +FAIL.

With tracing enabled, you would also see the filter's status output:

The PING command sent from the target to determine the +presence of the filter:

[400 11:35:16] Dispatching command PING 
+[400 11:35:16] Responding with status OK

Each of the binary commands result in output similar to:

[400 11:35:16] Dispatching command BINARY 
+[400 11:35:16] Binary data (Size:16, Flags:1). 
+[400 11:35:16] Sending CRC: '170231!', len: 7. 
+[400 11:35:16] Reading 16 bytes from target. 
+[400 11:35:16] Done. in_crc 170231, out_crc 170231. 
+[400 11:35:16] Responding with status OK 
+[400 11:35:16] Received DONE from target.

This tracing output is normally sent as O-packets to GDB which will display the tracing text. By using the +-c option, the tracing text can be redirected to the +console from which ser_filter was started.

A Note on Failures

A serial connection (especially when driven at a high baud rate) can garble the +transmitted data because of noise from the environment. It is not the job of +the serial driver to ensure data integrity - that is the job of protocols +layering on top of the serial driver.

In the current implementation the serial tests and the serial filter are +not resilient to such data errors. This means that the test may crash or hang +(possibly without reporting a FAIL). It also +means that you should be aware of random errors - a FAIL is not necessarily caused by a bug in the serial driver.

Ideally, the serial testing infrastructure should be able to distinguish +random errors from consistent errors - the former are most likely due to noise +in the transfer medium, while the latter are more likely to be caused by faulty +drivers. The current implementation of the infrastructure does not have this +capability.

Debugging

If a test fails, the serial filter's output may provide some hints about +what the problem is. If the option -S is used when starting +the filter, data received from the target is printed out:

[400 11:35:16] 0000 50 41 53 53 3a 3c 42 69 'PASS:<Bi'
+[400 11:35:16] 0008 6e 61 72 79 20 74 65 73 'nary.tes' 
+[400 11:35:16] 0010 74 20 63 6f 6d 70 6c 65 't.comple' 
+[400 11:35:16] 0018 74 65 64 3e 0d 0a 49 4e 'ted>..IN' 
+[400 11:35:16] 0020 46 4f 3a 3c 42 49 4e 41 'FO:<BINA'
+[400 11:35:16] 0028 52 59 3a 31 32 38 3a 31 'RY:128:1' 
+[400 11:35:16] 0030 21 3e 0d 0a 40 42 49 4e '!..@BIN' 
+[400 11:35:16] 0038 41 52 59 3a 31 32 38 3a 'ARY:128:' 
+[400 11:35:16] 0040 31 21 .. .. .. .. .. .. '1!' 

In the case of an error during a testing command the data received by the +filter will be printed out, as will the data that was expected. This allows +the two data sets to be compared which may give some idea of what the problem +is.


PrevHomeNext
How to Write a DriverUpDevice Driver Interface to the Kernel
\ No newline at end of file diff --git a/doc/html/ref/io-tty-driver.html b/doc/html/ref/io-tty-driver.html new file mode 100644 index 00000000..721d6a36 --- /dev/null +++ b/doc/html/ref/io-tty-driver.html @@ -0,0 +1,487 @@ + + + + + + + + + TTY driver +
eCos Reference Manual
PrevChapter 16. Serial driver detailsNext

TTY driver

Use the include file <cyg/io/ttyio.h> for +this driver.

This driver is built on top of the simple +serial driver and is typically used for a device that interfaces with +humans such as a terminal. It provides some minimal formatting of data +on output and allows for line-oriented editing on input.

Runtime configuration

Runtime configuration is achieved by exchanging data structures with +the driver via the cyg_io_set_config() and +cyg_io_get_config() functions.

typedef struct {
+ cyg_uint32 tty_out_flags;
+ cyg_uint32 tty_in_flags;
+} cyg_tty_info_t;

The field tty_out_flags +is used to control what happens to data as it is send to the serial +port. It contains a bitmap comprised of the bits as defined by the +CYG_TTY_OUT_FLAGS_xxx values below.

#define CYG_TTY_OUT_FLAGS_CRLF 0x0001 // Map '\n' => '\n\r' on output

If this bit is set in tty_out_flags, +any occurrence of the character "\n" will +be replaced by the sequence "\n\r" before +being sent to the device.

The field tty_in_flags +is used to control how data is handled as it comes from the serial +port. It contains a bitmap comprised of the bits as defined by the +CYG_TTY_IN_FLAGS_xxx values below.

#define CYG_TTY_IN_FLAGS_CR 0x0001 // Map '\r' => '\n' on input

If this bit is set in tty_in_flags, the +character "\r" (“return” or “enter” on +most keyboards) will be mapped to "\n".

#define CYG_TTY_IN_FLAGS_CRLF 0x0002 // Map '\n\r' => '\n' on input

If this bit is set in tty_in_flags, the +character sequence "\n\r" (often sent by DOS/Windows +based terminals) will be mapped to "\n".

#define CYG_TTY_IN_FLAGS_BINARY 0x0004 // No input processing

If this bit is set in tty_in_flags, the +input will not be manipulated in any way before being placed in +the user’s buffer.

#define CYG_TTY_IN_FLAGS_ECHO 0x0008 // Echo characters as processed

If this bit is set in tty_in_flags, characters +will be echoed back to the serial port as they are processed.

API details

cyg_io_read(handle, buf, len)

This function is used to read data from the device. In the +default case, data is read until an end-of-line character ("\n" +or "\r") is read. Additionally, the characters are echoed +back to the [terminal] device. Minimal editing +of the input is also supported.

	
+cyg_io_write(handle, buf, len)

This function is used to send data to the device. In the default +case, the end-of-line character "\n" is replaced by the +sequence "\n\r".

cyg_io_get_config(handle, key, buf, len)

This function is used to get information about the channel’s +configuration at runtime.

Serial driver keys (see above) may also be specified +in which case the call is passed directly to the serial +driver.

cyg_io_set_config(handle, key, buf, len)

This function is used to modify the channel’s configuration +at runtime.

Serial driver +keys (see above) may also be specified in which case the +call is passed directly to the serial driver.


PrevHomeNext
Serial driver detailsUpHow to Write a Driver
\ No newline at end of file diff --git a/doc/html/ref/io-usb-slave-eth.html b/doc/html/ref/io-usb-slave-eth.html new file mode 100644 index 00000000..7042684e --- /dev/null +++ b/doc/html/ref/io-usb-slave-eth.html @@ -0,0 +1,192 @@ + + + + + + + + +eCos Support for Developing USB-ethernet Peripherals +
eCos Reference Manual
PrevNext

XXIII. eCos Support for Developing USB-ethernet Peripherals

Table of Contents
Introduction -- eCos support for developing USB ethernet peripherals
Initializing the USB-ethernet Package -- Initializing the USB-ethernet Package
USB-ethernet Data Transfers -- Exchanging ethernet packets with the USB host
USB-ethernet State Handling -- Maintaining the USB-ethernet connection with the host
Network Device for the eCos TCP/IP Stack -- USB-ethernet support for the eCos TCP/IP Stack
Example Host-side Device Driver -- Provide host-side support for the eCos USB-ethernet package
Communication Protocol -- Protocol used between the host-side device driver and the eCos +USB-ethernet package

PrevHomeNext
Testing Introduction
\ No newline at end of file diff --git a/doc/html/ref/io-usb-slave.html b/doc/html/ref/io-usb-slave.html new file mode 100644 index 00000000..8317c573 --- /dev/null +++ b/doc/html/ref/io-usb-slave.html @@ -0,0 +1,211 @@ + + + + + + + + +eCos USB Slave Support +
eCos Reference Manual
PrevNext

XXII. eCos USB Slave Support

Table of Contents
Introduction -- eCos support for USB slave devices
USB Enumeration Data -- The USB enumeration data structures
Starting up a USB Device -- Starting up a USB Device
Devtab Entries -- Data endpoint data structure
Receiving Data from the Host -- Receiving Data from the Host
Sending Data to the Host -- Sending Data to the Host
Halted Endpoints -- Support for Halting and Halted Endpoints
Control Endpoints -- Control endpoint data structure
Data Endpoints -- Data endpoint data structures
Writing a USB Device Driver -- USB Device Driver Porting Guide
Testing -- Testing of USB Device Drivers

PrevHomeNext
Implementing a Power Controller Introduction
\ No newline at end of file diff --git a/doc/html/ref/io-user-api.html b/doc/html/ref/io-user-api.html new file mode 100644 index 00000000..7193f5d5 --- /dev/null +++ b/doc/html/ref/io-user-api.html @@ -0,0 +1,435 @@ + + + + + + + + +User API +
eCos Reference Manual
PrevNext

Chapter 15. User API

All functions, except cyg_io_lookup() +require an I/O “handle”.

All functions return a value of the type Cyg_ErrNo. If an +error condition is detected, this value will be negative and the +absolute value indicates the actual error, as specified in +cyg/error/codes.h. The only other legal return +value will be ENOERR. All other function arguments +are pointers (references). This allows the drivers to pass information +efficiently, both into and out of the driver. The most striking +example of this is the “length” value passed to the read +and write functions. This parameter contains the desired length of +data on input to the function and the actual transferred length on +return.

// Lookup a device and return its handle 
+  Cyg_ErrNo cyg_io_lookup( 
+    const char *name,
+    cyg_io_handle_t *handle )

This function maps a device name onto an appropriate handle. If the +named device is not in the system, then the error +-ENOENT is returned. If the device is found, then +the handle for the device is returned by way of the handle pointer +*handle.

// Write data to a device 
+Cyg_ErrNo cyg_io_write( 
+    cyg_io_handle_t handle,
+    const void *buf,
+    cyg_uint32 *len )

This function sends data to a device. The size of data to send is +contained in *len and the actual size sent will +be returned in the same place.

// Read data from a device 
+Cyg_ErrNo cyg_io_read( 
+    cyg_io_handle_t handle,
+    void *buf,
+    cyg_uint32 *len )

This function receives data from a device. The desired size of data to +receive is contained in *len and the actual +size obtained will be returned in the same place.

// Get the configuration of a device 
+Cyg_ErrNo cyg_io_get_config( 
+    cyg_io_handle_t handle,
+    cyg_uint32 key,
+    void *buf,
+    cyg_uint32 *len )

This function is used to obtain run-time configuration about a +device. The type of information retrieved is specified by the +key. The data will be returned in the given +buffer. The value of *len should contain the +amount of data requested, which must be at least as large as the size +appropriate to the selected key. The actual size of data retrieved is +placed in *len. The appropriate key values +differ for each driver and are all listed in the file +<cyg/io/config_keys.h>.

// Change the configuration of a device 
+Cyg_ErrNo cyg_io_set_config( 
+    cyg_io_handle_t handle,
+    cyg_uint32 key,
+    const void *buf,
+    cyg_uint32 *len )

This function is used to manipulate or change the run-time +configuration of a device. The type of information is specified by the +key. The data will be obtained from the given +buffer. The value of *len should contain the +amount of data provided, which must match the size appropriate to the +selected key. The appropriate key values differ for each driver and +are all listed in the file +<cyg/io/config_keys.h>.


PrevHomeNext
IntroductionUpSerial driver details
\ No newline at end of file diff --git a/doc/html/ref/io.html b/doc/html/ref/io.html new file mode 100644 index 00000000..e1adb08d --- /dev/null +++ b/doc/html/ref/io.html @@ -0,0 +1,181 @@ + + + + + + + + +I/O Package (Device Drivers) +
eCos Reference Manual
PrevNext


PrevHomeNext
C library startup Introduction
\ No newline at end of file diff --git a/doc/html/ref/ip-address-command.html b/doc/html/ref/ip-address-command.html new file mode 100644 index 00000000..417938e9 --- /dev/null +++ b/doc/html/ref/ip-address-command.html @@ -0,0 +1,448 @@ + + + + + + + + +ip_address +
eCos Reference Manual
PrevNext

ip_address

Name

ip_address -- Set IP addresses

Description

The ip_address command is used to show and/or change the basic IP +addresses used by RedBoot. IP addresses may be given as numeric +values, e.g. 192.168.1.67, or as symbolic names such as www.redhat.com +if DNS support is enabled. +

The -l option is used to set the IP address used by +the target device. +

The -h option is used to set the default server +address, such as is used by the load command. +

The -d option is used to set the default DNS server +address which is used for resolving symbolic network addresses. Note +that an address of 0.0.0.0 will disable DNS lookups. +

Examples

Display the current network settings. +
 
+RedBoot> ip_address 
+IP: 192.168.1.31, Default server: 192.168.1.101, DNS server IP: 0.0.0.0 

Change the DNS server address. +
 
+RedBoot> ip_address -d 192.168.1.101 
+IP: 192.168.1.31, Default server: 192.168.1.101, DNS server IP: 192.168.1.101 

Change the default server address. +
 
+RedBoot> ip_address -h 192.168.1.104 
+IP: 192.168.1.31, Default server: 192.168.1.104, DNS server IP: 192.168.1.101
+

\ No newline at end of file diff --git a/doc/html/ref/ipaq.html b/doc/html/ref/ipaq.html new file mode 100644 index 00000000..b2391291 --- /dev/null +++ b/doc/html/ref/ipaq.html @@ -0,0 +1,795 @@ + + + + + + + + +ARM/StrongARM(SA11X0) Compaq iPAQ PocketPC +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/StrongARM(SA11X0) Compaq iPAQ PocketPC

Initial Installation

RedBoot ROM and WinCE mode images are needed by the installation process.

Installing RedBoot on the iPAQ using Windows/CE

The Windows/CE environment originally shipped with the iPAQ contains a hidden +mini-loader, sometimes referred to as the "Parrot" loader. This loader can +be started by holding down the action button (the joypad) while resetting +the unit or when powering on. At this point, a blue bird will appear on +the LCD screen. Also at this point, a simple loader can be accessed over the +serial port at 115200/8N1. Using this loader, the contents of the iPAQ flash +memory can be saved to a Compact Flash memory card. +

Use the "r2c" command to dump Flash contents to the CF memory card. Once this +completes, RedBoot can be installed with no fear since the Parrot loader can +be used to restore the Flash contents at a later time.

If you expect to completely recover the state of the iPAQ Win/CE environment, then +HotSync should be run to backup all "RAM" files as well before installing RedBoot.

The next step in installing RedBoot on the iPAQ actually involves Windows/CE, +which is the native environment on the unit. Using WinCE, you need to +install an application which will run a RAM based version of RedBoot. Once +this is installed and running, RedBoot can be used to update the flash with +a native/ROM version of RedBoot.

At this point, the RAM based version of RedBoot should be running. + You should be able to return to this point by just executing the last two +steps of the previous process if necessary.

Setting up and testing RedBoot

When RedBoot first comes up, it will want to initialize its LCD touch +screen parameters. It does this by displaying a keyboard graphic and asks +you to press certain keys. Using the stylus, press and hold until the prompt +is withdrawn. When you lift the stylus, RedBoot will continue with the next +calibration.

Once the LCD touchscreen has been calibrated, RedBoot will start. The +calibration step can be skipped by pressing the return/abort +button on the unit (right most button with a curved arrow icon). Additionally, +the unit will assume default values if the screen is not touched within about +15 seconds.

Once RedBoot has started, you should get information similar to this +on the LCD screen. It will also appear on the serial port at 38400,8,N,1. + +
RedBoot(tm) bootstrap and debug environment [ROM]
+Non-certified release, version UNKNOWN - built 06:17:41, Mar 19 2001
+Platform: Compaq iPAQ Pocket PC (StrongARM 1110)
+
+Copyright (C) 2000, 2001, Red Hat, Inc.
+
+RAM: 0x00000000-0x01fc0000, 0x0001f200-0x01f70000 available
+FLASH: 0x50000000 - 0x51000000, 64 blocks of 0x00040000 bytes
+each.
+ +Since the LCD touchscreen is only 30 characters wide, some of this +data will be off the right hand side of the display. The joypad may be +used to pan left and right in order to see the full lines.

If you have a Compact Flash ethernet card, RedBoot should find +it. You'll need to have BOOTP enabled for this unit (see your +sysadmin for details). If it does, it will print a message like: + +
... Waiting for network card: .Ready!
+Socket Communications Inc: CF+ LPE Revision E 08/04/99
+IP: 192.168.1.34, Default server: 192.168.1.101

Installing RedBoot permanently

Once you are satisfied with the setup and that RedBoot is operating +properly in your environment, you can set up your iPAQ unit to have RedBoot +be the bootstrap application. + +

CAUTION

This step will destroy your Windows/CE environment.

Before you take this step, it is strongly recommended you save your WinCE FLASH contents +as outlined above using the "parrot" loader, or +by using the Compaq OSloader:

  • Using OSloader on the iPAQ, select the Tools->Flash->Save +to files.... menu item.

  • Four (4) files, 4MB each in size will be created.

  • After each file is created, copy the file to your computer, +then delete the file from the iPAQ to make room in the WinCE ramdisk for the +next file.

You will need to download the version of RedBoot designed as the +ROM bootstrap. Then install it permanently using these commands: +
RedBoot> lo -r -b 0x100000 redboot_ROM.bin
+RedBoot> fi loc -f 0x50000000 -l 0x40000
+RedBoot> fis init
+RedBoot> fi unl -f 0x50040000 -l 0x40000
+RedBoot> fi cr RedBoot -b 0x100000
+RedBoot> fi loc -f 0x50040000 -l 0x40000
+RedBoot> reset
+ +

WARNING

You must type these commands exactly! Failure to do so may render your +iPAQ totally useless. Once you've done this, RedBoot should come up every +time you reset.

Additional commands

The exec command which allows the loading +and execution of Linux kernels, +is supported for this board (see the Section called Executing Programs from RedBoot in Chapter 2). The exec parameters used for the iPAQ are:

-b <addr>

Location Linux kernel was loaded to

-l <len>

Length of kernel

-c "params"

Parameters passed to kernel

-r <addr>

'initrd' ramdisk location

-s <len>

Length of initrd ramdisk

Linux kernels may be run on the iPAQ using the sources from the anonymous +CVS repository at the Handhelds project (http://www.handhelds.org/) with +the elinux.patch patch file applied. This file can be +found in the +misc/ subdirectory of the iPAQ platform HAL in the +RedBoot sources, normally +hal/arm/sa11x0/ipaq/VERSION/misc/ +

On the iPAQ (and indeed all SA11x0 platforms), Linux expects to be loaded +at address 0xC0008000 and the entry point is also at 0xC0008000.

Memory Maps

RedBoot sets up the following memory map on the iPAQ: The first level +page table is located at physical address 0xC0004000. No second level tables +are used.

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x01ffffff    16Mb to 32Mb FLASH (nCS0) [organized as below]
+  0x000000 - 0x0003ffff      Parrot Loader
+  0x040000 - 0x0007ffff      RedBoot
+  0xf80000 - 0x00fbffff      Fconfig data
+  0xfc0000 - 0x00ffffff      FIS directory
+0x30000000 - 0x3fffffff    Compact Flash
+0x48000000 - 0x4bffffff    iPAQ internal registers
+0x80000000 - 0xbfffffff    SA-1110 Internal Registers
+0xc0000000 - 0xc1ffffff    DRAM Bank 0 - 32Mb SDRAM
+0xe0000000 - 0xe7ffffff    Cache Clean
+
+
+Virtual Address Range    C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x01ffffff  Y Y  DRAM - 32Mb
+0x30000000 - 0x3fffffff  N N  Compact Flash
+0x48000000 - 0x4bffffff  N N  iPAQ internal registers
+0x50000000 - 0x51ffffff  Y Y  Up to 32Mb FLASH (nCS0)
+0x80000000 - 0xbfffffff  N N  SA-1110 Internal Registers
+0xc0000000 - 0xc1ffffff  N Y  DRAM Bank 0: 32Mb
+0xe0000000 - 0xe7ffffff  Y Y  Cache Clean   

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=ipaq
+export ARCH_DIR=arm
+export PLATFORM_DIR=sa11x0/ipaq

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/StrongARM(SA11X0) Bright Star Engineering commEngine and nanoEngineUpARM/StrongARM(SA11X0) Intrinsyc CerfCube
\ No newline at end of file diff --git a/doc/html/ref/iq80310.html b/doc/html/ref/iq80310.html new file mode 100644 index 00000000..af8d77e7 --- /dev/null +++ b/doc/html/ref/iq80310.html @@ -0,0 +1,775 @@ + + + + + + + + +ARM/Xscale Cyclone IQ80310 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/Xscale Cyclone IQ80310

Initial Installation Method

The board manufacturer provides a DOS application which is +capable of programming the flash over the PCI bus, and this is +required for initial installations of RedBoot. Please see the board +manual for information on using this utility. In general, the process +involves programming one of the two flash based RedBoot images to +flash. The ROM mode RedBoot (which runs from the flash boot sector) +should be programmed to flash address 0x00000000. The ROMA RedBoot +mode (which is started by the ARM bootloader) should be programmed to +flash address 0x00004000.

To install RedBoot to run from the flash boot sector, use the manufacturer's +flash utility to install the ROM mode image at address zero.

To install RedBoot to run from address 0x40000 with the ARM bootloader +in the flash boot sector, use the manufacturer's flash utility to install +the ROMA mode image at address 0x40000.

After booting the initial installation of RedBoot, this warning may +be printed:
flash configuration checksum error or invalid key
This is normal, and indicates that the flash must be configured +for use by RedBoot. Even if the above message is not printed, it may be a +good idea to reinitialize the flash anyway. Do this with the fis command:
RedBoot> fis init
+About to initialize [format] flash image system - continue (y/n)? y
+*** Initialize flash Image System
+Warning: device contents not erased, some blocks may not be usable
+... Unlock from 0x007e0000-0x00800000: .
+... Erase from 0x007e0000-0x00800000: .
+... Program from 0xa1fd0000-0xa1fd0400 at 0x007e0000: .
+... Lock from 0x007e0000-0x00800000: .
+Followed by the fconfig command:
+   RedBoot> fconfig
+   Run script at boot: false
+   Use BOOTP for network configuration: false
+   Local IP address: 192.168.1.153
+   Default server IP address: 192.168.1.10
+   GDB connection port: 1000
+   Network debug at boot time: false
+   Update RedBoot non-volatile configuration - continue (y/n)? y
+   ... Unlock from 0x007c0000-0x007e0000: .
+   ... Erase from 0x007c0000-0x007e0000: .
+   ... Program from 0xa0013018-0xa0013418 at 0x007c0000: .
+   ... Lock from 0x007c0000-0x007e0000: .

Special RedBoot Commands

A special RedBoot command, diag, is used to +access a set of hardware diagnostics provided by the board +manufacturer. To access the diagnostic menu, enter diag at the RedBoot prompt: +
RedBoot> diag
+Entering Hardware Diagnostics - Disabling Data Cache!
+1 - Memory Tests
+2 - Repeating Memory Tests
+3 - 16C552 DUART Serial Port Tests
+4 - Rotary Switch S1 Test for positions 0-3 
+5 - seven Segment LED Tests
+6 - Backplane Detection Test
+7 - Battery Status Test
+8 - External Timer Test
+9 - i82559 Ethernet Configuration
+10 - i82559 Ethernet Test
+11 - Secondary PCI Bus Test
+12 - Primary PCI Bus Test
+13 - i960Rx/303 PCI Interrupt Test
+14 - Internal Timer Test
+15 - GPIO Test
+0 - quit Enter the menu item number (0 to quit):
+Tests for various hardware subsystems are provided, and some +tests require special hardware in order to execute normally. The Ethernet +Configuration item may be used to set the board ethernet address.

IQ80310 Hardware Tests

1 - Memory Tests
+2 - Repeating Memory Tests
+3 - 16C552 DUART Serial Port Tests
+4 - Rotary Switch S1 Test for positions 0-3
+5 - 7 Segment LED Tests
+6 - Backplane Detection Test
+7 - Battery Status Test
+8 - External Timer Test
+9 - i82559 Ethernet Configuration
+10 - i82559 Ethernet Test
+11 - i960Rx/303 PCI Interrupt Test
+12 - Internal Timer Test
+13 - Secondary PCI Bus Test
+14 - Primary PCI Bus Test
+15 - Battery Backup SDRAM Memory Test
+16 - GPIO Test
+17 - Repeat-On-Fail Memory Test
+18 - Coyonosa Cache Loop (No return)
+19 - Show Software and Hardware Revision
+0 - quit
+Enter the menu item number (0 to quit):  

Tests for various hardware subsystems are provided, and some tests require +special hardware in order to execute normally. The Ethernet Configuration +item may be used to set the board ethernet address.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=iq80310
+export ARCH_DIR=arm
+export PLATFORM_DIR=iq80310

The names of configuration files are listed above with the +description of the associated modes.

Interrupts

RedBoot uses an interrupt vector table which is located at address 0xA000A004. +Entries in this table are pointers to functions with this protoype::
int irq_handler( unsigned vector, unsigned data )
On an IQ80310 +board, the vector argument is one of 49 interrupts defined in hal/arm/iq80310/current/include/hal_platform_ints.h::
// *** 80200 CPU ***
+#define CYGNUM_HAL_INTERRUPT_reserved0     0
+#define CYGNUM_HAL_INTERRUPT_PMU_PMN0_OVFL 1 // See Ch.12 - Performance Mon.
+#define CYGNUM_HAL_INTERRUPT_PMU_PMN1_OVFL 2 // PMU counter 0/1 overflow
+#define CYGNUM_HAL_INTERRUPT_PMU_CCNT_OVFL 3 // PMU clock overflow
+#define CYGNUM_HAL_INTERRUPT_BCU_INTERRUPT 4 // See Ch.11 - Bus Control Unit
+#define CYGNUM_HAL_INTERRUPT_NIRQ          5 // external IRQ
+#define CYGNUM_HAL_INTERRUPT_NFIQ          6 // external FIQ
+
+
+// *** XINT6 interrupts ***
+#define CYGNUM_HAL_INTERRUPT_DMA_0         7
+#define CYGNUM_HAL_INTERRUPT_DMA_1         8
+#define CYGNUM_HAL_INTERRUPT_DMA_2         9
+#define CYGNUM_HAL_INTERRUPT_GTSC         10 // Global Time Stamp Counter
+#define CYGNUM_HAL_INTERRUPT_PEC          11 // Performance Event Counter
+#define CYGNUM_HAL_INTERRUPT_AAIP         12 // application accelerator unit
+
+
+// *** XINT7 interrupts ***
+// I2C interrupts
+#define CYGNUM_HAL_INTERRUPT_I2C_TX_EMPTY 13
+#define CYGNUM_HAL_INTERRUPT_I2C_RX_FULL  14
+#define CYGNUM_HAL_INTERRUPT_I2C_BUS_ERR  15
+#define CYGNUM_HAL_INTERRUPT_I2C_STOP     16
+#define CYGNUM_HAL_INTERRUPT_I2C_LOSS     17
+#define CYGNUM_HAL_INTERRUPT_I2C_ADDRESS  18
+
+
+// Messaging Unit interrupts
+#define CYGNUM_HAL_INTERRUPT_MESSAGE_0           19
+#define CYGNUM_HAL_INTERRUPT_MESSAGE_1           20
+#define CYGNUM_HAL_INTERRUPT_DOORBELL            21
+#define CYGNUM_HAL_INTERRUPT_NMI_DOORBELL        22
+#define CYGNUM_HAL_INTERRUPT_QUEUE_POST          23
+#define CYGNUM_HAL_INTERRUPT_OUTBOUND_QUEUE_FULL 24
+#define CYGNUM_HAL_INTERRUPT_INDEX_REGISTER      25
+// PCI Address Translation Unit
+#define CYGNUM_HAL_INTERRUPT_BIST                26
+
+
+// *** External board interrupts (XINT3) ***
+#define CYGNUM_HAL_INTERRUPT_TIMER        27 // external timer
+#define CYGNUM_HAL_INTERRUPT_ETHERNET     28 // onboard enet
+#define CYGNUM_HAL_INTERRUPT_SERIAL_A     29 // 16x50 uart A
+#define CYGNUM_HAL_INTERRUPT_SERIAL_B     30 // 16x50 uart B
+#define CYGNUM_HAL_INTERRUPT_PCI_S_INTD   31 // secondary PCI INTD
+// The hardware doesn't (yet?) provide masking or status for these
+// even though they can trigger cpu interrupts. ISRs will need to
+// poll the device to see if the device actually triggered the
+// interrupt.
+#define CYGNUM_HAL_INTERRUPT_PCI_S_INTC   32 // secondary PCI INTC
+#define CYGNUM_HAL_INTERRUPT_PCI_S_INTB   33 // secondary PCI INTB
+#define CYGNUM_HAL_INTERRUPT_PCI_S_INTA   34 // secondary PCI INTA
+
+
+// *** NMI Interrupts go to FIQ ***
+#define CYGNUM_HAL_INTERRUPT_MCU_ERR       35
+#define CYGNUM_HAL_INTERRUPT_PATU_ERR      36
+#define CYGNUM_HAL_INTERRUPT_SATU_ERR      37
+#define CYGNUM_HAL_INTERRUPT_PBDG_ERR      38
+#define CYGNUM_HAL_INTERRUPT_SBDG_ERR      39
+#define CYGNUM_HAL_INTERRUPT_DMA0_ERR      40
+#define CYGNUM_HAL_INTERRUPT_DMA1_ERR      41
+#define CYGNUM_HAL_INTERRUPT_DMA2_ERR      42
+#define CYGNUM_HAL_INTERRUPT_MU_ERR        43
+#define CYGNUM_HAL_INTERRUPT_reserved52    44
+#define CYGNUM_HAL_INTERRUPT_AAU_ERR       45
+#define CYGNUM_HAL_INTERRUPT_BIU_ERR       46
+
+
+// *** ATU FIQ sources ***
+#define CYGNUM_HAL_INTERRUPT_P_SERR        47
+#define CYGNUM_HAL_INTERRUPT_S_SERR        48
The data passed +to the ISR is pulled from a data table (hal_interrupt_data) which immediately follows the interrupt vector table. With +49 interrupts, the data table starts at address 0xA000A0C8.

An application may create a normal C function with the above prototype +to be an ISR. Just poke its address into the table at the correct index and +enable the interrupt at its source. The return value of the ISR is ignored +by RedBoot.

Memory Maps

The first level page table is located at 0xa0004000. Two second level +tables are also used. One second level table is located at 0xa0008000 and +maps the first 1MB of flash. The other second level table is at 0xa0008400, +and maps the first 1MB of SDRAM.

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x00000fff    flash Memory
+0x00001000 - 0x00001fff    80312 Internal Registers
+0x00002000 - 0x007fffff    flash Memory
+0x00800000 - 0x7fffffff    PCI ATU Outbound Direct Window
+0x80000000 - 0x83ffffff    Primary PCI 32-bit Memory
+0x84000000 - 0x87ffffff    Primary PCI 64-bit Memory
+0x88000000 - 0x8bffffff    Secondary PCI 32-bit Memory
+0x8c000000 - 0x8fffffff    Secondary PCI 64-bit Memory
+0x90000000 - 0x9000ffff    Primary PCI IO Space
+0x90010000 - 0x9001ffff    Secondary PCI IO Space
+0x90020000 - 0x9fffffff    Unused
+0xa0000000 - 0xbfffffff    SDRAM
+0xc0000000 - 0xefffffff    Unused
+0xf0000000 - 0xffffffff    80200 Internal Registers
+
+
+Virtual Address Range    C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x00000fff  Y Y  SDRAM
+0x00001000 - 0x00001fff  N N  80312 Internal Registers
+0x00002000 - 0x007fffff  Y N  flash Memory
+0x00800000 - 0x7fffffff  N N  PCI ATU Outbound Direct Window
+0x80000000 - 0x83ffffff  N N  Primary PCI 32-bit Memory
+0x84000000 - 0x87ffffff  N N  Primary PCI 64-bit Memory
+0x88000000 - 0x8bffffff  N N  Secondary PCI 32-bit Memory
+0x8c000000 - 0x8fffffff  N N  Secondary PCI 64-bit Memory
+0x90000000 - 0x9000ffff  N N  Primary PCI IO Space
+0x90010000 - 0x9001ffff  N N  Secondary PCI IO Space
+0xa0000000 - 0xbfffffff  Y Y  SDRAM
+0xc0000000 - 0xcfffffff  Y Y  Cache Flush Region
+0xd0000000 - 0xd0000fff  Y N  first 4k page of flash
+0xf0000000 - 0xffffffff  N N  80200 Internal Registers 


PrevHomeNext
ARM/StrongARM(SA11X0) Intrinsyc CerfCubeUpARM/Xscale Intel IQ80321
\ No newline at end of file diff --git a/doc/html/ref/iq80321.html b/doc/html/ref/iq80321.html new file mode 100644 index 00000000..f7faae83 --- /dev/null +++ b/doc/html/ref/iq80321.html @@ -0,0 +1,1060 @@ + + + + + + + + +ARM/Xscale Intel IQ80321 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/Xscale Intel IQ80321

Initial Installation Method

The board manufacturer provides a DOS application which is capable of +programming the flash over the PCI bus, and this is required for initial installations +of RedBoot. Please see the board manual for information on using this utility. +In general, the process involves programming the ROM mode RedBoot +image to flash. RedBoot should be programmed to flash address +0x00000000 using the DOS utility.

After booting the initial installation of RedBoot, this warning may +be printed:
flash configuration checksum error or invalid key
This is normal, and indicates that the flash must be configured +for use by RedBoot. Even if the above message is not printed, it may be a +good idea to reinitialize the flash anyway. Do this with the fis command:
RedBoot> fis init
+About to initialize [format] FLASH image system - continue (y/n)? y
+*** Initialize FLASH Image System
+    Warning: device contents not erased, some blocks may not be usable
+    ... Unlock from 0xf07e0000-0xf0800000: .
+    ... Erase from 0xf07e0000-0xf0800000: .
+    ... Program from 0x01ddf000-0x01ddf400 at 0xf07e0000: .
+    ... Lock from 0xf07e0000-0xf0800000: .

Switch Settings

The 80321 board is highly configurable through a number of switches and jumpers. +RedBoot makes some assumptions about board configuration and attention must be paid +to these assumptions for reliable RedBoot operation: +

LED Codes

RedBoot uses the two digit LED display to indicate status during board +initialization. Possible codes are:

LED     Actions
+-------------------------------------------------------------
+   Power-On/Reset
+88
+        Set the CPSR
+        Enable coprocessor access
+        Drain write and fill buffer
+        Setup PBIU chip selects
+A1
+        Enable the Icache
+A2
+        Move FLASH chip select from 0x0 to 0xF0000000
+        Jump to new FLASH location
+A3
+        Setup and enable the MMU
+A4
+        I2C interface initialization
+90
+        Wait for I2C initialization to complete
+91
+        Send address (via I2C) to the DIMM
+92
+        Wait for transmit complete
+93
+        Read SDRAM PD data from DIMM
+94
+        Read remainder of EEPROM data.
+        An error will result in one of the following
+        error codes on the LEDs:
+        77 BAD EEPROM checksum
+        55 I2C protocol error
+        FF bank size error
+A5
+        Setup DDR memory interface
+A6
+        Enable branch target buffer
+        Drain the write & fill buffers
+        Flush Icache, Dcache and BTB
+        Flush instuction and data TLBs
+        Drain the write & fill buffers
+SL
+        ECC Scrub Loop
+SE
+A7
+        Clean, drain, flush the main Dcache
+A8
+        Clean, drain, flush the mini Dcache
+        Flush Dcache
+        Drain the write & fill buffers
+A9
+        Enable ECC
+AA
+        Save SDRAM size
+        Move MMU tables into RAM
+AB
+        Clean, drain, flush the main Dcache
+        Clean, drain, flush the mini Dcache
+        Drain the write & fill buffers
+AC
+        Set the TTB register to DRAM mmu_table
+AD
+        Set mode to IRQ mode
+A7
+        Move SWI & Undefined "vectors" to RAM (at 0x0)
+A6
+        Switch to supervisor mode
+A5
+        Move remaining "vectors" to RAM (at 0x0)
+A4
+        Copy DATA to RAM
+        Initialize interrupt exception environment
+        Initialize stack
+        Clear BSS section
+A3
+        Call platform specific hardware initialization
+A2
+        Run through static constructors
+A1
+        Start up the eCos kernel or RedBoot

Special RedBoot Commands

A special RedBoot command, diag, is used to +access a set of hardware diagnostics. To access the diagnostic menu, +enter diag at the RedBoot prompt: +
RedBoot> diag
+Entering Hardware Diagnostics - Disabling Data Cache!
+
+  IQ80321 Hardware Tests
+
+ 1 - Memory Tests
+ 2 - Repeating Memory Tests
+ 3 - Repeat-On-Fail Memory Tests
+ 4 - Rotary Switch S1 Test
+ 5 - 7 Segment LED Tests
+ 6 - i82544 Ethernet Configuration
+ 7 - Baterry Status Test
+ 8 - Battery Backup SDRAM Memory Test
+ 9 - Timer Test
+10 - PCI Bus test
+11 - CPU Cache Loop (No Return)
+ 0 - quit
+Enter the menu item number (0 to quit):
+Tests for various hardware subsystems are provided, and some tests require +special hardware in order to execute normally. The Ethernet Configuration +item may be used to set the board ethernet address.

Memory Tests

This test is used to test installed DDR SDRAM memory. Five different +tests are run over the given address ranges. If errors are encountered, the +test is aborted and information about the failure is printed. When selected, +the user will be prompted to enter the base address of the test range and its +size. The numbers must be in hex with no leading “0x”

Enter the menu item number (0 to quit): 1
+
+Base address of memory to test (in hex): 100000
+
+Size of memory to test (in hex): 200000
+
+Testing memory from 0x00100000 to 0x002fffff.
+
+Walking 1's test: 
+0000000100000002000000040000000800000010000000200000004000000080
+0000010000000200000004000000080000001000000020000000400000008000
+0001000000020000000400000008000000100000002000000040000000800000
+0100000002000000040000000800000010000000200000004000000080000000
+passed
+32-bit address test: passed
+32-bit address bar test: passed
+8-bit address test: passed
+Byte address bar test: passed
+Memory test done.

i82544 Ethernet Configuration

This test initializes the ethernet controller’s serial EEPROM if +the current contents are invalid. In any case, this test will also allow the +user to enter a six byte ethernet MAC address into the serial EEPROM.

Enter the menu item number (0 to quit): 6
+
+
+Current MAC address: 00:80:4d:46:00:02
+Enter desired MAC address: 00:80:4d:46:00:01
+Writing to the Serial EEPROM... Done
+
+******** Reset The Board To Have Changes Take Effect ********

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=iq80321
+export ARCH_DIR=arm
+export PLATFORM_DIR=xscale/iq80321

The names of configuration files are listed above with the +description of the associated modes.

Interrupts

RedBoot uses an interrupt vector table which is located at address 0x8004. +Entries in this table are pointers to functions with this protoype::
int irq_handler( unsigned vector, unsigned data )
On an IQ80321 +board, the vector argument is one of 32 interrupts defined in hal/arm/xscale/verde/current/include/hal_var_ints.h::
// *** 80200 CPU ***
+#define CYGNUM_HAL_INTERRUPT_DMA0_EOT      0
+#define CYGNUM_HAL_INTERRUPT_DMA0_EOC      1
+#define CYGNUM_HAL_INTERRUPT_DMA1_EOT      2
+#define CYGNUM_HAL_INTERRUPT_DMA1_EOC      3
+#define CYGNUM_HAL_INTERRUPT_RSVD_4        4
+#define CYGNUM_HAL_INTERRUPT_RSVD_5        5
+#define CYGNUM_HAL_INTERRUPT_AA_EOT        6
+#define CYGNUM_HAL_INTERRUPT_AA_EOC        7
+#define CYGNUM_HAL_INTERRUPT_CORE_PMON     8
+#define CYGNUM_HAL_INTERRUPT_TIMER0        9
+#define CYGNUM_HAL_INTERRUPT_TIMER1        10
+#define CYGNUM_HAL_INTERRUPT_I2C_0         11
+#define CYGNUM_HAL_INTERRUPT_I2C_1         12
+#define CYGNUM_HAL_INTERRUPT_MESSAGING     13
+#define CYGNUM_HAL_INTERRUPT_ATU_BIST      14
+#define CYGNUM_HAL_INTERRUPT_PERFMON       15
+#define CYGNUM_HAL_INTERRUPT_CORE_PMU      16
+#define CYGNUM_HAL_INTERRUPT_BIU_ERR       17
+#define CYGNUM_HAL_INTERRUPT_ATU_ERR       18
+#define CYGNUM_HAL_INTERRUPT_MCU_ERR       19
+#define CYGNUM_HAL_INTERRUPT_DMA0_ERR      20
+#define CYGNUM_HAL_INTERRUPT_DMA1_ERR      22
+#define CYGNUM_HAL_INTERRUPT_AA_ERR        23
+#define CYGNUM_HAL_INTERRUPT_MSG_ERR       24
+#define CYGNUM_HAL_INTERRUPT_SSP           25
+#define CYGNUM_HAL_INTERRUPT_RSVD_26       26
+#define CYGNUM_HAL_INTERRUPT_XINT0         27
+#define CYGNUM_HAL_INTERRUPT_XINT1         28
+#define CYGNUM_HAL_INTERRUPT_XINT2         29
+#define CYGNUM_HAL_INTERRUPT_XINT3         30
+#define CYGNUM_HAL_INTERRUPT_HPI           31
+The data passed to the ISR is pulled from a data table (hal_interrupt_data) which immediately follows the interrupt vector table. With +32 interrupts, the data table starts at address 0x8084.

An application may create a normal C function with the above prototype +to be an ISR. Just poke its address into the table at the correct index and +enable the interrupt at its source. The return value of the ISR is ignored +by RedBoot.

Memory Maps

The RAM based page table is located at RAM start + 0x4000. RedBoot may be configured +for one of two memory maps. The difference between them is the location of RAM and the +PCI outbound windows. The alternative memory map may be used when +building RedBoot or eCos by using the RAM_ALTMAP +and ROM_ALTMAP startup types in the configuration. +

X C B  Description
+- - -  ---------------------------------------------
+0 0 0  Uncached/Unbuffered
+0 0 1  Uncached/Buffered
+0 1 0  Cached/Buffered    Write Through, Read Allocate
+0 1 1  Cached/Buffered    Write Back, Read Allocate
+1 0 0  Invalid -- not used
+1 0 1  Uncached/Buffered  No write buffer coalescing
+1 1 0  Mini DCache - Policy set by Aux Ctl Register
+1 1 1  Cached/Buffered    Write Back, Read/Write Allocate
+
+Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x7fffffff    ATU Outbound Direct Window
+0x80000000 - 0x900fffff    ATU Outbound Translate Windows
+0xa0000000 - 0xbfffffff    SDRAM
+0xf0000000 - 0xf0800000    FLASH               (PBIU CS0)
+0xfe800000 - 0xfe800fff    UART                (PBIU CS1)
+0xfe840000 - 0xfe840fff    Left 7-segment LED  (PBIU CS3)
+0xfe850000 - 0xfe850fff    Right 7-segment LED (PBIU CS2)
+0xfe8d0000 - 0xfe8d0fff    Rotary Switch       (PBIU CS4)
+0xfe8f0000 - 0xfe8f0fff    Baterry Status      (PBIU CS5)
+0xfff00000 - 0xffffffff    Verde Memory mapped Registers
+
+
+Default Virtual Map      X C B  Description
+-----------------------  - - -  ----------------------------------
+0x00000000 - 0x1fffffff  1 1 1  SDRAM
+0x20000000 - 0x9fffffff  0 0 0  ATU Outbound Direct Window
+0xa0000000 - 0xb00fffff  0 0 0  ATU Outbound Translate Windows
+0xc0000000 - 0xdfffffff  0 0 0  Uncached alias for SDRAM
+0xe0000000 - 0xe00fffff  1 1 1  Cache flush region (no phys mem)
+0xf0000000 - 0xf0800000  0 1 0  FLASH               (PBIU CS0)
+0xfe800000 - 0xfe800fff  0 0 0  UART                (PBIU CS1)
+0xfe840000 - 0xfe840fff  0 0 0  Left 7-segment LED  (PBIU CS3)
+0xfe850000 - 0xfe850fff  0 0 0  Right 7-segment LED (PBIU CS2)
+0xfe8d0000 - 0xfe8d0fff  0 0 0  Rotary Switch       (PBIU CS4)
+0xfe8f0000 - 0xfe8f0fff  0 0 0  Baterry Status      (PBIU CS5)
+0xfff00000 - 0xffffffff  0 0 0  Verde Memory mapped Registers
+
+Alternate Virtual Map    X C B  Description
+-----------------------  - - -  ----------------------------------
+0x00000000 - 0x000fffff  1 1 1  Alias for 1st MB of SDRAM
+0x00100000 - 0x7fffffff  0 0 0  ATU Outbound Direct Window
+0x80000000 - 0x900fffff  0 0 0  ATU Outbound Translate Windows
+0xa0000000 - 0xbfffffff  1 1 1  SDRAM
+0xc0000000 - 0xdfffffff  0 0 0  Uncached alias for SDRAM
+0xe0000000 - 0xe00fffff  1 1 1  Cache flush region (no phys mem)
+0xf0000000 - 0xf0800000  0 1 0  FLASH               (PBIU CS0)
+0xfe800000 - 0xfe800fff  0 0 0  UART                (PBIU CS1)
+0xfe840000 - 0xfe840fff  0 0 0  Left 7-segment LED  (PBIU CS3)
+0xfe850000 - 0xfe850fff  0 0 0  Right 7-segment LED (PBIU CS2)
+0xfe8d0000 - 0xfe8d0fff  0 0 0  Rotary Switch       (PBIU CS4)
+0xfe8f0000 - 0xfe8f0fff  0 0 0  Baterry Status      (PBIU CS5)
+0xfff00000 - 0xffffffff  0 0 0  Verde Memory mapped Registers


PrevHomeNext
ARM/Xscale Cyclone IQ80310UpCalmRISC/CalmRISC16 Samsung CalmRISC16 Core Evaluation Board
\ No newline at end of file diff --git a/doc/html/ref/kernel-alarms.html b/doc/html/ref/kernel-alarms.html new file mode 100644 index 00000000..eb1fab3b --- /dev/null +++ b/doc/html/ref/kernel-alarms.html @@ -0,0 +1,378 @@ + + + + + + + + +Alarms +
eCos Reference Manual
PrevNext

Alarms

Name

cyg_alarm_create, cyg_alarm_delete, cyg_alarm_initialize, cyg_alarm_enable, cyg_alarm_disable -- Run an alarm function when a number of events have occurred

Description

Kernel alarms are used together with counters and allow for action to +be taken when a certain number of events have occurred. If the counter +is associated with a clock then the alarm action happens when the +appropriate number of clock ticks have occurred, in other words after +a certain period of time. +

Setting up an alarm involves a two-step process. First the alarm must +be created with a call to cyg_alarm_create. This +takes five arguments. The first identifies the counter to which the +alarm should be attached. If the alarm should be attached to the +system's real-time clock then cyg_real_time_clock +and cyg_clock_to_counter can be used to get hold +of the appropriate handle. The next two arguments specify the action +to be taken when the alarm is triggered, in the form of a function +pointer and some data. This function should take the form: +

void
+alarm_handler(cyg_handle_t alarm, cyg_addrword_t data)
+{
+    …
+}
+      

The data argument passed to the alarm function corresponds to the +third argument passed to cyg_alarm_create. +The fourth argument to cyg_alarm_create is used +to return a handle to the newly-created alarm object, and the final +argument provides the memory needed for the alarm object and thus +avoids any need for dynamic memory allocation within the kernel. +

Once an alarm has been created a further call to +cyg_alarm_initialize is needed to activate it. +The first argument specifies the alarm. The second argument indicates +the number of events, for example clock ticks, that need to occur +before the alarm triggers. If the third argument is 0 then the alarm +will only trigger once. A non-zero value specifies that the alarm +should trigger repeatedly, with an interval of the specified number of +events. +

Alarms can be temporarily disabled and reenabled using +cyg_alarm_disable and +cyg_alarm_enable. Alternatively another call to +cyg_alarm_initialize can be used to modify the +behaviour of an existing alarm. If an alarm is no longer required then +the associated resources can be released using +cyg_alarm_delete. +

The alarm function is invoked when a counter tick occurs, in other +words when there is a call to cyg_counter_tick, +and will happen in the same context. If the alarm is associated with +the system's real-time clock then this will be DSR context, following +a clock interrupt. If the alarm is associated with some other +application-specific counter then the details will depend on how that +counter is updated. +

If two or more alarms are registered for precisely the same counter tick, +the order of execution of the alarm functions is unspecified. +

Valid contexts

cyg_alarm_create +cyg_alarm_initialize is typically called during +system initialization but may also be called in thread context. The +same applies to cyg_alarm_delete. +cyg_alarm_initialize, +cyg_alarm_disable and +cyg_alarm_enable may be called during +initialization or from thread or DSR context, but +cyg_alarm_enable and +cyg_alarm_initialize may be expensive operations +and should only be called when necessary. +


PrevHomeNext
ClocksUpMutexes
\ No newline at end of file diff --git a/doc/html/ref/kernel-characterization.html b/doc/html/ref/kernel-characterization.html new file mode 100644 index 00000000..10df8e57 --- /dev/null +++ b/doc/html/ref/kernel-characterization.html @@ -0,0 +1,1349 @@ + + + + + + + + +Kernel Real-time Characterization +
eCos Reference Manual
PrevNext

Kernel Real-time Characterization

Name

tm_basic -- Measure the performance of the eCos kernel

Description

When building a real-time system, care must be taken to ensure that +the system will be able to perform properly within the constraints of +that system. One of these constraints may be how fast certain +operations can be performed. Another might be how deterministic the +overall behavior of the system is. Lastly the memory footprint (size) +and unit cost may be important. +

One of the major problems encountered while evaluating a system will +be how to compare it with possible alternatives. Most manufacturers of +real-time systems publish performance numbers, ostensibly so that +users can compare the different offerings. However, what these numbers +mean and how they were gathered is often not clear. The values are +typically measured on a particular piece of hardware, so in order to +truly compare, one must obtain measurements for exactly the same set +of hardware that were gathered in a similar fashion. +

Two major items need to be present in any given set of measurements. +First, the raw values for the various operations; these are typically +quite easy to measure and will be available for most systems. Second, +the determinacy of the numbers; in other words how much the value +might change depending on other factors within the system. This value +is affected by a number of factors: how long interrupts might be +masked, whether or not the function can be interrupted, even very +hardware-specific effects such as cache locality and pipeline usage. +It is very difficult to measure the determinacy of any given +operation, but that determinacy is fundamentally important to proper +overall characterization of a system. +

In the discussion and numbers that follow, three key measurements are +provided. The first measurement is an estimate of the interrupt +latency: this is the length of time from when a hardware interrupt +occurs until its Interrupt Service Routine (ISR) is called. The second +measurement is an estimate of overall interrupt overhead: this is the +length of time average interrupt processing takes, as measured by the +real-time clock interrupt (other interrupt sources will certainly take +a different amount of time, but this data cannot be easily gathered). +The third measurement consists of the timings for the various kernel +primitives. +

Methodology

Key operations in the kernel were measured by using a simple test +program which exercises the various kernel primitive operations. A +hardware timer, normally the one used to drive the real-time clock, +was used for these measurements. In most cases this timer can be read +with quite high resolution, typically in the range of a few +microseconds. For each measurement, the operation was repeated a +number of times. Time stamps were obtained directly before and after +the operation was performed. The data gathered for the entire set of +operations was then analyzed, generating average (mean), maximum and +minimum values. The sample variance (a measure of how close most +samples are to the mean) was also calculated. The cost of obtaining +the real-time clock timer values was also measured, and was subtracted +from all other times. +

Most kernel functions can be measured separately. In each case, a +reasonable number of iterations are performed. Where the test case +involves a kernel object, for example creating a task, each iteration +is performed on a different object. There is also a set of tests which +measures the interactions between multiple tasks and certain kernel +primitives. Most functions are tested in such a way as to determine +the variations introduced by varying numbers of objects in the system. +For example, the mailbox tests measure the cost of a 'peek' operation +when the mailbox is empty, has a single item, and has multiple items +present. In this way, any effects of the state of the object or how +many items it contains can be determined. +

There are a few things to consider about these measurements. Firstly, +they are quite micro in scale and only measure the operation in +question. These measurements do not adequately describe how the +timings would be perturbed in a real system with multiple interrupting +sources. Secondly, the possible aberration incurred by the real-time +clock (system heartbeat tick) is explicitly avoided. Virtually all +kernel functions have been designed to be interruptible. Thus the +times presented are typical, but best case, since any particular +function may be interrupted by the clock tick processing. This number +is explicitly calculated so that the value may be included in any +deadline calculations required by the end user. Lastly, the reported +measurements were obtained from a system built with all options at +their default values. Kernel instrumentation and asserts are also +disabled for these measurements. Any number of configuration options +can change the measured results, sometimes quite dramatically. For +example, mutexes are using priority inheritance in these measurements. +The numbers will change if the system is built with priority +inheritance on mutex variables turned off. +

The final value that is measured is an estimate of interrupt latency. +This particular value is not explicitly calculated in the test program +used, but rather by instrumenting the kernel itself. The raw number of +timer ticks that elapse between the time the timer generates an +interrupt and the start of the timer ISR is kept in the kernel. These +values are printed by the test program after all other operations have +been tested. Thus this should be a reasonable estimate of the +interrupt latency over time. +

Using these Measurements

These measurements can be used in a number of ways. The most typical +use will be to compare different real-time kernel offerings on similar +hardware, another will be to estimate the cost of implementing a task +using eCos (applications can be examined to see what effect the kernel +operations will have on the total execution time). Another use would +be to observe how the tuning of the kernel affects overall operation. +

Influences on Performance

A number of factors can affect real-time performance in a system. One +of the most common factors, yet most difficult to characterize, is the +effect of device drivers and interrupts on system timings. Different +device drivers will have differing requirements as to how long +interrupts are suppressed, for example. The eCos system has been +designed with this in mind, by separating the management of interrupts +(ISR handlers) and the processing required by the interrupt +(DSR—Deferred Service Routine— handlers). However, since +there is so much variability here, and indeed most device drivers will +come from the end users themselves, these effects cannot be reliably +measured. Attempts have been made to measure the overhead of the +single interrupt that eCos relies on, the real-time clock timer. This +should give you a reasonable idea of the cost of executing interrupt +handling for devices. +

Measured Items

This section describes the various tests and the numbers presented. +All tests use the C kernel API (available by way of +cyg/kernel/kapi.h). There is a single main thread +in the system that performs the various tests. Additional threads may +be created as part of the testing, but these are short lived and are +destroyed between tests unless otherwise noted. The terminology +“lower priority” means a priority that is less important, +not necessarily lower in numerical value. A higher priority thread +will run in preference to a lower priority thread even though the +priority value of the higher priority thread may be numerically less +than that of the lower priority thread. +

Thread Primitives

Create thread

This test measures the cyg_thread_create() call. +Each call creates a totally new thread. The set of threads created by +this test will be reused in the subsequent thread primitive tests. +

Yield thread

This test measures the cyg_thread_yield() call. +For this test, there are no other runnable threads, thus the test +should just measure the overhead of trying to give up the CPU. +

Suspend [suspended] thread

This test measures the cyg_thread_suspend() call. +A thread may be suspended multiple times; each thread is already +suspended from its initial creation, and is suspended again. +

Resume thread

This test measures the cyg_thread_resume() call. +All of the threads have a suspend count of 2, thus this call does not +make them runnable. This test just measures the overhead of resuming a +thread. +

Set priority

This test measures the cyg_thread_set_priority() +call. Each thread, currently suspended, has its priority set to a new +value. +

Get priority

This test measures the cyg_thread_get_priority() +call. +

Kill [suspended] thread

This test measures the cyg_thread_kill() call. +Each thread in the set is killed. All threads are known to be +suspended before being killed. +

Yield [no other] thread

This test measures the cyg_thread_yield() call +again. This is to demonstrate that the +cyg_thread_yield() call has a fixed overhead, +regardless of whether there are other threads in the system. +

Resume [suspended low priority] thread

This test measures the cyg_thread_resume() call +again. In this case, the thread being resumed is lower priority than +the main thread, thus it will simply become ready to run but not be +granted the CPU. This test measures the cost of making a thread ready +to run. +

Resume [runnable low priority] thread

This test measures the cyg_thread_resume() call +again. In this case, the thread being resumed is lower priority than +the main thread and has already been made runnable, so in fact the +resume call has no effect. +

Suspend [runnable] thread

This test measures the cyg_thread_suspend() call +again. In this case, each thread has already been made runnable (by +previous tests). +

Yield [only low priority] thread

This test measures the cyg_thread_yield() call. +In this case, there are many other runnable threads, but they are all +lower priority than the main thread, thus no thread switches will take +place. +

Suspend [runnable->not runnable] thread

This test measures the cyg_thread_suspend() call +again. The thread being suspended will become non-runnable by this +action. +

Kill [runnable] thread

This test measures the cyg_thread_kill() call +again. In this case, the thread being killed is currently runnable, +but lower priority than the main thread. +

Resume [high priority] thread

This test measures the cyg_thread_resume() call. +The thread being resumed is higher priority than the main thread, thus +a thread switch will take place on each call. In fact there will be +two thread switches; one to the new higher priority thread and a +second back to the test thread. The test thread exits immediately. +

Thread switch

This test attempts to measure the cost of switching from one thread to +another. Two equal priority threads are started and they will each +yield to the other for a number of iterations. A time stamp is +gathered in one thread before the +cyg_thread_yield() call and after the call in the +other thread. +

Scheduler Primitives

Scheduler lock

This test measures the cyg_scheduler_lock() call. +

Scheduler unlock [0 threads]

This test measures the cyg_scheduler_unlock() +call. There are no other threads in the system and the unlock happens +immediately after a lock so there will be no pending DSR’s to +run. +

Scheduler unlock [1 suspended thread]

This test measures the cyg_scheduler_unlock() +call. There is one other thread in the system which is currently +suspended. +

Scheduler unlock [many suspended threads]

This test measures the cyg_scheduler_unlock() +call. There are many other threads in the system which are currently +suspended. The purpose of this test is to determine the cost of having +additional threads in the system when the scheduler is activated by +way of cyg_scheduler_unlock(). +

Scheduler unlock [many low priority threads]

This test measures the cyg_scheduler_unlock() +call. There are many other threads in the system which are runnable +but are lower priority than the main thread. The purpose of this test +is to determine the cost of having additional threads in the system +when the scheduler is activated by way of +cyg_scheduler_unlock(). +

Mutex Primitives

Init mutex

This test measures the cyg_mutex_init() call. A +number of separate mutex variables are created. The purpose of this +test is to measure the cost of creating a new mutex and introducing it +to the system. +

Lock [unlocked] mutex

This test measures the cyg_mutex_lock() call. The +purpose of this test is to measure the cost of locking a mutex which +is currently unlocked. There are no other threads executing in the +system while this test runs. +

Unlock [locked] mutex

This test measures the cyg_mutex_unlock() call. +The purpose of this test is to measure the cost of unlocking a mutex +which is currently locked. There are no other threads executing in the +system while this test runs. +

Trylock [unlocked] mutex

This test measures the cyg_mutex_trylock() call. +The purpose of this test is to measure the cost of locking a mutex +which is currently unlocked. There are no other threads executing in +the system while this test runs. +

Trylock [locked] mutex

This test measures the cyg_mutex_trylock() call. +The purpose of this test is to measure the cost of locking a mutex +which is currently locked. There are no other threads executing in the +system while this test runs. +

Destroy mutex

This test measures the cyg_mutex_destroy() call. +The purpose of this test is to measure the cost of deleting a mutex +from the system. There are no other threads executing in the system +while this test runs. +

Unlock/Lock mutex

This test attempts to measure the cost of unlocking a mutex for which +there is another higher priority thread waiting. When the mutex is +unlocked, the higher priority waiting thread will immediately take the +lock. The time from when the unlock is issued until after the lock +succeeds in the second thread is measured, thus giving the round-trip +or circuit time for this type of synchronizer. +

Mailbox Primitives

Create mbox

This test measures the cyg_mbox_create() call. A +number of separate mailboxes is created. The purpose of this test is +to measure the cost of creating a new mailbox and introducing it to +the system. +

Peek [empty] mbox

This test measures the cyg_mbox_peek() call. An +attempt is made to peek the value in each mailbox, which is currently +empty. The purpose of this test is to measure the cost of checking a +mailbox for a value without blocking. +

Put [first] mbox

This test measures the cyg_mbox_put() call. One +item is added to a currently empty mailbox. The purpose of this test +is to measure the cost of adding an item to a mailbox. There are no +other threads currently waiting for mailbox items to arrive. +

Peek [1 msg] mbox

This test measures the cyg_mbox_peek() call. An +attempt is made to peek the value in each mailbox, which contains a +single item. The purpose of this test is to measure the cost of +checking a mailbox which has data to deliver. +

Put [second] mbox

This test measures the cyg_mbox_put() call. A +second item is added to a mailbox. The purpose of this test is to +measure the cost of adding an additional item to a mailbox. There are +no other threads currently waiting for mailbox items to arrive. +

Peek [2 msgs] mbox

This test measures the cyg_mbox_peek() call. An +attempt is made to peek the value in each mailbox, which contains two +items. The purpose of this test is to measure the cost of checking a +mailbox which has data to deliver. +

Get [first] mbox

This test measures the cyg_mbox_get() call. The +first item is removed from a mailbox that currently contains two +items. The purpose of this test is to measure the cost of obtaining an +item from a mailbox without blocking. +

Get [second] mbox

This test measures the cyg_mbox_get() call. The +last item is removed from a mailbox that currently contains one item. +The purpose of this test is to measure the cost of obtaining an item +from a mailbox without blocking. +

Tryput [first] mbox

This test measures the cyg_mbox_tryput() call. A +single item is added to a currently empty mailbox. The purpose of this +test is to measure the cost of adding an item to a mailbox. +

Peek item [non-empty] mbox

This test measures the cyg_mbox_peek_item() call. +A single item is fetched from a mailbox that contains a single item. +The purpose of this test is to measure the cost of obtaining an item +without disturbing the mailbox. +

Tryget [non-empty] mbox

This test measures the cyg_mbox_tryget() call. A +single item is removed from a mailbox that contains exactly one item. +The purpose of this test is to measure the cost of obtaining one item +from a non-empty mailbox. +

Peek item [empty] mbox

This test measures the cyg_mbox_peek_item() call. +An attempt is made to fetch an item from a mailbox that is empty. The +purpose of this test is to measure the cost of trying to obtain an +item when the mailbox is empty. +

Tryget [empty] mbox

This test measures the cyg_mbox_tryget() call. An +attempt is made to fetch an item from a mailbox that is empty. The +purpose of this test is to measure the cost of trying to obtain an +item when the mailbox is empty. +

Waiting to get mbox

This test measures the cyg_mbox_waiting_to_get() +call. The purpose of this test is to measure the cost of determining +how many threads are waiting to obtain a message from this mailbox. +

Waiting to put mbox

This test measures the cyg_mbox_waiting_to_put() +call. The purpose of this test is to measure the cost of determining +how many threads are waiting to put a message into this mailbox. +

Delete mbox

This test measures the cyg_mbox_delete() call. +The purpose of this test is to measure the cost of destroying a +mailbox and removing it from the system. +

Put/Get mbox

In this round-trip test, one thread is sending data to a mailbox that +is being consumed by another thread. The time from when the data is +put into the mailbox until it has been delivered to the waiting thread +is measured. Note that this time will contain a thread switch. +

Semaphore Primitives

Init semaphore

This test measures the cyg_semaphore_init() call. +A number of separate semaphore objects are created and introduced to +the system. The purpose of this test is to measure the cost of +creating a new semaphore. +

Post [0] semaphore

This test measures the cyg_semaphore_post() call. +Each semaphore currently has a value of 0 and there are no other +threads in the system. The purpose of this test is to measure the +overhead cost of posting to a semaphore. This cost will differ if +there is a thread waiting for the semaphore. +

Wait [1] semaphore

This test measures the cyg_semaphore_wait() call. +The semaphore has a current value of 1 so the call is non-blocking. +The purpose of the test is to measure the overhead of +“taking” a semaphore. +

Trywait [0] semaphore

This test measures the cyg_semaphore_trywait() +call. The semaphore has a value of 0 when the call is made. The +purpose of this test is to measure the cost of seeing if a semaphore +can be “taken” without blocking. In this case, the answer +would be no. +

Trywait [1] semaphore

This test measures the cyg_semaphore_trywait() +call. The semaphore has a value of 1 when the call is made. The +purpose of this test is to measure the cost of seeing if a semaphore +can be “taken” without blocking. In this case, the answer +would be yes. +

Peek semaphore

This test measures the cyg_semaphore_peek() call. +The purpose of this test is to measure the cost of obtaining the +current semaphore count value. +

Destroy semaphore

This test measures the cyg_semaphore_destroy() +call. The purpose of this test is to measure the cost of deleting a +semaphore from the system. +

Post/Wait semaphore

In this round-trip test, two threads are passing control back and +forth by using a semaphore. The time from when one thread calls +cyg_semaphore_post() until the other thread +completes its cyg_semaphore_wait() is measured. +Note that each iteration of this test will involve a thread switch. +

Counters

Create counter

This test measures the cyg_counter_create() call. +A number of separate counters are created. The purpose of this test is +to measure the cost of creating a new counter and introducing it to +the system. +

Get counter value

This test measures the +cyg_counter_current_value() call. The current +value of each counter is obtained. +

Set counter value

This test measures the cyg_counter_set_value() +call. Each counter is set to a new value. +

Tick counter

This test measures the cyg_counter_tick() call. +Each counter is “ticked” once. +

Delete counter

This test measures the cyg_counter_delete() call. +Each counter is deleted from the system. The purpose of this test is +to measure the cost of deleting a counter object. +

Alarms

Create alarm

This test measures the cyg_alarm_create() call. A +number of separate alarms are created, all attached to the same +counter object. The purpose of this test is to measure the cost of +creating a new counter and introducing it to the system. +

Initialize alarm

This test measures the cyg_alarm_initialize() +call. Each alarm is initialized to a small value. +

Disable alarm

This test measures the cyg_alarm_disable() call. +Each alarm is explicitly disabled. +

Enable alarm

This test measures the cyg_alarm_enable() call. +Each alarm is explicitly enabled. +

Delete alarm

This test measures the cyg_alarm_delete() call. +Each alarm is destroyed. The purpose of this test is to measure the +cost of deleting an alarm and removing it from the system. +

Tick counter [1 alarm]

This test measures the cyg_counter_tick() call. A +counter is created that has a single alarm attached to it. The purpose +of this test is to measure the cost of “ticking” a counter +when it has a single attached alarm. In this test, the alarm is not +activated (fired). +

Tick counter [many alarms]

This test measures the cyg_counter_tick() call. A +counter is created that has multiple alarms attached to it. The +purpose of this test is to measure the cost of “ticking” a +counter when it has many attached alarms. In this test, the alarms are +not activated (fired). +

Tick & fire counter [1 alarm]

This test measures the cyg_counter_tick() call. A +counter is created that has a single alarm attached to it. The purpose +of this test is to measure the cost of “ticking” a counter +when it has a single attached alarm. In this test, the alarm is +activated (fired). Thus the measured time will include the overhead of +calling the alarm callback function. +

Tick & fire counter [many alarms]

This test measures the cyg_counter_tick() call. A +counter is created that has multiple alarms attached to it. The +purpose of this test is to measure the cost of “ticking” a +counter when it has many attached alarms. In this test, the alarms are +activated (fired). Thus the measured time will include the overhead of +calling the alarm callback function. +

Alarm latency [0 threads]

This test attempts to measure the latency in calling an alarm callback +function. The time from the clock interrupt until the alarm function +is called is measured. In this test, there are no threads that can be +run, other than the system idle thread, when the clock interrupt +occurs (all threads are suspended). +

Alarm latency [2 threads]

This test attempts to measure the latency in calling an alarm callback +function. The time from the clock interrupt until the alarm function +is called is measured. In this test, there are exactly two threads +which are running when the clock interrupt occurs. They are simply +passing back and forth by way of the +cyg_thread_yield() call. The purpose of this test +is to measure the variations in the latency when there are executing +threads. +

Alarm latency [many threads]

This test attempts to measure the latency in calling an alarm callback +function. The time from the clock interrupt until the alarm function +is called is measured. In this test, there are a number of threads +which are running when the clock interrupt occurs. They are simply +passing back and forth by way of the +cyg_thread_yield() call. The purpose of this test +is to measure the variations in the latency when there are many +executing threads. +


PrevHomeNext
Interrupt HandlingUpRedBoot™ User's Guide
\ No newline at end of file diff --git a/doc/html/ref/kernel-clocks.html b/doc/html/ref/kernel-clocks.html new file mode 100644 index 00000000..d1b906e7 --- /dev/null +++ b/doc/html/ref/kernel-clocks.html @@ -0,0 +1,433 @@ + + + + + + + + +Clocks +
eCos Reference Manual
PrevNext

Clocks

Name

cyg_clock_create, cyg_clock_delete, cyg_clock_to_counter, cyg_clock_set_resolution, cyg_clock_get_resolution, cyg_real_time_clock, cyg_current_time -- Provide system clocks

Description

In the eCos kernel clock objects are a special form of counter objects. They are attached to +a specific type of hardware, clocks that generate ticks at very +specific time intervals, whereas counters can be used with any event +source. +

In a default configuration the kernel provides a single clock +instance, the real-time clock. This gets used for timeslicing and for +operations that involve a timeout, for example +cyg_semaphore_timed_wait. If this functionality +is not required it can be removed from the system using the +configuration option CYGVAR_KERNEL_COUNTERS_CLOCK. +Otherwise the real-time clock can be accessed by a call to +cyg_real_time_clock, allowing applications to +attach alarms, and the current counter value can be obtained using +cyg_current_time. +

Applications can create and destroy additional clocks if desired, +using cyg_clock_create and +cyg_clock_delete. The first argument to +cyg_clock_create specifies the +resolution this clock +will run at. The second argument is used to return a handle for this +clock object, and the third argument provides the kernel with the +memory needed to hold this object. This clock will not actually tick +by itself. Instead it is the responsibility of application code to +initialize a suitable hardware timer to generate interrupts at the +appropriate frequency, install an interrupt handler for this, and +call cyg_counter_tick from inside the DSR. +Associated with each clock is a kernel counter, a handle for which can +be obtained using cyg_clock_to_counter. +

Clock Resolutions and Ticks

At the kernel level all clock-related operations including delays, +timeouts and alarms work in units of clock ticks, rather than in units +of seconds or milliseconds. If the calling code, whether the +application or some other package, needs to operate using units such +as milliseconds then it has to convert from these units to clock +ticks. +

The main reason for this is that it accurately reflects the +hardware: calling something like nanosleep with a +delay of ten nanoseconds will not work as intended on any real +hardware because timer interrupts simply will not happen that +frequently; instead calling cyg_thread_delay with +the equivalent delay of 0 ticks gives a much clearer indication that +the application is attempting something inappropriate for the target +hardware. Similarly, passing a delay of five ticks to +cyg_thread_delay makes it fairly obvious that +the current thread will be suspended for somewhere between four and +five clock periods, as opposed to passing 50000000 to +nanosleep which suggests a granularity that is +not actually provided. +

A secondary reason is that conversion between clock ticks and units +such as milliseconds can be somewhat expensive, and whenever possible +should be done at compile-time or by the application developer rather +than at run-time. This saves code size and cpu cycles. +

The information needed to perform these conversions is the clock +resolution. This is a structure with two fields, a dividend and a +divisor, and specifies the number of nanoseconds between clock ticks. +For example a clock that runs at 100Hz will have 10 milliseconds +between clock ticks, or 10000000 nanoseconds. The ratio between the +resolution's dividend and divisor will therefore be 10000000 to 1, and +typical values for these might be 1000000000 and 100. If the clock +runs at a different frequency, say 60Hz, the numbers could be +1000000000 and 60 respectively. Given a delay in nanoseconds, this can +be converted to clock ticks by multiplying with the the divisor and +then dividing by the dividend. For example a delay of 50 milliseconds +corresponds to 50000000 nanoseconds, and with a clock frequency of +100Hz this can be converted to +((50000000 * 100) / 1000000000) = 5 +clock ticks. Given the large numbers involved this arithmetic normally +has to be done using 64-bit precision and the +long long data type, but allows code to run on +hardware with unusual clock frequencies. +

The default frequency for the real-time clock on any platform is +usually about 100Hz, but platform-specific documentation should be +consulted for this information. Usually it is possible to override +this default by configuration options, but again this depends on the +capabilities of the underlying hardware. The resolution for any clock +can be obtained using cyg_clock_get_resolution. +For clocks created by application code, there is also a function +cyg_clock_set_resolution. This does not affect +the underlying hardware timer in any way, it merely updates the +information that will be returned in subsequent calls to +cyg_clock_get_resolution: changing the actual +underlying clock frequency will require appropriate manipulation of +the timer hardware. +

Valid contexts

cyg_clock_create is usually only called during +system initialization (if at all), but may also be called from thread +context. The same applies to cyg_clock_delete. +The remaining functions may be called during initialization, from +thread context, or from DSR context, although it should be noted that +there is no locking between +cyg_clock_get_resolution and +cyg_clock_set_resolution so theoretically it is +possible that the former returns an inconsistent data structure. +


PrevHomeNext
CountersUpAlarms
\ No newline at end of file diff --git a/doc/html/ref/kernel-condition-variables.html b/doc/html/ref/kernel-condition-variables.html new file mode 100644 index 00000000..99ff8255 --- /dev/null +++ b/doc/html/ref/kernel-condition-variables.html @@ -0,0 +1,556 @@ + + + + + + + + +Condition Variables +
eCos Reference Manual
PrevNext

Condition Variables

Name

cyg_cond_init, cyg_cond_destroy, cyg_cond_wait, cyg_cond_timed_wait, cyg_cond_signal, cyg_cond_broadcast -- Synchronization primitive

Description

Condition variables are used in conjunction with mutexes to implement +long-term waits for some condition to become true. For example +consider a set of functions that control access to a pool of +resources: +


cyg_mutex_t res_lock;
+res_t res_pool[RES_MAX];
+int res_count = RES_MAX;
+
+void res_init(void)
+{
+    cyg_mutex_init(&res_lock);
+    <fill pool with resources>
+}
+
+res_t res_allocate(void)
+{
+    res_t res;
+
+    cyg_mutex_lock(&res_lock);               // lock the mutex
+
+    if( res_count == 0 )                     // check for free resource
+        res = RES_NONE;                      // return RES_NONE if none
+    else
+    {
+        res_count--;                         // allocate a resources
+        res = res_pool[res_count];
+    }
+
+    cyg_mutex_unlock(&res_lock);             // unlock the mutex
+
+    return res;
+}
+
+void res_free(res_t res)
+{
+    cyg_mutex_lock(&res_lock);               // lock the mutex
+
+    res_pool[res_count] = res;               // free the resource
+    res_count++;
+
+    cyg_mutex_unlock(&res_lock);             // unlock the mutex
+}
+      

These routines use the variable res_count to keep +track of the resources available. If there are none then +res_allocate returns RES_NONE, +which the caller must check for and take appropriate error handling +actions. +

Now suppose that we do not want to return +RES_NONE when there are no resources, but want to +wait for one to become available. This is where a condition variable +can be used: +


cyg_mutex_t res_lock;
+cyg_cond_t res_wait;
+res_t res_pool[RES_MAX];
+int res_count = RES_MAX;
+
+void res_init(void)
+{
+    cyg_mutex_init(&res_lock);
+    cyg_cond_init(&res_wait, &res_lock);
+    <fill pool with resources>
+}
+
+res_t res_allocate(void)
+{
+    res_t res;
+
+    cyg_mutex_lock(&res_lock);               // lock the mutex
+
+    while( res_count == 0 )                  // wait for a resources
+        cyg_cond_wait(&res_wait);
+
+    res_count--;                             // allocate a resource
+    res = res_pool[res_count];
+
+    cyg_mutex_unlock(&res_lock);             // unlock the mutex
+
+    return res;
+}
+
+void res_free(res_t res)
+{
+    cyg_mutex_lock(&res_lock);               // lock the mutex
+
+    res_pool[res_count] = res;               // free the resource
+    res_count++;
+
+    cyg_cond_signal(&res_wait);              // wake up any waiting allocators
+
+    cyg_mutex_unlock(&res_lock);             // unlock the mutex
+}
+      

In this version of the code, when res_allocate +detects that there are no resources it calls +cyg_cond_wait. This does two things: it unlocks +the mutex, and puts the calling thread to sleep on the condition +variable. When res_free is eventually called, it +puts a resource back into the pool and calls +cyg_cond_signal to wake up any thread waiting on +the condition variable. When the waiting thread eventually gets to run again, +it will re-lock the mutex before returning from +cyg_cond_wait. +

There are two important things to note about the way in which this +code works. The first is that the mutex unlock and wait in +cyg_cond_wait are atomic: no other thread can run +between the unlock and the wait. If this were not the case then a call +to res_free by that thread would release the +resource but the call to cyg_cond_signal would be +lost, and the first thread would end up waiting when there were +resources available. +

The second feature is that the call to +cyg_cond_wait is in a while +loop and not a simple if statement. This is because +of the need to re-lock the mutex in cyg_cond_wait +when the signalled thread reawakens. If there are other threads +already queued to claim the lock then this thread must wait. Depending +on the scheduler and the queue order, many other threads may have +entered the critical section before this one gets to run. So the +condition that it was waiting for may have been rendered false. Using +a loop around all condition variable wait operations is the only way +to guarantee that the condition being waited for is still true after +waiting. +

Before a condition variable can be used it must be initialized with a +call to cyg_cond_init. This requires two +arguments, memory for the data structure and a pointer to an existing +mutex. This mutex will not be initialized by +cyg_cond_init, instead a separate call to +cyg_mutex_init is required. If a condition +variable is no longer required and there are no threads waiting on it +then cyg_cond_destroy can be used. +

When a thread needs to wait for a condition to be satisfied it can +call cyg_cond_wait. The thread must have already +locked the mutex that was specified in the +cyg_cond_init call. This mutex will be unlocked +and the current thread will be suspended in an atomic operation. When +some other thread performs a signal or broadcast operation the current +thread will be woken up and automatically reclaim ownership of the mutex +again, allowing it to examine global state and determine whether or +not the condition is now satisfied. The kernel supplies a variant of +this function, cyg_cond_timed_wait, which can be +used to wait on the condition variable or until some number of clock +ticks have occurred. The mutex will always be reclaimed before +cyg_cond_timed_wait returns, regardless of +whether it was a result of a signal operation or a timeout. +

There is no cyg_cond_trywait function because +this would not serve any purpose. If a thread has locked the mutex and +determined that the condition is satisfied, it can just release the +mutex and return. There is no need to perform any operation on the +condition variable. +

When a thread changes shared state that may affect some other thread +blocked on a condition variable, it should call either +cyg_cond_signal or +cyg_cond_broadcast. These calls do not require +ownership of the mutex, but usually the mutex will have been claimed +before updating the shared state. A signal operation only wakes up the +first thread that is waiting on the condition variable, while a +broadcast wakes up all the threads. If there are no threads waiting on +the condition variable at the time, then the signal or broadcast will +have no effect: past signals are not counted up or remembered in any +way. Typically a signal should be used when all threads will check the +same condition and at most one thread can continue running. A +broadcast should be used if threads check slightly different +conditions, or if the change to the global state might allow multiple +threads to proceed. +

Valid contexts

cyg_cond_init is typically called during system +initialization but may also be called in thread context. The same +applies to cyg_cond_delete. +cyg_cond_wait and +cyg_cond_timedwait may only be called from thread +context since they may block. cyg_cond_signal and +cyg_cond_broadcast may be called from thread or +DSR context. +


PrevHomeNext
MutexesUpSemaphores
\ No newline at end of file diff --git a/doc/html/ref/kernel-counters.html b/doc/html/ref/kernel-counters.html new file mode 100644 index 00000000..4827e16a --- /dev/null +++ b/doc/html/ref/kernel-counters.html @@ -0,0 +1,349 @@ + + + + + + + + +Counters +
eCos Reference Manual
PrevNext

Counters

Name

cyg_counter_create, cyg_counter_delete, cyg_counter_current_value, cyg_counter_set_value, cyg_counter_tick -- Count event occurrences

Description

Kernel counters can be used to keep track of how many times a +particular event has occurred. Usually this event is an external +signal of some sort. The most common use of counters is in the +implementation of clocks, but they can be useful with other event +sources as well. Application code can attach alarms to counters, causing a function +to be called when some number of events have occurred. +

A new counter is initialized by a call to +cyg_counter_create. The first argument is used to +return a handle to the new counter which can be used for subsequent +operations. The second argument allows the application to provide the +memory needed for the object, thus eliminating any need for dynamic +memory allocation within the kernel. If a counter is no longer +required and does not have any alarms attached then +cyg_counter_delete can be used to release the +resources, allowing the cyg_counter data +structure to be re-used. +

Initializing a counter does not automatically attach it to any source +of events. Instead some other code needs to call +cyg_counter_tick whenever a suitable event +occurs, which will cause the counter to be incremented and may cause +alarms to trigger. The current value associated with the counter can +be retrieved using cyg_counter_current_value and +modified with cyg_counter_set_value. Typically +the latter function is only used during initialization, for example to +set a clock to wallclock time, but it can be used to reset a counter +if necessary. However cyg_counter_set_value will +never trigger any alarms. A newly initialized counter has a starting +value of 0. +

The kernel provides two different implementations of counters. The +default is CYGIMP_KERNEL_COUNTERS_SINGLE_LIST which +stores all alarms attached to the counter on a single list. This is +simple and usually efficient. However when a tick occurs the kernel +code has to traverse this list, typically at DSR level, so if there +are a significant number of alarms attached to a single counter this +will affect the system's dispatch latency. The alternative +implementation, CYGIMP_KERNEL_COUNTERS_MULTI_LIST, +stores each alarm in one of an array of lists such that at most one of +the lists needs to be searched per clock tick. This involves extra +code and data, but can improve real-time responsiveness in some +circumstances. Another configuration option that is relevant here +is CYGIMP_KERNEL_COUNTERS_SORT_LIST, which is +disabled by default. This provides a trade off between doing work +whenever a new alarm is added to a counter and doing work whenever a +tick occurs. It is application-dependent which of these is more +appropriate. +

Valid contexts

cyg_counter_create is typically called during +system initialization but may also be called in thread context. +Similarly cyg_counter_delete may be called during +initialization or in thread context. +cyg_counter_current_value, +cyg_counter_set_value and +cyg_counter_tick may be called during +initialization or from thread or DSR context. In fact, +cyg_counter_tick is usually called from inside a +DSR in response to an external event of some sort. +


PrevHomeNext
Exception handlingUpClocks
\ No newline at end of file diff --git a/doc/html/ref/kernel-exceptions.html b/doc/html/ref/kernel-exceptions.html new file mode 100644 index 00000000..75e5f9fa --- /dev/null +++ b/doc/html/ref/kernel-exceptions.html @@ -0,0 +1,413 @@ + + + + + + + + +Exception handling +
eCos Reference Manual
PrevNext

Exception handling

Name

cyg_exception_set_handler, cyg_exception_clear_handler, cyg_exception_call_handler -- Handle processor exceptions

Description

Sometimes code attempts operations that are not legal on the current +hardware, for example dividing by zero, or accessing data through a +pointer that is not properly aligned. When this happens the hardware +will raise an exception. This is very similar to an interrupt, but +happens synchronously with code execution rather than asynchronously +and hence can be tied to the thread that is currently running. +

The exceptions that can be raised depend very much on the hardware, +especially the processor. The corresponding documentation should be +consulted for more details. Alternatively the architectural HAL header +file hal_intr.h, or one of the +variant or platform header files it includes, will contain appropriate +definitions. The details of how to handle exceptions, including +whether or not it is possible to recover from them, also depend on the +hardware. +

Exception handling is optional, and can be disabled through the +configuration option CYGPKG_KERNEL_EXCEPTIONS. If +an application has been exhaustively tested and is trusted never to +raise a hardware exception then this option can be disabled and code +and data sizes will be reduced somewhat. If exceptions are left +enabled then the system will provide default handlers for the various +exceptions, but these do nothing. Even the specific type of exception +is ignored, so there is no point in attempting to decode this and +distinguish between say a divide-by-zero and an unaligned access. +If the application installs its own handlers and wants details of the +specific exception being raised then the configuration option +CYGSEM_KERNEL_EXCEPTIONS_DECODE has to be enabled. +

An alternative handler can be installed using +cyg_exception_set_handler. This requires a code +for the exception, a function pointer for the new exception handler, +and a parameter to be passed to this handler. Details of the +previously installed exception handler will be returned via the +remaining two arguments, allowing that handler to be reinstated, or +null pointers can be used if this information is of no interest. An +exception handling function should take the following form: +

void
+my_exception_handler(cyg_addrword_t data, cyg_code_t exception, cyg_addrword_t info)
+{
+    …
+}
+      

The data argument corresponds to the new_data +parameter supplied to cyg_exception_set_handler. +The exception code is provided as well, in case a single handler is +expected to support multiple exceptions. The info +argument will depend on the hardware and on the specific exception. +

cyg_exception_clear_handler can be used to +restore the default handler, if desired. It is also possible for +software to raise an exception and cause the current handler to be +invoked, but generally this is useful only for testing. +

By default the system maintains a single set of global exception +handlers. However, since exceptions occur synchronously it is +sometimes useful to handle them on a per-thread basis, and have a +different set of handlers for each thread. This behaviour can be +obtained by disabling the configuration option +CYGSEM_KERNEL_EXCEPTIONS_GLOBAL. If per-thread +exception handlers are being used then +cyg_exception_set_handler and +cyg_exception_clear_handler apply to the current +thread. Otherwise they apply to the global set of handlers. +

Caution

In the current implementation +cyg_exception_call_handler can only be used on +the current thread. There is no support for delivering an exception to +another thread. +

Note: Exceptions at the eCos kernel level refer specifically to +hardware-related events such as unaligned accesses to memory or +division by zero. There is no relation with other concepts that are +also known as exceptions, for example the throw and +catch facilities associated with C++. +

Valid contexts

If the system is configured with a single set of global exception +handlers then +cyg_exception_set_handler and +cyg_exception_clear_handler may be called during +initialization or from thread context. If instead per-thread exception +handlers are being used then it is not possible to install new +handlers during initialization because the functions operate +implicitly on the current thread, so they can only be called from +thread context. cyg_exception_call_handler should +only be called from thread context. +


PrevHomeNext
Thread destructorsUpCounters
\ No newline at end of file diff --git a/doc/html/ref/kernel-flags.html b/doc/html/ref/kernel-flags.html new file mode 100644 index 00000000..1b8dab7e --- /dev/null +++ b/doc/html/ref/kernel-flags.html @@ -0,0 +1,481 @@ + + + + + + + + +Event Flags +
eCos Reference Manual
PrevNext

Event Flags

Name

cyg_flag_init, cyg_flag_destroy, cyg_flag_setbits, cyg_flag_maskbits, cyg_flag_wait, cyg_flag_timed_wait, cyg_flag_poll, cyg_flag_peek, cyg_flag_waiting -- Synchronization primitive

Description

Event flags allow a consumer thread to wait for one of several +different types of event to occur. Alternatively it is possible to +wait for some combination of events. The implementation is relatively +straightforward. Each event flag contains a 32-bit integer. +Application code associates these bits with specific events, so for +example bit 0 could indicate that an I/O operation has completed and +data is available, while bit 1 could indicate that the user has +pressed a start button. A producer thread or a DSR can cause one or +more of the bits to be set, and a consumer thread currently waiting +for these bits will be woken up. +

Unlike semaphores no attempt is made to keep track of event counts. It +does not matter whether a given event occurs once or multiple times +before being consumed, the corresponding bit in the event flag will +change only once. However semaphores cannot easily be used to handle +multiple event sources. Event flags can often be used as an +alternative to condition variables, although they cannot be used for +completely arbitrary conditions and they only support the equivalent +of condition variable broadcasts, not signals. +

Before an event flag can be used it must be initialized by a call to +cyg_flag_init. This takes a pointer to a +cyg_flag_t data structure, which can be part of a +larger structure. All 32 bits in the event flag will be set to 0, +indicating that no events have yet occurred. If an event flag is no +longer required it can be cleaned up with a call to +cyg_flag_destroy, allowing the memory for the +cyg_flag_t structure to be re-used. +

A consumer thread can wait for one or more events by calling +cyg_flag_wait. This takes three arguments. The +first identifies a particular event flag. The second is some +combination of bits, indicating which events are of interest. The +final argument should be one of the following: +

CYG_FLAG_WAITMODE_AND

The call to cyg_flag_wait will block until all +the specified event bits are set. The event flag is not cleared when +the wait succeeds, in other words all the bits remain set. +

CYG_FLAG_WAITMODE_OR

The call will block until at least one of the specified event bits is +set. The event flag is not cleared on return. +

CYG_FLAG_WAITMODE_AND | CYG_FLAG_WAITMODE_CLR

The call will block until all the specified event bits are set, and +the entire event flag is cleared when the call succeeds. Note that +if this mode of operation is used then a single event flag cannot be +used to store disjoint sets of events, even though enough bits might +be available. Instead each disjoint set of events requires its own +event flag. +

CYG_FLAG_WAITMODE_OR | CYG_FLAG_WAITMODE_CLR

The call will block until at least one of the specified event bits is +set, and the entire flag is cleared when the call succeeds. +

A call to cyg_flag_wait normally blocks until the +required condition is satisfied. It will return the value of the event +flag at the point that the operation succeeded, which may be a +superset of the requested events. If +cyg_thread_release is used to unblock a thread +that is currently in a wait operation, the +cyg_flag_wait call will instead return 0. +

cyg_flag_timed_wait is a variant of +cyg_flag_wait which adds a timeout: the wait +operation must succeed within the specified number of ticks, or it +will fail with a return value of 0. cyg_flag_poll +is a non-blocking variant: if the wait operation can succeed +immediately it acts like cyg_flag_wait, otherwise +it returns immediately with a value of 0. +

cyg_flag_setbits is called by a producer thread +or from inside a DSR when an event occurs. The specified bits are or'd +into the current event flag value. This may cause a waiting thread to +be woken up, if its condition is now satisfied. +

cyg_flag_maskbits can be used to clear one or +more bits in the event flag. This can be called from a producer when a +particular condition is no longer satisfied, for example when the user +is no longer pressing a particular button. It can also be used by a +consumer thread if CYG_FLAG_WAITMODE_CLR was not +used as part of the wait operation, to indicate that some but not all +of the active events have been consumed. If there are multiple +consumer threads performing wait operations without using +CYG_FLAG_WAITMODE_CLR then typically some +additional synchronization such as a mutex is needed to prevent +multiple threads consuming the same event. +

Two additional functions are provided to query the current state of an +event flag. cyg_flag_peek returns the current +value of the event flag, and cyg_flag_waiting can +be used to find out whether or not there are any threads currently +blocked on the event flag. Both of these functions must be used with +care because other threads may be operating on the event flag. +

Valid contexts

cyg_flag_init is typically called during system +initialization but may also be called in thread context. The same +applies to cyg_flag_destroy. +cyg_flag_wait and +cyg_flag_timed_wait may only be called from +thread context. The remaining functions may be called from thread or +DSR context. +


PrevHomeNext
Mail boxesUpSpinlocks
\ No newline at end of file diff --git a/doc/html/ref/kernel-interrupts.html b/doc/html/ref/kernel-interrupts.html new file mode 100644 index 00000000..64dfe2f3 --- /dev/null +++ b/doc/html/ref/kernel-interrupts.html @@ -0,0 +1,845 @@ + + + + + + + + +Interrupt Handling +
eCos Reference Manual
PrevNext

Interrupt Handling

Name

cyg_interrupt_create, cyg_interrupt_delete, cyg_interrupt_attach, cyg_interrupt_detach, cyg_interrupt_configure, cyg_interrupt_acknowledge, cyg_interrupt_enable, cyg_interrupt_disable, cyg_interrupt_mask, cyg_interrupt_mask_intunsafe, cyg_interrupt_unmask, cyg_interrupt_unmask_intunsafe, cyg_interrupt_set_cpu, cyg_interrupt_get_cpu, cyg_interrupt_get_vsr, cyg_interrupt_set_vsr -- Manage interrupt handlers

Synopsis

#include <cyg/kernel/kapi.h>
+        

void cyg_interrupt_create(cyg_vector_t vector, cyg_priority_t priority, cyg_addrword_t data, cyg_ISR_t* isr, cyg_DSR_t* dsr, cyg_handle_t* handle, cyg_interrupt* intr);

void cyg_interrupt_delete(cyg_handle_t interrupt);

void cyg_interrupt_attach(cyg_handle_t interrupt);

void cyg_interrupt_detach(cyg_handle_t interrupt);

void cyg_interrupt_configure(cyg_vector_t vector, cyg_bool_t level, cyg_bool_t up);

void cyg_interrupt_acknowledge(cyg_vector_t vector);

void cyg_interrupt_disable(void);

void cyg_interrupt_enable(void);

void cyg_interrupt_mask(cyg_vector_t vector);

void cyg_interrupt_mask_intunsafe(cyg_vector_t vector);

void cyg_interrupt_unmask(cyg_vector_t vector);

void cyg_interrupt_unmask_intunsafe(cyg_vector_t vector);

void cyg_interrupt_set_cpu(cyg_vector_t vector, cyg_cpu_t cpu);

cyg_cpu_t cyg_interrupt_get_cpu(cyg_vector_t vector);

void cyg_interrupt_get_vsr(cyg_vector_t vector, cyg_VSR_t** vsr);

void cyg_interrupt_set_vsr(cyg_vector_t vector, cyg_VSR_t* vsr);

Description

The kernel provides an interface for installing interrupt handlers and +controlling when interrupts occur. This functionality is used +primarily by eCos device drivers and by any application code that +interacts directly with hardware. However in most cases it is better +to avoid using this kernel functionality directly, and instead the +device driver API provided by the common HAL package should be used. +Use of the kernel package is optional, and some applications such as +RedBoot work with no need for multiple threads or synchronization +primitives. Any code which calls the kernel directly rather than the +device driver API will not function in such a configuration. When the +kernel package is present the device driver API is implemented as +#define's to the equivalent kernel calls, otherwise +it is implemented inside the common HAL package. The latter +implementation can be simpler than the kernel one because there is no +need to consider thread preemption and similar issues. +

The exact details of interrupt handling vary widely between +architectures. The functionality provided by the kernel abstracts away +from many of the details of the underlying hardware, thus simplifying +application development. However this is not always successful. For +example, if some hardware does not provide any support at all for +masking specific interrupts then calling +cyg_interrupt_mask may not behave as intended: +instead of masking just the one interrupt source it might disable all +interrupts, because that is as close to the desired behaviour as is +possible given the hardware restrictions. Another possibility is that +masking a given interrupt source also affects all lower-priority +interrupts, but still allows higher-priority ones. The documentation +for the appropriate HAL packages should be consulted for more +information about exactly how interrupts are handled on any given +hardware. The HAL header files will also contain useful information. +

Interrupt Handlers

Interrupt handlers are created by a call to +cyg_interrupt_create. This takes the following +arguments: +

cyg_vector_t vector

The interrupt vector, a small integer, identifies the specific +interrupt source. The appropriate hardware documentation or HAL header +files should be consulted for details of which vector corresponds to +which device. +

cyg_priority_t priority

Some hardware may support interrupt priorities, where a low priority +interrupt handler can in turn be interrupted by a higher priority one. +Again hardware-specific documentation should be consulted for details +about what the valid interrupt priority levels are. +

cyg_addrword_t data

When an interrupt occurs eCos will first call the associated +interrupt service routine or ISR, then optionally a deferred service +routine or DSR. The data argument to +cyg_interrupt_create will be passed to both these +functions. Typically it will be a pointer to some data structure. +

cyg_ISR_t isr

When an interrupt occurs the hardware will transfer control to the +appropriate vector service routine or VSR, which is usually provided +by eCos. This performs any appropriate processing, for example to work +out exactly which interrupt occurred, and then as quickly as possible +transfers control the installed ISR. An ISR is a C function which +takes the following form: +

cyg_uint32
+isr_function(cyg_vector_t vector, cyg_addrword_t data)
+{
+    cyg_bool_t dsr_required = 0;
+
+    …
+
+    return dsr_required ? CYG_ISR_CALL_DSR : CYG_ISR_HANDLED;
+}
+          

The first argument identifies the particular interrupt source, +especially useful if there multiple instances of a given device and a +single ISR can be used for several different interrupt vectors. The +second argument is the data field passed to +cyg_interrupt_create, usually a pointer to some +data structure. The exact conditions under which an ISR runs will +depend partly on the hardware and partly on configuration options. +Interrupts may currently be disabled globally, especially if the +hardware does not support interrupt priorities. Alternatively +interrupts may be enabled such that higher priority interrupts are +allowed through. The ISR may be running on a separate interrupt stack, +or on the stack of whichever thread was running at the time the +interrupt happened. +

A typical ISR will do as little work as possible, just enough to meet +the needs of the hardware and then acknowledge the interrupt by +calling cyg_interrupt_acknowledge. This ensures +that interrupts will be quickly reenabled, so higher priority devices +can be serviced. For some applications there may be one device which +is especially important and whose ISR can take much longer than +normal. However eCos device drivers usually will not assume that they +are especially important, so their ISRs will be as short as possible. +

The return value of an ISR is normally one of +CYG_ISR_CALL_DSR or +CYG_ISR_HANDLED. The former indicates that further +processing is required at DSR level, and the interrupt handler's DSR +will be run as soon as possible. The latter indicates that the +interrupt has been fully handled and no further effort is required. +

An ISR is allowed to make very few kernel calls. It can manipulate the +interrupt mask, and on SMP systems it can use spinlocks. However an +ISR must not make higher-level kernel calls such as posting to a +semaphore, instead any such calls must be made from the DSR. This +avoids having to disable interrupts throughout the kernel and thus +improves interrupt latency. +

cyg_DSR_t dsr

If an interrupt has occurred and the ISR has returned a value +CYG_ISR_CALL_DSR, the system will call the +deferred service routine or DSR associated with this interrupt +handler. If the scheduler is not currently locked then the DSR will +run immediately. However if the interrupted thread was in the middle +of a kernel call and had locked the scheduler, then the DSR will be +deferred until the scheduler is again unlocked. This allows the +DSR to make certain kernel calls safely, for example posting to a +semaphore or signalling a condition variable. A DSR is a C function +which takes the following form: +

void
+dsr_function(cyg_vector_t vector,
+             cyg_ucount32 count,
+             cyg_addrword_t data)
+{
+}
+          

The first argument identifies the specific interrupt that has caused +the DSR to run. The second argument indicates the number of these +interrupts that have occurred and for which the ISR requested a DSR. +Usually this will be 1, unless the system is +suffering from a very heavy load. The third argument is the +data field passed to +cyg_interrupt_create. +

cyg_handle_t* handle

The kernel will return a handle to the newly created interrupt handler +via this argument. Subsequent operations on the interrupt handler such +as attaching it to the interrupt source will use this handle. +

cyg_interrupt* intr

This provides the kernel with an area of memory for holding this +interrupt handler and associated data. +

The call to cyg_interrupt_create simply fills in +a kernel data structure. A typical next step is to call +cyg_interrupt_attach using the handle returned by +the create operation. This makes it possible to have several different +interrupt handlers for a given vector, attaching whichever one is +currently appropriate. Replacing an interrupt handler requires a call +to cyg_interrupt_detach, followed by another call +to cyg_interrupt_attach for the replacement +handler. cyg_interrupt_delete can be used if an +interrupt handler is no longer required. +

Some hardware may allow for further control over specific interrupts, +for example whether an interrupt is level or edge triggered. Any such +hardware functionality can be accessed using +cyg_interrupt_configure: the +level argument selects between level versus +edge triggered; the up argument selects between +high and low level, or between rising and falling edges. +

Usually interrupt handlers are created, attached and configured during +system initialization, while global interrupts are still disabled. On +most hardware it will also be necessary to call +cyg_interrupt_unmask, since the sensible default +for interrupt masking is to ignore any interrupts for which no handler +is installed. +

Controlling Interrupts

eCos provides two ways of controlling whether or not interrupts +happen. It is possible to disable and reenable all interrupts +globally, using cyg_interrupt_disable and +cyg_interrupt_enable. Typically this works by +manipulating state inside the cpu itself, for example setting a flag +in a status register or executing special instructions. Alternatively +it may be possible to mask a specific interrupt source by writing to +one or to several interrupt mask registers. Hardware-specific +documentation should be consulted for the exact details of how +interrupt masking works, because a full implementation is not possible +on all hardware. +

The primary use for these functions is to allow data to be shared +between ISRs and other code such as DSRs or threads. If both a thread +and an ISR need to manipulate either a data structure or the hardware +itself, there is a possible conflict if an interrupt happens just when +the thread is doing such manipulation. Problems can be avoided by the +thread either disabling or masking interrupts during the critical +region. If this critical region requires only a few instructions then +usually it is more efficient to disable interrupts. For larger +critical regions it may be more appropriate to use interrupt masking, +allowing other interrupts to occur. There are other uses for interrupt +masking. For example if a device is not currently being used by the +application then it may be desirable to mask all interrupts generated +by that device. +

There are two functions for masking a specific interrupt source, +cyg_interrupt_mask and +cyg_interrupt_mask_intunsafe. On typical hardware +masking an interrupt is not an atomic operation, so if two threads +were to perform interrupt masking operations at the same time there +could be problems. cyg_interrupt_mask disables +all interrupts while it manipulates the interrupt mask. In situations +where interrupts are already know to be disabled, +cyg_interrupt_mask_intunsafe can be used +instead. There are matching functions +cyg_interrupt_unmask and +cyg_interrupt_unmask_intsafe. +

SMP Support

On SMP systems the kernel provides an additional two functions related +to interrupt handling. cyg_interrupt_set_cpu +specifies that a particular hardware interrupt should always be +handled on one specific processor in the system. In other words when +the interrupt triggers it is only that processor which detects it, and +it is only on that processor that the VSR and ISR will run. If a DSR +is requested then it will also run on the same CPU. The +function cyg_interrupt_get_cpu can be used to +find out which interrupts are handled on which processor. +

VSR Support

When an interrupt occurs the hardware will transfer control to a piece +of code known as the VSR, or Vector Service Routine. By default this +code is provided by eCos. Usually it is written in assembler, but on +some architectures it may be possible to implement VSRs in C by +specifying an interrupt attribute. Compiler documentation should be +consulted for more information on this. The default eCos VSR will work +out which ISR function should process the interrupt, and set up a C +environment suitable for this ISR. +

For some applications it may be desirable to replace the default eCos +VSR and handle some interrupts directly. This minimizes interrupt +latency, but it requires application developers to program at a lower +level. Usually the best way to write a custom VSR is to copy the +existing one supplied by eCos and then make appropriate modifications. +The function cyg_interrupt_get_vsr can be used to +get hold of the current VSR for a given interrupt vector, allowing it +to be restored if the custom VSR is no longer required. +cyg_interrupt_set_vsr can be used to install a +replacement VSR. Usually the vsr argument will +correspond to an exported label in an assembler source file. +

Valid contexts

In a typical configuration interrupt handlers are created and attached +during system initialization, and never detached or deleted. However +it is possible to perform these operations at thread level, if +desired. Similarly cyg_interrupt_configure, +cyg_interrupt_set_vsr, and +cyg_interrupt_set_cpu are usually called only +during system initialization, but on typical hardware may be called at +any time. cyg_interrupt_get_vsr and +cyg_interrupt_get_cpu may be called at any time. +

The functions for enabling, disabling, masking and unmasking +interrupts can be called in any context, when appropriate. It is the +responsibility of application developers to determine when the use of +these functions is appropriate. +


PrevHomeNext
Scheduler ControlUpKernel Real-time Characterization
\ No newline at end of file diff --git a/doc/html/ref/kernel-mail-boxes.html b/doc/html/ref/kernel-mail-boxes.html new file mode 100644 index 00000000..042c2c02 --- /dev/null +++ b/doc/html/ref/kernel-mail-boxes.html @@ -0,0 +1,462 @@ + + + + + + + + +Mail boxes +
eCos Reference Manual
PrevNext

Mail boxes

Name

cyg_mbox_create, cyg_mbox_delete, cyg_mbox_get, cyg_mbox_timed_get, cyg_mbox_tryget, cyg_mbox_peek_item, cyg_mbox_put, cyg_mbox_timed_put, cyg_mbox_tryput, cyg_mbox_peek, cyg_mbox_waiting_to_get, cyg_mbox_waiting_to_put -- Synchronization primitive

Description

Mail boxes are a synchronization primitive. Like semaphores they +can be used by a consumer thread to wait until a certain event has +occurred, but the producer also has the ability to transmit some data +along with each event. This data, the message, is normally a pointer +to some data structure. It is stored in the mail box itself, so the +producer thread that generates the event and provides the data usually +does not have to block until some consumer thread is ready to receive +the event. However a mail box will only have a finite capacity, +typically ten slots. Even if the system is balanced and events are +typically consumed at least as fast as they are generated, a burst of +events can cause the mail box to fill up and the generating thread +will block until space is available again. This behaviour is very +different from semaphores, where it is only necessary to maintain a +counter and hence an overflow is unlikely. +

Before a mail box can be used it must be created with a call to +cyg_mbox_create. Each mail box has a unique +handle which will be returned via the first argument and which should +be used for subsequent operations. +cyg_mbox_create also requires an area of memory +for the kernel structure, which is provided by the +cyg_mbox second argument. If a mail box is +no longer required then cyg_mbox_delete can be +used. This will simply discard any messages that remain posted. +

The main function for waiting on a mail box is +cyg_mbox_get. If there is a pending message +because of a call to cyg_mbox_put then +cyg_mbox_get will return immediately with the +message that was put into the mail box. Otherwise this function +will block until there is a put operation. Exceptionally the thread +can instead be unblocked by a call to +cyg_thread_release, in which case +cyg_mbox_get will return a null pointer. It is +assumed that there will never be a call to +cyg_mbox_put with a null pointer, because it +would not be possible to distinguish between that and a release +operation. Messages are always retrieved in the order in which they +were put into the mail box, and there is no support for messages +with different priorities. +

There are two variants of cyg_mbox_get. The +first, cyg_mbox_timed_get will wait until either +a message is available or until a number of clock ticks have occurred. +If no message is posted within the timeout then a null pointer will be +returned. cyg_mbox_tryget is a non-blocking +operation which will either return a message if one is available or a +null pointer. +

New messages are placed in the mail box by calling +cyg_mbox_put or one of its variants. The main put +function takes two arguments, a handle to the mail box and a +pointer for the message itself. If there is a spare slot in the +mail box then the new message can be placed there immediately, and +if there is a waiting thread it will be woken up so that it can +receive the message. If the mail box is currently full then +cyg_mbox_put will block until there has been a +get operation and a slot is available. The +cyg_mbox_timed_put variant imposes a time limit +on the put operation, returning false if the operation cannot be +completed within the specified number of clock ticks. The +cyg_mbox_tryput variant is non-blocking, +returning false if there are no free slots available and the message +cannot be posted without blocking. +

There are a further four functions available for examining the current +state of a mailbox. The results of these functions must be used with +care because usually the state can change at any time as a result of +activity within other threads, but they may prove occasionally useful +during debugging or in special situations. +cyg_mbox_peek returns a count of the number of +messages currently stored in the mail box. +cyg_mbox_peek_item retrieves the first message, +but it remains in the mail box until a get operation is performed. +cyg_mbox_waiting_to_get and +cyg_mbox_waiting_to_put indicate whether or not +there are currently threads blocked in a get or a put operation on a +given mail box. +

The number of slots in each mail box is controlled by a +configuration option +CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE, with a default +value of 10. All mail boxes are the same size. +

Valid contexts

cyg_mbox_create is typically called during +system initialization but may also be called in thread context. +The remaining functions are normally called only during thread +context. Of special note is cyg_mbox_put which +can be a blocking operation when the mail box is full, and which +therefore must never be called from DSR context. It is permitted to +call cyg_mbox_tryput, +cyg_mbox_tryget, and the information functions +from DSR context but this is rarely useful. +


PrevHomeNext
SemaphoresUpEvent Flags
\ No newline at end of file diff --git a/doc/html/ref/kernel-mutexes.html b/doc/html/ref/kernel-mutexes.html new file mode 100644 index 00000000..c5f33189 --- /dev/null +++ b/doc/html/ref/kernel-mutexes.html @@ -0,0 +1,748 @@ + + + + + + + + +Mutexes +
eCos Reference Manual
PrevNext

Mutexes

Name

cyg_mutex_init, cyg_mutex_destroy, cyg_mutex_lock, cyg_mutex_trylock, cyg_mutex_unlock, cyg_mutex_release, cyg_mutex_set_ceiling, cyg_mutex_set_protocol -- Synchronization primitive

Description

The purpose of mutexes is to let threads share resources safely. If +two or more threads attempt to manipulate a data structure with no +locking between them then the system may run for quite some time +without apparent problems, but sooner or later the data structure will +become inconsistent and the application will start behaving strangely +and is quite likely to crash. The same can apply even when +manipulating a single variable or some other resource. For example, +consider: +

static volatile int counter = 0;
+
+void
+process_event(void)
+{
+    …
+
+    counter++;
+}

Assume that after a certain period of time counter +has a value of 42, and two threads A and B running at the same +priority call process_event. Typically thread A +will read the value of counter into a register, +increment this register to 43, and write this updated value back to +memory. Thread B will do the same, so usually +counter will end up with a value of 44. However if +thread A is timesliced after reading the old value 42 but before +writing back 43, thread B will still read back the old value and will +also write back 43. The net result is that the counter only gets +incremented once, not twice, which depending on the application may +prove disastrous. +

Sections of code like the above which involve manipulating shared data +are generally known as critical regions. Code should claim a lock +before entering a critical region and release the lock when leaving. +Mutexes provide an appropriate synchronization primitive for this. +

static volatile int counter = 0;
+static cyg_mutex_t  lock;
+
+void
+process_event(void)
+{
+    …
+
+    cyg_mutex_lock(&lock);
+    counter++;
+    cyg_mutex_unlock(&lock);
+}
+      

A mutex must be initialized before it can be used, by calling +cyg_mutex_init. This takes a pointer to a +cyg_mutex_t data structure which is typically +statically allocated, and may be part of a larger data structure. If a +mutex is no longer required and there are no threads waiting on it +then cyg_mutex_destroy can be used. +

The main functions for using a mutex are +cyg_mutex_lock and +cyg_mutex_unlock. In normal operation +cyg_mutex_lock will return success after claiming +the mutex lock, blocking if another thread currently owns the mutex. +However the lock operation may fail if other code calls +cyg_mutex_release or +cyg_thread_release, so if these functions may get +used then it is important to check the return value. The current owner +of a mutex should call cyg_mutex_unlock when a +lock is no longer required. This operation must be performed by the +owner, not by another thread. +

cyg_mutex_trylock is a variant of +cyg_mutex_lock that will always return +immediately, returning success or failure as appropriate. This +function is rarely useful. Typical code locks a mutex just before +entering a critical region, so if the lock cannot be claimed then +there may be nothing else for the current thread to do. Use of this +function may also cause a form of priority inversion if the owner +owner runs at a lower priority, because the priority inheritance code +will not be triggered. Instead the current thread continues running, +preventing the owner from getting any cpu time, completing the +critical region, and releasing the mutex. +

cyg_mutex_release can be used to wake up all +threads that are currently blocked inside a call to +cyg_mutex_lock for a specific mutex. These lock +calls will return failure. The current mutex owner is not affected. +

Priority Inversion

The use of mutexes gives rise to a problem known as priority +inversion. In a typical scenario this requires three threads A, B, and +C, running at high, medium and low priority respectively. Thread A and +thread B are temporarily blocked waiting for some event, so thread C +gets a chance to run, needs to enter a critical region, and locks +a mutex. At this point threads A and B are woken up - the exact order +does not matter. Thread A needs to claim the same mutex but has to +wait until C has left the critical region and can release the mutex. +Meanwhile thread B works on something completely different and can +continue running without problems. Because thread C is running a lower +priority than B it will not get a chance to run until B blocks for +some reason, and hence thread A cannot run either. The overall effect +is that a high-priority thread A cannot proceed because of a lower +priority thread B, and priority inversion has occurred. +

In simple applications it may be possible to arrange the code such +that priority inversion cannot occur, for example by ensuring that a +given mutex is never shared by threads running at different priority +levels. However this may not always be possible even at the +application level. In addition mutexes may be used internally by +underlying code, for example the memory allocation package, so careful +analysis of the whole system would be needed to be sure that priority +inversion cannot occur. Instead it is common practice to use one of +two techniques: priority ceilings and priority inheritance. +

Priority ceilings involve associating a priority with each mutex. +Usually this will match the highest priority thread that will ever +lock the mutex. When a thread running at a lower priority makes a +successful call to cyg_mutex_lock or +cyg_mutex_trylock its priority will be boosted to +that of the mutex. For example, given the previous example the +priority associated with the mutex would be that of thread A, so for +as long as it owns the mutex thread C will run in preference to thread +B. When C releases the mutex its priority drops to the normal value +again, allowing A to run and claim the mutex. Setting the +priority for a mutex involves a call to +cyg_mutex_set_ceiling, which is typically called +during initialization. It is possible to change the ceiling +dynamically but this will only affect subsequent lock operations, not +the current owner of the mutex. +

Priority ceilings are very suitable for simple applications, where for +every thread in the system it is possible to work out which mutexes +will be accessed. For more complicated applications this may prove +difficult, especially if thread priorities change at run-time. An +additional problem occurs for any mutexes outside the application, for +example used internally within eCos packages. A typical eCos package +will be unaware of the details of the various threads in the system, +so it will have no way of setting suitable ceilings for its internal +mutexes. If those mutexes are not exported to application code then +using priority ceilings may not be viable. The kernel does provide a +configuration option +CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT_PRIORITY +that can be used to set the default priority ceiling for all mutexes, +which may prove sufficient. +

The alternative approach is to use priority inheritance: if a thread +calls cyg_mutex_lock for a mutex that it +currently owned by a lower-priority thread, then the owner will have +its priority raised to that of the current thread. Often this is more +efficient than priority ceilings because priority boosting only +happens when necessary, not for every lock operation, and the required +priority is determined at run-time rather than by static analysis. +However there are complications when multiple threads running at +different priorities try to lock a single mutex, or when the current +owner of a mutex then tries to lock additional mutexes, and this makes +the implementation significantly more complicated than priority +ceilings. +

There are a number of configuration options associated with priority +inversion. First, if after careful analysis it is known that priority +inversion cannot arise then the component +CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL +can be disabled. More commonly this component will be enabled, and one +of either +CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT +or +CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING +will be selected, so that one of the two protocols is available for +all mutexes. It is possible to select multiple protocols, so that some +mutexes can have priority ceilings while others use priority +inheritance or no priority inversion protection at all. Obviously this +flexibility will add to the code size and to the cost of mutex +operations. The default for all mutexes will be controlled by +CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT, +and can be changed at run-time using +cyg_mutex_set_protocol. +

Priority inversion problems can also occur with other synchronization +primitives such as semaphores. For example there could be a situation +where a high-priority thread A is waiting on a semaphore, a +low-priority thread C needs to do just a little bit more work before +posting the semaphore, but a medium priority thread B is running and +preventing C from making progress. However a semaphore does not have +the concept of an owner, so there is no way for the system to know +that it is thread C which would next post to the semaphore. Hence +there is no way for the system to boost the priority of C +automatically and prevent the priority inversion. Instead situations +like this have to be detected by application developers and +appropriate precautions have to be taken, for example making sure that +all the threads run at suitable priorities at all times. +

Warning

The current implementation of priority inheritance within the eCos +kernel does not handle certain exceptional circumstances completely +correctly. Problems will only arise if a thread owns one mutex, +then attempts to claim another mutex, and there are other threads +attempting to lock these same mutexes. Although the system will +continue running, the current owners of the various mutexes involved +may not run at the priority they should. This situation never arises +in typical code because a mutex will only be locked for a small +critical region, and there is no need to manipulate other shared resources +inside this region. A more complicated implementation of priority +inheritance is possible but would add significant overhead and certain +operations would no longer be deterministic. +

Warning

Support for priority ceilings and priority inheritance is not +implemented for all schedulers. In particular neither priority +ceilings nor priority inheritance are currently available for the +bitmap scheduler. +

Alternatives

In nearly all circumstances, if two or more threads need to share some +data then protecting this data with a mutex is the correct thing to +do. Mutexes are the only primitive that combine a locking mechanism +and protection against priority inversion problems. However this +functionality is achieved at a cost, and in exceptional circumstances +such as an application's most critical inner loop it may be desirable +to use some other means of locking. +

When a critical region is very very small it is possible to lock the +scheduler, thus ensuring that no other thread can run until the +scheduler is unlocked again. This is achieved with calls to cyg_scheduler_lock +and cyg_scheduler_unlock. If the critical region +is sufficiently small then this can actually improve both performance +and dispatch latency because cyg_mutex_lock also +locks the scheduler for a brief period of time. This approach will not +work on SMP systems because another thread may already be running on a +different processor and accessing the critical region. +

Another way of avoiding the use of mutexes is to make sure that all +threads that access a particular critical region run at the same +priority and configure the system with timeslicing disabled +(CYGSEM_KERNEL_SCHED_TIMESLICE). Without +timeslicing a thread can only be preempted by a higher-priority one, +or if it performs some operation that can block. This approach +requires that none of the operations in the critical region can block, +so for example it is not legal to call +cyg_semaphore_wait. It is also vulnerable to +any changes in the configuration or to the various thread priorities: +any such changes may now have unexpected side effects. It will not +work on SMP systems. +

Recursive Mutexes

The implementation of mutexes within the eCos kernel does not support +recursive locks. If a thread has locked a mutex and then attempts to +lock the mutex again, typically as a result of some recursive call in +a complicated call graph, then either an assertion failure will be +reported or the thread will deadlock. This behaviour is deliberate. +When a thread has just locked a mutex associated with some data +structure, it can assume that that data structure is in a consistent +state. Before unlocking the mutex again it must ensure that the data +structure is again in a consistent state. Recursive mutexes allow a +thread to make arbitrary changes to a data structure, then in a +recursive call lock the mutex again while the data structure is still +inconsistent. The net result is that code can no longer make any +assumptions about data structure consistency, which defeats the +purpose of using mutexes. +

Valid contexts

cyg_mutex_init, +cyg_mutex_set_ceiling and +cyg_mutex_set_protocol are normally called during +initialization but may also be called from thread context. The +remaining functions should only be called from thread context. Mutexes +serve as a mutual exclusion mechanism between threads, and cannot be +used to synchronize between threads and the interrupt handling +subsystem. If a critical region is shared between a thread and a DSR +then it must be protected using cyg_scheduler_lock +and cyg_scheduler_unlock. If a critical region is +shared between a thread and an ISR, it must be protected by disabling +or masking interrupts. Obviously these operations must be used with +care because they can affect dispatch and interrupt latencies. +


PrevHomeNext
AlarmsUpCondition Variables
\ No newline at end of file diff --git a/doc/html/ref/kernel-overview.html b/doc/html/ref/kernel-overview.html new file mode 100644 index 00000000..576d8474 --- /dev/null +++ b/doc/html/ref/kernel-overview.html @@ -0,0 +1,1066 @@ + + + + + + + + +Kernel Overview +
eCos Reference Manual
PrevNext

Kernel Overview

Name

Kernel -- Overview of the eCos Kernel

Description

The kernel is one of the key packages in all of eCos. It provides the +core functionality needed for developing multi-threaded applications: +

  1. The ability to create new threads in the system, either during startup +or when the system is already running. +

  2. Control over the various threads in the system, for example +manipulating their priorities. +

  3. A choice of schedulers, determining which thread should currently be +running. +

  4. A range of synchronization primitives, allowing threads to interact +and share data safely. +

  5. Integration with the system's support for interrupts and exceptions. +

In some other operating systems the kernel provides additional +functionality. For example the kernel may also provide memory +allocation functionality, and device drivers may be part of the kernel +as well. This is not the case for eCos. Memory allocation is handled +by a separate package. Similary each device driver will typically be a +separate package. Various packages are combined and configured using +the eCos configuration technology to meet the requirements of the +application. +

The eCos kernel package is optional. It is possible to write +single-threaded applications which do not use any kernel +functionality, for example RedBoot. Typically such applications are +based around a central polling loop, continually checking all devices +and taking appropriate action when I/O occurs. A small amount of +calculation is possible every iteration, at the cost of an increased +delay between an I/O event occurring and the polling loop detecting +the event. When the requirements are straightforward it may well be +easier to develop the application using a polling loop, avoiding the +complexities of multiple threads and synchronization between threads. +As requirements get more complicated a multi-threaded solution becomes +more appropriate, requiring the use of the kernel. In fact some of the +more advanced packages in eCos, for example the TCP/IP stack, use +multi-threading internally. Therefore if the application uses any of +those packages then the kernel becomes a required package, not an +optional one. +

The kernel functionality can be used in one of two ways. The kernel +provides its own C API, with functions like +cyg_thread_create and +cyg_mutex_lock. These can be called directly from +application code or from other packages. Alternatively there are a +number of packages which provide compatibility with existing API's, +for example POSIX threads or µITRON. These allow application +code to call standard functions such as +pthread_create, and those functions are +implemented using the basic functionality provided by the eCos kernel. +Using compatibility packages in an eCos application can make it much +easier to reuse code developed in other environments, and to share +code. +

Although the different compatibility packages have similar +requirements on the underlying kernel, for example the ability to +create a new thread, there are differences in the exact semantics. For +example, strict µITRON compliance requires that kernel +timeslicing is disabled. This is achieved largely through the +configuration technology. The kernel provides a number of +configuration options that control the exact semantics that are +provided, and the various compatibility packages require particular +settings for those options. This has two important consequences. +First, it is not usually possible to have two different compatibility +packages in one eCos configuration because they will have conflicting +requirements on the underlying kernel. Second, the semantics of the +kernel's own API are only loosely defined because of the many +configuration options. For example cyg_mutex_lock +will always attempt to lock a mutex, but various configuration options +determine the behaviour when the mutex is already locked and there is +a possibility of priority inversion. +

The optional nature of the kernel package presents some complications +for other code, especially device drivers. Wherever possible a device +driver should work whether or not the kernel is present. However there +are some parts of the system, especially those related to interrupt +handling, which should be implemented differently in multi-threaded +environments containing the eCos kernel and in single-threaded +environments without the kernel. To cope with both scenarios the +common HAL package provides a driver API, with functions such as +cyg_drv_interrupt_attach. When the kernel package +is present these driver API functions map directly on to the +equivalent kernel functions such as +cyg_interrupt_attach, using macros to avoid any +overheads. When the kernel is absent the common HAL package implements +the driver API directly, but this implementation is simpler than the +one in the kernel because it can assume a single-threaded environment. +

Schedulers

When a system involves multiple threads, a scheduler is needed to +determine which thread should currently be running. The eCos kernel +can be configured with one of two schedulers, the bitmap scheduler and +the multi-level queue (MLQ) scheduler. The bitmap scheduler is +somewhat more efficient, but has a number of limitations. Most systems +will instead use the MLQ scheduler. Other schedulers may be added in +the future, either as extensions to the kernel package or in separate +packages. +

Both the bitmap and the MLQ scheduler use a simple numerical priority +to determine which thread should be running. The number of priority +levels is configurable via the option +CYGNUM_KERNEL_SCHED_PRIORITIES, but a typical +system will have up to 32 priority levels. Therefore thread priorities +will be in the range 0 to 31, with 0 being the highest priority and 31 +the lowest. Usually only the system's idle thread will run at the +lowest priority. Thread priorities are absolute, so the kernel will +only run a lower-priority thread if all higher-priority threads are +currently blocked. +

The bitmap scheduler only allows one thread per priority level, so if +the system is configured with 32 priority levels then it is limited to +only 32 threads — still enough for many applications. A simple +bitmap can be used to keep track of which threads are currently +runnable. Bitmaps can also be used to keep track of threads waiting on +a mutex or other synchronization primitive. Identifying the +highest-priority runnable or waiting thread involves a simple +operation on the bitmap, and an array index operation can then be used +to get hold of the thread data structure itself. This makes the +bitmap scheduler fast and totally deterministic. +

The MLQ scheduler allows multiple threads to run at the same priority. +This means that there is no limit on the number of threads in the +system, other than the amount of memory available. However operations +such as finding the highest priority runnable thread are a little bit +more expensive than for the bitmap scheduler. +

Optionally the MLQ scheduler supports timeslicing, where the scheduler +automatically switches from one runnable thread to another when some +number of clock ticks have occurred. Timeslicing only comes into play +when there are two runnable threads at the same priority and no higher +priority runnable threads. If timeslicing is disabled then a thread +will not be preempted by another thread of the same priority, and will +continue running until either it explicitly yields the processor or +until it blocks by, for example, waiting on a synchronization +primitive. The configuration options +CYGSEM_KERNEL_SCHED_TIMESLICE and +CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS control +timeslicing. The bitmap scheduler does not provide timeslicing +support. It only allows one thread per priority level, so it is not +possible to preempt the current thread in favour of another one with +the same priority. +

Another important configuration option that affects the MLQ scheduler +is CYGIMP_KERNEL_SCHED_SORTED_QUEUES. This +determines what happens when a thread blocks, for example by waiting +on a semaphore which has no pending events. The default behaviour of +the system is last-in-first-out queuing. For example if several +threads are waiting on a semaphore and an event is posted, the thread +that gets woken up is the last one that called +cyg_semaphore_wait. This allows for a simple and +fast implementation of both the queue and dequeue operations. However +if there are several queued threads with different priorities, it may +not be the highest priority one that gets woken up. In practice this +is rarely a problem: usually there will be at most one thread waiting +on a queue, or when there are several threads they will be of the same +priority. However if the application does require strict priority +queueing then the option +CYGIMP_KERNEL_SCHED_SORTED_QUEUES should be +enabled. There are disadvantages: more work is needed whenever a +thread is queued, and the scheduler needs to be locked for this +operation so the system's dispatch latency is worse. If the bitmap +scheduler is used then priority queueing is automatic and does not +involve any penalties. +

Some kernel functionality is currently only supported with the MLQ +scheduler, not the bitmap scheduler. This includes support for SMP +systems, and protection against priority inversion using either mutex +priority ceilings or priority inheritance. +

Synchronization Primitives

The eCos kernel provides a number of different synchronization +primitives: mutexes, +condition variables, +counting semaphores, +mail boxes and +event flags. +

Mutexes serve a very different purpose from the other primitives. A +mutex allows multiple threads to share a resource safely: a thread +locks a mutex, manipulates the shared resource, and then unlocks the +mutex again. The other primitives are used to communicate information +between threads, or alternatively from a DSR associated with an +interrupt handler to a thread. +

When a thread that has locked a mutex needs to wait for some condition +to become true, it should use a condition variable. A condition +variable is essentially just a place for a thread to wait, and which +another thread, or DSR, can use to wake it up. When a thread waits on +a condition variable it releases the mutex before waiting, and when it +wakes up it reacquires it before proceeding. These operations are +atomic so that synchronization race conditions cannot be introduced. +

A counting semaphore is used to indicate that a particular event has +occurred. A consumer thread can wait for this event to occur, and a +producer thread or a DSR can post the event. There is a count +associated with the semaphore so if the event occurs multiple times in +quick succession this information is not lost, and the appropriate +number of semaphore wait operations will succeed. +

Mail boxes are also used to indicate that a particular event has +occurred, and allows for one item of data to be exchanged per event. +Typically this item of data would be a pointer to some data structure. +Because of the need to store this extra data, mail boxes have a +finite capacity. If a producer thread generates mail box events +faster than they can be consumed then, to avoid overflow, it will be +blocked until space is again available in the mail box. This means +that mail boxes usually cannot be used by a DSR to wake up a +thread. Instead mail boxes are typically only used between threads. +

Event flags can be used to wait on some number of different events, +and to signal that one or several of these events have occurred. This +is achieved by associating bits in a bit mask with the different +events. Unlike a counting semaphore no attempt is made to keep track +of the number of events that have occurred, only the fact that an +event has occurred at least once. Unlike a mail box it is not +possible to send additional data with the event, but this does mean +that there is no possibility of an overflow and hence event flags can +be used between a DSR and a thread as well as between threads. +

The eCos common HAL package provides its own device driver API which +contains some of the above synchronization primitives. These allow +the DSR for an interrupt handler to signal events to higher-level +code. If the configuration includes the eCos kernel package then +the driver API routines map directly on to the equivalent kernel +routines, allowing interrupt handlers to interact with threads. If the +kernel package is not included and the application consists of just a +single thread running in polled mode then the driver API is +implemented entirely within the common HAL, and with no need to worry +about multiple threads the implementation can obviously be rather +simpler. +

Threads and Interrupt Handling

During normal operation the processor will be running one of the +threads in the system. This may be an application thread, a system +thread running inside say the TCP/IP stack, or the idle thread. From +time to time a hardware interrupt will occur, causing control to be +transferred briefly to an interrupt handler. When the interrupt has +been completed the system's scheduler will decide whether to return +control to the interrupted thread or to some other runnable thread. +

Threads and interrupt handlers must be able to interact. If a thread +is waiting for some I/O operation to complete, the interrupt handler +associated with that I/O must be able to inform the thread that the +operation has completed. This can be achieved in a number of ways. One +very simple approach is for the interrupt handler to set a volatile +variable. A thread can then poll continuously until this flag is set, +possibly sleeping for a clock tick in between. Polling continuously +means that the cpu time is not available for other activities, which +may be acceptable for some but not all applications. Polling once +every clock tick imposes much less overhead, but means that the thread +may not detect that the I/O event has occurred until an entire clock +tick has elapsed. In typical systems this could be as long as 10 +milliseconds. Such a delay might be acceptable for some applications, +but not all. +

A better solution would be to use one of the synchronization +primitives. The interrupt handler could signal a condition variable, +post to a semaphore, or use one of the other primitives. The thread +would perform a wait operation on the same primitive. It would not +consume any cpu cycles until the I/O event had occurred, and when the +event does occur the thread can start running again immediately +(subject to any higher priority threads that might also be runnable). +

Synchronization primitives constitute shared data, so care must be +taken to avoid problems with concurrent access. If the thread that was +interrupted was just performing some calculations then the interrupt +handler could manipulate the synchronization primitive quite safely. +However if the interrupted thread happened to be inside some kernel +call then there is a real possibility that some kernel data structure +will be corrupted. +

One way of avoiding such problems would be for the kernel functions to +disable interrupts when executing any critical region. On most +architectures this would be simple to implement and very fast, but it +would mean that interrupts would be disabled often and for quite a +long time. For some applications that might not matter, but many +embedded applications require that the interrupt handler run as soon +as possible after the hardware interrupt has occurred. If the kernel +relied on disabling interrupts then it would not be able to support +such applications. +

Instead the kernel uses a two-level approach to interrupt handling. +Associated with every interrupt vector is an Interrupt Service Routine +or ISR, which will run as quickly as possible so that it can service +the hardware. However an ISR can make only a small number of kernel +calls, mostly related to the interrupt subsystem, and it cannot make +any call that would cause a thread to wake up. If an ISR detects that +an I/O operation has completed and hence that a thread should be woken +up, it can cause the associated Deferred Service Routine or DSR to +run. A DSR is allowed to make more kernel calls, for example it can +signal a condition variable or post to a semaphore. +

Disabling interrupts prevents ISRs from running, but very few parts of +the system disable interrupts and then only for short periods of time. +The main reason for a thread to disable interrupts is to manipulate +some state that is shared with an ISR. For example if a thread needs +to add another buffer to a linked list of free buffers and the ISR may +remove a buffer from this list at any time, the thread would need to +disable interrupts for the few instructions needed to manipulate the +list. If the hardware raises an interrupt at this time, it remains +pending until interrupts are reenabled. +

Analogous to interrupts being disabled or enabled, the kernel has a +scheduler lock. The various kernel functions such as +cyg_mutex_lock and +cyg_semaphore_post will claim the scheduler lock, +manipulate the kernel data structures, and then release the scheduler +lock. If an interrupt results in a DSR being requested and the +scheduler is currently locked, the DSR remains pending. When the +scheduler lock is released any pending DSRs will run. These may post +events to synchronization primitives, causing other higher priority +threads to be woken up. +

For an example, consider the following scenario. The system has a high +priority thread A, responsible for processing some data coming from an +external device. This device will raise an interrupt when data is +available. There are two other threads B and C which spend their time +performing calculations and occasionally writing results to a display +of some sort. This display is a shared resource so a mutex is used to +control access. +

At a particular moment in time thread A is likely to be blocked, +waiting on a semaphore or another synchronization primitive until data +is available. Thread B might be running performing some calculations, +and thread C is runnable waiting for its next timeslice. Interrupts +are enabled, and the scheduler is unlocked because none of the threads +are in the middle of a kernel operation. At this point the device +raises an interrupt. The hardware transfers control to a low-level +interrupt handler provided by eCos which works out exactly which +interrupt occurs, and then the corresponding ISR is run. This ISR +manipulates the hardware as appropriate, determines that there is now +data available, and wants to wake up thread A by posting to the +semaphore. However ISR's are not allowed to call +cyg_semaphore_post directly, so instead the ISR +requests that its associated DSR be run and returns. There are no more +interrupts to be processed, so the kernel next checks for DSR's. One +DSR is pending and the scheduler is currently unlocked, so the DSR can +run immediately and post the semaphore. This will have the effect of +making thread A runnable again, so the scheduler's data structures are +adjusted accordingly. When the DSR returns thread B is no longer the +highest priority runnable thread so it will be suspended, and instead +thread A gains control over the cpu. +

In the above example no kernel data structures were being manipulated +at the exact moment that the interrupt happened. However that cannot +be assumed. Suppose that thread B had finished its current set of +calculations and wanted to write the results to the display. It would +claim the appropriate mutex and manipulate the display. Now suppose +that thread B was timesliced in favour of thread C, and that thread C +also finished its calculations and wanted to write the results to the +display. It would call cyg_mutex_lock. This +kernel call locks the scheduler, examines the current state of the +mutex, discovers that the mutex is already owned by another thread, +suspends the current thread, and switches control to another runnable +thread. Another interrupt happens in the middle of this +cyg_mutex_lock call, causing the ISR to run +immediately. The ISR decides that thread A should be woken up so it +requests that its DSR be run and returns back to the kernel. At this +point there is a pending DSR, but the scheduler is still locked by the +call to cyg_mutex_lock so the DSR cannot run +immediately. Instead the call to cyg_mutex_lock +is allowed to continue, which at some point involves unlocking the +scheduler. The pending DSR can now run, safely post the semaphore, and +thus wake up thread A. +

If the ISR had called cyg_semaphore_post directly +rather than leaving it to a DSR, it is likely that there would have +been some sort of corruption of a kernel data structure. For example +the kernel might have completely lost track of one of the threads, and +that thread would never have run again. The two-level approach to +interrupt handling, ISR's and DSR's, prevents such problems with no +need to disable interrupts. +

Calling Contexts

eCos defines a number of contexts. Only certain calls are allowed from +inside each context, for example most operations on threads or +synchronization primitives are not allowed from ISR context. The +different contexts are initialization, thread, ISR and DSR. +

When eCos starts up it goes through a number of phases, including +setting up the hardware and invoking C++ static constructors. During +this time interrupts are disabled and the scheduler is locked. When a +configuration includes the kernel package the final operation is a +call to cyg_scheduler_start. +At this point interrupts are enabled, the scheduler is unlocked, and +control is transferred to the highest priority runnable thread. If the +configuration also includes the C library package then usually the C +library startup package will have created a thread which will call the +application's main entry point. +

Some application code can also run before the scheduler is started, +and this code runs in initialization context. If the application is +written partly or completely in C++ then the constructors for any +static objects will be run. Alternatively application code can define +a function cyg_user_start which gets called after +any C++ static constructors. This allows applications to be written +entirely in C. +

void
+cyg_user_start(void)
+{
+    /* Perform application-specific initialization here */
+}
+      

It is not necessary for applications to provide a +cyg_user_start function since the system will +provide a default implementation which does nothing. +

Typical operations that are performed from inside static constructors +or cyg_user_start include creating threads, +synchronization primitives, setting up alarms, and registering +application-specific interrupt handlers. In fact for many applications +all such creation operations happen at this time, using statically +allocated data, avoiding any need for dynamic memory allocation or +other overheads. +

Code running in initialization context runs with interrupts disabled +and the scheduler locked. It is not permitted to reenable interrupts +or unlock the scheduler because the system is not guaranteed to be in +a totally consistent state at this point. A consequence is that +initialization code cannot use synchronization primitives such as +cyg_semaphore_wait to wait for an external event. +It is permitted to lock and unlock a mutex: there are no other threads +running so it is guaranteed that the mutex is not yet locked, and +therefore the lock operation will never block; this is useful when +making library calls that may use a mutex internally. +

At the end of the startup sequence the system will call +cyg_scheduler_start and the various threads will +start running. In thread context nearly all of the kernel functions +are available. There may be some restrictions on interrupt-related +operations, depending on the target hardware. For example the hardware +may require that interrupts be acknowledged in the ISR or DSR before +control returns to thread context, in which case +cyg_interrupt_acknowledge should not be called +by a thread. +

At any time the processor may receive an external interrupt, causing +control to be transferred from the current thread. Typically a VSR +provided by eCos will run and determine exactly which interrupt +occurred. Then the VSR will switch to the appropriate ISR, which can +be provided by a HAL package, a device driver, or by the application. +During this time the system is running at ISR context, and most of the +kernel function calls are disallowed. This includes the various +synchronization primitives, so for example an ISR is not allowed to +post to a semaphore to indicate that an event has happened. Usually +the only operations that should be performed from inside an ISR are +ones related to the interrupt subsystem itself, for example masking an +interrupt or acknowledging that an interrupt has been processed. On +SMP systems it is also possible to use spinlocks from ISR context. +

When an ISR returns it can request that the corresponding DSR be run +as soon as it is safe to do so, and that will run in DSR context. This +context is also used for running alarm functions, and threads can +switch temporarily to DSR context by locking the scheduler. Only +certain kernel functions can be called from DSR context, although more +than in ISR context. In particular it is possible to use any +synchronization primitives which cannot block. These include +cyg_semaphore_post, +cyg_cond_signal, +cyg_cond_broadcast, +cyg_flag_setbits, and +cyg_mbox_tryput. It is not possible to use any +primitives that may block such as +cyg_semaphore_wait, +cyg_mutex_lock, or +cyg_mbox_put. Calling such functions from inside +a DSR may cause the system to hang. +

The specific documentation for the various kernel functions gives more +details about valid contexts. +

Error Handling and Assertions

In many APIs each function is expected to perform some validation of +its parameters and possibly of the current state of the system. This +is supposed to ensure that each function is used correctly, and that +application code is not attempting to perform a semaphore operation on +a mutex or anything like that. If an error is detected then a suitable +error code is returned, for example the POSIX function +pthread_mutex_lock can return various error codes +including EINVAL and EDEADLK. +There are a number of problems with this approach, especially in the +context of deeply embedded systems: +

  1. Performing these checks inside the mutex lock and all the other +functions requires extra cpu cycles and adds significantly to the code +size. Even if the application is written correctly and only makes +system function calls with sensible arguments and under the right +conditions, these overheads still exist. +

  2. Returning an error code is only useful if the calling code detects +these error codes and takes appropriate action. In practice the +calling code will often ignore any errors because the programmer +“knows” that the function is being +used correctly. If the programmer is mistaken then an error condition +may be detected and reported, but the application continues running +anyway and is likely to fail some time later in mysterious ways. +

  3. If the calling code does always check for error codes, that adds yet +more cpu cycles and code size overhead. +

  4. Usually there will be no way to recover from certain errors, so if the +application code detected an error such as EINVAL +then all it could do is abort the application somehow. +

The approach taken within the eCos kernel is different. Functions such +as cyg_mutex_lock will not return an error code. +Instead they contain various assertions, which can be enabled or +disabled. During the development process assertions are normally left +enabled, and the various kernel functions will perform parameter +checks and other system consistency checks. If a problem is detected +then an assertion failure will be reported and the application will be +terminated. In a typical debug session a suitable breakpoint will have +been installed and the developer can now examine the state of the +system and work out exactly what is going on. Towards the end of the +development cycle assertions will be disabled by manipulating +configuration options within the eCos infrastructure package, and all +assertions will be eliminated at compile-time. The assumption is that +by this time the application code has been mostly debugged: the +initial version of the code might have tried to perform a semaphore +operation on a mutex, but any problems like that will have been fixed +some time ago. This approach has a number of advantages: +

  1. In the final application there will be no overheads for checking +parameters and other conditions. All that code will have been +eliminated at compile-time. +

  2. Because the final application will not suffer any overheads, it is +reasonable for the system to do more work during the development +process. In particular the various assertions can test for more error +conditions and more complicated errors. When an error is detected +it is possible to give a text message describing the error rather than +just return an error code. +

  3. There is no need for application programmers to handle error codes +returned by various kernel function calls. This simplifies the +application code. +

  4. If an error is detected then an assertion failure will be reported +immediately and the application will be halted. There is no +possibility of an error condition being ignored because application +code did not check for an error code. +

Although none of the kernel functions return an error code, many of +them do return a status condition. For example the function +cyg_semaphore_timed_wait waits until either an +event has been posted to a semaphore, or until a certain number of +clock ticks have occurred. Usually the calling code will need to know +whether the wait operation succeeded or whether a timeout occurred. +cyg_semaphore_timed_wait returns a boolean: a +return value of zero or false indicates a timeout, a non-zero return +value indicates that the wait succeeded. +

In conventional APIs one common error conditions is lack of memory. +For example the POSIX function pthread_create +usually has to allocate some memory dynamically for the thread stack +and other per-thread data. If the target hardware does not have enough +memory to meet all demands, or more commonly if the application +contains a memory leak, then there may not be enough memory available +and the function call would fail. The eCos kernel avoids such problems +by never performing any dynamic memory allocation. Instead it is the +responsibility of the application code to provide all the memory +required for kernel data structures and other needs. In the case of +cyg_thread_create this means a +cyg_thread data structure to hold the thread +details, and a char array for the thread stack. +

In many applications this approach results in all data structures +being allocated statically rather than dynamically. This has several +advantages. If the application is in fact too large for the target +hardware's memory then there will be an error at link-time rather than +at run-time, making the problem much easier to diagnose. Static +allocation does not involve any of the usual overheads associated with +dynamic allocation, for example there is no need to keep track of the +various free blocks in the system, and it may be possible to eliminate +malloc from the system completely. Problems such +as fragmentation and memory leaks cannot occur if all data is +allocated statically. However, some applications are sufficiently +complicated that dynamic memory allocation is required, and the +various kernel functions do not distinguish between statically and +dynamically allocated memory. It still remains the responsibility of +the calling code to ensure that sufficient memory is available, and +passing null pointers to the kernel will result in assertions or +system failure. +


PrevHomeNext
The eCos KernelUpSMP Support
\ No newline at end of file diff --git a/doc/html/ref/kernel-schedcontrol.html b/doc/html/ref/kernel-schedcontrol.html new file mode 100644 index 00000000..07f8b203 --- /dev/null +++ b/doc/html/ref/kernel-schedcontrol.html @@ -0,0 +1,339 @@ + + + + + + + + +Scheduler Control +
eCos Reference Manual
PrevNext

Scheduler Control

Name

cyg_scheduler_start, cyg_scheduler_lock, cyg_scheduler_unlock, cyg_scheduler_safe_lock, cyg_scheduler_read_lock -- Control the state of the scheduler

Description

cyg_scheduler_start should only be called once, +to mark the end of system initialization. In typical configurations it +is called automatically by the system startup, but some applications +may bypass the standard startup in which case +cyg_scheduler_start will have to be called +explicitly. The call will enable system interrupts, allowing I/O +operations to commence. Then the scheduler will be invoked and control +will be transferred to the highest priority runnable thread. The call +will never return. +

The various data structures inside the eCos kernel must be protected +against concurrent updates. Consider a call to +cyg_semaphore_post which causes a thread to be +woken up: the semaphore data structure must be updated to remove the +thread from its queue; the scheduler data structure must also be +updated to mark the thread as runnable; it is possible that the newly +runnable thread has a higher priority than the current one, in which +case preemption is required. If in the middle of the semaphore post +call an interrupt occurred and the interrupt handler tried to +manipulate the same data structures, for example by making another +thread runnable, then it is likely that the structures will be left in +an inconsistent state and the system will fail. +

To prevent such problems the kernel contains a special lock known as +the scheduler lock. A typical kernel function such as +cyg_semaphore_post will claim the scheduler lock, +do all its manipulation of kernel data structures, and then release +the scheduler lock. The current thread cannot be preempted while it +holds the scheduler lock. If an interrupt occurs and a DSR is supposed +to run to signal that some event has occurred, that DSR is postponed +until the scheduler unlock operation. This prevents concurrent updates +of kernel data structures. +

The kernel exports three routines for manipulating the scheduler lock. +cyg_scheduler_lock can be called to claim the +lock. On return it is guaranteed that the current thread will not be +preempted, and that no other code is manipulating any kernel data +structures. cyg_scheduler_unlock can be used to +release the lock, which may cause the current thread to be preempted. +cyg_scheduler_read_lock can be used to query the +current state of the scheduler lock. This function should never be +needed because well-written code should always know whether or not the +scheduler is currently locked, but may prove useful during debugging. +

The implementation of the scheduler lock involves a simple counter. +Code can call cyg_scheduler_lock multiple times, +causing the counter to be incremented each time, as long as +cyg_scheduler_unlock is called the same number of +times. This behaviour is different from mutexes where an attempt by a +thread to lock a mutex multiple times will result in deadlock or an +assertion failure. +

Typical application code should not use the scheduler lock. Instead +other synchronization primitives such as mutexes and semaphores should +be used. While the scheduler is locked the current thread cannot be +preempted, so any higher priority threads will not be able to run. +Also no DSRs can run, so device drivers may not be able to service +I/O requests. However there is one situation where locking the +scheduler is appropriate: if some data structure needs to be shared +between an application thread and a DSR associated with some interrupt +source, the thread can use the scheduler lock to prevent concurrent +invocations of the DSR and then safely manipulate the structure. It is +desirable that the scheduler lock is held for only a short period of +time, typically some tens of instructions. In exceptional cases there +may also be some performance-critical code where it is more +appropriate to use the scheduler lock rather than a mutex, because the +former is more efficient. +

Valid contexts

cyg_scheduler_start can only be called during +system initialization, since it marks the end of that phase. The +remaining functions may be called from thread or DSR context. Locking +the scheduler from inside the DSR has no practical effect because the +lock is claimed automatically by the interrupt subsystem before +running DSRs, but allows functions to be shared between normal thread +code and DSRs. +


PrevHomeNext
SpinlocksUpInterrupt Handling
\ No newline at end of file diff --git a/doc/html/ref/kernel-semaphores.html b/doc/html/ref/kernel-semaphores.html new file mode 100644 index 00000000..da77f8d0 --- /dev/null +++ b/doc/html/ref/kernel-semaphores.html @@ -0,0 +1,428 @@ + + + + + + + + +Semaphores +
eCos Reference Manual
PrevNext

Semaphores

Name

cyg_semaphore_init, cyg_semaphore_destroy, cyg_semaphore_wait, cyg_semaphore_timed_wait, cyg_semaphore_post, cyg_semaphore_peek -- Synchronization primitive

Description

Counting semaphores are a synchronization +primitive that allow threads to wait until an event has +occurred. The event may be generated by a producer thread, or by a DSR +in response to a hardware interrupt. Associated with each semaphore is +an integer counter that keeps track of the number of events that have +not yet been processed. If this counter is zero, an attempt by a +consumer thread to wait on the semaphore will block until some other +thread or a DSR posts a new event to the semaphore. If the counter is +greater than zero then an attempt to wait on the semaphore will +consume one event, in other words decrement the counter, and return +immediately. Posting to a semaphore will wake up the first thread that +is currently waiting, which will then resume inside the semaphore wait +operation and decrement the counter again. +

Another use of semaphores is for certain forms of resource management. +The counter would correspond to how many of a certain type of resource +are currently available, with threads waiting on the semaphore to +claim a resource and posting to release the resource again. In +practice condition +variables are usually much better suited for operations like +this. +

cyg_semaphore_init is used to initialize a +semaphore. It takes two arguments, a pointer to a +cyg_sem_t structure and an initial value for +the counter. Note that semaphore operations, unlike some other parts +of the kernel API, use pointers to data structures rather than +handles. This makes it easier to embed semaphores in a larger data +structure. The initial counter value can be any number, zero, positive +or negative, but typically a value of zero is used to indicate that no +events have occurred yet. +

cyg_semaphore_wait is used by a consumer thread +to wait for an event. If the current counter is greater than 0, in +other words if the event has already occurred in the past, then the +counter will be decremented and the call will return immediately. +Otherwise the current thread will be blocked until there is a +cyg_semaphore_post call. +

cyg_semaphore_post is called when an event has +occurs. This increments the counter and wakes up the first thread +waiting on the semaphore (if any). Usually that thread will then +continue running inside cyg_semaphore_wait and +decrement the counter again. However other scenarioes are possible. +For example the thread calling cyg_semaphore_post +may be running at high priority, some other thread running at medium +priority may be about to call cyg_semaphore_wait +when it next gets a chance to run, and a low priority thread may be +waiting on the semaphore. What will happen is that the current high +priority thread continues running until it is descheduled for some +reason, then the medium priority thread runs and its call to +cyg_semaphore_wait succeeds immediately, and +later on the low priority thread runs again, discovers a counter value +of 0, and blocks until another event is posted. If there are multiple +threads blocked on a semaphore then the configuration option +CYGIMP_KERNEL_SCHED_SORTED_QUEUES determines which +one will be woken up by a post operation. +

cyg_semaphore_wait returns a boolean. Normally it +will block until it has successfully decremented the counter, retrying +as necessary, and return success. However the wait operation may be +aborted by a call to cyg_thread_release, +and cyg_semaphore_wait will then return false. +

cyg_semaphore_timed_wait is a variant of +cyg_semaphore_wait. It can be used to wait until +either an event has occurred or a number of clock ticks have happened. +The function returns success if the semaphore wait operation +succeeded, or false if the operation timed out or was aborted by +cyg_thread_release. If support for the real-time +clock has been removed from the current configuration then this +function will not be available. +cyg_semaphore_trywait is another variant which +will always return immediately rather than block, again returning +success or failure. +

cyg_semaphore_peek can be used to get hold of the +current counter value. This function is rarely useful except for +debugging purposes since the counter value may change at any time if +some other thread or a DSR performs a semaphore operation. +

Valid contexts

cyg_semaphore_init is normally called during +initialization but may also be called from thread context. +cyg_semaphore_wait and +cyg_semaphore_timed_wait may only be called from +thread context because these operations may block. +cyg_semaphore_trywait, +cyg_semaphore_post and +cyg_semaphore_peek may be called from thread or +DSR context. +


PrevHomeNext
Condition VariablesUpMail boxes
\ No newline at end of file diff --git a/doc/html/ref/kernel-smp.html b/doc/html/ref/kernel-smp.html new file mode 100644 index 00000000..43d44230 --- /dev/null +++ b/doc/html/ref/kernel-smp.html @@ -0,0 +1,413 @@ + + + + + + + + +SMP Support +
eCos Reference Manual
PrevNext

SMP Support

Name

SMP -- Support Symmetric Multiprocessing Systems

Description

eCos contains support for limited Symmetric Multi-Processing (SMP). +This is only available on selected architectures and platforms. +The implementation has a number of restrictions on the kind of +hardware supported. These are described in the Section called SMP Support in Chapter 9. +

The following sections describe the changes that have been made to the +eCos kernel to support SMP operation. +

System Startup

The system startup sequence needs to be somewhat different on an SMP +system, although this is largely transparent to application code. The +main startup takes place on only one CPU, called the primary CPU. All +other CPUs, the secondary CPUs, are either placed in suspended state +at reset, or are captured by the HAL and put into a spin as they start +up. The primary CPU is responsible for copying the DATA segment and +zeroing the BSS (if required), calling HAL variant and platform +initialization routines and invoking constructors. It then calls +cyg_start to enter the application. The +application may then create extra threads and other objects. +

It is only when the application calls +cyg_scheduler_start that the secondary CPUs are +initialized. This routine scans the list of available secondary CPUs +and invokes HAL_SMP_CPU_START to start each +CPU. Finally it calls an internal function +Cyg_Scheduler::start_cpu to enter the scheduler +for the primary CPU. +

Each secondary CPU starts in the HAL, where it completes any per-CPU +initialization before calling into the kernel at +cyg_kernel_cpu_startup. Here it claims the +scheduler lock and calls +Cyg_Scheduler::start_cpu. +

Cyg_Scheduler::start_cpu is common to both the +primary and secondary CPUs. The first thing this code does is to +install an interrupt object for this CPU's inter-CPU interrupt. From +this point on the code is the same as for the single CPU case: an +initial thread is chosen and entered. +

From this point on the CPUs are all equal, eCos makes no further +distinction between the primary and secondary CPUs. However, the +hardware may still distinguish between them as far as interrupt +delivery is concerned. +

Scheduling

To function correctly an operating system kernel must protect its +vital data structures, such as the run queues, from concurrent +access. In a single CPU system the only concurrent activities to worry +about are asynchronous interrupts. The kernel can easily guard its +data structures against these by disabling interrupts. However, in a +multi-CPU system, this is inadequate since it does not block access by +other CPUs. +

The eCos kernel protects its vital data structures using the scheduler +lock. In single CPU systems this is a simple counter that is +atomically incremented to acquire the lock and decremented to release +it. If the lock is decremented to zero then the scheduler may be +invoked to choose a different thread to run. Because interrupts may +continue to be serviced while the scheduler lock is claimed, ISRs are +not allowed to access kernel data structures, or call kernel routines +that can. Instead all such operations are deferred to an associated +DSR routine that is run during the lock release operation, when the +data structures are in a consistent state. +

By choosing a kernel locking mechanism that does not rely on interrupt +manipulation to protect data structures, it is easier to convert eCos +to SMP than would otherwise be the case. The principal change needed to +make eCos SMP-safe is to convert the scheduler lock into a nestable +spin lock. This is done by adding a spinlock and a CPU id to the +original counter. +

The algorithm for acquiring the scheduler lock is very simple. If the +scheduler lock's CPU id matches the current CPU then it can just increment +the counter and continue. If it does not match, the CPU must spin on +the spinlock, after which it may increment the counter and store its +own identity in the CPU id. +

To release the lock, the counter is decremented. If it goes to zero +the CPU id value must be set to NONE and the spinlock cleared. +

To protect these sequences against interrupts, they must be performed +with interrupts disabled. However, since these are very short code +sequences, they will not have an adverse effect on the interrupt +latency. +

Beyond converting the scheduler lock, further preparing the kernel for +SMP is a relatively minor matter. The main changes are to convert +various scalar housekeeping variables into arrays indexed by CPU +id. These include the current thread pointer, the need_reschedule +flag and the timeslice counter. +

At present only the Multi-Level Queue (MLQ) scheduler is capable of +supporting SMP configurations. The main change made to this scheduler +is to cope with having several threads in execution at the same +time. Running threads are marked with the CPU that they are executing on. +When scheduling a thread, the scheduler skips past any running threads +until it finds a thread that is pending. While not a constant-time +algorithm, as in the single CPU case, this is still deterministic, +since the worst case time is bounded by the number of CPUs in the +system. +

A second change to the scheduler is in the code used to decide when +the scheduler should be called to choose a new thread. The scheduler +attempts to keep the n CPUs running the +n highest priority threads. Since an event or +interrupt on one CPU may require a reschedule on another CPU, there +must be a mechanism for deciding this. The algorithm currently +implemented is very simple. Given a thread that has just been awakened +(or had its priority changed), the scheduler scans the CPUs, starting +with the one it is currently running on, for a current thread that is +of lower priority than the new one. If one is found then a reschedule +interrupt is sent to that CPU and the scan continues, but now using +the current thread of the rescheduled CPU as the candidate thread. In +this way the new thread gets to run as quickly as possible, hopefully +on the current CPU, and the remaining CPUs will pick up the remaining +highest priority threads as a consequence of processing the reschedule +interrupt. +

The final change to the scheduler is in the handling of +timeslicing. Only one CPU receives timer interrupts, although all CPUs +must handle timeslicing. To make this work, the CPU that receives the +timer interrupt decrements the timeslice counter for all CPUs, not +just its own. If the counter for a CPU reaches zero, then it sends a +timeslice interrupt to that CPU. On receiving the interrupt the +destination CPU enters the scheduler and looks for another thread at +the same priority to run. This is somewhat more efficient than +distributing clock ticks to all CPUs, since the interrupt is only +needed when a timeslice occurs. +

All existing synchronization mechanisms work as before in an SMP +system. Additional synchronization mechanisms have been added to +provide explicit synchronization for SMP, in the form of +spinlocks. +

SMP Interrupt Handling

The main area where the SMP nature of a system requires special +attention is in device drivers and especially interrupt handling. It +is quite possible for the ISR, DSR and thread components of a device +driver to execute on different CPUs. For this reason it is much more +important that SMP-capable device drivers use the interrupt-related +functions correctly. Typically a device driver would use the driver +API rather than call the kernel directly, but it is unlikely that +anybody would attempt to use a multiprocessor system without the +kernel package. +

Two new functions have been added to the Kernel API +to do interrupt +routing: cyg_interrupt_set_cpu and +cyg_interrupt_get_cpu. Although not currently +supported, special values for the cpu argument may be used in future +to indicate that the interrupt is being routed dynamically or is +CPU-local. Once a vector has been routed to a new CPU, all other +interrupt masking and configuration operations are relative to that +CPU, where relevant. +

There are more details of how interrupts should be handled in SMP +systems in the Section called SMP Support in Chapter 18. +


PrevHomeNext
Kernel OverviewUpThread creation
\ No newline at end of file diff --git a/doc/html/ref/kernel-spinlocks.html b/doc/html/ref/kernel-spinlocks.html new file mode 100644 index 00000000..af7ce31d --- /dev/null +++ b/doc/html/ref/kernel-spinlocks.html @@ -0,0 +1,405 @@ + + + + + + + + +Spinlocks +
eCos Reference Manual
PrevNext

Spinlocks

Name

cyg_spinlock_create, cyg_spinlock_destroy, cyg_spinlock_spin, cyg_spinlock_clear, cyg_spinlock_test, cyg_spinlock_spin_intsave, cyg_spinlock_clear_intsave -- Low-level Synchronization Primitive

Description

Spinlocks provide an additional synchronization primitive for +applications running on SMP systems. They operate at a lower level +than the other primitives such as mutexes, and for most purposes the +higher-level primitives should be preferred. However there are some +circumstances where a spinlock is appropriate, especially when +interrupt handlers and threads need to share access to hardware, and +on SMP systems the kernel implementation itself depends on spinlocks. +

Essentially a spinlock is just a simple flag. When code tries to claim +a spinlock it checks whether or not the flag is already set. If not +then the flag is set and the operation succeeds immediately. The exact +implementation of this is hardware-specific, for example it may use a +test-and-set instruction to guarantee the desired behaviour even if +several processors try to access the spinlock at the exact same time. +If it is not possible to claim a spinlock then the current thead spins +in a tight loop, repeatedly checking the flag until it is clear. This +behaviour is very different from other synchronization primitives such +as mutexes, where contention would cause a thread to be suspended. The +assumption is that a spinlock will only be held for a very short time. +If claiming a spinlock could cause the current thread to be suspended +then spinlocks could not be used inside interrupt handlers, which is +not acceptable. +

This does impose a constraint on any code which uses spinlocks. +Specifically it is important that spinlocks are held only for a short +period of time, typically just some dozens of instructions. Otherwise +another processor could be blocked on the spinlock for a long time, +unable to do any useful work. It is also important that a thread which +owns a spinlock does not get preempted because that might cause +another processor to spin for a whole timeslice period, or longer. One +way of achieving this is to disable interrupts on the current +processor, and the function +cyg_spinlock_spin_intsave is provided to +facilitate this. +

Spinlocks should not be used on single-processor systems. Consider a +high priority thread which attempts to claim a spinlock already held +by a lower priority thread: it will just loop forever and the lower +priority thread will never get another chance to run and release the +spinlock. Even if the two threads were running at the same priority, +the one attempting to claim the spinlock would spin until it was +timesliced and a lot of cpu time would be wasted. If an interrupt +handler tried to claim a spinlock owned by a thread, the interrupt +handler would loop forever. Therefore spinlocks are only appropriate +for SMP systems where the current owner of a spinlock can continue +running on a different processor. +

Before a spinlock can be used it must be initialized by a call to +cyg_spinlock_init. This takes two arguments, a +pointer to a cyg_spinlock_t data structure, and +a flag to specify whether the spinlock starts off locked or unlocked. +If a spinlock is no longer required then it can be destroyed by a call +to cyg_spinlock_destroy. +

There are two routines for claiming a spinlock: +cyg_spinlock_spin and +cyg_spinlock_spin_intsave. The former can be used +when it is known the current code will not be preempted, for example +because it is running in an interrupt handler or because interrupts +are disabled. The latter will disable interrupts in addition to +claiming the spinlock, so is safe to use in all circumstances. The +previous interrupt state is returned via the second argument, and +should be used in a subsequent call to +cyg_spinlock_clear_intsave. +

Similarly there are two routines for releasing a spinlock: +cyg_spinlock_clear and +cyg_spinlock_clear_intsave. Typically +the former will be used if the spinlock was claimed by a call to +cyg_spinlock_spin, and the latter when +cyg_spinlock_intsave was used. +

There are two additional routines. +cyg_spinlock_try is a non-blocking version of +cyg_spinlock_spin: if possible the lock will be +claimed and the function will return true; otherwise the function +will return immediately with failure. +cyg_spinlock_test can be used to find out whether +or not the spinlock is currently locked. This function must be used +with care because, especially on a multiprocessor system, the state of +the spinlock can change at any time. +

Spinlocks should only be held for a short period of time, and +attempting to claim a spinlock will never cause a thread to be +suspended. This means that there is no need to worry about priority +inversion problems, and concepts such as priority ceilings and +inheritance do not apply. +

Valid contexts

All of the spinlock functions can be called from any context, +including ISR and DSR context. Typically +cyg_spinlock_init is only called during system +initialization. +


PrevHomeNext
Event FlagsUpScheduler Control
\ No newline at end of file diff --git a/doc/html/ref/kernel-thread-control.html b/doc/html/ref/kernel-thread-control.html new file mode 100644 index 00000000..60760d55 --- /dev/null +++ b/doc/html/ref/kernel-thread-control.html @@ -0,0 +1,422 @@ + + + + + + + + +Thread control +
eCos Reference Manual
PrevNext

Thread control

Name

cyg_thread_yield, cyg_thread_delay, cyg_thread_suspend, cyg_thread_resume, cyg_thread_release -- Control whether or not a thread is running

Description

These functions provide some control over whether or not a particular +thread can run. Apart from the required use of +cyg_thread_resume to start a newly-created +thread, application code should normally use proper synchronization +primitives such as condition variables or mail boxes. +

Yield

cyg_thread_yield allows a thread to relinquish +control of the processor to some other runnable thread which has the +same priority. This can have no effect on any higher-priority thread +since, if such a thread were runnable, the current thread would have +been preempted in its favour. Similarly it can have no effect on any +lower-priority thread because the current thread will always be run in +preference to those. As a consequence this function is only useful +in configurations with a scheduler that allows multiple threads to run +at the same priority, for example the mlqueue scheduler. If instead +the bitmap scheduler was being used then +cyg_thread_yield() would serve no purpose. +

Even if a suitable scheduler such as the mlqueue scheduler has been +configured, cyg_thread_yield will still rarely +prove useful: instead timeslicing will be used to ensure that all +threads of a given priority get a fair slice of the available +processor time. However it is possible to disable timeslicing via the +configuration option CYGSEM_KERNEL_SCHED_TIMESLICE, +in which case cyg_thread_yield can be used to +implement a form of cooperative multitasking. +

Delay

cyg_thread_delay allows a thread to suspend until +the specified number of clock ticks have occurred. For example, if a +value of 1 is used and the system clock runs at a frequency of 100Hz +then the thread will sleep for up to 10 milliseconds. This +functionality depends on the presence of a real-time system clock, as +controlled by the configuration option +CYGVAR_KERNEL_COUNTERS_CLOCK. +

If the application requires delays measured in milliseconds or similar +units rather than in clock ticks, some calculations are needed to +convert between these units as described in Clocks. Usually these calculations can be done by +the application developer, or at compile-time. Performing such +calculations prior to every call to +cyg_thread_delay adds unnecessary overhead to the +system. +

Suspend and Resume

Associated with each thread is a suspend counter. When a thread is +first created this counter is initialized to 1. +cyg_thread_suspend can be used to increment the +suspend counter, and cyg_thread_resume decrements +it. The scheduler will never run a thread with a non-zero suspend +counter. Therefore a newly created thread will not run until it has +been resumed. +

An occasional problem with the use of suspend and resume functionality +is that a thread gets suspended more times than it is resumed and +hence never becomes runnable again. This can lead to very confusing +behaviour. To help with debugging such problems the kernel provides a +configuration option +CYGNUM_KERNEL_MAX_SUSPEND_COUNT_ASSERT which +imposes an upper bound on the number of suspend calls without matching +resumes, with a reasonable default value. This functionality depends +on infrastructure assertions being enabled. +

Releasing a Blocked Thread

When a thread is blocked on a synchronization primitive such as a +semaphore or a mutex, or when it is waiting for an alarm to trigger, +it can be forcibly woken up using +cyg_thread_release. Typically this will call the +affected synchronization primitive to return false, indicating that +the operation was not completed successfully. This function has to be +used with great care, and in particular it should only be used on +threads that have been designed appropriately and check all return +codes. If instead it were to be used on, say, an arbitrary thread that +is attempting to claim a mutex then that thread might not bother to +check the result of the mutex lock operation - usually there would be +no reason to do so. Therefore the thread will now continue running in +the false belief that it has successfully claimed a mutex lock, and +the resulting behaviour is undefined. If the system has been built +with assertions enabled then it is possible that an assertion will +trigger when the thread tries to release the mutex it does not +actually own. +

The main use of cyg_thread_release is in the +POSIX compatibility layer, where it is used in the implementation of +per-thread signals and cancellation handlers. +

Valid contexts

cyg_thread_yield can only be called from thread +context, A DSR must always run to completion and cannot yield the +processor to some thread. cyg_thread_suspend, +cyg_thread_resume, and +cyg_thread_release may be called from thread or +DSR context. +


PrevHomeNext
Thread informationUpThread termination
\ No newline at end of file diff --git a/doc/html/ref/kernel-thread-create.html b/doc/html/ref/kernel-thread-create.html new file mode 100644 index 00000000..27244258 --- /dev/null +++ b/doc/html/ref/kernel-thread-create.html @@ -0,0 +1,641 @@ + + + + + + + + +Thread creation +
eCos Reference Manual
PrevNext

Thread creation

Name

cyg_thread_create -- Create a new thread

Description

The cyg_thread_create function allows application +code and eCos packages to create new threads. In many applications +this only happens during system initialization and all required data +is allocated statically. However additional threads can be created at +any time, if necessary. A newly created thread is always in suspended +state and will not start running until it has been resumed via a call +to cyg_thread_resume. Also, if threads are +created during system initialization then they will not start running +until the eCos scheduler has been started. +

The name argument is used +primarily for debugging purposes, making it easier to keep track of +which cyg_thread structure is associated with +which application-level thread. The kernel configuration option +CYGVAR_KERNEL_THREADS_NAME controls whether or not +this name is actually used. +

On creation each thread is assigned a unique handle, and this will be +stored in the location pointed at by the handle argument. Subsequent operations on +this thread including the required +cyg_thread_resume should use this handle to +identify the thread. +

The kernel requires a small amount of space for each thread, in the +form of a cyg_thread data structure, to hold +information such as the current state of that thread. To avoid any +need for dynamic memory allocation within the kernel this space has to +be provided by higher-level code, typically in the form of a static +variable. The thread argument +provides this space. +

Thread Entry Point

The entry point for a thread takes the form: +

void
+thread_entry_function(cyg_addrword_t data)
+{
+    …
+}
+      

The second argument to cyg_thread_create is a +pointer to such a function. The third argument entry_data is used to pass additional +data to the function. Typically this takes the form of a pointer to +some static data, or a small integer, or 0 if the +thread does not require any additional data. +

If the thread entry function ever returns then this is equivalent to +the thread calling cyg_thread_exit. Even though +the thread will no longer run again, it remains registered with the +scheduler. If the application needs to re-use the +cyg_thread data structure then a call to +cyg_thread_delete is required first. +

Thread Priorities

The sched_info argument +provides additional information to the scheduler. The exact details +depend on the scheduler being used. For the bitmap and mlqueue +schedulers it is a small integer, typically in the range 0 to 31, with +0 being the highest priority. The lowest priority is normally used +only by the system's idle thread. The exact number of priorities is +controlled by the kernel configuration option +CYGNUM_KERNEL_SCHED_PRIORITIES. +

It is the responsibility of the application developer to be aware of +the various threads in the system, including those created by eCos +packages, and to ensure that all threads run at suitable priorities. +For threads created by other packages the documentation provided by +those packages should indicate any requirements. +

The functions cyg_thread_set_priority, +cyg_thread_get_priority, and +cyg_thread_get_current_priority can be used to +manipulate a thread's priority. +

Stacks and Stack Sizes

Each thread needs its own stack for local variables and to keep track +of function calls and returns. Again it is expected that this stack is +provided by the calling code, usually in the form of static data, so +that the kernel does not need any dynamic memory allocation +facilities. cyg_thread_create takes two arguments +related to the stack, a pointer to the base of the stack and the total +size of this stack. On many processors stacks actually descend from the +top down, so the kernel will add the stack size to the base address to +determine the starting location. +

The exact stack size requirements for any given thread depend on a +number of factors. The most important is of course the code that will +be executed in the context of this code: if this involves significant +nesting of function calls, recursion, or large local arrays, then the +stack size needs to be set to a suitably high value. There are some +architectural issues, for example the number of cpu registers and the +calling conventions will have some effect on stack usage. Also, +depending on the configuration, it is possible that some other code +such as interrupt handlers will occasionally run on the current +thread's stack. This depends in part on configuration options such as +CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK +and CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING. +

Determining an application's actual stack size requirements is the +responsibility of the application developer, since the kernel cannot +know in advance what code a given thread will run. However, the system +does provide some hints about reasonable stack sizes in the form of +two constants: CYGNUM_HAL_STACK_SIZE_MINIMUM and +CYGNUM_HAL_STACK_SIZE_TYPICAL. These are defined by +the appropriate HAL package. The MINIMUM value is +appropriate for a thread that just runs a single function and makes +very simple system calls. Trying to create a thread with a smaller +stack than this is illegal. The TYPICAL value is +appropriate for applications where application calls are nested no +more than half a dozen or so levels, and there are no large arrays on +the stack. +

If the stack sizes are not estimated correctly and a stack overflow +occurs, the probably result is some form of memory corruption. This +can be very hard to track down. The kernel does contain some code to +help detect stack overflows, controlled by the configuration option +CYGFUN_KERNEL_THREADS_STACK_CHECKING: a small +amount of space is reserved at the stack limit and filled with a +special signature: every time a thread context switch occurs this +signature is checked, and if invalid that is a good indication (but +not absolute proof) that a stack overflow has occurred. This form of +stack checking is enabled by default when the system is built with +debugging enabled. A related configuration option is +CYGFUN_KERNEL_THREADS_STACK_MEASUREMENT: enabling +this option means that a thread can call the function +cyg_thread_measure_stack_usage to find out the +maximum stack usage to date. Note that this is not necessarily the +true maximum because, for example, it is possible that in the current +run no interrupt occurred at the worst possible moment. +

Valid contexts

cyg_thread_create may be called during +initialization and from within thread context. It may not be called +from inside a DSR. +

Example

A simple example of thread creation is shown below. This involves +creating five threads, one producer and four consumers or workers. The +threads are created in the system's +cyg_user_start: depending on the configuration it +might be more appropriate to do this elsewhere, for example inside +main. +

#include <cyg/hal/hal_arch.h>
+#include <cyg/kernel/kapi.h>
+
+// These numbers depend entirely on your application
+#define NUMBER_OF_WORKERS    4
+#define PRODUCER_PRIORITY   10
+#define WORKER_PRIORITY     11
+#define PRODUCER_STACKSIZE  CYGNUM_HAL_STACK_SIZE_TYPICAL
+#define WORKER_STACKSIZE    (CYGNUM_HAL_STACK_SIZE_MINIMUM + 1024)
+
+static unsigned char producer_stack[PRODUCER_STACKSIZE];
+static unsigned char worker_stacks[NUMBER_OF_WORKERS][WORKER_STACKSIZE];
+static cyg_handle_t producer_handle, worker_handles[NUMBER_OF_WORKERS];
+static cyg_thread_t producer_thread, worker_threads[NUMBER_OF_WORKERS];
+
+static void
+producer(cyg_addrword_t data)
+{
+    …
+}
+
+static void
+worker(cyg_addrword_t data)
+{
+    …
+}
+
+void
+cyg_user_start(void)
+{
+    int i;
+
+    cyg_thread_create(PRODUCER_PRIORITY, &producer, 0, "producer",
+                      producer_stack, PRODUCER_STACKSIZE,
+                      &producer_handle, &producer_thread);
+    cyg_thread_resume(producer_handle);
+    for (i = 0; i < NUMBER_OF_WORKERS; i++) {
+        cyg_thread_create(WORKER_PRIORITY, &worker, i, "worker",
+                          worker_stacks[i], WORKER_STACKSIZE,
+                          &(worker_handles[i]), &(worker_threads[i]));
+        cyg_thread_resume(worker_handles[i]);
+    }
+}
+      

Thread Entry Points and C++

For code written in C++ the thread entry function must be either a +static member function of a class or an ordinary function outside any +class. It cannot be a normal member function of a class because such +member functions take an implicit additional argument +this, and the kernel has no way of knowing what +value to use for this argument. One way around this problem is to make +use of a special static member function, for example: +

class fred {
+  public:
+    void thread_function();
+    static void static_thread_aux(cyg_addrword_t);
+};
+
+void
+fred::static_thread_aux(cyg_addrword_t objptr)
+{
+    fred* object = static_cast<fred*>(objptr);
+    object->thread_function();
+}
+
+static fred instance;
+
+extern "C" void
+cyg_start( void )
+{
+    …
+    cyg_thread_create( …,
+                      &fred::static_thread_aux,
+                      static_cast<cyg_addrword_t>(&instance),
+                      …);
+    …
+}
+      

Effectively this uses the entry_data argument to +cyg_thread_create to hold the +this pointer. Unfortunately this approach does +require the use of some C++ casts, so some of the type safety that can +be achieved when programming in C++ is lost. +


PrevHomeNext
SMP SupportUpThread information
\ No newline at end of file diff --git a/doc/html/ref/kernel-thread-data.html b/doc/html/ref/kernel-thread-data.html new file mode 100644 index 00000000..aca3222e --- /dev/null +++ b/doc/html/ref/kernel-thread-data.html @@ -0,0 +1,365 @@ + + + + + + + + +Per-thread data +
eCos Reference Manual
PrevNext

Per-thread data

Name

cyg_thread_new_data_index, cyg_thread_free_data_index, cyg_thread_get_data, cyg_thread_get_data_ptr, cyg_thread_set_data -- Manipulate per-thread data

Description

In some applications and libraries it is useful to have some data that +is specific to each thread. For example, many of the functions in the +POSIX compatibility package return -1 to indicate an error and store +additional information in what appears to be a global variable +errno. However, if multiple threads make concurrent +calls into the POSIX library and if errno were +really a global variable then a thread would have no way of knowing +whether the current errno value really corresponded +to the last POSIX call it made, or whether some other thread had run +in the meantime and made a different POSIX call which updated the +variable. To avoid such confusion errno is instead +implemented as a per-thread variable, and each thread has its own +instance. +

The support for per-thread data can be disabled via the configuration +option CYGVAR_KERNEL_THREADS_DATA. If enabled, each +cyg_thread data structure holds a small array +of words. The size of this array is determined by the configuration +option CYGNUM_KERNEL_THREADS_DATA_MAX. When a +thread is created the array is filled with zeroes. +

If an application needs to use per-thread data then it needs an index +into this array which has not yet been allocated to other code. This +index can be obtained by calling +cyg_thread_new_data_index, and then used in +subsequent calls to cyg_thread_get_data. +Typically indices are allocated during system initialization and +stored in static variables. If for some reason a slot in the array is +no longer required and can be re-used then it can be released by calling +cyg_thread_free_data_index, +

The current per-thread data in a given slot can be obtained using +cyg_thread_get_data. This implicitly operates on +the current thread, and its single argument should be an index as +returned by cyg_thread_new_data_index. The +per-thread data can be updated using +cyg_thread_set_data. If a particular item of +per-thread data is needed repeatedly then +cyg_thread_get_data_ptr can be used to obtain the +address of the data, and indirecting through this pointer allows the +data to be examined and updated efficiently. +

Some packages, for example the error and POSIX packages, have +pre-allocated slots in the array of per-thread data. These slots +should not normally be used by application code, and instead slots +should be allocated during initialization by a call to +cyg_thread_new_data_index. If it is known that, +for example, the configuration will never include the POSIX +compatibility package then application code may instead decide to +re-use the slot allocated to that package, +CYGNUM_KERNEL_THREADS_DATA_POSIX, but obviously +this does involve a risk of strange and subtle bugs if the +application's requirements ever change. +

Valid contexts

Typically cyg_thread_new_data_index is only +called during initialization, but may also be called at any time in +thread context. cyg_thread_free_data_index, if +used at all, can also be called during initialization or from thread +context. cyg_thread_get_data, +cyg_thread_get_data_ptr, and +cyg_thread_set_data may only be called from +thread context because they implicitly operate on the current thread. +


PrevHomeNext
Thread prioritiesUpThread destructors
\ No newline at end of file diff --git a/doc/html/ref/kernel-thread-destructors.html b/doc/html/ref/kernel-thread-destructors.html new file mode 100644 index 00000000..86f42243 --- /dev/null +++ b/doc/html/ref/kernel-thread-destructors.html @@ -0,0 +1,327 @@ + + + + + + + + +Thread destructors +
eCos Reference Manual
PrevNext

Thread destructors

Name

cyg_thread_add_destructor, cyg_thread_rem_destructor -- Call functions on thread termination

Description

These functions are provided for cases when an application requires a +function to be automatically called when a thread exits. This is often +useful when, for example, freeing up resources allocated by the thread. +

This support must be enabled with the configuration option +CYGPKG_KERNEL_THREADS_DESTRUCTORS. When enabled, +you may register a function of type +cyg_thread_destructor_fn to be called on thread +termination using cyg_thread_add_destructor. You +may also provide it with a piece of arbitrary information in the +data argument which will be passed to the +destructor function fn when the thread +terminates. If you no longer wish to call a function previous +registered with cyg_thread_add_destructor, you +may call cyg_thread_rem_destructor with the same +parameters used to register the destructor function. Both these +functions return true on success and +false on failure. +

By default, thread destructors are per-thread, which means that registering +a destructor function only registers that function for the current thread. +In other words, each thread has its own list of destructors. +Alternatively you may disable the configuration option +CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD in which +case any registered destructors will be run when any +threads exit. In other words, the thread destructor list is global and all +threads have the same destructors. +

There is a limit to the number of destructors which may be registered, +which can be controlled with the +CYGNUM_KERNEL_THREADS_DESTRUCTORS configuration +option. Increasing this value will very slightly increase the amount +of memory in use, and when +CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD is +enabled, the amount of memory used per thread will increase. When the +limit has been reached, cyg_thread_add_destructor +will return false. +

Valid contexts

When CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD +is enabled, these functions must only be called from a thread context +as they implicitly operate on the current thread. When +CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD is +disabled, these functions may be called from thread or DSR context, +or at initialization time. +


PrevHomeNext
Per-thread dataUpException handling
\ No newline at end of file diff --git a/doc/html/ref/kernel-thread-info.html b/doc/html/ref/kernel-thread-info.html new file mode 100644 index 00000000..82db9f08 --- /dev/null +++ b/doc/html/ref/kernel-thread-info.html @@ -0,0 +1,570 @@ + + + + + + + + +Thread information +
eCos Reference Manual
PrevNext

Thread information

Name

cyg_thread_self, cyg_thread_idle_thread, cyg_thread_get_stack_base, cyg_thread_get_stack_size, cyg_thread_measure_stack_usage, cyg_thread_get_next, cyg_thread_get_info, cyg_thread_find -- Get basic thread information

Description

These functions can be used to obtain some basic information about +various threads in the system. Typically they serve little or no +purpose in real applications, but they can be useful during debugging. +

cyg_thread_self returns a handle corresponding +to the current thread. It will be the same as the value filled in by +cyg_thread_create when the current thread was +created. This handle can then be passed to other functions such as +cyg_thread_get_priority. +

cyg_thread_idle_thread returns the handle +corresponding to the idle thread. This thread is created automatically +by the kernel, so application-code has no other way of getting hold of +this information. +

cyg_thread_get_stack_base and +cyg_thread_get_stack_size return information +about a specific thread's stack. The values returned will match the +values passed to cyg_thread_create when this +thread was created. +

cyg_thread_measure_stack_usage is only available +if the configuration option +CYGFUN_KERNEL_THREADS_STACK_MEASUREMENT is enabled. +The return value is the maximum number of bytes of stack space used so +far by the specified thread. Note that this should not be considered a +true upper bound, for example it is possible that in the current test +run the specified thread has not yet been interrupted at the deepest +point in the function call graph. Never the less the value returned +can give some useful indication of the thread's stack requirements. +

cyg_thread_get_next is used to enumerate all the +current threads in the system. It should be called initially with the +locations pointed to by thread and +id set to zero. On return these will be set to +the handle and ID of the first thread. On subsequent calls, these +parameters should be left set to the values returned by the previous +call. The handle and ID of the next thread in the system will be +installed each time, until a false return value +indicates the end of the list. +

cyg_thread_get_info fills in the +cyg_thread_info structure with information about the +thread described by the thread and +id arguments. The information returned includes +the thread's handle and id, its state and name, priorities and stack +parameters. If the thread does not exist the function returns +false. +

The cyg_thread_info structure is defined as follows by +<cyg/kernel/kapi.h>, but may +be extended in future with additional members, and so its size should +not be relied upon: +
typedef struct
+{
+    cyg_handle_t        handle;
+    cyg_uint16          id;
+    cyg_uint32          state;
+    char                *name;
+    cyg_priority_t      set_pri;
+    cyg_priority_t      cur_pri;
+    cyg_addrword_t      stack_base;
+    cyg_uint32          stack_size;
+    cyg_uint32          stack_used;
+} cyg_thread_info;
+

cyg_thread_find returns a handle for the thread +whose ID is id. If no such thread exists, a +zero handle is returned. +

Valid contexts

cyg_thread_self may only be called from thread +context. cyg_thread_idle_thread may be called +from thread or DSR context, but only after the system has been +initialized. cyg_thread_get_stack_base, +cyg_thread_get_stack_size and +cyg_thread_measure_stack_usage may be called +any time after the specified thread has been created, but measuring +stack usage involves looping over at least part of the thread's stack +so this should normally only be done from thread context. +

Examples

A simple example of the use of the +cyg_thread_get_next and +cyg_thread_get_info follows: +


#include <cyg/kernel/kapi.h>
+#include <stdio.h>
+
+void show_threads(void)
+{
+    cyg_handle_t thread = 0;
+    cyg_uint16 id = 0;
+
+    while( cyg_thread_get_next( &thread, &id ) )
+    {
+        cyg_thread_info info;
+
+        if( !cyg_thread_get_info( thread, id, &info ) )
+            break;
+
+        printf("ID: %04x name: %10s pri: %d\n",
+                info.id, info.name?info.name:"----", info.set_pri );
+    }
+}
+
+      

PrevHomeNext
Thread creationUpThread control
\ No newline at end of file diff --git a/doc/html/ref/kernel-thread-priorities.html b/doc/html/ref/kernel-thread-priorities.html new file mode 100644 index 00000000..b55abfa8 --- /dev/null +++ b/doc/html/ref/kernel-thread-priorities.html @@ -0,0 +1,279 @@ + + + + + + + + +Thread priorities +
eCos Reference Manual
PrevNext

Thread priorities

Name

cyg_thread_get_priority, cyg_thread_get_current_priority, cyg_thread_set_priority -- Examine and manipulate thread priorities

Description

Typical schedulers use the concept of a thread priority to determine +which thread should run next. Exactly what this priority consists of +will depend on the scheduler, but a typical implementation would be a +small integer in the range 0 to 31, with 0 being the highest priority. +Usually only the idle thread will run at the lowest priority. The +exact number of priority levels available depends on the +configuration, typically the option +CYGNUM_KERNEL_SCHED_PRIORITIES. +

cyg_thread_get_priority can be used to determine +the priority of a thread, or more correctly the value last used in a +cyg_thread_set_priority call or when the thread +was first created. In some circumstances it is possible that the +thread is actually running at a higher priority. For example, if it +owns a mutex and priority ceilings or inheritance is being used to +prevent priority inversion problems, then the thread's priority may +have been boosted temporarily. +cyg_thread_get_current_priority returns the real +current priority. +

In many applications appropriate thread priorities can be determined +and allocated statically. However, if it is necessary for a thread's +priority to change at run-time then the +cyg_thread_set_priority function provides this +functionality. +

Valid contexts

cyg_thread_get_priority and +cyg_thread_get_current_priority can be called +from thread or DSR context, although the latter is rarely useful. +cyg_thread_set_priority should also only be +called from thread context. +


PrevHomeNext
Thread terminationUpPer-thread data
\ No newline at end of file diff --git a/doc/html/ref/kernel-thread-termination.html b/doc/html/ref/kernel-thread-termination.html new file mode 100644 index 00000000..75716835 --- /dev/null +++ b/doc/html/ref/kernel-thread-termination.html @@ -0,0 +1,338 @@ + + + + + + + + +Thread termination +
eCos Reference Manual
PrevNext

Thread termination

Name

cyg_thread_exit, cyg_thread_kill, cyg_thread_delete -- Allow threads to terminate

Description

In many embedded systems the various threads are allocated statically, +created during initialization, and never need to terminate. This +avoids any need for dynamic memory allocation or other resource +management facilities. However if a given application does have a +requirement that some threads be created dynamically, must terminate, +and their resources such as the stack be reclaimed, then the kernel +provides the functions cyg_thread_exit, +cyg_thread_kill, and +cyg_thread_delete. +

cyg_thread_exit allows a thread to terminate +itself, thus ensuring that it will not be run again by the scheduler. +However the cyg_thread data structure passed +to cyg_thread_create remains in use, and the +handle returned by cyg_thread_create remains +valid. This allows other threads to perform certain operations on the +terminated thread, for example to determine its stack usage via +cyg_thread_measure_stack_usage. When the handle +and cyg_thread structure are no longer +required, cyg_thread_delete should be called to +release these resources. If the stack was dynamically allocated then +this should not be freed until after the call to +cyg_thread_delete. +

Alternatively, one thread may use cyg_thread_kill +on another This has much the same effect as the affected thread +calling cyg_thread_exit. However killing a thread +is generally rather dangerous because no attempt is made to unlock any +synchronization primitives currently owned by that thread or release +any other resources that thread may have claimed. Therefore use of +this function should be avoided, and +cyg_thread_exit is preferred. +cyg_thread_kill cannot be used by a thread to +kill itself. +

cyg_thread_delete should be used on a thread +after it has exited and is no longer required. After this call the +thread handle is no longer valid, and both the +cyg_thread structure and the thread stack can +be re-used or freed. If cyg_thread_delete is +invoked on a thread that is still running then there is an implicit +call to cyg_thread_kill. +

Valid contexts

cyg_thread_exit, +cyg_thread_kill and +cyg_thread_delete can only be called from thread +context. +


PrevHomeNext
Thread controlUpThread priorities
\ No newline at end of file diff --git a/doc/html/ref/kernel.html b/doc/html/ref/kernel.html new file mode 100644 index 00000000..e24e738e --- /dev/null +++ b/doc/html/ref/kernel.html @@ -0,0 +1,266 @@ + + + + + + + + +The eCos Kernel +
eCos Reference Manual
PrevNext

I. The eCos Kernel

Table of Contents
Kernel Overview -- Overview of the eCos Kernel
SMP Support -- Support Symmetric Multiprocessing Systems
Thread creation -- Create a new thread
Thread information -- Get basic thread information
Thread control -- Control whether or not a thread is running
Thread termination -- Allow threads to terminate
Thread priorities -- Examine and manipulate thread priorities
Per-thread data -- Manipulate per-thread data
Thread destructors -- Call functions on thread termination
Exception handling -- Handle processor exceptions
Counters -- Count event occurrences
Clocks -- Provide system clocks
Alarms -- Run an alarm function when a number of events have occurred
Mutexes -- Synchronization primitive
Condition Variables -- Synchronization primitive
Semaphores -- Synchronization primitive
Mail boxes -- Synchronization primitive
Event Flags -- Synchronization primitive
Spinlocks -- Low-level Synchronization Primitive
Scheduler Control -- Control the state of the scheduler
Interrupt Handling -- Manage interrupt handlers
Kernel Real-time Characterization -- Measure the performance of the eCos kernel

PrevHomeNext
eCos Reference Manual Kernel Overview
\ No newline at end of file diff --git a/doc/html/ref/layout.png b/doc/html/ref/layout.png new file mode 100644 index 00000000..257935a6 Binary files /dev/null and b/doc/html/ref/layout.png differ diff --git a/doc/html/ref/libc-implementation-details.html b/doc/html/ref/libc-implementation-details.html new file mode 100644 index 00000000..e8a38725 --- /dev/null +++ b/doc/html/ref/libc-implementation-details.html @@ -0,0 +1,465 @@ + + + + + + + + +Some implementation details +
eCos Reference Manual
PrevChapter 13. C and math library overviewNext

Some implementation details

Here are some details about the implementation +which might be interesting, although they do not affect the ISO-defined +semantics of the library.

Here is a minimal eCos program which +demonstrates the use of environments (see also the test case in language/c/libc/current/tests/stdlib/getenv.c):

#include <stdio.h>
+#include <stdlib.h> // Main header for stdlib functions
+
+extern char **environ; // Standard environment definition
+
+int
+main( int argc, char *argv[] )
+{
+ char *str;
+ char *env[] = { "PATH=/usr/local/bin:/usr/bin",
+ "HOME=/home/fred",
+ "TEST=1234=5678",
+ "home=hatstand",
+ NULL };
+
+ printf("Display the current PATH environment variable\n");
+
+ environ = (char **)&env;
+
+ str = getenv("PATH");
+
+ if (str==NULL) {
+  printf("The current PATH is unset\n");
+ } else {
+  printf("The current PATH is \"%s\"\n", str);
+ }
+ return 0;
+} 

PrevHomeNext
Math library compatibility modesUpThread safety
\ No newline at end of file diff --git a/doc/html/ref/libc-thread-safety.html b/doc/html/ref/libc-thread-safety.html new file mode 100644 index 00000000..f704f1ea --- /dev/null +++ b/doc/html/ref/libc-thread-safety.html @@ -0,0 +1,315 @@ + + + + + + + + +Thread safety +
eCos Reference Manual
PrevChapter 13. C and math library overviewNext

Thread safety

The ISO C library has configuration options that control thread +safety, i.e. working behavior if multiple threads call the same +function at the same time.

The following functionality has to be configured correctly, +or used carefully in a multi-threaded environment:

In some cases, to make eCos development +easier, functions are provided (as specified by POSIX 1003.1) that define +re-entrant alternatives, i.e. rand_r(), strtok_r(), asctime_r(), ctime_r(), gmtime_r(), +and localtime_r(). In other cases, +configuration options are provided that control either locking of functions +or their shared data, such as with standard I/O streams, +or by using per-thread data, such as with the errno variable.

In some other cases, like the setting of date and time, no +re-entrant or thread-safe alternative or configuration is provided +as it is simply not a worthwhile addition (date and time should +rarely need to be set.)


PrevHomeNext
Some implementation detailsUpC library startup
\ No newline at end of file diff --git a/doc/html/ref/libc.html b/doc/html/ref/libc.html new file mode 100644 index 00000000..7942d01c --- /dev/null +++ b/doc/html/ref/libc.html @@ -0,0 +1,161 @@ + + + + + + + + +The ISO Standard C and Math Libraries +
eCos Reference Manual
PrevNext


PrevHomeNext
Future developments C and math library overview
\ No newline at end of file diff --git a/doc/html/ref/malta.html b/doc/html/ref/malta.html new file mode 100644 index 00000000..aede5851 --- /dev/null +++ b/doc/html/ref/malta.html @@ -0,0 +1,690 @@ + + + + + + + + +MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Malta Board +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Malta Board

Initial Installation

RedBoot is installed using the code download facility built into the +Malta board. See the Malta User manual for details, and also the Malta download +format in the Section called Malta download format.

Quick download instructions

Here are quick start instructions for downloading the prebuilt RedBoot +image.

  1. Locate the prebuilt files in the bin directory: deleteall.fl and redboot_ROM.fl.

  2. Make sure switch S5-1 is ON. Reset the board and verify that +the LED display reads Flash DL.

  3. Make sure your parallel port is connected to the 1284 port +Of the Atlas board.

  4. Send the deleteall.fl file to the +parallel port to erase previous images: +
    $ cat deleteall.fl >/dev/lp0
    +When this is complete, the LED display should read +Deleted.

  5. Send the RedBoot image to the board: +
    $ cat redboot_ROM.fl >/dev/lp0
    +When this is complete, the LED display should show the last address +programmed. This will be something like: +1fc17000.

  6. Change switch S5-1 to OFF and reset the board. The LED display +should read RedBoot.

  7. Run the RedBoot fis init and fconfig commands to initialize the flash. See the Section called Flash Image System (FIS) in Chapter 2 +and the Section called Persistent State Flash-based Configuration and Control in Chapter 2 for details.

Additional commands

The exec command which allows the +loading and execution of Linux kernels, is supported for this architecture + (see the Section called Executing Programs from RedBoot in Chapter 2). The +exec parameters used for MIPS boards are:

-b <addr>

Location to store command line and environment passed to kernel

-w <time>

Wait time in seconds before starting kernel

-c "params"

Parameters passed to kernel

<addr>

Kernel entry point, defaulting to the entry point of the last image +loaded

Linux kernels on MIPS platforms expect the entry point to be called with arguments +in the registers equivalent to a C call with prototype: +
void Linux(int argc, char **argv, char **envp);

RedBoot will place the appropriate data at the offset specified by the +-b parameter, or by default at address 0x80080000, and will set the +arguments accordingly when calling into the kernel.

The default entry point, if no image with explicit entry point has been loaded and +none is specified, is 0x80000750.

Interrupts

RedBoot uses an interrupt vector table which is located at address 0x80000200. +Entries in this table are pointers to functions with this protoype:
int irq_handler( unsigned vector, unsigned data )
On the malta +board, the vector argument is one of 22 interrupts defined in hal/mips/malta/VERSION/include/plf_intr.h:

#define CYGNUM_HAL_INTERRUPT_SOUTH_BRIDGE_INTR   0
+#define CYGNUM_HAL_INTERRUPT_SOUTH_BRIDGE_SMI    1
+#define CYGNUM_HAL_INTERRUPT_CBUS_UART           2
+#define CYGNUM_HAL_INTERRUPT_COREHI              3
+#define CYGNUM_HAL_INTERRUPT_CORELO              4
+#define CYGNUM_HAL_INTERRUPT_COMPARE             5
+#define CYGNUM_HAL_INTERRUPT_TIMER               6
+#define CYGNUM_HAL_INTERRUPT_KEYBOARD            7
+#define CYGNUM_HAL_INTERRUPT_CASCADE             8
+#define CYGNUM_HAL_INTERRUPT_TTY1                9
+#define CYGNUM_HAL_INTERRUPT_TTY0               10
+#define CYGNUM_HAL_INTERRUPT_11                 11
+#define CYGNUM_HAL_INTERRUPT_FLOPPY             12
+#define CYGNUM_HAL_INTERRUPT_PARALLEL           13
+#define CYGNUM_HAL_INTERRUPT_REAL_TIME_CLOCK    14
+#define CYGNUM_HAL_INTERRUPT_I2C                15
+#define CYGNUM_HAL_INTERRUPT_PCI_AB             16
+#define CYGNUM_HAL_INTERRUPT_PCI_CD             17
+#define CYGNUM_HAL_INTERRUPT_MOUSE              18
+#define CYGNUM_HAL_INTERRUPT_19                 19
+#define CYGNUM_HAL_INTERRUPT_IDE_PRIMARY        20
+#define CYGNUM_HAL_INTERRUPT_IDE_SECONDARY      21
The data +passed to the ISR is pulled from a data table (hal_interrupt_data) which immediately follows the interrupt vector table. With +22 interrupts, the data table starts at address 0x80000258.

An application may create a normal C function with the above prototype +to be an ISR. Just poke its address into the table at the correct index and +enable the interrupt at its source. The return value of the ISR is ignored +by RedBoot.

Memory Maps

Memory Maps RedBoot sets up the following memory map on the Malta board.

Physical Address Range  C B  Description
+----------------------- - -  -----------
+0x80000000 - 0x81ffffff Y Y  SDRAM
+0x9e000000 - 0x9e3fffff Y N  System flash (cached)
+0x9fc00000 - 0x9fffffff Y N  System flash (mirrored)
+0xa8000000 - 0xb7ffffff N N  PCI Memory Space
+0xb4000000 - 0xb40fffff N N  Galileo System Controller
+0xb8000000 - 0xb80fffff N N  Southbridge / ISA
+0xb8100000 - 0xbbdfffff N N  PCI I/O Space
+0xbe000000 - 0xbe3fffff N N  System flash (noncached)
+0xbf000000 - 0xbfffffff N N  Board logic FPGA

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=malta_mips32_4kc
+export ARCH_DIR=mips
+export PLATFORM_DIR=malta

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Atlas BoardUpMIPS/RM7000 PMC-Sierra Ocelot
\ No newline at end of file diff --git a/doc/html/ref/math-library-compatibility-modes.html b/doc/html/ref/math-library-compatibility-modes.html new file mode 100644 index 00000000..21c72c4a --- /dev/null +++ b/doc/html/ref/math-library-compatibility-modes.html @@ -0,0 +1,502 @@ + + + + + + + + +Math library compatibility modes +
eCos Reference Manual
PrevChapter 13. C and math library overviewNext

Math library compatibility modes

This math library is capable of being operated in several +different compatibility modes. These options deal solely with how +errors are handled.

There are 4 compatibility modes: ANSI/POSIX 1003.1; +IEEE-754; X/Open Portability Guide issue 3 (XPG3); and +System V Interface Definition Edition 3.

In IEEE mode, the matherr() function +(see below) is never called, no warning messages are printed on +the stderr output stream, and errno is never set.

In ANSI/POSIX mode, errno is set correctly, +but matherr() is never called and no warning messages +are printed on the stderr output stream.

In X/Open mode, errno is set correctly, +matherr() is called, but no warning messages are printed +on the stderr output stream.

In SVID mode, functions which overflow return +a value HUGE (defined in math.h), which is the maximum +single precision floating point value (as opposed to +HUGE_VAL which is meant to stand for infinity). errno is +set correctly and matherr() is called. If +matherr() returns 0, warning messages are printed on +the stderr output stream for some errors.

The mode can be compiled-in as IEEE-only, or any one of the +above methods settable at run-time.

matherr()

As mentioned above, in X/Open or SVID modes, the user + can supply a function matherr() of + the form:

int matherr( struct exception *e )

where struct exception is defined as:

struct exception {
+ int type;
+ char *name;
+ double arg1, arg2, retval;
+}; 

type is the exception type and is one of:

name is a string containing the name of the +function

arg1 and arg2 are the +arguments passed to the function

retval is the default value that will be returned +by the function, and can be changed by matherr()

If matherr returns zero, or the user doesn't supply +their own matherr, then the following usually happens +in SVID mode:

X/Open mode is similar except that the message is +not printed on stderr and HUGE_VAL is used in place of +HUGE


PrevHomeNext
C and math library overviewUpSome implementation details
\ No newline at end of file diff --git a/doc/html/ref/mbx.html b/doc/html/ref/mbx.html new file mode 100644 index 00000000..c5e118e6 --- /dev/null +++ b/doc/html/ref/mbx.html @@ -0,0 +1,417 @@ + + + + + + + + +PowerPC/MPC8XX Motorola MBX +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

PowerPC/MPC8XX Motorola MBX

Initial Installation Method

Device programmer is used to program the XU1 socketed flash part (AM29F040B) +with the ROM mode image of RedBoot. Use the on-board EPPC-Bug monitor to update +RedBoot.

This assumes that you have EPPC-Bug in the on-board flash. This can +be determined by setting up the board according to the following instructions +and powering up the board.

The EPPC-Bug prompt should appear on the SMC1 connector at 9600 baud, +8N1.

  1. Set jumper 3 to 2-3 [allow XU1 flash to be programmed]

  2. Set jumper 4 to 2-3 [boot EPPC-Bug]

If it is available, program the flash by following these steps:

  1. Prepare EPPC-Bug for download:
    EPPC-Bug>lo 0
    At this point the monitor is ready for input. It will not +return the prompt until the file has been downloaded.

  2. Use the terminal emulator's ASCII download feature (or a simple +clipboard copy/paste operation) to download the +redboot.ppcbug file.

    Note that on Linux, Minicom's ASCII +download feature seems to be broken. A workaround is to load the file +into emacs (or another editor) and copy the +full contents to the clipboard. Then press the mouse paste-button (usually +the middle one) over the Minicom window.

  3. Program the flash with the downloaded data:
    EPPC-Bug>pflash 40000 60000 fc000000

  4. Switch off the power, and change jumper 4 to 1-2. Turn on +the power again. The board should now boot using the newly programmed RedBoot.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=mbx
+export ARCH_DIR=powerpc
+export PLATFORM_DIR=mbx

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
PowerPC/MPC860T Analogue & Micro PowerPC 860TUpSuperH/SH3(SH7708) Hitachi EDK7708
\ No newline at end of file diff --git a/doc/html/ref/mcmp-command.html b/doc/html/ref/mcmp-command.html new file mode 100644 index 00000000..f7cfb135 --- /dev/null +++ b/doc/html/ref/mcmp-command.html @@ -0,0 +1,475 @@ + + + + + + + + +mcmp +
eCos Reference Manual
PrevNext

mcmp

Name

mcmp -- Compare two segments of memory

Description

Compares the contents of two ranges of memory (RAM, ROM, FLASH, etc).

Examples

Compare two buffers which match (result is quiet). +
 
+RedBoot> mfill -b 0x100000 -l 0x20 -p 0xDEADFACE
+RedBoot> mfill -b 0x200000 -l 0x20 -p 0xDEADFACE
+RedBoot> mcmp -s 0x100000 -d 0x200000 -l 0x20

Compare two buffers which don't match. +Only the first non-matching element is displayed. +
 
+RedBoot> mcmp -s 0x100000 -d 0x200000 -l 0x30 -2
+Buffers don't match - 0x00100020=0x6000, 0x00200020=0x0000
+

\ No newline at end of file diff --git a/doc/html/ref/menu_edit.png b/doc/html/ref/menu_edit.png new file mode 100644 index 00000000..7923bf71 Binary files /dev/null and b/doc/html/ref/menu_edit.png differ diff --git a/doc/html/ref/menu_file.png b/doc/html/ref/menu_file.png new file mode 100644 index 00000000..8002debb Binary files /dev/null and b/doc/html/ref/menu_file.png differ diff --git a/doc/html/ref/menu_help.png b/doc/html/ref/menu_help.png new file mode 100644 index 00000000..ef16dfae Binary files /dev/null and b/doc/html/ref/menu_help.png differ diff --git a/doc/html/ref/menu_view.png b/doc/html/ref/menu_view.png new file mode 100644 index 00000000..199a80bc Binary files /dev/null and b/doc/html/ref/menu_view.png differ diff --git a/doc/html/ref/mfill-command.html b/doc/html/ref/mfill-command.html new file mode 100644 index 00000000..8c4789f8 --- /dev/null +++ b/doc/html/ref/mfill-command.html @@ -0,0 +1,473 @@ + + + + + + + + +mfill +
eCos Reference Manual
PrevNext

mfill

Name

mfill -- Fill RAM with a specified pattern

Description

Fills a range of memory with the given pattern.

Examples

Fill a buffer with zeros. +
 
+RedBoot> x -b 0x100000 -l 0x20
+00100000: 00 3E 00 06 00 06 00 06  00 00 00 00 00 00 00 00  |.>..............|
+00100010: 00 00 00 78 00 70 00 60  00 60 00 60 00 60 00 60  |...x.p.`.`.`.`.`|
+RedBoot> mfill -b 0x100000 -l 0x20
+RedBoot> x -b 0x100000 -l 0x20
+00100000: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
+00100010: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

Fill a buffer with a pattern. +
 
+RedBoot> mfill -b 0x100000 -l 0x20 -p 0xDEADFACE
+RedBoot> x -b 0x100000 -l 0x20
+00100000: CE FA AD DE CE FA AD DE  CE FA AD DE CE FA AD DE  |................|
+00100010: CE FA AD DE CE FA AD DE  CE FA AD DE CE FA AD DE  |................|
+

\ No newline at end of file diff --git a/doc/html/ref/nano.html b/doc/html/ref/nano.html new file mode 100644 index 00000000..08e2cf95 --- /dev/null +++ b/doc/html/ref/nano.html @@ -0,0 +1,684 @@ + + + + + + + + +ARM/StrongARM(SA11X0) Bright Star Engineering commEngine and nanoEngine +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/StrongARM(SA11X0) Bright Star Engineering commEngine and nanoEngine

Download Instructions

You can perform the initial load of the POST-configuration RedBoot image into +flash using the BSE firmware's load command. +This will load a binary file, using TFTP, and program it into flash in one +operation. Because no memory management is used in the BSE firmware, flash +is mapped from address zero upwards, so the address for the RedBoot POST image +is 0x40000. You must use the binary version of RedBoot for this, +redboot-post.bin.

This assumes you have set up the other BSE firmware config +parameters such that it can communicate over your network to your TFTP +server. +
>load redboot-post.bin 40000
+loading ... erasing blk at 00040000
+erasing blk at 00050000
+94168 bytes loaded cksum 00008579
+done
+>
+> set bootcmd "go 40000"
+> get
+myip = 10.16.19.198
+netmask = 255.255.255.0
+eth = 0
+gateway = 10.16.19.66
+serverip = 10.16.19.66
+bootcmd = go 40000
+>
+ +

+ +After a reset, the BSE firmware will print + +
Boot: BSE 2000 Sep 12 2000 14:00:30
+autoboot: "go 40000" [hit ESC to abort]
+ +and then RedBoot starts, switching to 38400 Baud.

Once you have installed a bootable RedBoot in the system in this +manner, we advise re-installing using the generic method described in +Chapter 4 in order that the Flash Image System +contains an appropriate description of the flash entries.

Cohabiting with POST in Flash

The configuration file named redboot_POST.ecm +configures RedBoot to build for execution at address 0x50040000 (or, during +bootup, 0x00040000). This is to allow power-on self-test (POST) code or immutable +firmware to live in the lower addresses of the flash and to run before RedBoot +gets control. The assumption is that RedBoot will be entered at its base address +in physical memory, that is 0x00040000.

Alternatively, for testing, you can call it in an already running system +by using go 0x50040040 at another RedBoot prompt, or +a branch to that address. The address is where the reset vector +points. It is reported by RedBoot's load command +and listed +by the fis list command, amongst other +places.

Using the POST configuration enables a normal config option which causes +linking and initialization against memory layout files called "...post..." +rather than "...rom..." or "...ram..." in the include/pkgconf directory. Specifically:

include/pkgconf/mlt_arm_sa11x0_nano_post.h
+include/pkgconf/mlt_arm_sa11x0_nano_post.ldi
+include/pkgconf/mlt_arm_sa11x0_nano_post.mlt

+ +It is these you should edit if you wish to move the execution address +from 0x50040000 in the POST configuration. Startup mode naturally +remains ROM in this configuration.

Because the nanoEngine contains immutable boot firmware at the start +of flash, RedBoot for this target is configured to reserve that area in the +Flash Image System, and to create by default an entry for the POST +mode RedBoot. +
RedBoot> fis list
+Name              FLASH addr  Mem addr    Length      Entry point
+(reserved)        0x50000000  0x50000000  0x00040000  0x00000000
+RedBoot[post]     0x50040000  0x00100000  0x00020000  0x50040040
+RedBoot config    0x503E0000  0x503E0000  0x00010000  0x00000000
+FIS directory     0x503F0000  0x503F0000  0x00010000  0x00000000
+RedBoot>
+The entry "(reserved)" ensures that the FIS cannot attempt +to overwrite the BSE firmware, thus ensuring that the board remains bootable +and recoverable even after installing a broken RedBoot image.

Special RedBoot Commands

The nanoEngine/commEngine has one or two Intel i82559 Ethernet controllers +installed, but these have no associated serial EEPROM in which to record their +Ethernet Station Address (ESA, or MAC address). The BSE firmware records an +ESA for the device it uses, but this information is not available to RedBoot; +we cannot share it.

To keep the ESAs for the two ethernet interfaces, two new items of RedBoot +configuration data are introduced. You can list them with the RedBoot command fconfig -l thus: +
RedBoot> fconfig -l
+Run script at boot: false
+Use BOOTP for network configuration: false
+Local IP address: 10.16.19.91
+Default server IP address: 10.16.19.66
+Network hardware address [MAC] for eth0: 0x00:0xB5:0xE0:0xB5:0xE0:0x99
+Network hardware address [MAC] for eth1: 0x00:0xB5:0xE0:0xB5:0xE0:0x9A
+GDB connection port: 9000
+Network debug at boot time: false
+RedBoot>
+ +You should set them before running RedBoot or eCos applications with +the board connected to a network. The fconfig +command can be used as for any configuration data item; the entire ESA +is entered in one line.

Memory Maps

The first level page table is located at physical address 0xc0004000. + No second level tables are used.

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x003fffff    4Mb FLASH (nCS0)
+0x18000000 - 0x18ffffff    Internal PCI bus - 2 x i82559 ethernet
+0x40000000 - 0x4fffffff    External IO or PCI bus
+0x80000000 - 0xbfffffff    SA-1110 Internal Registers
+0xc0000000 - 0xc7ffffff    DRAM Bank 0 - 32Mb SDRAM
+0xc8000000 - 0xcfffffff    DRAM Bank 1 - empty
+0xe0000000 - 0xe7ffffff    Cache Clean
+
+Virtual Address Range    C B  Description
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x001fffff  Y Y  DRAM - 8Mb to 32Mb
+0x18000000 - 0x180fffff  N N  Internal PCI bus - 2 x i82559 ethernet
+0x40000000 - 0x4fffffff  N N  External IO or PCI bus
+0x50000000 - 0x51ffffff  Y Y  Up to 32Mb FLASH (nCS0)
+0x80000000 - 0xbfffffff  N N  SA-1110 Internal Registers
+0xc0000000 - 0xc0ffffff  N Y  DRAM Bank 0: 8 or 16Mb
+0xc8000000 - 0xc8ffffff  N Y  DRAM Bank 1: 8 or 16Mb or absent
+0xe0000000 - 0xe7ffffff  Y Y  Cache Clean

The ethernet devices use a "PCI window" to communicate with the CPU. +This is 1Mb of SDRAM which is shared with the ethernet devices that are on +the PCI bus. It is neither cached nor buffered, to ensure that CPU and PCI +accesses see correct data in the correct order. By default it is configured +to be megabyte number 30, at addresses 0x01e00000-0x01efffff. This can be +modified, and indeed must be, if less than 32Mb of SDRAM is installed, via +the memory layout tool, or by moving the section __pci_window referred to by symbols CYGMEM_SECTION_pci_window* in the linker script.

Though the nanoEngine ships with 32Mb of SDRAM all attached to DRAM +bank 0, the code can cope with any of these combinations also; "2 x " in this +context means one device in each DRAM Bank.

1 x 8Mb = 8Mb     2 x 8Mb = 16Mb
+1 x 16Mb = 16Mb   2 x 16Mb = 32Mb

All are programmed the same +in the memory controller.

Startup code detects which is fitted and programs the memory map accordingly. +If the device(s) is 8Mb, then there are gaps in the physical memory map, because +a high order address bit is not connected. The gaps are the higher 2Mb out +of every 4Mb.

The SA11x0 OS timer is used as a polled timer to provide timeout +support within RedBoot.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=nano
+export ARCH_DIR=arm
+export PLATFORM_DIR=sa11x0/nano

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/StrongARM(SA1110) Intel SA1110 (Assabet)UpARM/StrongARM(SA11X0) Compaq iPAQ PocketPC
\ No newline at end of file diff --git a/doc/html/ref/net-common-building-the-network-tests.html b/doc/html/ref/net-common-building-the-network-tests.html new file mode 100644 index 00000000..39c90185 --- /dev/null +++ b/doc/html/ref/net-common-building-the-network-tests.html @@ -0,0 +1,327 @@ + + + + + + + + +Building the Network Tests +
eCos Reference Manual
PrevChapter 36. Tests and DemonstrationsNext

Building the Network Tests

To build further network tests, ensure that the configuration +option CYGPKG_NET_BUILD_TESTS is set in your build +and then make the tests in the usual way. Alternatively +(with that option set) use +
make -C net/common/VERSION/ tests 
+after building the eCos library, if you wish to build +only +the network tests.

This should give test executables in +install/tests/net/common/VERSION/tests +including +the following:

socket_test - trivial test of socket creation API 
+mbuf_test - trivial test of mbuf allocation API 
+ftp_test - simple FTP test, connects to “server” 
+ping_test - pings “server” and non-existent host to test timeout 
+dhcp_test - ping test, but also relinquishes and
+            reacquires DHCP leases periodically 
+flood - a flood ping test; use with care 
+tcp_echo - data forwarding program for performance test
+nc_test_master - network characterization master
+nc_test_slave - network characterization slave
+server_test - a very simple server example
+tftp_client_test - performs a tftp get and put from/to “server” 
+tftp_server_test - runs a tftp server for a short while 
+set_mac_address - set MAC address(es) of interfaces in NVRAM
+bridge - contributed network bridge code
+nc6_test_master - IPv4/IPv6 network characterization master
+nc6_test_slave - IPv4/IPv6 network characterization slave
+ga_server_test - a very simple IPv4/IPv6 server example

PrevHomeNext
Tests and DemonstrationsUpStandalone Tests
\ No newline at end of file diff --git a/doc/html/ref/net-common-configuring-ip-addresses.html b/doc/html/ref/net-common-configuring-ip-addresses.html new file mode 100644 index 00000000..b58779fd --- /dev/null +++ b/doc/html/ref/net-common-configuring-ip-addresses.html @@ -0,0 +1,315 @@ + + + + + + + + +Configuring IP Addresses +
eCos Reference Manual
PrevNext

Chapter 35. Configuring IP Addresses

Each interface (“eth0” and “eth1”) +has independent configuration of its setup. Each can be set up +manually (in which case you must write code to do this), or by using +BOOTP/DHCP, +or explicitly, with configured values. If additional +interfaces are added, these must be configured manually.

The configurable values are:

Server address is the DHCP server if applicable, but in addition, +many test cases use it as “the machine to talk to” in +whatever manner the test exercises the protocol stack.

The initialization is invoked by calling the C routine +
void init_all_network_interfaces(void);

Additionally, if the system is configured to support IPv6 then each +interface may have an address assigned which is a composite of a 64 bit +prefix and the 32 bit IPv4 address for that interface. +The prefix is controlled by the CDL setting +CYGHWR_NET_DRIVER_ETH0_IPV6_PREFIX for “eth0”, etc. +This is a CDL booldata type, allowing this address to be suppressed if +not desired.

Refer to the test cases, +…/packages/net/common/VERSION/tests/ftp_test.c +for example usage, and the source files in +…/packages/net/common/VERSION/src/bootp_support.c +and +network_support.c +to see what that call does.

This assumes that the MAC address (also known as +ESA or Ethernet Station Address) +is already defined in the +serial EEPROM or however the particular target implements this; +support for setting the MAC address is hardware dependent.

DHCP support is active by default, and there are configuration +options to control it. Firstly, in the top level of the +“Networking” configuration +tree, “Use full DHCP instead of BOOTP” enables +DHCP, and it contains an option to have the system provide a thread +to renew DHCP leases and manage lease expiry. Secondly, the individual +interfaces “eth0” and “eth1” each +have new options within the “Use BOOTP/DHCP to +initialize ‘ethX’” to +select whether to use DHCP rather than BOOTP.

Note that you are completely at liberty to ignore this startup code and its +configuration in building your application. +init_all_network_interfaces() +is provided for three main purposes: +

If your application has different requirements for bringing up +available network interfaces, setting up routes, determining IP addresses +and the like from the defaults that the example code provides, you can +write your own initialization code to use whatever sequence of +ioctl() function +calls carries out the desired setup. Analogously, in larger systems, +a sequence of “ifconfig” invocations is used; these mostly +map to ioctl() calls to manipulate the state of +the interface in question.


PrevHomeNext
Sample CodeUpTests and Demonstrations
\ No newline at end of file diff --git a/doc/html/ref/net-common-dhcp.html b/doc/html/ref/net-common-dhcp.html new file mode 100644 index 00000000..177b9184 --- /dev/null +++ b/doc/html/ref/net-common-dhcp.html @@ -0,0 +1,231 @@ + + + + + + + + +DHCP +
eCos Reference Manual
PrevChapter 37. Support FeaturesNext

DHCP

This API publishes a routine to maintain DHCP state, and a +semaphore that is signalled when a lease requires attention: this +is your clue to call the aforementioned routine.

The intent with this API is that a simple DHCP client thread, +which maintains the state of the interfaces, can go as follows: +(after init_all_network_interfaces() is +called from elsewhere)

while ( 1 ) {
+        while ( 1 ) {
+            cyg_semaphore_wait( &dhcp_needs_attention );
+            if ( ! dhcp_bind() ) // a lease expired
+                break; // If we need to re-bind
+        }
+        dhcp_halt(); // tear everything down
+        init_all_network_interfaces(); // re-initialize
+}

and if the application does not want to suffer the overhead +of a separate thread and its stack for this, this functionality +can be placed in the app’s server loop in an obvious fashion. + That is the goal of breaking out these internal elements. For example, +some server might be arranged to poll DHCP from time to time like +this:

while ( 1 ) {
+    init_all_network_interfaces();
+    open-my-listen-sockets();
+    while ( 1 ) {
+       serve-one-request();
+       // sleeps if no connections, but not forever; 
+       // so this loop is polled a few times a minute...
+       if ( cyg_semaphore_trywait( &dhcp_needs_attention )) {
+             if ( ! dhcp_bind() ) {
+                 close-my-listen-sockets();
+                 dhcp_halt();
+                 break;
+             }
+       }
+    }
+}

If the configuration option CYGOPT_NET_DHCP_DHCP_THREAD +is defined, then eCos provides a thread as described initially. +Independent of this option, initialization of the interfaces still +occurs in init_all_network_interfaces() and +your startup code can call that. It will start the DHCP management +thread if configured. If a lease fails to be renewed, the management +thread will shut down all interfaces and attempt to initialize all +the interfaces again from scratch. This may cause chaos in the +app, which is why managing the DHCP state in an application aware +thread is actually better, just far less convenient for testing.


PrevHomeNext
Support FeaturesUpTCP/IP Library Reference
\ No newline at end of file diff --git a/doc/html/ref/net-common-ethernet-driver-design.html b/doc/html/ref/net-common-ethernet-driver-design.html new file mode 100644 index 00000000..9a96b5bc --- /dev/null +++ b/doc/html/ref/net-common-ethernet-driver-design.html @@ -0,0 +1,182 @@ + + + + + + + + +Ethernet Driver Design +
eCos Reference Manual
PrevNext

Chapter 33. Ethernet Driver Design

Currently, the networking stack only supports ethernet based +networking.

The network drivers use a two-layer design. One layer is +hardware independent and contains all the stack specific code. +The other layer is platform dependent and communicates with the +hardware independent layer via a very simple API. In this way, +hardware device drivers can actually be used with other stacks, +if the same API can be provided by that stack. We designed the +drivers this way to encourage the development of other stacks in +eCos while allowing re-use of the actual hardware specific code.

More comprehensive documentation of the ethernet device driver and +the associated API can be found in the generic ethernet device driver +documentation +Part XIV in eCos Reference Manual +The driver and API is the same as the minimal debug stack used by +the RedBoot application. See the RedBoot documentation +Part II in eCos Reference Manual +for further +information.


PrevHomeNext
TCP/IP Stack Support for eCosUpSample Code
\ No newline at end of file diff --git a/doc/html/ref/net-common-interactive-tests.html b/doc/html/ref/net-common-interactive-tests.html new file mode 100644 index 00000000..12c159f9 --- /dev/null +++ b/doc/html/ref/net-common-interactive-tests.html @@ -0,0 +1,376 @@ + + + + + + + + +Interactive Tests +
eCos Reference Manual
PrevChapter 36. Tests and DemonstrationsNext

Interactive Tests

server_test - a very simple server example

This test simply awaits a connection on port 7734 and after +accepting a connection, gets a packet (with a timeout of a few seconds) +and prints it.

The connection is then closed. We then loop to await the next +connection, and so on. To use it, telnet to the target on port 7734 +then type something (quickly!)

% telnet 172.16.19.171 7734 
+Hello target board

and the test program will print something like:

connection from 172.16.19.13:3369 
+buf = "Hello target board"
ga_server_test - another very simple server example

This is a variation on the ga_server_test test +with the difference being that it uses the getaddrinfo +function to set up its addresses. On a system with IPv6 enabled, it will +listen on port 7734 for a TCP connection via either IPv4 or IPv6.

tftp_client_test - performs a tftp get and put from/to “server”

This is only partially interactive. You need to set things +up on the “server” in order for this to work, +and you will need to look at the server afterwards to confirm that all +was well.

For each interface in turn, this test attempts to read by +tftp from the server, a file called +tftp_get +and +prints the status and contents it read (if any). It then writes +the same data to a file called +tftp_put +on +the same server.

In order for this to succeed, both files must already exist. + The TFTP protocol does not require that a WRQ request _create_ a +file, just that it can write it. The TFTP server on Linux certainly +will only allow writes to an existing file, given the appropriate +permission. Thus, you need to have these files in place, with proper permission, +before running the test.

The conventional place for the tftp server to operate in LINUX +is /tftpboot/; you will likely need root privileges +to create files there. The data contents of +tftp_get +can +be anything you like, but anything very large will waste lots of +time printing it on the test’s stdout, and anything above +32kB will cause a buffer overflow and unpredictable failure.

Creating an empty tftp_put file (eg. by copying /dev/null +to it) is neatest. So before the test you should have something +like:

-rw-rw-rw- 1 root        1076 May  1 11:39 tftp_get
+-rw-rw-rw- 1 root        0 May  1 15:52 tftp_put 

note that both files have public permissions wide open. After +running the test, +tftp_put +should +be a copy of +tftp_get.

-rw-rw-rw-  1 root       1076 May  1 11:39 tftp_get
+-rw-rw-rw-  1 root       1076 May  1 15:52 tftp_put
tftp_server_test - runs a tftp server for a short while

This test is truly interactive, in that you can use a standard +tftp application to get and put files from the server, during the +5 minutes that it runs. The dummy filesystem which underlies the +server initially contains one file, called “uu” which contains +part of a familiar text and some padding. It also accommodates +creation of 3 further files of up to 1Mb in size and names of up +to 256 bytes. Exceeding these limits will cause a buffer overflow +and unpredictable failure.

The dummy filesystem is an implementation of the generic API +which allows a true filesystem to be attached to the tftp server +in the network stack.

We have been testing the tftp server by running the test on +the target board, then using two different host computers connecting +to the different target interfaces, putting a file from each, getting +the “uu” file, and getting the file from the other computer. + This verifies that data is preserved during the transfer as well +as interworking with standard tftp applications.


PrevHomeNext
Performance TestUpMaintenance Tools
\ No newline at end of file diff --git a/doc/html/ref/net-common-maintenance-tools.html b/doc/html/ref/net-common-maintenance-tools.html new file mode 100644 index 00000000..73ea8c74 --- /dev/null +++ b/doc/html/ref/net-common-maintenance-tools.html @@ -0,0 +1,192 @@ + + + + + + + + +Maintenance Tools +
eCos Reference Manual
PrevChapter 36. Tests and DemonstrationsNext


PrevHomeNext
Interactive TestsUpSupport Features
\ No newline at end of file diff --git a/doc/html/ref/net-common-performance-test.html b/doc/html/ref/net-common-performance-test.html new file mode 100644 index 00000000..2a039d1e --- /dev/null +++ b/doc/html/ref/net-common-performance-test.html @@ -0,0 +1,351 @@ + + + + + + + + +Performance Test +
eCos Reference Manual
PrevChapter 36. Tests and DemonstrationsNext

Performance Test

tcp_echo      - data forwarding program for performance test

tcp_echo is one +part of the standard performance test we use. The other parts are +host programs tcp_source and tcp_sink. + To make these (under LINUX) cd to the tests source directory in +the eCos repository and type “make -f make.linux” - +this should build tcp_source and tcp_sink.

The LINUX program “tcp_source” sends +data to the target. On the target, “tcp_echo” sends +it onwards to “tcp_sink” running +on LINUX. So the target must receive and send on all the data that tcp_source sends +it; the time taken for this is measured and the data rate is calculated.

To invoke the test, first start tcp_echo on +the target board and wait for it to become quiescent - it will report +work to calibrate a CPU load which can be used to simulate real +operating conditions for the stack.

Then on your LINUX machine, in one terminal window, invoke tcp_sink giving +it the IP address (or hostname) of one interface of the target board. + For example “tcp_sink 10.130.39.66”. + tcp_echo on the target +will print something like “SINK connection +from 10.130.39.13:1143” when tcp_sink is +correctly invoked.

Next, in another LINUX terminal window, invoke tcp_source, +giving it the IP address (or hostname) of an interface of the target +board, and optionally a background load to apply to the target while +the test runs. For example, “tcp_source +194.130.39.66” to run the test with no +additional target CPU load, or “tcp_source +194.130.39.66 85” to load it up to 85% used. + The target load must be a multiple of 5. tcp_echo on +the target will print something like “SOURCE +connection from 194.130.39.13:1144” when +tcp_source is correctly invoked.

You can connect tcp_sink to one target interface +and tcp_source to another, or both to the same interface. + Similarly, you can run tcp_sink and tcp_source on +the same LINUX machine or different ones. TCP/IP and ARP +look after them finding one another, as intended.

nc_test_master - network characterization master
+nc_test_slave - network characterization slave

These tests talk to each other to measure network performance. +They can each run on either a test target or a LINUX host computer +given some customization to your local environment. As provided, nc_test_slave must +run on the test target, and nc_test_master must +be run on a LINUX host, and be given the test target's +IP address or hostname.

The tests print network performance for various packet sizes +over UDP and TCP, versus various additional CPU loads on the target.

The programs
nc6_test_slave
+nc6_test_master
+are additional forms which support both IPv4 and IPv6 addressing.


PrevHomeNext
Standalone TestsUpInteractive Tests
\ No newline at end of file diff --git a/doc/html/ref/net-common-sample-code.html b/doc/html/ref/net-common-sample-code.html new file mode 100644 index 00000000..0698d9e8 --- /dev/null +++ b/doc/html/ref/net-common-sample-code.html @@ -0,0 +1,177 @@ + + + + + + + + +Sample Code +
eCos Reference Manual
PrevNext


PrevHomeNext
Ethernet Driver DesignUpConfiguring IP Addresses
\ No newline at end of file diff --git a/doc/html/ref/net-common-standalone-tests.html b/doc/html/ref/net-common-standalone-tests.html new file mode 100644 index 00000000..8d231de8 --- /dev/null +++ b/doc/html/ref/net-common-standalone-tests.html @@ -0,0 +1,276 @@ + + + + + + + + +Standalone Tests +
eCos Reference Manual
PrevChapter 36. Tests and DemonstrationsNext

Standalone Tests

socket_test - trivial test of socket creation API 
+mbuf_test - trivial test of mbuf allocation API

These two do not communicate over the net; they just perform +simple API tests then exit.

ftp_test      - simple FTP test, connects to “server”

This test initializes the interface(s) then connects to the +FTP server on the “server” machine for for each +active interface in turn, confirms that the connection was successful, +disconnects and exits. This tests interworking with the server.

ping_test      - pings “server” and non-existent host to test timeout

This test initializes the interface(s) then pings the server +machine in the standard way, then pings address “32 up” from +the server in the expectation that there is no machine there. This +confirms that the successful ping is not a false positive, and tests +the receive timeout. If there is such a machine, of course the +2nd set of pings succeeds, confirming that we can talk to a machine +not previously mentioned by configuration or by bootp. It then does +the same thing on the other interface, eth1.

dhcp_test    - ping test, but also manipulates DHCP leases

This test is very similar to the ping test, but in addition, +provided the network package is not configured to do this automatically, +it manually relinquishes and reclaims DHCP leases for all available +interfaces. This tests the external API to DHCP. See section below +describing this.

flood        - a flood ping test; use with care

This test performs pings on all interfaces as quickly as possible, +and only prints status information periodically. Flood pinging is +bad for network performance; so do not use this test on general +purpose networks unless protected by a switch.


PrevHomeNext
Building the Network TestsUpPerformance Test
\ No newline at end of file diff --git a/doc/html/ref/net-common-support.html b/doc/html/ref/net-common-support.html new file mode 100644 index 00000000..41d361f8 --- /dev/null +++ b/doc/html/ref/net-common-support.html @@ -0,0 +1,231 @@ + + + + + + + + +Support Features +
eCos Reference Manual
PrevNext

Chapter 37. Support Features

TFTP

The TFTP client and server are described in +tftp_support.h; +the client API is simple and can be easily understood by reading +tftp_client_test.c.

The server is more complex. It requires a filesystem implementation +to be supplied by the user, and attached to the tftp server by means +of a vector of function pointers:

struct tftpd_fileops {
+             int (*open)(const char *, int);
+             int (*close)(int);
+             int (*write)(int, const void *, int);
+             int (*read)(int, void *, int);
+};

These functions have the obvious semantics. The structure +describing the filesystem is an argument to the tftpd_start(int, +struct tftpd_fileops *); call. + The first argument is the port to use for the server.

As discussed in the description of the tftp_server_test +above, an example filesystem is provided in +net/common/VERSION/src/tftp_dummy_file.c +for +use by the tftp server test. The dummy filesystem is not a supported +part of the network stack, it exists purely for demonstration purposes.


PrevHomeNext
Maintenance ToolsUpDHCP
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-accept.html b/doc/html/ref/net-common-tcpip-manpages-accept.html new file mode 100644 index 00000000..a17427b0 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-accept.html @@ -0,0 +1,248 @@ + + + + + + + + +accept +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

accept

ACCEPT(2)                     System Calls Manual                    ACCEPT(2)
+
+NAME
+     accept - accept a connection on a socket
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     int
+     accept(int s, struct sockaddr *addr, socklen_t *addrlen);
+
+DESCRIPTION
+     The argument s is a socket that has been created with socket(2), bound to
+     an address with bind(2), and is listening for connections after a
+     listen(2).  The accept() argument extracts the first connection request
+     on the queue of pending connections, creates a new socket with the same
+     properties of s, and allocates a new file descriptor for the socket.  If
+     no pending connections are present on the queue, and the socket is not
+     marked as non-blocking, accept() blocks the caller until a connection is
+     present.  If the socket is marked non-blocking and no pending connections
+     are present on the queue, accept() returns an error as described below.
+     The accepted socket may not be used to accept more connections.  The
+     original socket s remains open.
+
+     The argument addr is a result parameter that is filled in with the
+     address of the connecting entity as known to the communications layer.
+     The exact format of the addr parameter is determined by the domain in
+     which the communication is occurring.  The addrlen is a value-result
+     parameter; it should initially contain the amount of space pointed to by
+     addr; on return it will contain the actual length (in bytes) of the
+     address returned.  This call is used with connection-based socket types,
+     currently with SOCK_STREAM.
+
+     It is possible to select(2) or poll(2) a socket for the purposes of doing
+     an accept() by selecting it for read.
+
+     For certain protocols which require an explicit confirmation, such as ISO
+     or DATAKIT, accept() can be thought of as merely dequeuing the next con-
+     nection request and not implying confirmation.  Confirmation can be
+     implied by a normal read or write on the new file descriptor, and rejec-
+     tion can be implied by closing the new socket.
+
+     One can obtain user connection request data without confirming the con-
+     nection by issuing a recvmsg(2) call with an msg_iovlen of 0 and a non-
+     zero msg_controllen, or by issuing a getsockopt(2) request.  Similarly,
+     one can provide user connection rejection information by issuing a
+     sendmsg(2) call with providing only the control information, or by call-
+     ing setsockopt(2).
+
+RETURN VALUES
+     The call returns -1 on error.  If it succeeds, it returns a non-negative
+     integer that is a descriptor for the accepted socket.
+
+ERRORS
+     The accept() will fail if:
+
+     [EBADF]            The descriptor is invalid.
+
+     [ENOTSOCK]         The descriptor references a file, not a socket.
+
+     [EOPNOTSUPP]       The referenced socket is not of type SOCK_STREAM.
+
+     [EINVAL]           The referenced socket is not listening for connections
+                        (that is, listen(2) has not yet been called).
+
+     [EFAULT]           The addr parameter is not in a writable part of the
+                        user address space.
+
+     [EWOULDBLOCK]      The socket is marked non-blocking and no connections
+                        are present to be accepted.
+
+     [EMFILE]           The per-process descriptor table is full.
+
+     [ENFILE]           The system file table is full.
+
+     [ECONNABORTED]     A connection has been aborted.
+
+SEE ALSO
+     bind(2), connect(2), listen(2), poll(2), select(2), poll(2), socket(2)
+
+HISTORY
+     The accept() function appeared in 4.2BSD.
+
+BSD                            February 15, 1999                           BSD
+    

PrevHomeNext
resolverUpbind
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-bind.html b/doc/html/ref/net-common-tcpip-manpages-bind.html new file mode 100644 index 00000000..f2df517c --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-bind.html @@ -0,0 +1,242 @@ + + + + + + + + +bind +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

bind

BIND(2)                       System Calls Manual                      BIND(2)
+
+NAME
+     bind - bind a name to a socket
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     int
+     bind(int s, const struct sockaddr *name, socklen_t namelen);
+
+DESCRIPTION
+     bind() assigns a name to an unnamed socket.  When a socket is created
+     with socket(2) it exists in a name space (address family) but has no name
+     assigned.  bind() requests that name be assigned to the socket.
+
+NOTES
+     Binding a name in the UNIX domain creates a socket in the file system
+     that must be deleted by the caller when it is no longer needed (using
+     unlink(2)).
+
+     The rules used in name binding vary between communication domains.  Con-
+     sult the manual entries in section 4 for detailed information.
+
+RETURN VALUES
+     If the bind is successful, a 0 value is returned.  A return value of -1
+     indicates an error, which is further specified in the global errno.
+
+ERRORS
+     The bind() call will fail if:
+
+     [EBADF]            S is not a valid descriptor.
+
+     [ENOTSOCK]         S is not a socket.
+
+     [EADDRNOTAVAIL]    The specified address is not available from the local
+                        machine.
+
+     [EADDRINUSE]       The specified address is already in use.
+
+     [EINVAL]           The socket is already bound to an address.
+
+     [EINVAL]           The family of the socket and that requested in
+                        name->sa_family are not equivalent.
+
+     [EACCES]           The requested address is protected, and the current
+                        user has inadequate permission to access it.
+
+     [EFAULT]           The name parameter is not in a valid part of the user
+                        address space.
+
+     The following errors are specific to binding names in the UNIX domain.
+
+     [ENOTDIR]          A component of the path prefix is not a directory.
+
+     [ENAMETOOLONG]     A component of a pathname exceeded {NAME_MAX} charac-
+                        ters, or an entire path name exceeded {PATH_MAX} char-
+                        acters.
+
+     [ENOENT]           A prefix component of the path name does not exist.
+
+     [ELOOP]            Too many symbolic links were encountered in translat-
+                        ing the pathname.
+
+     [EIO]              An I/O error occurred while making the directory entry
+                        or allocating the inode.
+
+     [EROFS]            The name would reside on a read-only file system.
+
+     [EISDIR]           An empty pathname was specified.
+
+SEE ALSO
+     connect(2), getsockname(2), listen(2), socket(2)
+
+HISTORY
+     The bind() function call appeared in 4.2BSD.
+
+BSD                            February 15, 1999                           BSD
+    

PrevHomeNext
acceptUpconnect
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-byteorder.html b/doc/html/ref/net-common-tcpip-manpages-byteorder.html new file mode 100644 index 00000000..bee30ea6 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-byteorder.html @@ -0,0 +1,272 @@ + + + + + + + + +byteorder +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

byteorder

BYTEORDER(3)            System Library Functions Manual           BYTEORDER(3)
+
+NAME
+     htonl, htons, ntohl, ntohs, htobe32, htobe16, betoh32, betoh16, htole32,
+     htole16, letoh32, letoh16, swap32, swap16 - convert values between dif-
+     ferent byte orderings
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <machine/endian.h>
+
+     u_int32_t
+     htonl(u_int32_t host32);
+
+     u_int16_t
+     htons(u_int16_t host16);
+
+     u_int32_t
+     ntohl(u_int32_t net32);
+
+     u_int16_t
+     ntohs(u_int16_t net16);
+
+     u_int32_t
+     htobe32(u_int32_t host32);
+
+     u_int16_t
+     htobe16(u_int16_t host16);
+
+     u_int32_t
+     betoh32(u_int32_t big32);
+
+     u_int16_t
+     betoh16(u_int16_t big16);
+
+     u_int32_t
+     htole32(u_int32_t host32);
+
+     u_int16_t
+     htole16(u_int16_t host16);
+
+     u_int32_t
+     letoh32(u_int32_t little32);
+
+     u_int16_t
+     letoh16(u_int16_t little16);
+
+     u_int32_t
+     swap32(u_int32_t val32);
+
+     u_int16_t
+     swap16(u_int16_t val16);
+
+DESCRIPTION
+     These routines convert 16- and 32-bit quantities between different byte
+     orderings.  The ``swap'' functions reverse the byte ordering of the given
+     quantity, the others converts either from/to the native byte order used
+     by the host to/from either little- or big-endian (a.k.a network) order.
+
+     Apart from the swap functions, the names can be described by this form:
+     {src-order}to{dst-order}{size}.  Both {src-order} and {dst-order} can
+     take the following forms:
+
+           h    Host order.
+           n    Network order (big-endian).
+           be   Big-endian (most significant byte first).
+           le   Little-endian (least significant byte first).
+
+     One of the specified orderings must be `h'.  {size} will take these
+     forms:
+
+           l  Long (32-bit, used in conjunction with forms involving `n').
+           s  Short (16-bit, used in conjunction with forms involving `n').
+           16
+              16-bit.
+           32
+              32-bit.
+
+     The swap functions are of the form: swap{size}.
+
+     Names involving `n' convert quantities between network byte order and
+     host byte order.  The last letter (`s' or `l') is a mnemonic for the tra-
+     ditional names for such quantities, short and long, respectively.  Today,
+     the C concept of short and long integers need not coincide with this tra-
+     ditional misunderstanding.  On machines which have a byte order which is
+     the same as the network order, routines are defined as null macros.
+
+     The functions involving either ``be'', ``le'', or ``swap'' use the num-
+     bers 16 and 32 for specifying the bitwidth of the quantities they operate
+     on.  Currently all supported architectures are either big- or little-
+     endian so either the ``be'' or ``le'' variants are implemented as null
+     macros.
+
+     The routines mentioned above which have either {src-order} or {dst-order}
+     set to `n' are most often used in conjunction with Internet addresses and
+     ports as returned by gethostbyname(3) and getservent(3).
+
+SEE ALSO
+     gethostbyname(3), getservent(3)
+
+HISTORY
+     The byteorder functions appeared in 4.2BSD.
+
+BUGS
+     On the vax, alpha, i386, and so far mips, bytes are handled backwards
+     from most everyone else in the world.  This is not expected to be fixed
+     in the near future.
+
+BSD                              June 4, 1993                              BSD
+    

PrevHomeNext
gethostnameUpethers
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-connect.html b/doc/html/ref/net-common-tcpip-manpages-connect.html new file mode 100644 index 00000000..54082a2b --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-connect.html @@ -0,0 +1,260 @@ + + + + + + + + +connect +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

connect

CONNECT(2)                    System Calls Manual                   CONNECT(2)
+
+NAME
+     connect - initiate a connection on a socket
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     int
+     connect(int s, const struct sockaddr *name, socklen_t namelen);
+
+DESCRIPTION
+     The parameter s is a socket.  If it is of type SOCK_DGRAM, this call
+     specifies the peer with which the socket is to be associated; this
+     address is that to which datagrams are to be sent, and the only address
+     from which datagrams are to be received.  If the socket is of type
+     SOCK_STREAM, this call attempts to make a connection to another socket.
+     The other socket is specified by name, which is an address in the commu-
+     nications space of the socket.  Each communications space interprets the
+     name parameter in its own way.  Generally, stream sockets may success-
+     fully connect() only once; datagram sockets may use connect() multiple
+     times to change their association.  Datagram sockets may dissolve the
+     association by connecting to an invalid address, such as a null address.
+
+RETURN VALUES
+     If the connection or binding succeeds, 0 is returned.  Otherwise a -1 is
+     returned, and a more specific error code is stored in errno.
+
+ERRORS
+     The connect() call fails if:
+
+     [EBADF]            S is not a valid descriptor.
+
+     [ENOTSOCK]         S is a descriptor for a file, not a socket.
+
+     [EADDRNOTAVAIL]    The specified address is not available on this
+                        machine.
+
+     [EAFNOSUPPORT]     Addresses in the specified address family cannot be
+                        used with this socket.
+
+     [EISCONN]          The socket is already connected.
+
+     [ETIMEDOUT]        Connection establishment timed out without establish-
+                        ing a connection.
+
+     [EINVAL]           A TCP connection with a local broadcast, the all-ones
+                        or a multicast address as the peer was attempted.
+
+     [ECONNREFUSED]     The attempt to connect was forcefully rejected.
+
+     [EINTR]            A connect was interrupted before it succeeded by the
+                        delivery of a signal.
+
+     [ENETUNREACH]      The network isn't reachable from this host.
+
+     [EADDRINUSE]       The address is already in use.
+
+     [EFAULT]           The name parameter specifies an area outside the pro-
+                        cess address space.
+
+     [EINPROGRESS]      The socket is non-blocking and the connection cannot
+                        be completed immediately.  It is possible to select(2)
+                        or poll(2) for completion by selecting the socket for
+                        writing, and also use getsockopt(2) with SO_ERROR to
+                        check for error conditions.
+
+     [EALREADY]         The socket is non-blocking and a previous connection
+                        attempt has not yet been completed.
+
+     The following errors are specific to connecting names in the UNIX domain.
+     These errors may not apply in future versions of the UNIX IPC domain.
+
+     [ENOTDIR]          A component of the path prefix is not a directory.
+
+     [ENAMETOOLONG]     A component of a pathname exceeded {NAME_MAX} charac-
+                        ters, or an entire path name exceeded {PATH_MAX} char-
+                        acters.
+
+     [ENOENT]           The named socket does not exist.
+
+     [EACCES]           Search permission is denied for a component of the
+                        path prefix.
+
+     [EACCES]           Write access to the named socket is denied.
+
+     [ELOOP]            Too many symbolic links were encountered in translat-
+                        ing the pathname.
+
+SEE ALSO
+     accept(2), getsockname(2), getsockopt(2), poll(2), select(2), socket(2)
+
+HISTORY
+     The connect() function call appeared in 4.2BSD.
+
+BSD                            February 15, 1999                           BSD
+    

PrevHomeNext
bindUpgetpeername
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-ethers.html b/doc/html/ref/net-common-tcpip-manpages-ethers.html new file mode 100644 index 00000000..89d3f146 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-ethers.html @@ -0,0 +1,237 @@ + + + + + + + + +ethers +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

ethers

ETHERS(3)               System Library Functions Manual              ETHERS(3)
+
+NAME
+     ether_aton, ether_ntoa, ether_addr, ether_ntohost, ether_hostton,
+     ether_line - get ethers entry
+
+SYNOPSIS
+     #include <netinet/if_ether.h>
+
+     char *
+     ether_ntoa(struct ether_addr *e);
+
+     struct ether_addr *
+     ether_aton(char *s);
+
+     int
+     ether_ntohost(char *hostname, struct ether_addr *e);
+
+     int
+     ether_hostton(char *hostname, struct ether_addr *e);
+
+     int
+     ether_line(char *l, struct ether_addr *e, char *hostname);
+
+DESCRIPTION
+     Ethernet addresses are represented by the following structure:
+
+           struct ether_addr {
+                   u_int8_t  ether_addr_octet[6];
+           };
+
+     The ether_ntoa() function converts this structure into an ASCII string of
+     the form ``xx:xx:xx:xx:xx:xx'', consisting of 6 hexadecimal numbers sepa-
+     rated by colons.  It returns a pointer to a static buffer that is reused
+     for each call.  The ether_aton() converts an ASCII string of the same
+     form and to a structure containing the 6 octets of the address.  It
+     returns a pointer to a static structure that is reused for each call.
+
+     The ether_ntohost() and ether_hostton() functions interrogate the
+     database mapping host names to Ethernet addresses, /etc/ethers.  The
+     ether_ntohost() function looks up the given Ethernet address and writes
+     the associated host name into the character buffer passed.  This buffer
+     should be MAXHOSTNAMELEN characters in size.  The ether_hostton() func-
+     tion looks up the given host name and writes the associated Ethernet
+     address into the structure passed.  Both functions return zero if they
+     find the requested host name or address, and -1 if not.
+
+     Each call reads /etc/ethers from the beginning; if a `+' appears alone on
+     a line in the file, then ether_hostton() will consult the ethers.byname
+     YP map, and ether_ntohost() will consult the ethers.byaddr YP map.
+
+     The ether_line() function parses a line from the /etc/ethers file and
+     fills in the passed struct ether_addr and character buffer with the Eth-
+     ernet address and host name on the line.  It returns zero if the line was
+     successfully parsed and -1 if not.  The character buffer should be
+     MAXHOSTNAMELEN characters in size.
+
+FILES
+     /etc/ethers
+
+SEE ALSO
+     ethers(5)
+
+HISTORY
+     The ether_ntoa(), ether_aton(), ether_ntohost(), ether_hostton(), and
+     ether_line() functions were adopted from SunOS and appeared in NetBSD 0.9
+     b.
+
+BUGS
+     The data space used by these functions is static; if future use requires
+     the data, it should be copied before any subsequent calls to these func-
+     tions overwrite it.
+
+BSD                            December 16, 1993                           BSD
+    

PrevHomeNext
byteorderUpgetaddrinfo
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getaddrinfo.html b/doc/html/ref/net-common-tcpip-manpages-getaddrinfo.html new file mode 100644 index 00000000..8b4d1c92 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getaddrinfo.html @@ -0,0 +1,456 @@ + + + + + + + + +getaddrinfo +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getaddrinfo

GETADDRINFO(3)          System Library Functions Manual         GETADDRINFO(3)
+
+NAME
+     getaddrinfo, freeaddrinfo, gai_strerror - nodename-to-address translation
+     in protocol-independent manner
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+     #include <netdb.h>
+
+     int
+     getaddrinfo(const char *nodename, const char *servname,
+             const struct addrinfo *hints, struct addrinfo **res);
+
+     void
+     freeaddrinfo(struct addrinfo *ai);
+
+     char *
+     gai_strerror(int ecode);
+
+DESCRIPTION
+     The getaddrinfo() function is defined for protocol-independent nodename-
+     to-address translation.  It performs the functionality of
+     gethostbyname(3) and getservbyname(3), but in a more sophisticated man-
+     ner.
+
+     The addrinfo structure is defined as a result of including the <netdb.h>
+     header:
+
+     struct addrinfo {                                                  *
+          int     ai_flags;     /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
+          int     ai_family;    /* PF_xxx */
+          int     ai_socktype;  /* SOCK_xxx */
+          int     ai_protocol;  /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
+          size_t  ai_addrlen;   /* length of ai_addr */
+          char   *ai_canonname; /* canonical name for nodename */
+          struct sockaddr  *ai_addr; /* binary address */
+          struct addrinfo  *ai_next; /* next structure in linked list */
+     };
+
+     The nodename and servname arguments are pointers to NUL-terminated
+     strings or NULL.  One or both of these two arguments must be a non-null
+     pointer.  In the normal client scenario, both the nodename and servname
+     are specified.  In the normal server scenario, only the servname is spec-
+     ified.  A non-null nodename string can be either a node name or a numeric
+     host address string (i.e., a dotted-decimal IPv4 address or an IPv6 hex
+     address).  A non-null servname string can be either a service name or a
+     decimal port number.
+
+     The caller can optionally pass an addrinfo structure, pointed to by the
+     third argument, to provide hints concerning the type of socket that the
+     caller supports.  In this hints structure all members other than
+     ai_flags, ai_family, ai_socktype, and ai_protocol must be zero or a null
+     pointer.  A value of PF_UNSPEC for ai_family means the caller will accept
+     any protocol family.  A value of 0 for ai_socktype means the caller will
+     accept any socket type.  A value of 0 for ai_protocol means the caller
+     will accept any protocol.  For example, if the caller handles only TCP
+     and not UDP, then the ai_socktype member of the hints structure should be
+     set to SOCK_STREAM when getaddrinfo() is called.  If the caller handles
+     only IPv4 and not IPv6, then the ai_family member of the hints structure
+     should be set to PF_INET when getaddrinfo() is called.  If the third
+     argument to getaddrinfo() is a null pointer, this is the same as if the
+     caller had filled in an addrinfo structure initialized to zero with
+     ai_family set to PF_UNSPEC.
+
+     Upon successful return a pointer to a linked list of one or more addrinfo
+     structures is returned through the final argument.  The caller can pro-
+     cess each addrinfo structure in this list by following the ai_next
+     pointer, until a null pointer is encountered.  In each returned addrinfo
+     structure the three members ai_family, ai_socktype, and ai_protocol are
+     the corresponding arguments for a call to the socket() function.  In each
+     addrinfo structure the ai_addr member points to a filled-in socket
+     address structure whose length is specified by the ai_addrlen member.
+
+     If the AI_PASSIVE bit is set in the ai_flags member of the hints struc-
+     ture, then the caller plans to use the returned socket address structure
+     in a call to bind().  In this case, if the nodename argument is a null
+     pointer, then the IP address portion of the socket address structure will
+     be set to INADDR_ANY for an IPv4 address or IN6ADDR_ANY_INIT for an IPv6
+     address.
+
+     If the AI_PASSIVE bit is not set in the ai_flags member of the hints
+     structure, then the returned socket address structure will be ready for a
+     call to connect() (for a connection-oriented protocol) or either
+     connect(), sendto(), or sendmsg() (for a connectionless protocol).  In
+     this case, if the nodename argument is a null pointer, then the IP
+     address portion of the socket address structure will be set to the loop-
+     back address.
+
+     If the AI_CANONNAME bit is set in the ai_flags member of the hints struc-
+     ture, then upon successful return the ai_canonname member of the first
+     addrinfo structure in the linked list will point to a NUL-terminated
+     string containing the canonical name of the specified nodename.
+
+     If the AI_NUMERICHOST bit is set in the ai_flags member of the hints
+     structure, then a non-null nodename string must be a numeric host address
+     string.  Otherwise an error of EAI_NONAME is returned.  This flag pre-
+     vents any type of name resolution service (e.g., the DNS) from being
+     called.
+
+     The arguments to getaddrinfo() must sufficiently be consistent and unam-
+     biguous.  Here are pitfall cases you may encounter:
+
+     o   getaddrinfo() will raise an error if members of the hints structure
+         are not consistent.  For example, for internet address families,
+         getaddrinfo() will raise an error if you specify SOCK_STREAM to
+         ai_socktype while you specify IPPROTO_UDP to ai_protocol.
+
+     o   If you specify a servname which is defined only for certain
+         ai_socktype, getaddrinfo() will raise an error because the arguments
+         are not consistent.  For example, getaddrinfo() will raise an error
+         if you ask for ``tftp'' service on SOCK_STREAM.
+
+     o   For internet address families, if you specify servname while you set
+         ai_socktype to SOCK_RAW, getaddrinfo() will raise an error, because
+         service names are not defined for the internet SOCK_RAW space.
+
+     o   If you specify a numeric servname, while leaving ai_socktype and
+         ai_protocol unspecified, getaddrinfo() will raise an error.  This is
+         because the numeric servname does not identify any socket type, and
+         getaddrinfo() is not allowed to glob the argument in such case.
+
+     All of the information returned by getaddrinfo() is dynamically allo-
+     cated: the addrinfo structures, the socket address structures, and canon-
+     ical node name strings pointed to by the addrinfo structures.  To return
+     this information to the system the function freeaddrinfo() is called.
+     The addrinfo structure pointed to by the ai argument is freed, along with
+     any dynamic storage pointed to by the structure.  This operation is
+     repeated until a NULL ai_next pointer is encountered.
+
+     To aid applications in printing error messages based on the EAI_xxx codes
+     returned by getaddrinfo(), gai_strerror() is defined.  The argument is
+     one of the EAI_xxx values defined earlier and the return value points to
+     a string describing the error.  If the argument is not one of the EAI_xxx
+     values, the function still returns a pointer to a string whose contents
+     indicate an unknown error.
+
+   Extension for scoped IPv6 address
+     The implementation allows experimental numeric IPv6 address notation with
+     scope identifier.  By appending the percent character and scope identi-
+     fier to addresses, you can fill sin6_scope_id field for addresses.  This
+     would make management of scoped address easier, and allows cut-and-paste
+     input of scoped address.
+
+     At this moment the code supports only link-local addresses with the for-
+     mat.  Scope identifier is hardcoded to name of hardware interface associ-
+     ated with the link.  (such as ne0).  Example would be like
+     ``fe80::1%ne0'', which means ``fe80::1 on the link associated with ne0
+     interface''.
+
+     The implementation is still very experimental and non-standard.  The cur-
+     rent implementation assumes one-by-one relationship between interface and
+     link, which is not necessarily true from the specification.
+
+EXAMPLES
+     The following code tries to connect to ``www.kame.net'' service ``http''.
+     via stream socket.  It loops through all the addresses available, regard-
+     less from address family.  If the destination resolves to IPv4 address,
+     it will use AF_INET socket.  Similarly, if it resolves to IPv6, AF_INET6
+     socket is used.  Observe that there is no hardcoded reference to particu-
+     lar address family.  The code works even if getaddrinfo returns addresses
+     that are not IPv4/v6.
+
+           struct addrinfo hints, *res, *res0;
+           int error;
+           int s;
+           const char *cause = NULL;
+
+           memset(&hints, 0, sizeof(hints));
+           hints.ai_family = PF_UNSPEC;
+           hints.ai_socktype = SOCK_STREAM;
+           error = getaddrinfo("www.kame.net", "http", &hints, &res0);
+           if (error) {
+                   errx(1, "%s", gai_strerror(error));
+                   /*NOTREACHED*/
+           }
+           s = -1;
+           for (res = res0; res; res = res->ai_next) {
+                   s = socket(res->ai_family, res->ai_socktype,
+                       res->ai_protocol);
+                   if (s < 0) {
+                           cause = "socket";
+                           continue;
+                   }
+
+                   if (connect(s, res->ai_addr, res->ai_addrlen) < 0) {
+                           cause = "connect";
+                           close(s);
+                           s = -1;
+                           continue;
+                   }
+
+                   break;  /* okay we got one */
+           }
+           if (s < 0) {
+                   err(1, cause);
+                   /*NOTREACHED*/
+           }
+           freeaddrinfo(res0);
+
+     The following example tries to open a wildcard listening socket onto ser-
+     vice ``http'', for all the address families available.
+
+           struct addrinfo hints, *res, *res0;
+           int error;
+           int s[MAXSOCK];
+           int nsock;
+           const char *cause = NULL;
+
+           memset(&hints, 0, sizeof(hints));
+           hints.ai_family = PF_UNSPEC;
+           hints.ai_socktype = SOCK_STREAM;
+           hints.ai_flags = AI_PASSIVE;
+           error = getaddrinfo(NULL, "http", &hints, &res0);
+           if (error) {
+                   errx(1, "%s", gai_strerror(error));
+                   /*NOTREACHED*/
+           }
+           nsock = 0;
+           for (res = res0; res && nsock < MAXSOCK; res = res->ai_next) {
+                   s[nsock] = socket(res->ai_family, res->ai_socktype,
+                       res->ai_protocol);
+                   if (s[nsock] < 0) {
+                           cause = "socket";
+                           continue;
+                   }
+
+                   if (bind(s[nsock], res->ai_addr, res->ai_addrlen) < 0) {
+                           cause = "bind";
+                           close(s[nsock]);
+                           continue;
+                   }
+                   (void) listen(s[nsock], 5);
+
+                   nsock++;
+           }
+           if (nsock == 0) {
+                   err(1, cause);
+                   /*NOTREACHED*/
+           }
+           freeaddrinfo(res0);
+
+DIAGNOSTICS
+     Error return status from getaddrinfo() is zero on success and non-zero on
+     errors.  Non-zero error codes are defined in <netdb.h>, and as follows:
+
+     EAI_ADDRFAMILY  Address family for nodename not supported.
+     EAI_AGAIN       Temporary failure in name resolution.
+     EAI_BADFLAGS    Invalid value for ai_flags.
+     EAI_FAIL        Non-recoverable failure in name resolution.
+     EAI_FAMILY      ai_family not supported.
+     EAI_MEMORY      Memory allocation failure.
+     EAI_NODATA      No address associated with nodename.
+     EAI_NONAME      nodename nor servname provided, or not known.
+     EAI_SERVICE     servname not supported for ai_socktype.
+     EAI_SOCKTYPE    ai_socktype not supported.
+     EAI_SYSTEM      System error returned in errno.
+
+     If called with proper argument, gai_strerror() returns a pointer to a
+     string describing the given error code.  If the argument is not one of
+     the EAI_xxx values, the function still returns a pointer to a string
+     whose contents indicate an unknown error.
+
+SEE ALSO
+     getnameinfo(3), gethostbyname(3), getservbyname(3), hosts(5),
+     resolv.conf(5), services(5), hostname(7), named(8)
+
+     R. Gilligan, S. Thomson, J. Bound, and W. Stevens, Basic Socket Interface
+     Extensions for IPv6, RFC2553, March 1999.
+
+     Tatsuya Jinmei and Atsushi Onoe, An Extension of Format for IPv6 Scoped
+     Addresses, internet draft, draft-ietf-ipngwg-scopedaddr-format-02.txt,
+     work in progress material.
+
+     Craig Metz, "Protocol Independence Using the Sockets API", Proceedings of
+     the freenix track: 2000 USENIX annual technical conference, June 2000.
+
+HISTORY
+     The implementation first appeared in WIDE Hydrangea IPv6 protocol stack
+     kit.
+
+STANDARDS
+     The getaddrinfo() function is defined in IEEE POSIX 1003.1g draft speci-
+     fication, and documented in ``Basic Socket Interface Extensions for
+     IPv6'' (RFC2553).
+
+BUGS
+     The current implementation is not thread-safe.
+
+     The text was shamelessly copied from RFC2553.
+
+BSD                              May 25, 1995                              BSD
+    

PrevHomeNext
ethersUpgethostbyname
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-gethostbyname.html b/doc/html/ref/net-common-tcpip-manpages-gethostbyname.html new file mode 100644 index 00000000..7d6647ce --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-gethostbyname.html @@ -0,0 +1,314 @@ + + + + + + + + +gethostbyname +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

gethostbyname

GETHOSTBYNAME(3)        System Library Functions Manual       GETHOSTBYNAME(3)
+
+NAME
+     gethostbyname, gethostbyname2, gethostbyaddr, gethostent, sethostent,
+     endhostent, hstrerror, herror - get network host entry
+
+SYNOPSIS
+     #include <netdb.h>
+     extern int h_errno;
+
+     struct hostent *
+     gethostbyname(const char *name);
+
+     struct hostent *
+     gethostbyname2(const char *name, int af);
+
+     struct hostent *
+     gethostbyaddr(const char *addr, int len, int af);
+
+     struct hostent *
+     gethostent(void);
+
+     void
+     sethostent(int stayopen);
+
+     void
+     endhostent(void);
+
+     void
+     herror(const char *string);
+
+     const char *
+     hstrerror(int err);
+
+DESCRIPTION
+     The gethostbyname() and gethostbyaddr() functions each return a pointer
+     to an object with the following structure describing an internet host
+     referenced by name or by address, respectively.  This structure contains
+     either information obtained from the name server (i.e., resolver(3) and
+     named(8)), broken-out fields from a line in /etc/hosts, or database
+     entries supplied by the yp(8) system.  resolv.conf(5) describes how the
+     particular database is chosen.
+
+     struct  hostent {
+             char    *h_name;        /* official name of host */
+             char    **h_aliases;    /* alias list */
+             int     h_addrtype;     /* host address type */
+             int     h_length;       /* length of address */
+             char    **h_addr_list;  /* list of addresses from name server */
+     };
+     #define h_addr  h_addr_list[0]  /* address, for backward compatibility */
+
+     The members of this structure are:
+
+     h_name       Official name of the host.
+
+     h_aliases    A zero-terminated array of alternate names for the host.
+
+     h_addrtype   The type of address being returned.
+
+     h_length     The length, in bytes, of the address.
+
+     h_addr_list  A zero-terminated array of network addresses for the host.
+                  Host addresses are returned in network byte order.
+
+     h_addr       The first address in h_addr_list; this is for backward com-
+                  patibility.
+
+     The function gethostbyname() will search for the named host in the cur-
+     rent domain and its parents using the search lookup semantics detailed in
+     resolv.conf(5) and hostname(7).
+
+     gethostbyname2() is an advanced form of gethostbyname() which allows
+     lookups in address families other than AF_INET, for example AF_INET6.
+
+     The gethostbyaddr() function will search for the specified address of
+     length len in the address family af.  The only address family currently
+     supported is AF_INET.
+
+     The sethostent() function may be used to request the use of a connected
+     TCP socket for queries.  If the stayopen flag is non-zero, this sets the
+     option to send all queries to the name server using TCP and to retain the
+     connection after each call to gethostbyname() or gethostbyaddr().  Other-
+     wise, queries are performed using UDP datagrams.
+
+     The endhostent() function closes the TCP connection.
+
+     The herror() function prints an error message describing the failure.  If
+     its argument string is non-null, it is prepended to the message string
+     and separated from it by a colon (`:') and a space.  The error message is
+     printed with a trailing newline.  The contents of the error message is
+     the same as that returned by hstrerror() with argument h_errno.
+
+FILES
+     /etc/hosts
+     /etc/resolv.conf
+
+DIAGNOSTICS
+     Error return status from gethostbyname(), gethostbyname2(), and
+     gethostbyaddr() is indicated by return of a null pointer.  The external
+     integer h_errno may then be checked to see whether this is a temporary
+     failure or an invalid or unknown host.
+
+     The variable h_errno can have the following values:
+
+     HOST_NOT_FOUND  No such host is known.
+
+     TRY_AGAIN       This is usually a temporary error and means that the
+                     local server did not receive a response from an authori-
+                     tative server.  A retry at some later time may succeed.
+
+     NO_RECOVERY     Some unexpected server failure was encountered.  This is
+                     a non-recoverable error.
+
+     NO_DATA         The requested name is valid but does not have an IP
+                     address; this is not a temporary error.  This means that
+                     the name is known to the name server but there is no
+                     address associated with this name.  Another type of
+                     request to the name server using this domain name will
+                     result in an answer; for example, a mail-forwarder may be
+                     registered for this domain.
+
+SEE ALSO
+     resolver(3), getaddrinfo(3), getnameinfo(3), hosts(5), resolv.conf(5),
+     hostname(7), named(8)
+
+CAVEAT
+     If the search routines in resolv.conf(5) decide to read the /etc/hosts
+     file, gethostent() and other functions will read the next line of the
+     file, re-opening the file if necessary.
+
+     The sethostent() function opens and/or rewinds the file /etc/hosts.  If
+     the stayopen argument is non-zero, the file will not be closed after each
+     call to gethostbyname(), gethostbyname2(), or gethostbyaddr().
+
+     The endhostent() function closes the file.
+
+HISTORY
+     The herror() function appeared in 4.3BSD.  The endhostent(),
+     gethostbyaddr(), gethostbyname(), gethostent(), and sethostent() func-
+     tions appeared in 4.2BSD.
+
+BUGS
+     These functions use static data storage; if the data is needed for future
+     use, it should be copied before any subsequent calls overwrite it.  Only
+     the Internet address formats are currently understood.
+
+     YP does not support any address families other than AF_INET and uses the
+     traditional database format.
+
+BSD                             March 13, 1997                             BSD
+    

PrevHomeNext
getaddrinfoUpgetifaddrs
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-gethostname.html b/doc/html/ref/net-common-tcpip-manpages-gethostname.html new file mode 100644 index 00000000..c463eb12 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-gethostname.html @@ -0,0 +1,219 @@ + + + + + + + + +gethostname +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

gethostname

GETHOSTNAME(3)          System Library Functions Manual         GETHOSTNAME(3)
+
+NAME
+     gethostname, sethostname - get/set name of current host
+
+SYNOPSIS
+     #include <unistd.h>
+
+     int
+     gethostname(char *name, size_t namelen);
+
+     int
+     sethostname(const char *name, size_t namelen);
+
+DESCRIPTION
+     The gethostname() function returns the standard host name for the current
+     processor, as previously set by sethostname().  The parameter namelen
+     specifies the size of the name array.  If insufficient space is provided,
+     the returned name is truncated.  The returned name is always null termi-
+     nated.
+
+     sethostname() sets the name of the host machine to be name, which has
+     length namelen.  This call is restricted to the superuser and is normally
+     used only when the system is bootstrapped.
+
+RETURN VALUES
+     If the call succeeds a value of 0 is returned.  If the call fails, a
+     value of -1 is returned and an error code is placed in the global vari-
+     able errno.
+
+ERRORS
+     The following errors may be returned by these calls:
+
+     [EFAULT]           The name or namelen parameter gave an invalid address.
+
+     [EPERM]            The caller tried to set the hostname and was not the
+                        superuser.
+
+SEE ALSO
+     hostname(1), getdomainname(3), gethostid(3), sysctl(3), sysctl(8), yp(8)
+
+STANDARDS
+     The gethostname() function call conforms to X/Open Portability Guide
+     Issue 4.2 (``XPG4.2'').
+
+HISTORY
+     The gethostname() function call appeared in 4.2BSD.
+
+BUGS
+     Host names are limited to MAXHOSTNAMELEN (from <sys/param.h>) characters,
+     currently 256.  This includes the terminating NUL character.
+
+     If the buffer passed to gethostname() is smaller than MAXHOSTNAMELEN,
+     other operating systems may not guarantee termination with NUL.
+
+BSD                              June 4, 1993                              BSD
+    

PrevHomeNext
TCP/IP Library ReferenceUpbyteorder
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getifaddrs.html b/doc/html/ref/net-common-tcpip-manpages-getifaddrs.html new file mode 100644 index 00000000..8049d713 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getifaddrs.html @@ -0,0 +1,255 @@ + + + + + + + + +getifaddrs +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getifaddrs

GETIFADDRS(3)           System Library Functions Manual          GETIFADDRS(3)
+
+NAME
+     getifaddrs - get interface addresses
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+     #include <ifaddrs.h>
+
+     int
+     getifaddrs(struct ifaddrs **ifap);
+
+     void
+     freeifaddrs(struct ifaddrs *ifap);
+
+DESCRIPTION
+     The getifaddrs() function stores a reference to a linked list of the net-
+     work interfaces on the local machine in the memory referenced by ifap.
+     The list consists of ifaddrs structures, as defined in the include file
+     <ifaddrs.h>.  The ifaddrs structure contains at least the following
+     entries:
+
+         struct ifaddrs   *ifa_next;         /* Pointer to next struct */
+         char             *ifa_name;         /* Interface name */
+         u_int             ifa_flags;        /* Interface flags */
+         struct sockaddr  *ifa_addr;         /* Interface address */
+         struct sockaddr  *ifa_netmask;      /* Interface netmask */
+         struct sockaddr  *ifa_broadaddr;    /* Interface broadcast address */
+         struct sockaddr  *ifa_dstaddr;      /* P2P interface destination */
+         void             *ifa_data;         /* Address specific data */
+
+     ifa_next
+             Contains a pointer to the next structure on the list.  This field
+             is set to NULL in last structure on the list.
+
+     ifa_name
+             Contains the interface name.
+
+     ifa_flags
+             Contains the interface flags, as set by ifconfig(8).
+
+     ifa_addr
+             References either the address of the interface or the link level
+             address of the interface, if one exists, otherwise it is NULL.
+             (The sa_family field of the ifa_addr field should be consulted to
+             determine the format of the ifa_addr address.)
+
+     ifa_netmask
+             References the netmask associated with ifa_addr, if one is set,
+             otherwise it is NULL.
+
+     ifa_broadaddr
+             This field, which should only be referenced for non-P2P inter-
+             faces, references the broadcast address associated with ifa_addr,
+             if one exists, otherwise it is NULL.
+
+     ifa_dstaddr
+             References the destination address on a P2P interface, if one
+             exists, otherwise it is NULL.
+
+     ifa_data
+             References address family specific data.  For AF_LINK addresses
+             it contains a pointer to the struct if_data (as defined in
+             include file <net/if.h>) which contains various interface
+             attributes and statistics.  For all other address families, it
+             contains a pointer to the struct ifa_data (as defined in include
+             file <net/if.h>) which contains per-address interface statistics.
+
+     The data returned by getifaddrs() is dynamically allocated and should be
+     freed using freeifaddrs() when no longer needed.
+
+RETURN VALUES
+     Upon successful completion, a value of 0 is returned.  Otherwise, a value
+     of -1 is returned and errno is set to indicate the error.
+
+ERRORS
+     The getifaddrs() may fail and set errno for any of the errors specified
+     for the library routines ioctl(2), socket(2), malloc(3), or sysctl(3).
+
+BUGS
+     If both <net/if.h> and <ifaddrs.h> are being included, <net/if.h> must be
+     included before <ifaddrs.h>.
+
+SEE ALSO
+     ioctl(2), socket(2), sysctl(3), networking(4), ifconfig(8)
+
+HISTORY
+     The getifaddrs() function first appeared in BSDI BSD/OS.  The function is
+     supplied on OpenBSD since OpenBSD 2.7.
+
+BSD                            February 24, 2003                           BSD
+    

PrevHomeNext
gethostbynameUpgetnameinfo
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getnameinfo.html b/doc/html/ref/net-common-tcpip-manpages-getnameinfo.html new file mode 100644 index 00000000..d5eb5644 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getnameinfo.html @@ -0,0 +1,330 @@ + + + + + + + + +getnameinfo +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getnameinfo

GETNAMEINFO(3)          System Library Functions Manual         GETNAMEINFO(3)
+
+NAME
+     getnameinfo - address-to-nodename translation in protocol-independent
+     manner
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+     #include <netdb.h>
+
+     int
+     getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
+             size_t hostlen, char *serv, size_t servlen, int flags);
+
+DESCRIPTION
+     The getnameinfo() function is defined for protocol-independent address-
+     to-nodename translation.  Its functionality is a reverse conversion of
+     getaddrinfo(3), and implements similar functionality with
+     gethostbyaddr(3) and getservbyport(3) in more sophisticated manner.
+
+     This function looks up an IP address and port number provided by the
+     caller in the DNS and system-specific database, and returns text strings
+     for both in buffers provided by the caller.  The function indicates suc-
+     cessful completion by a zero return value; a non-zero return value indi-
+     cates failure.
+
+     The first argument, sa, points to either a sockaddr_in structure (for
+     IPv4) or a sockaddr_in6 structure (for IPv6) that holds the IP address
+     and port number.  The salen argument gives the length of the sockaddr_in
+     or sockaddr_in6 structure.
+
+     The function returns the nodename associated with the IP address in the
+     buffer pointed to by the host argument.  The caller provides the size of
+     this buffer via the hostlen argument.  The service name associated with
+     the port number is returned in the buffer pointed to by serv, and the
+     servlen argument gives the length of this buffer.  The caller specifies
+     not to return either string by providing a zero value for the hostlen or
+     servlen arguments.  Otherwise, the caller must provide buffers large
+     enough to hold the nodename and the service name, including the terminat-
+     ing null characters.
+
+     Unfortunately most systems do not provide constants that specify the max-
+     imum size of either a fully-qualified domain name or a service name.
+     Therefore to aid the application in allocating buffers for these two
+     returned strings the following constants are defined in <netdb.h>:
+
+     #define NI_MAXHOST    MAXHOSTNAMELEN
+     #define NI_MAXSERV    32
+
+     The first value is actually defined as the constant MAXDNAME in recent
+     versions of BIND's <arpa/nameser.h> header (older versions of BIND define
+     this constant to be 256) and the second is a guess based on the services
+     listed in the current Assigned Numbers RFC.
+
+     The final argument is a flag that changes the default actions of this
+     function.  By default the fully-qualified domain name (FQDN) for the host
+     is looked up in the DNS and returned.  If the flag bit NI_NOFQDN is set,
+     only the nodename portion of the FQDN is returned for local hosts.
+
+     If the flag bit NI_NUMERICHOST is set, or if the host's name cannot be
+     located in the DNS, the numeric form of the host's address is returned
+     instead of its name (e.g., by calling inet_ntop() instead of
+     gethostbyaddr()).  If the flag bit NI_NAMEREQD is set, an error is
+     returned if the host's name cannot be located in the DNS.
+
+     If the flag bit NI_NUMERICSERV is set, the numeric form of the service
+     address is returned (e.g., its port number) instead of its name.  The two
+     NI_NUMERICxxx flags are required to support the -n flag that many com-
+     mands provide.
+
+     A fifth flag bit, NI_DGRAM, specifies that the service is a datagram ser-
+     vice, and causes getservbyport() to be called with a second argument of
+     "udp" instead of its default of "tcp".  This is required for the few
+     ports (512-514) that have different services for UDP and TCP.
+
+     These NI_xxx flags are defined in <netdb.h>.
+
+   Extension for scoped IPv6 address
+     The implementation allows experimental numeric IPv6 address notation with
+     scope identifier.  IPv6 link-local address will appear as string like
+     ``fe80::1%ne0'', if NI_WITHSCOPEID bit is enabled in flags argument.
+     Refer to getaddrinfo(3) for the notation.
+
+EXAMPLES
+     The following code tries to get numeric hostname, and service name, for
+     given socket address.  Observe that there is no hardcoded reference to
+     particular address family.
+
+           struct sockaddr *sa;    /* input */
+           char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
+
+           if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf), sbuf,
+               sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) {
+                   errx(1, "could not get numeric hostname");
+                   /*NOTREACHED*/
+           }
+           printf("host=%s, serv=%s\n", hbuf, sbuf);
+
+     The following version checks if the socket address has reverse address
+     mapping.
+
+           struct sockaddr *sa;    /* input */
+           char hbuf[NI_MAXHOST];
+
+           if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf), NULL, 0,
+               NI_NAMEREQD)) {
+                   errx(1, "could not resolve hostname");
+                   /*NOTREACHED*/
+           }
+           printf("host=%s\n", hbuf);
+
+DIAGNOSTICS
+     The function indicates successful completion by a zero return value; a
+     non-zero return value indicates failure.  Error codes are as below:
+
+     EAI_AGAIN          The name could not be resolved at this time.  Future
+                        attempts may succeed.
+
+     EAI_BADFLAGS       The flags had an invalid value.
+
+     EAI_FAIL           A non-recoverable error occurred.
+
+     EAI_FAMILY         The address family was not recognized or the address
+                        length was invalid for the specified family.
+
+     EAI_MEMORY         There was a memory allocation failure.
+
+     EAI_NONAME         The name does not resolve for the supplied parameters.
+                        NI_NAMEREQD is set and the host's name cannot be
+                        located, or both nodename and servname were null.
+
+     EAI_SYSTEM         A system error occurred.  The error code can be found
+                        in errno.
+
+SEE ALSO
+     getaddrinfo(3), gethostbyaddr(3), getservbyport(3), hosts(5),
+     resolv.conf(5), services(5), hostname(7), named(8)
+
+     R. Gilligan, S. Thomson, J. Bound, and W. Stevens, Basic Socket Interface
+     Extensions for IPv6, RFC2553, March 1999.
+
+     Tatsuya Jinmei and Atsushi Onoe, An Extension of Format for IPv6 Scoped
+     Addresses, internet draft, draft-ietf-ipngwg-scopedaddr-format-02.txt,
+     work in progress material.
+
+     Craig Metz, "Protocol Independence Using the Sockets API", Proceedings of
+     the freenix track: 2000 USENIX annual technical conference, June 2000.
+
+HISTORY
+     The implementation first appeared in WIDE Hydrangea IPv6 protocol stack
+     kit.
+
+STANDARDS
+     The getaddrinfo() function is defined IEEE POSIX 1003.1g draft specifica-
+     tion, and documented in ``Basic Socket Interface Extensions for IPv6''
+     (RFC2553).
+
+BUGS
+     The current implementation is not thread-safe.
+
+     The text was shamelessly copied from RFC2553.
+
+     OpenBSD intentionally uses different NI_MAXHOST value from what RFC2553
+     suggests, to avoid buffer length handling mistakes.
+
+BSD                              May 25, 1995                              BSD
+    

PrevHomeNext
getifaddrsUpgetnetent
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getnetent.html b/doc/html/ref/net-common-tcpip-manpages-getnetent.html new file mode 100644 index 00000000..133cb7c5 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getnetent.html @@ -0,0 +1,247 @@ + + + + + + + + +getnetent +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getnetent

GETNETENT(3)            System Library Functions Manual           GETNETENT(3)
+
+NAME
+     getnetent, getnetbyaddr, getnetbyname, setnetent, endnetent - get network
+     entry
+
+SYNOPSIS
+     #include <netdb.h>
+
+     struct netent *
+     getnetent(void);
+
+     struct netent *
+     getnetbyname(char *name);
+
+     struct netent *
+     getnetbyaddr(in_addr_t net, int type);
+
+     void
+     setnetent(int stayopen);
+
+     void
+     endnetent(void);
+
+DESCRIPTION
+     The getnetent(), getnetbyname(), and getnetbyaddr() functions each return
+     a pointer to an object with the following structure containing the bro-
+     ken-out fields of a line in the network database, /etc/networks.
+
+           struct  netent {
+                   char            *n_name;        /* official name of net */
+                   char            **n_aliases;    /* alias list */
+                   int             n_addrtype;     /* net number type */
+                   in_addr_t       n_net;          /* net number */
+           };
+
+     The members of this structure are:
+
+     n_name      The official name of the network.
+
+     n_aliases   A zero-terminated list of alternate names for the network.
+
+     n_addrtype  The type of the network number returned; currently only
+                 AF_INET.
+
+     n_net       The network number.  Network numbers are returned in machine
+                 byte order.
+
+     The getnetent() function reads the next line of the file, opening the
+     file if necessary.
+
+     The setnetent() function opens and rewinds the file.  If the stayopen
+     flag is non-zero, the net database will not be closed after each call to
+     getnetbyname() or getnetbyaddr().
+
+     The endnetent() function closes the file.
+
+     The getnetbyname() and getnetbyaddr() functions search the domain name
+     server if the system is configured to use one.  If the search fails, or
+     no name server is configured, they sequentially search from the beginning
+     of the file until a matching net name or net address and type is found,
+     or until EOF is encountered.  Network numbers are supplied in host order.
+
+FILES
+     /etc/networks
+
+DIAGNOSTICS
+     Null pointer (0) returned on EOF or error.
+
+SEE ALSO
+     resolver(3), networks(5)
+
+HISTORY
+     The getnetent(), getnetbyaddr(), getnetbyname(), setnetent(), and
+     endnetent() functions appeared in 4.2BSD.
+
+BUGS
+     The data space used by these functions is static; if future use requires
+     the data, it should be copied before any subsequent calls to these func-
+     tions overwrite it.  Only Internet network numbers are currently under-
+     stood.  Expecting network numbers to fit in no more than 32 bits is
+     naive.
+
+BSD                             March 13, 1997                             BSD
+    

PrevHomeNext
getnameinfoUpgetprotoent
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getpeername.html b/doc/html/ref/net-common-tcpip-manpages-getpeername.html new file mode 100644 index 00000000..f431546d --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getpeername.html @@ -0,0 +1,232 @@ + + + + + + + + +getpeername +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getpeername

GETPEERNAME(2)                System Calls Manual               GETPEERNAME(2)
+
+NAME
+     getpeername - get name of connected peer
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     int
+     getpeername(int s, struct sockaddr *name, socklen_t *namelen);
+
+DESCRIPTION
+     getpeername() returns the address information of the peer connected to
+     socket s.  One common use occurs when a process inherits an open socket,
+     such as TCP servers forked from inetd(8).  In this scenario,
+     getpeername() is used to determine the connecting client's IP address.
+
+     getpeername() takes three parameters:
+
+     s Contains the file descriptor of the socket whose peer should be looked
+     up.
+
+     name Points to a sockaddr structure that will hold the address informa-
+     tion for the connected peer.  Normal use requires one to use a structure
+     specific to the protocol family in use, such as sockaddr_in (IPv4) or
+     sockaddr_in6 (IPv6), cast to a (struct sockaddr *).
+
+     For greater portability, especially with the newer protocol families, the
+     new struct sockaddr_storage should be used.  sockaddr_storage is large
+     enough to hold any of the other sockaddr_* variants.  On return, it can
+     be cast to the correct sockaddr type, based the protocol family contained
+     in its ss_family field.
+
+     namelen Indicates the amount of space pointed to by name, in bytes.
+
+     If address information for the local end of the socket is required, the
+     getsockname(2) function should be used instead.
+
+     If name does not point to enough space to hold the entire socket address,
+     the result will be truncated to namelen bytes.
+
+RETURN VALUES
+     If the call succeeds, a 0 is returned and namelen is set to the actual
+     size of the socket address returned in name.  Otherwise, errno is set and
+     a value of -1 is returned.
+
+ERRORS
+     On failure, errno is set to one of the following:
+
+     [EBADF]            The argument s is not a valid descriptor.
+
+     [ENOTSOCK]         The argument s is a file, not a socket.
+
+     [ENOTCONN]         The socket is not connected.
+
+     [ENOBUFS]          Insufficient resources were available in the system to
+                        perform the operation.
+
+     [EFAULT]           The name parameter points to memory not in a valid
+                        part of the process address space.
+
+SEE ALSO
+     accept(2), bind(2), getsockname(2), getpeereid(2), socket(2)
+
+HISTORY
+     The getpeername() function call appeared in 4.2BSD.
+
+BSD                              July 17, 1999                             BSD
+    

PrevHomeNext
connectUpgetsockname
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getprotoent.html b/doc/html/ref/net-common-tcpip-manpages-getprotoent.html new file mode 100644 index 00000000..1dc30037 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getprotoent.html @@ -0,0 +1,240 @@ + + + + + + + + +getprotoent +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getprotoent

GETPROTOENT(3)          System Library Functions Manual         GETPROTOENT(3)
+
+NAME
+     getprotoent, getprotobynumber, getprotobyname, setprotoent, endprotoent -
+     get protocol entry
+
+SYNOPSIS
+     #include <netdb.h>
+
+     struct protoent *
+     getprotoent(void);
+
+     struct protoent *
+     getprotobyname(char *name);
+
+     struct protoent *
+     getprotobynumber(int proto);
+
+     void
+     setprotoent(int stayopen);
+
+     void
+     endprotoent(void);
+
+DESCRIPTION
+     The getprotoent(), getprotobyname(), and getprotobynumber() functions
+     each return a pointer to an object with the following structure contain-
+     ing the broken-out fields of a line in the network protocol database,
+     /etc/protocols.
+
+
+           struct  protoent {
+                   char    *p_name;        /* official name of protocol */
+                   char    **p_aliases;    /* alias list */
+                   int     p_proto;        /* protocol number */
+           };
+
+     The members of this structure are:
+
+     p_name     The official name of the protocol.
+
+     p_aliases  A zero-terminated list of alternate names for the protocol.
+
+     p_proto    The protocol number.
+
+     The getprotoent() function reads the next line of the file, opening the
+     file if necessary.
+
+     The setprotoent() function opens and rewinds the file.  If the stayopen
+     flag is non-zero, the net database will not be closed after each call to
+     getprotobyname() or getprotobynumber().
+
+     The endprotoent() function closes the file.
+
+     The getprotobyname() and getprotobynumber() functions sequentially search
+     from the beginning of the file until a matching protocol name or protocol
+     number is found, or until EOF is encountered.
+
+RETURN VALUES
+     Null pointer (0) returned on EOF or error.
+
+FILES
+     /etc/protocols
+
+SEE ALSO
+     protocols(5)
+
+HISTORY
+     The getprotoent(), getprotobynumber(), getprotobyname(), setprotoent(),
+     and endprotoent() functions appeared in 4.2BSD.
+
+BUGS
+     These functions use a static data space; if the data is needed for future
+     use, it should be copied before any subsequent calls overwrite it.  Only
+     the Internet protocols are currently understood.
+
+BSD                              June 4, 1993                              BSD
+    

PrevHomeNext
getnetentUpgetrrsetbyname
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getrrsetbyname.html b/doc/html/ref/net-common-tcpip-manpages-getrrsetbyname.html new file mode 100644 index 00000000..0f8d97dc --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getrrsetbyname.html @@ -0,0 +1,256 @@ + + + + + + + + +getrrsetbyname +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getrrsetbyname

GETRRSETBYNAME(3)       System Library Functions Manual      GETRRSETBYNAME(3)
+
+NAME
+     getrrsetbyname - retrieve DNS records
+
+SYNOPSIS
+     #include <netdb.h>
+
+     int
+     getrrsetbyname(const char *hostname, unsigned int rdclass,
+             unsigned int rdtype, unsigned int flags, struct rrsetinfo **res);
+
+     int
+     freerrset(struct rrsetinfo **rrset);
+
+DESCRIPTION
+     getrrsetbyname() gets a set of resource records associated with a
+     hostname, class and type.  hostname is a pointer a to null-terminated
+     string.  The flags field is currently unused and must be zero.
+
+     After a successful call to getrrsetbyname(), *res is a pointer to an
+     rrsetinfo structure, containing a list of one or more rdatainfo struc-
+     tures containing resource records and potentially another list of
+     rdatainfo structures containing SIG resource records associated with
+     those records.  The members rri_rdclass and rri_rdtype are copied from
+     the parameters.  rri_ttl and rri_name are properties of the obtained
+     rrset.  The resource records contained in rri_rdatas and rri_sigs are in
+     uncompressed DNS wire format.  Properties of the rdataset are represented
+     in the rri_flags bitfield. If the RRSET_VALIDATED bit is set, the data
+     has been DNSSEC validated and the signatures verified.
+
+     The following structures are used:
+
+     struct  rdatainfo {
+             unsigned int            rdi_length;     /* length of data */
+             unsigned char           *rdi_data;      /* record data */
+     };
+
+     struct  rrsetinfo {
+             unsigned int            rri_flags;      /* RRSET_VALIDATED ... */
+             unsigned int            rri_rdclass;    /* class number */
+             unsigned int            rri_rdtype;     /* RR type number */
+             unsigned int            rri_ttl;        /* time to live */
+             unsigned int            rri_nrdatas;    /* size of rdatas array */
+             unsigned int            rri_nsigs;      /* size of sigs array */
+             char                    *rri_name;      /* canonical name */
+             struct rdatainfo        *rri_rdatas;    /* individual records */
+             struct rdatainfo        *rri_sigs;      /* individual signatures */
+     };
+
+     All of the information returned by getrrsetbyname() is dynamically allo-
+     cated: the rrsetinfo and rdatainfo structures, and the canonical host
+     name strings pointed to by the rrsetinfostructure. Memory allocated for
+     the dynamically allocated structures created by a successful call to
+     getrrsetbyname() is released by freerrset().  rrset is a pointer to a
+     struct rrset created by a call to getrrsetbyname().
+
+     If the EDNS0 option is activated in resolv.conf(3), getrrsetbyname() will
+     request DNSSEC authentication using the EDNS0 DNSSEC OK (DO) bit.
+
+RETURN VALUES
+     getrrsetbyname() returns zero on success, and one of the following error
+     codes if an error occurred:
+
+     ERRSET_NONAME    the name does not exist
+     ERRSET_NODATA    the name exists, but does not have data of the desired
+                      type
+     ERRSET_NOMEMORY  memory could not be allocated
+     ERRSET_INVAL     a parameter is invalid
+     ERRSET_FAIL      other failure
+
+SEE ALSO
+     resolver(3), resolv.conf(5), named(8)
+
+AUTHORS
+     Jakob Schlyter <jakob@openbsd.org>
+
+HISTORY
+     getrrsetbyname() first appeared in OpenBSD 3.0.  The API first appeared
+     in ISC BIND version 9.
+
+BUGS
+     The data in *rdi_data should be returned in uncompressed wire format.
+     Currently, the data is in compressed format and the caller can't uncom-
+     press since it doesn't have the full message.
+
+CAVEATS
+     The RRSET_VALIDATED flag in rri_flags is set if the AD (autenticated
+     data) bit in the DNS answer is set. This flag should not be trusted
+     unless the transport between the nameserver and the resolver is secure
+     (e.g. IPsec, trusted network, loopback communication).
+
+BSD                              Oct 18, 2000                              BSD
+    

PrevHomeNext
getprotoentUpgetservent
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getservent.html b/doc/html/ref/net-common-tcpip-manpages-getservent.html new file mode 100644 index 00000000..89bf5ee2 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getservent.html @@ -0,0 +1,245 @@ + + + + + + + + +getservent +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getservent

GETSERVENT(3)           System Library Functions Manual          GETSERVENT(3)
+
+NAME
+     getservent, getservbyport, getservbyname, setservent, endservent - get
+     service entry
+
+SYNOPSIS
+     #include <netdb.h>
+
+     struct servent *
+     getservent(void);
+
+     struct servent *
+     getservbyname(char *name, char *proto);
+
+     struct servent *
+     getservbyport(int port, char *proto);
+
+     void
+     setservent(int stayopen);
+
+     void
+     endservent(void);
+
+DESCRIPTION
+     The getservent(), getservbyname(), and getservbyport() functions each
+     return a pointer to an object with the following structure containing the
+     broken-out fields of a line in the network services database,
+     /etc/services.
+
+           struct  servent {
+                   char    *s_name;        /* official name of service */
+                   char    **s_aliases;    /* alias list */
+                   int     s_port;         /* port service resides at */
+                   char    *s_proto;       /* protocol to use */
+           };
+
+     The members of this structure are:
+
+     s_name     The official name of the service.
+
+     s_aliases  A zero-terminated list of alternate names for the service.
+
+     s_port     The port number at which the service resides.  Port numbers
+                are returned in network byte order.
+
+     s_proto    The name of the protocol to use when contacting the service.
+
+     The getservent() function reads the next line of the file, opening the
+     file if necessary.
+
+     The setservent() function opens and rewinds the file.  If the stayopen
+     flag is non-zero, the net database will not be closed after each call to
+     getservbyname() or getservbyport().
+
+     The endservent() function closes the file.
+
+     The getservbyname() and getservbyport() functions sequentially search
+     from the beginning of the file until a matching protocol name or port
+     number (specified in network byte order) is found, or until EOF is
+     encountered.  If a protocol name is also supplied (non-null), searches
+     must also match the protocol.
+
+FILES
+     /etc/services
+
+DIAGNOSTICS
+     Null pointer (0) returned on EOF or error.
+
+SEE ALSO
+     getprotoent(3), services(5)
+
+HISTORY
+     The getservent(), getservbyport(), getservbyname(), setservent(), and
+     endservent() functions appeared in 4.2BSD.
+
+BUGS
+     These functions use static data storage; if the data is needed for future
+     use, it should be copied before any subsequent calls overwrite it.
+     Expecting port numbers to fit in a 32-bit quantity is probably naive.
+
+BSD                            January 12, 1994                            BSD
+    

PrevHomeNext
getrrsetbynameUpif_nametoindex
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getsockname.html b/doc/html/ref/net-common-tcpip-manpages-getsockname.html new file mode 100644 index 00000000..aa461372 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getsockname.html @@ -0,0 +1,244 @@ + + + + + + + + +getsockname +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getsockname

GETSOCKNAME(2)                System Calls Manual               GETSOCKNAME(2)
+
+NAME
+     getsockname - get socket name
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     int
+     getsockname(int s, struct sockaddr *name, socklen_t *namelen);
+
+DESCRIPTION
+     getsockname() returns the locally bound address information for a speci-
+     fied socket.
+
+     Common uses of this function are as follows:
+
+     o   When bind(2) is called with a port number of 0 (indicating the kernel
+         should pick an ephemeral port) getsockname() is used to retrieve the
+         kernel-assigned port number.
+
+     o   When a process calls bind(2) on a wildcard IP address, getsockname()
+         is used to retrieve the local IP address for the connection.
+
+     o   When a function wishes to know the address family of a socket,
+         getsockname() can be used.
+
+     getsockname() takes three parameters:
+
+     s, Contains the file desriptor for the socket to be looked up.
+
+     name points to a sockaddr structure which will hold the resulting address
+     information.  Normal use requires one to use a structure specific to the
+     protocol family in use, such as sockaddr_in (IPv4) or sockaddr_in6
+     (IPv6), cast to a (struct sockaddr *).
+
+     For greater portability (such as newer protocol families) the new struc-
+     ture sockaddr_storage exists.  sockaddr_storage is large enough to hold
+     any of the other sockaddr_* variants.  On return, it should be cast to
+     the correct sockaddr type, according to the current protocol family.
+
+     namelen Indicates the amount of space pointed to by name, in bytes.  Upon
+     return, namelen is set to the actual size of the returned address infor-
+     mation.
+
+     If the address of the destination socket for a given socket connection is
+     needed, the getpeername(2) function should be used instead.
+
+     If name does not point to enough space to hold the entire socket address,
+     the result will be truncated to namelen bytes.
+
+RETURN VALUES
+     On success, getsockname() returns a 0, and namelen is set to the actual
+     size of the socket address returned in name.  Otherwise, errno is set,
+     and a value of -1 is returned.
+
+ERRORS
+     If getsockname() fails, errno is set to one of the following:
+
+     [EBADF]            The argument s is not a valid descriptor.
+
+     [ENOTSOCK]         The argument s is a file, not a socket.
+
+     [ENOBUFS]          Insufficient resources were available in the system to
+                        perform the operation.
+
+     [EFAULT]           The name parameter points to memory not in a valid
+                        part of the process address space.
+
+SEE ALSO
+     accept(2), bind(2), getpeername(2), getpeereid(2), socket(2)
+
+BUGS
+     Names bound to sockets in the UNIX domain are inaccessible; getsockname
+     returns a zero length name.
+
+HISTORY
+     The getsockname() function call appeared in 4.2BSD.
+
+BSD                              July 17, 1999                             BSD
+    

PrevHomeNext
getpeernameUpgetsockopt
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-getsockopt.html b/doc/html/ref/net-common-tcpip-manpages-getsockopt.html new file mode 100644 index 00000000..4f4c65d9 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-getsockopt.html @@ -0,0 +1,344 @@ + + + + + + + + +getsockopt +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

getsockopt

GETSOCKOPT(2)                 System Calls Manual                GETSOCKOPT(2)
+
+NAME
+     getsockopt, setsockopt - get and set options on sockets
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     int
+     getsockopt(int s, int level, int optname, void *optval,
+             socklen_t *optlen);
+
+     int
+     setsockopt(int s, int level, int optname, const void *optval,
+             socklen_t optlen);
+
+DESCRIPTION
+     getsockopt() and setsockopt() manipulate the options associated with a
+     socket.  Options may exist at multiple protocol levels; they are always
+     present at the uppermost ``socket'' level.
+
+     When manipulating socket options the level at which the option resides
+     and the name of the option must be specified.  To manipulate options at
+     the socket level, level is specified as SOL_SOCKET.  To manipulate
+     options at any other level the protocol number of the appropriate proto-
+     col controlling the option is supplied.  For example, to indicate that an
+     option is to be interpreted by the TCP protocol, level should be set to
+     the protocol number of TCP; see getprotoent(3).
+
+     The parameters optval and optlen are used to access option values for
+     setsockopt().  For getsockopt() they identify a buffer in which the value
+     for the requested option(s) are to be returned.  For getsockopt(), optlen
+     is a value-result parameter, initially containing the size of the buffer
+     pointed to by optval, and modified on return to indicate the actual size
+     of the value returned.  If no option value is to be supplied or returned,
+     optval may be NULL.
+
+     optname and any specified options are passed uninterpreted to the appro-
+     priate protocol module for interpretation.  The include file
+     <sys/socket.h> contains definitions for socket level options, described
+     below.  Options at other protocol levels vary in format and name; consult
+     the appropriate entries in section 4 of the manual.
+
+     Most socket-level options utilize an int parameter for optval.  For
+     setsockopt(), the parameter should be non-zero to enable a boolean
+     option, or zero if the option is to be disabled.  SO_LINGER uses a struct
+     linger parameter, defined in <sys/socket.h>, which specifies the desired
+     state of the option and the linger interval (see below).  SO_SNDTIMEO and
+     SO_RCVTIMEO use a struct timeval parameter, defined in <sys/time.h>.
+
+     The following options are recognized at the socket level.  Except as
+     noted, each may be examined with getsockopt() and set with setsockopt().
+
+           SO_DEBUG        enables recording of debugging information
+           SO_REUSEADDR    enables local address reuse
+           SO_REUSEPORT    enables duplicate address and port bindings
+           SO_KEEPALIVE    enables keep connections alive
+           SO_DONTROUTE    enables routing bypass for outgoing messages
+           SO_LINGER       linger on close if data present
+           SO_BROADCAST    enables permission to transmit broadcast messages
+           SO_OOBINLINE    enables reception of out-of-band data in band
+           SO_SNDBUF       set buffer size for output
+           SO_RCVBUF       set buffer size for input
+           SO_SNDLOWAT     set minimum count for output
+           SO_RCVLOWAT     set minimum count for input
+           SO_SNDTIMEO     set timeout value for output
+           SO_RCVTIMEO     set timeout value for input
+           SO_TYPE         get the type of the socket (get only)
+           SO_ERROR        get and clear error on the socket (get only)
+
+     SO_DEBUG enables debugging in the underlying protocol modules.
+     SO_REUSEADDR indicates that the rules used in validating addresses sup-
+     plied in a bind(2) call should allow reuse of local addresses.
+     SO_REUSEPORT allows completely duplicate bindings by multiple processes
+     if they all set SO_REUSEPORT before binding the port.  This option per-
+     mits multiple instances of a program to each receive UDP/IP multicast or
+     broadcast datagrams destined for the bound port.  SO_KEEPALIVE enables
+     the periodic transmission of messages on a connected socket.  Should the
+     connected party fail to respond to these messages, the connection is con-
+     sidered broken and processes using the socket are notified via a SIGPIPE
+     signal when attempting to send data.  SO_DONTROUTE indicates that outgo-
+     ing messages should bypass the standard routing facilities.  Instead,
+     messages are directed to the appropriate network interface according to
+     the network portion of the destination address.
+
+     SO_LINGER controls the action taken when unsent messages are queued on
+     socket and a close(2) is performed.  If the socket promises reliable
+     delivery of data and SO_LINGER is set, the system will block the process
+     on the close(2) attempt until it is able to transmit the data or until it
+     decides it is unable to deliver the information (a timeout period mea-
+     sured in seconds, termed the linger interval, is specified in the
+     setsockopt() call when SO_LINGER is requested).  If SO_LINGER is disabled
+     and a close(2) is issued, the system will process the close in a manner
+     that allows the process to continue as quickly as possible.
+
+     The option SO_BROADCAST requests permission to send broadcast datagrams
+     on the socket.  Broadcast was a privileged operation in earlier versions
+     of the system.  With protocols that support out-of-band data, the
+     SO_OOBINLINE option requests that out-of-band data be placed in the nor-
+     mal data input queue as received; it will then be accessible with recv(2)
+     or read(2) calls without the MSG_OOB flag.  Some protocols always behave
+     as if this option is set.  SO_SNDBUF and SO_RCVBUF are options to adjust
+     the normal buffer sizes allocated for output and input buffers, respec-
+     tively.  The buffer size may be increased for high-volume connections, or
+     may be decreased to limit the possible backlog of incoming data.  The
+     system places an absolute limit on these values.
+
+     SO_SNDLOWAT is an option to set the minimum count for output operations.
+     Most output operations process all of the data supplied by the call,
+     delivering data to the protocol for transmission and blocking as neces-
+     sary for flow control.  Nonblocking output operations will process as
+     much data as permitted subject to flow control without blocking, but will
+     process no data if flow control does not allow the smaller of the low
+     water mark value or the entire request to be processed.  A select(2) or
+     poll(2) operation testing the ability to write to a socket will return
+     true only if the low water mark amount could be processed.  The default
+     value for SO_SNDLOWAT is set to a convenient size for network efficiency,
+     often 1024.  SO_RCVLOWAT is an option to set the minimum count for input
+     operations.  In general, receive calls will block until any (non-zero)
+     amount of data is received, then return with the smaller of the amount
+     available or the amount requested.  The default value for SO_RCVLOWAT is
+     1.  If SO_RCVLOWAT is set to a larger value, blocking receive calls nor-
+     mally wait until they have received the smaller of the low water mark
+     value or the requested amount.  Receive calls may still return less than
+     the low water mark if an error occurs, a signal is caught, or the type of
+     data next in the receive queue is different than that returned.
+
+     SO_SNDTIMEO is an option to set a timeout value for output operations.
+     It accepts a struct timeval parameter with the number of seconds and
+     microseconds used to limit waits for output operations to complete.  If a
+     send operation has blocked for this much time, it returns with a partial
+     count or with the error EWOULDBLOCK if no data was sent.  In the current
+     implementation, this timer is restarted each time additional data are
+     delivered to the protocol, implying that the limit applies to output por-
+     tions ranging in size from the low water mark to the high water mark for
+     output.  SO_RCVTIMEO is an option to set a timeout value for input opera-
+     tions.  It accepts a struct timeval parameter with the number of seconds
+     and microseconds used to limit waits for input operations to complete.
+     In the current implementation, this timer is restarted each time addi-
+     tional data are received by the protocol, and thus the limit is in effect
+     an inactivity timer.  If a receive operation has been blocked for this
+     much time without receiving additional data, it returns with a short
+     count or with the error EWOULDBLOCK if no data were received.
+
+     Finally, SO_TYPE and SO_ERROR are options used only with getsockopt().
+     SO_TYPE returns the type of the socket, such as SOCK_STREAM; it is useful
+     for servers that inherit sockets on startup.  SO_ERROR returns any pend-
+     ing error on the socket and clears the error status.  It may be used to
+     check for asynchronous errors on connected datagram sockets or for other
+     asynchronous errors.
+
+RETURN VALUES
+     A 0 is returned if the call succeeds, -1 if it fails.
+
+ERRORS
+     The call succeeds unless:
+
+     [EBADF]            The argument s is not a valid descriptor.
+
+     [ENOTSOCK]         The argument s is a file, not a socket.
+
+     [ENOPROTOOPT]      The option is unknown at the level indicated.
+
+     [EFAULT]           The address pointed to by optval is not in a valid
+                        part of the process address space.  For getsockopt(),
+                        this error may also be returned if optlen is not in a
+                        valid part of the process address space.
+
+SEE ALSO
+     connect(2), ioctl(2), poll(2), select(2), poll(2), socket(2),
+     getprotoent(3), protocols(5)
+
+BUGS
+     Several of the socket options should be handled at lower levels of the
+     system.
+
+HISTORY
+     The getsockopt() system call appeared in 4.2BSD.
+
+BSD                            February 15, 1999                           BSD
+    

PrevHomeNext
getsocknameUpioctl
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-if-nametoindex.html b/doc/html/ref/net-common-tcpip-manpages-if-nametoindex.html new file mode 100644 index 00000000..2ef92dfb --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-if-nametoindex.html @@ -0,0 +1,231 @@ + + + + + + + + +if_nametoindex +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

if_nametoindex

IF_NAMETOINDEX(3)       System Library Functions Manual      IF_NAMETOINDEX(3)
+
+NAME
+     if_nametoindex, if_indextoname, if_nameindex, if_freenameindex - convert
+     interface index to name, and vice versa
+
+SYNOPSIS
+     #include <net/if.h>
+
+     unsigned int
+     if_nametoindex(const char *ifname);
+
+     char *
+     if_indextoname(unsigned int ifindex, char *ifname);
+
+     struct if_nameindex *
+     if_nameindex(void);
+
+     void
+     if_freenameindex(struct if_nameindex *ptr);
+
+DESCRIPTION
+     These functions map interface indexes to interface names (such as
+     ``lo0''), and vice versa.
+
+     The if_nametoindex() function converts an interface name specified by the
+     ifname argument to an interface index (positive integer value).  If the
+     specified interface does not exist, 0 will be returned.
+
+     if_indextoname() converts an interface index specified by the ifindex
+     argument to an interface name.  The ifname argument must point to a
+     buffer of at least IF_NAMESIZE bytes into which the interface name corre-
+     sponding to the specified index is returned.  (IF_NAMESIZE is also
+     defined in <net/if.h> and its value includes a terminating null byte at
+     the end of the interface name.)  This pointer is also the return value of
+     the function.  If there is no interface corresponding to the specified
+     index, NULL is returned.
+
+     if_nameindex() returns an array of if_nameindex structures.
+     if_nametoindex is also defined in <net/if.h>, and is as follows:
+
+     struct if_nameindex {
+         unsigned int   if_index;  /* 1, 2, ... */
+         char          *if_name;   /* null terminated name: "le0", ... */
+     };
+
+     The end of the array of structures is indicated by a structure with an
+     if_index of 0 and an if_name of NULL.  The function returns a null
+     pointer on error.  The memory used for this array of structures along
+     with the interface names pointed to by the if_name members is obtained
+     dynamically.  This memory is freed by the if_freenameindex() function.
+
+     if_freenameindex() takes a pointer that was returned by if_nameindex() as
+     argument (ptr), and it reclaims the region allocated.
+
+DIAGNOSTICS
+     if_nametoindex() returns 0 on error, positive integer on success.
+     if_indextoname() and if_nameindex() return NULL on errors.
+
+SEE ALSO
+     R. Gilligan, S.  Thomson, J. Bound, and W. Stevens, ``Basic Socket Inter-
+     face Extensions for IPv6,'' RFC2553, March 1999.
+
+STANDARDS
+     These functions are defined in ``Basic Socket Interface Extensions for
+     IPv6'' (RFC2533).
+
+BSD                              May 21, 1998                              BSD
+    

PrevHomeNext
getserventUpinet
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-inet-net.html b/doc/html/ref/net-common-tcpip-manpages-inet-net.html new file mode 100644 index 00000000..aab28f58 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-inet-net.html @@ -0,0 +1,243 @@ + + + + + + + + +inet_net +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

inet_net

INET_NET(3)             System Library Functions Manual            INET_NET(3)
+
+NAME
+     inet_net_ntop, inet_net_pton - Internet network number manipulation rou-
+     tines
+
+SYNOPSIS
+     #include <sys/socket.h>
+     #include <netinet/in.h>
+     #include <arpa/inet.h>
+
+     char *
+     inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size);
+
+     int
+     inet_net_pton(int af, const char *src, void *dst, size_t size);
+
+DESCRIPTION
+     The inet_net_ntop() function converts an Internet network number from
+     network format (usually a struct in_addr or some other binary form, in
+     network byte order) to CIDR presentation format (suitable for external
+     display purposes).  bits is the number of bits in src that are the net-
+     work number.  It returns NULL if a system error occurs (in which case,
+     errno will have been set), or it returns a pointer to the destination
+     string.
+
+     The inet_net_pton() function converts a presentation format Internet net-
+     work number (that is, printable form as held in a character string) to
+     network format (usually a struct in_addr or some other internal binary
+     representation, in network byte order).  It returns the number of bits
+     (either computed based on the class, or specified with /CIDR), or -1 if a
+     failure occurred (in which case errno will have been set.  It will be set
+     to ENOENT if the Internet network number was not valid).
+
+     The only value for af currently supported is AF_INET.  size is the size
+     of the result buffer dst.
+
+NETWORK NUMBERS (IP VERSION 4)
+     Internet network numbers may be specified in one of the following forms:
+
+           a.b.c.d/bits
+           a.b.c.d
+           a.b.c
+           a.b
+           a
+
+     When four parts are specified, each is interpreted as a byte of data and
+     assigned, from left to right, to the four bytes of an Internet network
+     number.  Note that when an Internet network number is viewed as a 32-bit
+     integer quantity on a system that uses little-endian byte order (such as
+     the Intel 386, 486, and Pentium processors) the bytes referred to above
+     appear as ``d.c.b.a''.  That is, little-endian bytes are ordered from
+     right to left.
+
+     When a three part number is specified, the last part is interpreted as a
+     16-bit quantity and placed in the rightmost two bytes of the Internet
+     network number.  This makes the three part number format convenient for
+     specifying Class B network numbers as ``128.net.host''.
+
+     When a two part number is supplied, the last part is interpreted as a
+     24-bit quantity and placed in the rightmost three bytes of the Internet
+     network number.  This makes the two part number format convenient for
+     specifying Class A network numbers as ``net.host''.
+
+     When only one part is given, the value is stored directly in the Internet
+     network number without any byte rearrangement.
+
+     All numbers supplied as ``parts'' in a `.' notation may be decimal,
+     octal, or hexadecimal, as specified in the C language (i.e., a leading 0x
+     or 0X implies hexadecimal; otherwise, a leading 0 implies octal; other-
+     wise, the number is interpreted as decimal).
+
+SEE ALSO
+     byteorder(3), inet(3), networks(5)
+
+HISTORY
+     The inet_net_ntop and inet_net_pton functions first appeared in BIND
+     4.9.4.
+
+BSD                              June 18, 1997                             BSD
+    

PrevHomeNext
inet6_rthdr_spaceUpipx
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-inet.html b/doc/html/ref/net-common-tcpip-manpages-inet.html new file mode 100644 index 00000000..e1737b54 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-inet.html @@ -0,0 +1,361 @@ + + + + + + + + +inet +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

inet

INET(3)                 System Library Functions Manual                INET(3)
+
+NAME
+     inet_addr, inet_aton, inet_lnaof, inet_makeaddr, inet_netof,
+     inet_network, inet_ntoa, inet_ntop, inet_pton - Internet address manipu-
+     lation routines
+
+SYNOPSIS
+     #include <sys/socket.h>
+     #include <netinet/in.h>
+     #include <arpa/inet.h>
+
+     in_addr_t
+     inet_addr(const char *cp);
+
+     int
+     inet_aton(const char *cp, struct in_addr *addr);
+
+     in_addr_t
+     inet_lnaof(struct in_addr in);
+
+     struct in_addr
+     inet_makeaddr(unsigned long net, unsigned long lna);
+
+     in_addr_t
+     inet_netof(struct in_addr in);
+
+     in_addr_t
+     inet_network(const char *cp);
+
+     char *
+     inet_ntoa(struct in_addr in);
+
+     const char *
+     inet_ntop(int af, const void *src, char *dst, size_t size);
+
+     int
+     inet_pton(int af, const char *src, void *dst);
+
+DESCRIPTION
+     The routines inet_aton(), inet_addr() and inet_network() interpret char-
+     acter strings representing numbers expressed in the Internet standard `.'
+     notation.  The inet_pton() function converts a presentation format
+     address (that is, printable form as held in a character string) to net-
+     work format (usually a struct in_addr or some other internal binary rep-
+     resentation, in network byte order).  It returns 1 if the address was
+     valid for the specified address family, or 0 if the address wasn't
+     parseable in the specified address family, or -1 if some system error
+     occurred (in which case errno will have been set).  This function is
+     presently valid for AF_INET and AF_INET6.  The inet_aton() routine inter-
+     prets the specified character string as an Internet address, placing the
+     address into the structure provided.  It returns 1 if the string was suc-
+     cessfully interpreted, or 0 if the string was invalid.  The inet_addr()
+     and inet_network() functions return numbers suitable for use as Internet
+     addresses and Internet network numbers, respectively.
+
+     The function inet_ntop() converts an address from network format (usually
+     a struct in_addr or some other binary form, in network byte order) to
+     presentation format (suitable for external display purposes).  It returns
+     NULL if a system error occurs (in which case, errno will have been set),
+     or it returns a pointer to the destination string.  The routine
+     inet_ntoa() takes an Internet address and returns an ASCII string repre-
+     senting the address in `.' notation.  The routine inet_makeaddr() takes
+     an Internet network number and a local network address and constructs an
+     Internet address from it.  The routines inet_netof() and inet_lnaof()
+     break apart Internet host addresses, returning the network number and
+     local network address part, respectively.
+
+     All Internet addresses are returned in network order (bytes ordered from
+     left to right).  All network numbers and local address parts are returned
+     as machine format integer values.
+
+INTERNET ADDRESSES (IP VERSION 4)
+     Values specified using the `.' notation take one of the following forms:
+
+           a.b.c.d
+           a.b.c
+           a.b
+           a
+
+     When four parts are specified, each is interpreted as a byte of data and
+     assigned, from left to right, to the four bytes of an Internet address.
+     Note that when an Internet address is viewed as a 32-bit integer quantity
+     on a system that uses little-endian byte order (such as the Intel 386,
+     486 and Pentium processors) the bytes referred to above appear as
+     ``d.c.b.a''.  That is, little-endian bytes are ordered from right to
+     left.
+
+     When a three part address is specified, the last part is interpreted as a
+     16-bit quantity and placed in the rightmost two bytes of the network
+     address.  This makes the three part address format convenient for speci-
+     fying Class B network addresses as ``128.net.host''.
+
+     When a two part address is supplied, the last part is interpreted as a
+     24-bit quantity and placed in the rightmost three bytes of the network
+     address.  This makes the two part address format convenient for specify-
+     ing Class A network addresses as ``net.host''.
+
+     When only one part is given, the value is stored directly in the network
+     address without any byte rearrangement.
+
+     All numbers supplied as ``parts'' in a `.' notation may be decimal,
+     octal, or hexadecimal, as specified in the C language (i.e., a leading 0x
+     or 0X implies hexadecimal; otherwise, a leading 0 implies octal; other-
+     wise, the number is interpreted as decimal).
+
+INTERNET ADDRESSES (IP VERSION 6)
+     In order to support scoped IPv6 addresses, getaddrinfo(3) and
+     getnameinfo(3) are recommended rather than the functions presented here.
+
+     The presentation format of an IPv6 address is given in [RFC1884 2.2]:
+
+     There are three conventional forms for representing IPv6 addresses as
+     text strings:
+
+     1.   The preferred form is x:x:x:x:x:x:x:x, where the 'x's are the hex-
+          adecimal values of the eight 16-bit pieces of the address.  Exam-
+          ples:
+
+                FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
+                1080:0:0:0:8:800:200C:417A
+
+          Note that it is not necessary to write the leading zeros in an indi-
+          vidual field, but there must be at least one numeral in every field
+          (except for the case described in 2.).
+
+     2.   Due to the method of allocating certain styles of IPv6 addresses, it
+          will be common for addresses to contain long strings of zero bits.
+          In order to make writing addresses
+
+          containing zero bits easier a special syntax is available to com-
+          press the zeros.  The use of ``::'' indicates multiple groups of 16
+          bits of zeros.  The ``::'' can only appear once in an address.  The
+          ``::'' can also be used to compress the leading and/or trailing
+          zeros in an address.
+
+          For example the following addresses:
+
+                1080:0:0:0:8:800:200C:417A  a unicast address
+                FF01:0:0:0:0:0:0:43         a multicast address
+                0:0:0:0:0:0:0:1             the loopback address
+                0:0:0:0:0:0:0:0             the unspecified addresses
+
+          may be represented as:
+
+                1080::8:800:200C:417A       a unicast address
+                FF01::43                    a multicast address
+                ::1                         the loopback address
+                ::                          the unspecified addresses
+
+     3.   An alternative form that is sometimes more convenient when dealing
+          with a mixed environment of IPv4 and IPv6 nodes is
+          x:x:x:x:x:x:d.d.d.d, where the 'x's are the hexadecimal values of
+          the six high-order 16-bit pieces of the address, and the 'd's are
+          the decimal values of the four low-order 8-bit pieces of the address
+          (standard IPv4 representation).  Examples:
+
+                0:0:0:0:0:0:13.1.68.3
+                0:0:0:0:0:FFFF:129.144.52.38
+
+          or in compressed form:
+
+                ::13.1.68.3
+                ::FFFF:129.144.52.38
+
+DIAGNOSTICS
+     The constant INADDR_NONE is returned by inet_addr() and inet_network()
+     for malformed requests.
+
+SEE ALSO
+     byteorder(3), gethostbyname(3), getnetent(3), inet_net(3), hosts(5),
+     networks(5)
+
+STANDARDS
+     The inet_ntop and inet_pton functions conforms to the IETF IPv6 BSD API
+     and address formatting specifications.  Note that inet_pton does not
+     accept 1-, 2-, or 3-part dotted addresses; all four parts must be speci-
+     fied.  This is a narrower input set than that accepted by inet_aton.
+
+HISTORY
+     The inet_addr, inet_network, inet_makeaddr, inet_lnaof and inet_netof
+     functions appeared in 4.2BSD.  The inet_aton and inet_ntoa functions
+     appeared in 4.3BSD.  The inet_pton and inet_ntop functions appeared in
+     BIND 4.9.4.
+
+BUGS
+     The value INADDR_NONE (0xffffffff) is a valid broadcast address, but
+     inet_addr() cannot return that value without indicating failure.  Also,
+     inet_addr() should have been designed to return a struct in_addr.  The
+     newer inet_aton() function does not share these problems, and almost all
+     existing code should be modified to use inet_aton() instead.
+
+     The problem of host byte ordering versus network byte ordering is confus-
+     ing.
+
+     The string returned by inet_ntoa() resides in a static memory area.
+
+BSD                              June 18, 1997                             BSD
+    

PrevHomeNext
if_nametoindexUpinet6_option_space
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-inet6-option-space.html b/doc/html/ref/net-common-tcpip-manpages-inet6-option-space.html new file mode 100644 index 00000000..1f3f8848 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-inet6-option-space.html @@ -0,0 +1,357 @@ + + + + + + + + +inet6_option_space +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

inet6_option_space

INET6_OPTION_SPACE(3)   System Library Functions Manual  INET6_OPTION_SPACE(3)
+
+NAME
+     inet6_option_space, inet6_option_init, inet6_option_append,
+     inet6_option_alloc, inet6_option_next, inet6_option_find - IPv6 Hop-by-
+     Hop and Destination Options manipulation
+
+SYNOPSIS
+     #include <netinet/in.h>
+
+     int
+     inet6_option_space(int nbytes);
+
+     int
+     inet6_option_init(void *bp, struct cmsghdr **cmsgp, int type);
+
+     int
+     inet6_option_append(struct cmsghdr *cmsg, const u_int8_t *typep,
+             int multx, int plusy);
+
+     u_int8_t *
+     inet6_option_alloc(struct cmsghdr *cmsg, int datalen, int multx,
+             int plusy);;
+
+     int
+     inet6_option_next(const struct cmsghdr *cmsg, u_int8_t **tptrp);
+
+     int
+     inet6_option_find(const struct cmsghdr *cmsg, u_int8_t **tptrp,
+             int type);
+
+DESCRIPTION
+     Building and parsing the Hop-by-Hop and Destination options is compli-
+     cated due to alignment constranints, padding and ancillary data manipula-
+     tion.  RFC2292 defines a set of functions to help the application.  The
+     function prototypes for these functions are all in the <netinet/in.h>
+     header.
+
+   inet6_option_space
+     inet6_option_space() returns the number of bytes required to hold an
+     option when it is stored as ancillary data, including the cmsghdr struc-
+     ture at the beginning, and any padding at the end (to make its size a
+     multiple of 8 bytes).  The argument is the size of the structure defining
+     the option, which must include any pad bytes at the beginning (the value
+     y in the alignment term ``xn + y''), the type byte, the length byte, and
+     the option data.
+
+     Note: If multiple options are stored in a single ancillary data object,
+     which is the recommended technique, this function overestimates the
+     amount of space required by the size of N-1 cmsghdr structures, where N
+     is the number of options to be stored in the object.  This is of little
+     consequence, since it is assumed that most Hop-by-Hop option headers and
+     Destination option headers carry only one option (appendix B of
+     [RFC-2460]).
+
+   inet6_option_init
+     inet6_option_init() is called once per ancillary data object that will
+     contain either Hop-by-Hop or Destination options.  It returns 0 on suc-
+     cess or -1 on an error.
+
+     bp is a pointer to previously allocated space that will contain the
+     ancillary data object.  It must be large enough to contain all the indi-
+     vidual options to be added by later calls to inet6_option_append() and
+     inet6_option_alloc().
+
+     cmsgp is a pointer to a pointer to a cmsghdr structure.  *cmsgp is ini-
+     tialized by this function to point to the cmsghdr structure constructed
+     by this function in the buffer pointed to by bp.
+
+     type is either IPV6_HOPOPTS or IPV6_DSTOPTS.  This type is stored in the
+     cmsg_type member of the cmsghdr structure pointed to by *cmsgp.
+
+   inet6_option_append
+     This function appends a Hop-by-Hop option or a Destination option into an
+     ancillary data object that has been initialized by inet6_option_init().
+     This function returns 0 if it succeeds or -1 on an error.
+
+     cmsg is a pointer to the cmsghdr structure that must have been initial-
+     ized by inet6_option_init().
+
+     typep is a pointer to the 8-bit option type.  It is assumed that this
+     field is immediately followed by the 8-bit option data length field,
+     which is then followed immediately by the option data.  The caller ini-
+     tializes these three fields (the type-length-value, or TLV) before call-
+     ing this function.
+
+     The option type must have a value from 2 to 255, inclusive.  (0 and 1 are
+     reserved for the Pad1 and PadN options, respectively.)
+
+     The option data length must have a value between 0 and 255, inclusive,
+     and is the length of the option data that follows.
+
+     multx is the value x in the alignment term ``xn + y''.  It must have a
+     value of 1, 2, 4, or 8.
+
+     plusy is the value y in the alignment term ``xn + y''.  It must have a
+     value between 0 and 7, inclusive.
+
+   inet6_option_alloc
+     This function appends a Hop-by-Hop option or a Destination option into an
+     ancillary data object that has been initialized by inet6_option_init().
+     This function returns a pointer to the 8-bit option type field that
+     starts the option on success, or NULL on an error.
+
+     The difference between this function and inet6_option_append() is that
+     the latter copies the contents of a previously built option into the
+     ancillary data object while the current function returns a pointer to the
+     space in the data object where the option's TLV must then be built by the
+     caller.
+
+     cmsg is a pointer to the cmsghdr structure that must have been initial-
+     ized by inet6_option_init().
+
+     datalen is the value of the option data length byte for this option.
+     This value is required as an argument to allow the function to determine
+     if padding must be appended at the end of the option.  (The
+     inet6_option_append() function does not need a data length argument since
+     the option data length must already be stored by the caller.)
+
+     multx is the value x in the alignment term ``xn + y''.  It must have a
+     value of 1, 2, 4, or 8.
+
+     plusy is the value y in the alignment term ``xn + y''.  It must have a
+     value between 0 and 7, inclusive.
+
+   inet6_option_next
+     This function processes the next Hop-by-Hop option or Destination option
+     in an ancillary data object.  If another option remains to be processed,
+     the return value of the function is 0 and *tptrp points to the 8-bit
+     option type field (which is followed by the 8-bit option data length,
+     followed by the option data).  If no more options remain to be processed,
+     the return value is -1 and *tptrp is NULL.  If an error occurs, the
+     return value is -1 and *tptrp is not NULL.
+
+     cmsg is a pointer to cmsghdr structure of which cmsg_level equals
+     IPPROTO_IPV6 and cmsg_type equals either IPV6_HOPOPTS or IPV6_DSTOPTS.
+
+     tptrp is a pointer to a pointer to an 8-bit byte and *tptrp is used by
+     the function to remember its place in the ancillary data object each time
+     the function is called.  The first time this function is called for a
+     given ancillary data object, *tptrp must be set to NULL.
+
+     Each time this function returns success, *tptrp points to the 8-bit
+     option type field for the next option to be processed.
+
+   inet6_option_find
+     This function is similar to the previously described inet6_option_next()
+     function, except this function lets the caller specify the option type to
+     be searched for, instead of always returning the next option in the
+     ancillary data object.  cmsg is a pointer to cmsghdr structure of which
+     cmsg_level equals IPPROTO_IPV6 and cmsg_type equals either IPV6_HOPOPTS
+     or IPV6_DSTOPTS.
+
+     tptrp is a pointer to a pointer to an 8-bit byte and *tptrp is used by
+     the function to remember its place in the ancillary data object each time
+     the function is called.  The first time this function is called for a
+     given ancillary data object, *tptrp must be set to NULL.  ~ This function
+     starts searching for an option of the specified type beginning after the
+     value of *tptrp.  If an option of the specified type is located, this
+     function returns 0 and *tptrp points to the 8- bit option type field for
+     the option of the specified type.  If an option of the specified type is
+     not located, the return value is -1 and *tptrp is NULL.  If an error
+     occurs, the return value is -1 and *tptrp is not NULL.
+
+DIAGNOSTICS
+     inet6_option_init() and inet6_option_append() return 0 on success or -1
+     on an error.
+
+     inet6_option_alloc() returns NULL on an error.
+
+     On errors, inet6_option_next() and inet6_option_find() return -1 setting
+     *tptrp to non NULL value.
+
+EXAMPLES
+     RFC2292 gives comprehensive examples in chapter 6.
+
+SEE ALSO
+     W. Stevens and M. Thomas, Advanced Sockets API for IPv6, RFC2292,
+     February 1998.
+
+     S. Deering and R. Hinden, Internet Protocol, Version 6 (IPv6)
+     Specification, RFC2460, December 1998.
+
+HISTORY
+     The implementation first appeared in KAME advanced networking kit.
+
+STANDARDS
+     The functions are documented in ``Advanced Sockets API for IPv6''
+     (RFC2292).
+
+BUGS
+     The text was shamelessly copied from RFC2292.
+
+BSD                            December 10, 1999                           BSD
+    

PrevHomeNext
inetUpinet6_rthdr_space
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-inet6-rthdr-space.html b/doc/html/ref/net-common-tcpip-manpages-inet6-rthdr-space.html new file mode 100644 index 00000000..9ec0aadf --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-inet6-rthdr-space.html @@ -0,0 +1,346 @@ + + + + + + + + +inet6_rthdr_space +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

inet6_rthdr_space

INET6_RTHDR_SPACE(3)    System Library Functions Manual   INET6_RTHDR_SPACE(3)
+
+NAME
+     inet6_rthdr_space, inet6_rthdr_init, inet6_rthdr_add,
+     inet6_rthdr_lasthop, inet6_rthdr_reverse, inet6_rthdr_segments,
+     inet6_rthdr_getaddr, inet6_rthdr_getflags - IPv6 Routing Header Options
+     manipulation
+
+SYNOPSIS
+     #include <netinet/in.h>
+
+     size_t
+     inet6_rthdr_space(int type, int segments);
+
+     struct cmsghdr *
+     inet6_rthdr_init(void *bp, int type);
+
+     int
+     inet6_rthdr_add(struct cmsghdr *cmsg, const struct in6_addr *addr,
+             unsigned int flags);
+
+     int
+     inet6_rthdr_lasthop(struct cmsghdr *cmsg, unsigned int flags);
+
+     int
+     inet6_rthdr_reverse(const struct cmsghdr *in, struct cmsghdr *out);
+
+     int
+     inet6_rthdr_segments(const struct cmsghdr *cmsg);
+
+     struct in6_addr *
+     inet6_rthdr_getaddr(struct cmsghdr *cmsg, int index);
+
+     int
+     inet6_rthdr_getflags(const struct cmsghdr *cmsg, int index);
+
+DESCRIPTION
+     RFC2292 IPv6 advanced API defines eight functions that the application
+     calls to build and examine a Routing header.  Four functions build a
+     Routing header:
+
+     inet6_rthdr_space() return #bytes required for ancillary data
+
+     inet6_rthdr_init() initialize ancillary data for Routing header
+
+     inet6_rthdr_add() add IPv6 address & flags to Routing header
+
+     inet6_rthdr_lasthop() specify the flags for the final hop
+
+     Four functions deal with a returned Routing header:
+
+     inet6_rthdr_reverse() reverse a Routing header
+
+     inet6_rthdr_segments() return #segments in a Routing header
+
+     inet6_rthdr_getaddr() fetch one address from a Routing header
+
+     inet6_rthdr_getflags() fetch one flag from a Routing header
+
+     The function prototypes for these functions are all in the <netinet/in.h>
+     header.
+
+   inet6_rthdr_space
+     This function returns the number of bytes required to hold a Routing
+     header of the specified type containing the specified number of segments
+     (addresses).  For an IPv6 Type 0 Routing header, the number of segments
+     must be between 1 and 23, inclusive.  The return value includes the size
+     of the cmsghdr structure that precedes the Routing header, and any
+     required padding.
+
+     If the return value is 0, then either the type of the Routing header is
+     not supported by this implementation or the number of segments is invalid
+     for this type of Routing header.
+
+     Note: This function returns the size but does not allocate the space
+     required for the ancillary data.  This allows an application to allocate
+     a larger buffer, if other ancillary data objects are desired, since all
+     the ancillary data objects must be specified to sendmsg(2) as a single
+     msg_control buffer.
+
+   inet6_rthdr_init
+     This function initializes the buffer pointed to by bp to contain a
+     cmsghdr structure followed by a Routing header of the specified type.
+     The cmsg_len member of the cmsghdr structure is initialized to the size
+     of the structure plus the amount of space required by the Routing header.
+     The cmsg_level and cmsg_type members are also initialized as required.
+
+     The caller must allocate the buffer and its size can be determined by
+     calling inet6_rthdr_space().
+
+     Upon success the return value is the pointer to the cmsghdr structure,
+     and this is then used as the first argument to the next two functions.
+     Upon an error the return value is NULL.
+
+   inet6_rthdr_add
+     This function adds the address pointed to by addr to the end of the Rout-
+     ing header being constructed and sets the type of this hop to the value
+     of flags.  For an IPv6 Type 0 Routing header, flags must be either
+     IPV6_RTHDR_LOOSE or IPV6_RTHDR_STRICT.
+
+     If successful, the cmsg_len member of the cmsghdr structure is updated to
+     account for the new address in the Routing header and the return value of
+     the function is 0.  Upon an error the return value of the function is -1.
+
+   inet6_rthdr_lasthop
+     This function specifies the Strict/Loose flag for the final hop of a
+     Routing header.  For an IPv6 Type 0 Routing header, flags must be either
+     IPV6_RTHDR_LOOSE or IPV6_RTHDR_STRICT.
+
+     The return value of the function is 0 upon success, or -1 upon an error.
+
+     Notice that a Routing header specifying N intermediate nodes requires N+1
+     Strict/Loose flags.  This requires N calls to inet6_rthdr_add() followed
+     by one call to inet6_rthdr_lasthop().
+
+   inet6_rthdr_reverse
+     This function takes a Routing header that was received as ancillary data
+     (pointed to by the first argument, in) and writes a new Routing header
+     that sends datagrams along the reverse of that route.  Both arguments are
+     allowed to point to the same buffer (that is, the reversal can occur in
+     place).
+
+     The return value of the function is 0 on success, or -1 upon an error.
+
+   inet6_rthdr_segments
+     This function returns the number of segments (addresses) contained in the
+     Routing header described by cmsg.  On success the return value is between
+     1 and 23, inclusive.  The return value of the function is -1 upon an
+     error.
+
+   inet6_rthdr_getaddr
+     This function returns a pointer to the IPv6 address specified by index
+     (which must have a value between 1 and the value returned by
+     inet6_rthdr_segments()) in the Routing header described by cmsg.  An
+     application should first call inet6_rthdr_segments() to obtain the number
+     of segments in the Routing header.
+
+     Upon an error the return value of the function is NULL.
+
+   inet6_rthdr_getflags
+     This function returns the flags value specified by index (which must have
+     a value between 0 and the value returned by inet6_rthdr_segments()) in
+     the Routing header described by cmsg.  For an IPv6 Type 0 Routing header
+     the return value will be either IPV6_RTHDR_LOOSE or IPV6_RTHDR_STRICT.
+
+     Upon an error the return value of the function is -1.
+
+     Note: Addresses are indexed starting at 1, and flags starting at 0, to
+     maintain consistency with the terminology and figures in RFC2460.
+
+DIAGNOSTICS
+     inet6_rthdr_space() returns 0 on errors.
+
+     inet6_rthdr_add(), inet6_rthdr_lasthop() and inet6_rthdr_reverse() return
+     0 on success, and returns -1 on error.
+
+     inet6_rthdr_init() and inet6_rthdr_getaddr() return NULL on error.
+
+     inet6_rthdr_segments() and inet6_rthdr_getflags() return -1 on error.
+
+EXAMPLES
+     RFC2292 gives comprehensive examples in chapter 8.
+
+SEE ALSO
+     W. Stevens and M. Thomas, Advanced Sockets API for IPv6, RFC2292,
+     February 1998.
+
+     S. Deering and R. Hinden, Internet Protocol, Version 6 (IPv6)
+     Specification, RFC2460, December 1998.
+
+HISTORY
+     The implementation first appeared in KAME advanced networking kit.
+
+STANDARDS
+     The functions are documented in ``Advanced Sockets API for IPv6''
+     (RFC2292).
+
+BUGS
+     The text was shamelessly copied from RFC2292.
+
+     inet6_rthdr_reverse() is not implemented yet.
+
+BSD                            December 10, 1999                           BSD
+    

PrevHomeNext
inet6_option_spaceUpinet_net
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-ioctl.html b/doc/html/ref/net-common-tcpip-manpages-ioctl.html new file mode 100644 index 00000000..bc209f3e --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-ioctl.html @@ -0,0 +1,215 @@ + + + + + + + + +ioctl +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

ioctl

IOCTL(2)                      System Calls Manual                     IOCTL(2)
+
+NAME
+     ioctl - control device
+
+SYNOPSIS
+     #include <sys/ioctl.h>
+
+     int
+     ioctl(int d, unsigned long request, ...);
+
+DESCRIPTION
+     The ioctl() function manipulates the underlying device parameters of spe-
+     cial files.  In particular, many operating characteristics of character
+     special files (e.g., terminals) may be controlled with ioctl() requests.
+
+     The argument d must be an open file descriptor. The third argument is
+     called arg and contains additional information needed by this device to
+     perform the requested function.  arg is either an int or a pointer to a
+     device-specific data structure, depending upon the given request.
+
+     An ioctl request has encoded in it whether the argument is an ``in''
+     parameter or ``out'' parameter, and the size of the third argument (arg)
+     in bytes.  Macros and defines used in specifying an ioctl request are
+     located in the file <sys/ioctl.h>.
+
+RETURN VALUES
+     If an error has occurred, a value of -1 is returned and errno is set to
+     indicate the error.
+
+ERRORS
+     ioctl() will fail if:
+
+     [EBADF]            d is not a valid descriptor.
+
+     [ENOTTY]           d is not associated with a character special device.
+
+     [ENOTTY]           The specified request does not apply to the kind of
+                        object that the descriptor d references.
+
+     [EINVAL]           request or arg is not valid.
+
+     [EFAULT]           arg points outside the process's allocated address
+                        space.
+
+SEE ALSO
+     cdio(1), chio(1), mt(1), execve(2), fcntl(2), intro(4), tty(4)
+
+HISTORY
+     An ioctl() function call appeared in Version 7 AT&T UNIX.
+
+BSD                            December 11, 1993                           BSD
+    

PrevHomeNext
getsockoptUppoll
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-ipx.html b/doc/html/ref/net-common-tcpip-manpages-ipx.html new file mode 100644 index 00000000..d1c46dee --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-ipx.html @@ -0,0 +1,220 @@ + + + + + + + + +ipx +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

ipx

IPX(3)                  System Library Functions Manual                 IPX(3)
+
+NAME
+     ipx_addr, ipx_ntoa - IPX address conversion routines
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <netipx/ipx.h>
+
+     struct ipx_addr
+     ipx_addr(const char *cp);
+
+     char *
+     ipx_ntoa(struct ipx_addr ipx);
+
+DESCRIPTION
+     The routine ipx_addr() interprets character strings representing IPX
+     addresses, returning binary information suitable for use in system calls.
+     The routine ipx_ntoa() takes IPX addresses and returns ASCII strings rep-
+     resenting the address in a notation in common use:
+
+           <network number>.<host number>.<port number>
+
+     Trailing zero fields are suppressed, and each number is printed in hex-
+     adecimal, in a format suitable for input to ipx_addr().  Any fields lack-
+     ing super-decimal digits will have a trailing `H' appended.
+
+     An effort has been made to ensure that ipx_addr() be compatible with most
+     formats in common use.  It will first separate an address into 1 to 3
+     fields using a single delimiter chosen from period (`.'), colon (`:'), or
+     pound-sign (`#').  Each field is then examined for byte separators (colon
+     or period).  If there are byte separators, each subfield separated is
+     taken to be a small hexadecimal number, and the entirety is taken as a
+     network-byte-ordered quantity to be zero extended in the high-network-
+     order bytes.  Next, the field is inspected for hyphens, in which case the
+     field is assumed to be a number in decimal notation with hyphens separat-
+     ing the millenia.  Next, the field is assumed to be a number: It is
+     interpreted as hexadecimal if there is a leading `0x' (as in C), a trail-
+     ing `H' (as in Mesa), or there are any super-decimal digits present.  It
+     is interpreted as octal is there is a leading `0' and there are no super-
+     octal digits.  Otherwise, it is converted as a decimal number.
+
+RETURN VALUES
+     None.  (See BUGS.)
+
+SEE ALSO
+     ns(4), hosts(5), networks(5)
+
+HISTORY
+     The precursor ns_addr() and ns_ntoa() functions appeared in 4.3BSD.
+
+BUGS
+     The string returned by ipx_ntoa() resides in a static memory area.  The
+     function ipx_addr() should diagnose improperly formed input, and there
+     should be an unambiguous way to recognize this.
+
+BSD                              June 4, 1993                              BSD
+    

PrevHomeNext
inet_netUpiso_addr
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-iso-addr.html b/doc/html/ref/net-common-tcpip-manpages-iso-addr.html new file mode 100644 index 00000000..ab1a221b --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-iso-addr.html @@ -0,0 +1,217 @@ + + + + + + + + +iso_addr +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

iso_addr

ISO_ADDR(3)             System Library Functions Manual            ISO_ADDR(3)
+
+NAME
+     iso_addr, iso_ntoa - network address conversion routines for Open System
+     Interconnection
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <netiso/iso.h>
+
+     struct iso_addr *
+     iso_addr(char *cp);
+
+     char *
+     iso_ntoa(struct iso_addr *isoa);
+
+DESCRIPTION
+     The routine iso_addr() interprets character strings representing OSI
+     addresses, returning binary information suitable for use in system calls.
+     The routine iso_ntoa() takes OSI addresses and returns ASCII strings rep-
+     resenting NSAPs (network service access points) in a notation inverse to
+     that accepted by iso_addr().
+
+     Unfortunately, no universal standard exists for representing OSI network
+     addresses.
+
+     The format employed by iso_addr() is a sequence of hexadecimal ``digits''
+     (optionally separated by periods), of the form:
+
+           <hex digits>.<hex digits>.<hex digits>
+
+     Each pair of hexadecimal digits represents a byte with the leading digit
+     indicating the higher-ordered bits.  A period following an even number of
+     bytes has no effect (but may be used to increase legibility).  A period
+     following an odd number of bytes has the effect of causing the byte of
+     address being translated to have its higher order bits filled with zeros.
+
+RETURN VALUES
+     iso_ntoa() always returns a null terminated string.  iso_addr() always
+     returns a pointer to a struct iso_addr.  (See BUGS.)
+
+SEE ALSO
+     iso(4)
+
+HISTORY
+     The iso_addr() and iso_ntoa() functions appeared in 4.3BSD-Reno.
+
+BUGS
+     The returned values reside in a static memory area.
+
+     The function iso_addr() should diagnose improperly formed input, and
+     there should be an unambiguous way to recognize this.
+
+BSD                              June 4, 1993                              BSD
+    

PrevHomeNext
ipxUplink_addr
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-link-addr.html b/doc/html/ref/net-common-tcpip-manpages-link-addr.html new file mode 100644 index 00000000..e3ed73d3 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-link-addr.html @@ -0,0 +1,220 @@ + + + + + + + + +link_addr +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

link_addr

LINK_ADDR(3)            System Library Functions Manual           LINK_ADDR(3)
+
+NAME
+     link_addr, link_ntoa - elementary address specification routines for link
+     level access
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+     #include <net/if_dl.h>
+
+     void
+     link_addr(const char *addr, struct sockaddr_dl *sdl);
+
+     char *
+     link_ntoa(const struct sockaddr_dl *sdl);
+
+DESCRIPTION
+     The link_addr() function interprets character strings representing link-
+     level addresses, returning binary information suitable for use in system
+     calls.  link_ntoa() takes a link-level address and returns an ASCII
+     string representing some of the information present, including the link
+     level address itself, and the interface name or number, if present.  This
+     facility is experimental and is still subject to change.
+
+     For link_addr(), the string addr may contain an optional network inter-
+     face identifier of the form ``name unit-number'', suitable for the first
+     argument to ifconfig(8), followed in all cases by a colon and an inter-
+     face address in the form of groups of hexadecimal digits separated by
+     periods.  Each group represents a byte of address; address bytes are
+     filled left to right from low order bytes through high order bytes.
+
+     Thus le0:8.0.9.13.d.30 represents an Ethernet address to be transmitted
+     on the first Lance Ethernet interface.
+
+RETURN VALUES
+     link_ntoa() always returns a null-terminated string.  link_addr() has no
+     return value.  (See BUGS.)
+
+SEE ALSO
+     iso(4), ifconfig(8)
+
+HISTORY
+     The link_addr() and link_ntoa() functions appeared in 4.3BSD-Reno.
+
+BUGS
+     The returned values for link_ntoa reside in a static memory area.
+
+     The function link_addr() should diagnose improperly formed input, and
+     there should be an unambiguous way to recognize this.
+
+     If the sdl_len field of the link socket address sdl is 0, link_ntoa()
+     will not insert a colon before the interface address bytes.  If this
+     translated address is given to link_addr() without inserting an initial
+     colon, the latter will not interpret it correctly.
+
+BSD                              July 28, 1993                             BSD
+    

PrevHomeNext
iso_addrUpnet_addrcmp
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-net-addrcmp.html b/doc/html/ref/net-common-tcpip-manpages-net-addrcmp.html new file mode 100644 index 00000000..3b66545c --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-net-addrcmp.html @@ -0,0 +1,198 @@ + + + + + + + + +net_addrcmp +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

net_addrcmp

NET_ADDRCMP(3)          System Library Functions Manual         NET_ADDRCMP(3)
+
+NAME
+     net_addrcmp - compare socket address structures
+
+SYNOPSIS
+     #include <netdb.h>
+
+     int
+     net_addrcmp(struct sockaddr *sa1, struct sockaddr *sa2);
+
+DESCRIPTION
+     The net_addrcmp() function compares two socket address structures, sa1
+     and sa2.
+
+RETURN VALUES
+     If sa1 and sa2 are for the same address, net_addrcmp() returns 0.
+
+     The sa_len fields are compared first.  If they do not match,
+     net_addrcmp() returns -1 or 1 if sa1->sa_len is less than or greater than
+     sa2->sa_len, respectively.
+
+     Next, the sa_family members are compared.  If they do not match,
+     net_addrcmp() returns -1 or 1 if sa1->sa_family is less than or greater
+     than sa2->sa_family, respectively.
+
+     Lastly, if each socket address structure's sa_len and sa_family fields
+     match, the protocol-specific data (the sa_data field) is compared.  If
+     there's a match, both sa1 and sa2 must refer to the same address, and 0
+     is returned; otherwise, a value >0 or <0 is returned.
+
+HISTORY
+     A net_addrcmp() function was added in OpenBSD 2.5.
+
+BSD                              July 3, 1999                              BSD
+    

PrevHomeNext
link_addrUpns
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-ns.html b/doc/html/ref/net-common-tcpip-manpages-ns.html new file mode 100644 index 00000000..aae740fa --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-ns.html @@ -0,0 +1,223 @@ + + + + + + + + +ns +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

ns

NS(3)                   System Library Functions Manual                  NS(3)
+
+NAME
+     ns_addr, ns_ntoa - Xerox NS(tm) address conversion routines
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <netns/ns.h>
+
+     struct ns_addr
+     ns_addr(char *cp);
+
+     char *
+     ns_ntoa(struct ns_addr ns);
+
+DESCRIPTION
+     The routine ns_addr() interprets character strings representing XNS
+     addresses, returning binary information suitable for use in system calls.
+     The routine ns_ntoa() takes XNS addresses and returns ASCII strings rep-
+     resenting the address in a notation in common use in the Xerox Develop-
+     ment Environment:
+
+           <network number>.<host number>.<port number>
+
+     Trailing zero fields are suppressed, and each number is printed in hex-
+     adecimal, in a format suitable for input to ns_addr().  Any fields lack-
+     ing super-decimal digits will have a trailing `H' appended.
+
+     Unfortunately, no universal standard exists for representing XNS
+     addresses.  An effort has been made to ensure that ns_addr() be compati-
+     ble with most formats in common use.  It will first separate an address
+     into 1 to 3 fields using a single delimiter chosen from period (`.'),
+     colon (`:'), or pound-sign `#'.  Each field is then examined for byte
+     separators (colon or period).  If there are byte separators, each sub-
+     field separated is taken to be a small hexadecimal number, and the
+     entirety is taken as a network-byte-ordered quantity to be zero extended
+     in the high-network-order bytes.  Next, the field is inspected for
+     hyphens, in which case the field is assumed to be a number in decimal
+     notation with hyphens separating the millenia.  Next, the field is
+     assumed to be a number: It is interpreted as hexadecimal if there is a
+     leading `0x' (as in C), a trailing `H' (as in Mesa), or there are any
+     super-decimal digits present.  It is interpreted as octal is there is a
+     leading `0' and there are no super-octal digits.  Otherwise, it is con-
+     verted as a decimal number.
+
+RETURN VALUES
+     None.  (See BUGS.)
+
+SEE ALSO
+     hosts(5), networks(5)
+
+HISTORY
+     The ns_addr() and ns_toa() functions appeared in 4.3BSD.
+
+BUGS
+     The string returned by ns_ntoa() resides in a static memory area.  The
+     function ns_addr() should diagnose improperly formed input, and there
+     should be an unambiguous way to recognize this.
+
+BSD                              June 4, 1993                              BSD
+    

PrevHomeNext
net_addrcmpUpresolver
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-poll.html b/doc/html/ref/net-common-tcpip-manpages-poll.html new file mode 100644 index 00000000..af46a55e --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-poll.html @@ -0,0 +1,272 @@ + + + + + + + + +poll +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

poll

POLL(2)                       System Calls Manual                      POLL(2)
+
+NAME
+     poll - synchronous I/O multiplexing
+
+SYNOPSIS
+     #include <poll.h>
+
+     int
+     poll(struct pollfd *fds, int nfds, int timeout);
+
+DESCRIPTION
+     poll() provides a mechanism for reporting I/O conditions across a set of
+     file descriptors.
+
+     The arguments are as follows:
+
+     fds      Points to an array of pollfd structures, which are defined as:
+
+                    struct pollfd {
+                            int fd;
+                            short events;
+                            short revents;
+                    };
+
+              The fd member is an open file descriptor.  The events and
+              revents members are bitmasks of conditions to monitor and condi-
+              tions found, respectively.
+
+     nfds     The number of pollfd structures in the array.
+
+     timeout  Maximum interval to wait for the poll to complete, in millisec-
+              onds.  If this value is 0, then poll() will return immediately.
+              If this value is INFTIM (-1), poll() will block indefinitely
+              until a condition is found.
+
+     The calling process sets the events bitmask and poll() sets the revents
+     bitmask.  Each call to poll() resets the revents bitmask for accuracy.
+     The condition flags in the bitmasks are defined as:
+
+     POLLIN      Data is available on the file descriptor for reading.
+
+     POLLNORM    Same as POLLIN.
+
+     POLLPRI     Same as POLLIN.
+
+     POLLOUT     Data can be written to the file descriptor without blocking.
+
+     POLLERR     This flag is not used in this implementation and is provided
+                 only for source code compatibility.
+
+     POLLHUP     The file descriptor was valid before the polling process and
+                 invalid after.  Presumably, this means that the file descrip-
+                 tor was closed sometime during the poll.
+
+     POLLNVAL    The corresponding file descriptor is invalid.
+
+     POLLRDNORM  Same as POLLIN.
+
+     POLLRDBAND  Same as POLLIN.
+
+     POLLWRNORM  Same as POLLOUT.
+
+     POLLWRBAND  Same as POLLOUT.
+
+     POLLMSG     This flag is not used in this implementation and is provided
+                 only for source code compatibility.
+
+     All flags except POLLIN, POLLOUT, and their synonyms are for use only in
+     the revents member of the pollfd structure.  An attempt to set any of
+     these flags in the events member will generate an error condition.
+
+     In addition to I/O multiplexing, poll() can be used to generate simple
+     timeouts.  This functionality may be achieved by passing a null pointer
+     for fds.
+
+WARNINGS
+     The POLLHUP flag is only a close approximation and may not always be
+     accurate.
+
+RETURN VALUES
+     Upon error, poll() returns a -1 and sets the global variable errno to
+     indicate the error.  If the timeout interval was reached before any
+     events occurred, a 0 is returned.  Otherwise, poll() returns the number
+     of file descriptors for which revents is non-zero.
+
+ERRORS
+     poll() will fail if:
+
+     [EINVAL]   nfds was either a negative number or greater than the number
+                of available file descriptors.
+
+     [EINVAL]   An invalid flags was set in the events member of the pollfd
+                structure.
+
+     [EINVAL]   The timeout passed to poll() was too large.
+
+     [EAGAIN]   Resource allocation failed inside of poll().  Subsequent calls
+                to poll() may succeed.
+
+     [EINTR]    poll() caught a signal during the polling process.
+
+SEE ALSO
+     poll(2), select(2), sysconf(3)
+
+HISTORY
+     A poll() system call appeared in AT&T System V UNIX.
+
+BSD                            December 13, 1994                           BSD
+    

PrevHomeNext
ioctlUpselect
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-resolver.html b/doc/html/ref/net-common-tcpip-manpages-resolver.html new file mode 100644 index 00000000..04071914 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-resolver.html @@ -0,0 +1,321 @@ + + + + + + + + +resolver +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

resolver

RESOLVER(3)             System Library Functions Manual            RESOLVER(3)
+
+NAME
+     res_query, res_search, res_mkquery, res_send, res_init, dn_comp,
+     dn_expand - resolver routines
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <netinet/in.h>
+     #include <arpa/nameser.h>
+     #include <resolv.h>
+
+     int
+     res_query(char *dname, int class, int type, u_char *answer, int anslen);
+
+     int
+     res_search(char *dname, int class, int type, u_char *answer, int anslen);
+
+     int
+     res_mkquery(int op, char *dname, int class, int type, char *data,
+             int datalen, struct rrec *newrr, char *buf, int buflen);
+
+     int
+     res_send(char *msg, int msglen, char *answer, int anslen);
+
+     int
+     res_init(void);
+
+     int
+     dn_comp(char *exp_dn, char *comp_dn, int length, char **dnptrs,
+             char **lastdnptr);
+
+     int
+     dn_expand(u_char *msg, u_char *eomorig, u_char *comp_dn, u_char *exp_dn,
+             int length);
+
+DESCRIPTION
+     These routines are used for making, sending, and interpreting query and
+     reply messages with Internet domain name servers.
+
+     Global configuration and state information that is used by the resolver
+     routines is kept in the structure _res.  Most of the values have reason-
+     able defaults and can be ignored.  Options stored in _res.options are
+     defined in <resolv.h> and are as follows.  Options are stored as a simple
+     bit mask containing the bitwise OR of the options enabled.
+
+     RES_INIT       True if the initial name server address and default domain
+                    name are initialized (i.e., res_init() has been called).
+
+     RES_DEBUG      Print debugging messages.
+
+     RES_AAONLY     Accept authoritative answers only.  With this option,
+                    res_send() should continue until it finds an authoritative
+                    answer or finds an error.  Currently this is not imple-
+                    mented.
+
+     RES_USEVC      Use TCP connections for queries instead of UDP datagrams.
+
+     RES_STAYOPEN   Used with RES_USEVC to keep the TCP connection open
+                    between queries.  This is useful only in programs that
+                    regularly do many queries.  UDP should be the normal mode
+                    used.
+
+     RES_IGNTC      Unused currently (ignore truncation errors, i.e., don't
+                    retry with TCP).
+
+     RES_RECURSE    Set the recursion-desired bit in queries.  This is the
+                    default.  (res_send() does not do iterative queries and
+                    expects the name server to handle recursion.)
+
+     RES_DEFNAMES   If set, res_search() will append the default domain name
+                    to single-component names (those that do not contain a
+                    dot).  This option is enabled by default.
+
+     RES_DNSRCH     If this option is set, res_search() will search for host
+                    names in the current domain and in parent domains; see
+                    hostname(7).  This is used by the standard host lookup
+                    routine gethostbyname(3).  This option is enabled by
+                    default.
+
+     RES_USE_INET6  Enables support for IPv6-only applications.  This causes
+                    IPv4 addresses to be returned as an IPv4 mapped address.
+                    For example, 10.1.1.1 will be returned as ::ffff:10.1.1.1.
+                    The option is not meaningful on OpenBSD.
+
+     The res_init() routine reads the configuration file (if any; see
+     resolv.conf(5)) to get the default domain name, search list, and the
+     Internet address of the local name server(s).  If no server is config-
+     ured, the host running the resolver is tried.  The current domain name is
+     defined by the hostname if not specified in the configuration file; it
+     can be overridden by the environment variable LOCALDOMAIN.  This environ-
+     ment variable may contain several blank-separated tokens if you wish to
+     override the search list on a per-process basis.  This is similar to the
+     search command in the configuration file.  Another environment variable
+     RES_OPTIONS can be set to override certain internal resolver options
+     which are otherwise set by changing fields in the _res structure or are
+     inherited from the configuration file's options command.  The syntax of
+     the RES_OPTIONS environment variable is explained in resolv.conf(5).
+     Initialization normally occurs on the first call to one of the following
+     routines.
+
+     The res_query() function provides an interface to the server query mecha-
+     nism.  It constructs a query, sends it to the local server, awaits a
+     response, and makes preliminary checks on the reply.  The query requests
+     information of the specified type and class for the specified fully qual-
+     ified domain name dname.  The reply message is left in the answer buffer
+     with length anslen supplied by the caller.
+
+     The res_search() routine makes a query and awaits a response like
+     res_query(), but in addition, it implements the default and search rules
+     controlled by the RES_DEFNAMES and RES_DNSRCH options.  It returns the
+     first successful reply.
+
+     The remaining routines are lower-level routines used by res_query().  The
+     res_mkquery() function constructs a standard query message and places it
+     in buf.  It returns the size of the query, or -1 if the query is larger
+     than buflen.  The query type op is usually QUERY, but can be any of the
+     query types defined in <arpa/nameser.h>.  The domain name for the query
+     is given by dname.  newrr is currently unused but is intended for making
+     update messages.
+
+     The res_send() routine sends a pre-formatted query and returns an answer.
+     It will call res_init() if RES_INIT is not set, send the query to the
+     local name server, and handle timeouts and retries.  The length of the
+     reply message is returned, or -1 if there were errors.
+
+     The dn_comp() function compresses the domain name exp_dn and stores it in
+     comp_dn.  The size of the compressed name is returned or -1 if there were
+     errors.  The size of the array pointed to by comp_dn is given by length.
+     The compression uses an array of pointers dnptrs to previously compressed
+     names in the current message.  The first pointer points to the beginning
+     of the message and the list ends with NULL.  The limit to the array is
+     specified by lastdnptr.  A side effect of dn_comp() is to update the list
+     of pointers for labels inserted into the message as the name is com-
+     pressed.  If dnptr is NULL, names are not compressed.  If lastdnptr is
+     NULL, the list of labels is not updated.
+
+     The dn_expand() entry expands the compressed domain name comp_dn to a
+     full domain name The compressed name is contained in a query or reply
+     message; msg is a pointer to the beginning of the message.  The uncom-
+     pressed name is placed in the buffer indicated by exp_dn which is of size
+     length.  The size of compressed name is returned or -1 if there was an
+     error.
+
+FILES
+     /etc/resolv.conf configuration file see resolv.conf(5).
+
+SEE ALSO
+     gethostbyname(3), resolv.conf(5), hostname(7), named(8)
+
+     RFC1032, RFC1033, RFC1034, RFC1035, RFC1535, RFC974
+
+     Name Server Operations Guide for BIND.
+
+HISTORY
+     The res_query function appeared in 4.3BSD.
+
+BSD                              June 4, 1993                              BSD
+    
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-select.html b/doc/html/ref/net-common-tcpip-manpages-select.html new file mode 100644 index 00000000..fb1a700c --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-select.html @@ -0,0 +1,299 @@ + + + + + + + + +select +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

select

SELECT(2)                     System Calls Manual                    SELECT(2)
+
+NAME
+     select - synchronous I/O multiplexing
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/time.h>
+     #include <unistd.h>
+
+     int
+     select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+             struct timeval *timeout);
+
+     FD_SET(fd, &fdset);
+
+     FD_CLR(fd, &fdset);
+
+     FD_ISSET(fd, &fdset);
+
+     FD_ZERO(&fdset);
+
+DESCRIPTION
+     select() examines the I/O descriptor sets whose addresses are passed in
+     readfds, writefds, and exceptfds to see if some of their descriptors are
+     ready for reading, are ready for writing, or have an exceptional condi-
+     tion pending, respectively.  The first nfds descriptors are checked in
+     each set; i.e., the descriptors from 0 through nfds-1 in the descriptor
+     sets are examined.  On return, select() replaces the given descriptor
+     sets with subsets consisting of those descriptors that are ready for the
+     requested operation.  select() returns the total number of ready descrip-
+     tors in all the sets.
+
+     The descriptor sets are stored as bit fields in arrays of integers.  The
+     following macros are provided for manipulating such descriptor sets:
+     FD_ZERO(&fdset) initializes a descriptor set fdset to the null set.
+     FD_SET(fd, &fdset) includes a particular descriptor fd in fdset.
+     FD_CLR(fd, &fdset) removes fd from fdset.  FD_ISSET(fd, &fdset) is non-
+     zero if fd is a member of fdset, zero otherwise.  The behavior of these
+     macros is undefined if a descriptor value is less than zero or greater
+     than or equal to FD_SETSIZE, which is normally at least equal to the max-
+     imum number of descriptors supported by the system.
+
+     If timeout is a non-null pointer, it specifies a maximum interval to wait
+     for the selection to complete.  If timeout is a null pointer, the select
+     blocks indefinitely.  To effect a poll, the timeout argument should be
+     non-null, pointing to a zero-valued timeval structure.  timeout is not
+     changed by select(), and may be reused on subsequent calls; however, it
+     is good style to re-initialize it before each invocation of select().
+
+     Any of readfds, writefds, and exceptfds may be given as null pointers if
+     no descriptors are of interest.
+
+RETURN VALUES
+     select() returns the number of ready descriptors that are contained in
+     the descriptor sets, or -1 is an error occurred.  If the time limit
+     expires, select() returns 0.  If select() returns with an error, includ-
+     ing one due to an interrupted call, the descriptor sets will be unmodi-
+     fied.
+
+ERRORS
+     An error return from select() indicates:
+
+     [EFAULT]           One or more of readfds, writefds, or exceptfds points
+                        outside the process's allocated address space.
+
+     [EBADF]            One of the descriptor sets specified an invalid
+                        descriptor.
+
+     [EINTR]            A signal was delivered before the time limit expired
+                        and before any of the selected events occurred.
+
+     [EINVAL]           The specified time limit is invalid.  One of its com-
+                        ponents is negative or too large.
+
+SEE ALSO
+     accept(2), connect(2), gettimeofday(2), poll(2), read(2), recv(2),
+     send(2), write(2), getdtablesize(3)
+
+BUGS
+     Although the provision of getdtablesize(3) was intended to allow user
+     programs to be written independent of the kernel limit on the number of
+     open files, the dimension of a sufficiently large bit field for select
+     remains a problem.  The default bit size of fd_set is based on the symbol
+     FD_SETSIZE (currently 256), but that is somewhat smaller than the current
+     kernel limit to the number of open files.  However, in order to accommo-
+     date programs which might potentially use a larger number of open files
+     with select, it is possible to increase this size within a program by
+     providing a larger definition of FD_SETSIZE before the inclusion of
+     <sys/types.h>.  The kernel will cope, and the userland libraries provided
+     with the system are also ready for large numbers of file descriptors.
+
+     Alternatively, to be really safe, it is possible to allocate fd_set bit-
+     arrays dynamically.  The idea is to permit a program to work properly
+     even if it is execve(2)'d with 4000 file descriptors pre-allocated.  The
+     following illustrates the technique which is used by userland libraries:
+
+                   fd_set *fdsr;
+                   int max = fd;
+
+                   fdsr = (fd_set *)calloc(howmany(max+1, NFDBITS),
+                       sizeof(fd_mask));
+                   if (fdsr == NULL) {
+                           ...
+                           return (-1);
+                   }
+                   FD_SET(fd, fdsr);
+                   n = select(max+1, fdsr, NULL, NULL, &tv);
+                   ...
+                   free(fdsr);
+
+     Alternatively, it is possible to use the poll(2) interface.  poll(2) is
+     more efficient when the size of select()'s fd_set bit-arrays are very
+     large, and for fixed numbers of file descriptors one need not size and
+     dynamically allocate a memory object.
+
+     select() should probably have been designed to return the time remaining
+     from the original timeout, if any, by modifying the time value in place.
+     Even though some systems stupidly act in this different way, it is
+     unlikely this semantic will ever be commonly implemented, as the change
+     causes massive source code compatibility problems.  Furthermore, recent
+     new standards have dictated the current behaviour.  In general, due to
+     the existence of those brain-damaged non-conforming systems, it is unwise
+     to assume that the timeout value will be unmodified by the select() call,
+     and the caller should reinitialize it on each invocation.  Calculating
+     the delta is easily done by calling gettimeofday(2) before and after the
+     call to select(), and using timersub() (as described in getitimer(2)).
+
+     Internally to the kernel, select() works poorly if multiple processes
+     wait on the same file descriptor.  Given that, it is rather surprising to
+     see that many daemons are written that way (i.e., httpd(8)).
+
+HISTORY
+     The select() function call appeared in 4.2BSD.
+
+BSD                             March 25, 1994                             BSD
+    
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-send.html b/doc/html/ref/net-common-tcpip-manpages-send.html new file mode 100644 index 00000000..70a4c72a --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-send.html @@ -0,0 +1,290 @@ + + + + + + + + +send +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

send

SEND(2)                       System Calls Manual                      SEND(2)
+
+NAME
+     send, sendto, sendmsg - send a message from a socket
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     ssize_t
+     send(int s, const void *msg, size_t len, int flags);
+
+     ssize_t
+     sendto(int s, const void *msg, size_t len, int flags,
+             const struct sockaddr *to, socklen_t tolen);
+
+     ssize_t
+     sendmsg(int s, const struct msghdr *msg, int flags);
+
+DESCRIPTION
+     send(), sendto(), and sendmsg() are used to transmit a message to another
+     socket.  send() may be used only when the socket is in a connected state,
+     while sendto() and sendmsg() may be used at any time.
+
+     The address of the target is given by to with tolen specifying its size.
+     The length of the message is given by len.  If the message is too long to
+     pass atomically through the underlying protocol, the error EMSGSIZE is
+     returned, and the message is not transmitted.
+
+     No indication of failure to deliver is implicit in a send().  Locally
+     detected errors are indicated by a return value of -1.
+
+     If no messages space is available at the socket to hold the message to be
+     transmitted, then send() normally blocks, unless the socket has been
+     placed in non-blocking I/O mode.  The select(2) or poll(2) system calls
+     may be used to determine when it is possible to send more data.
+
+     The flags parameter may include one or more of the following:
+
+     #define MSG_OOB        0x1  /* process out-of-band data */
+     #define MSG_DONTROUTE  0x4  /* bypass routing, use direct interface */
+
+     The flag MSG_OOB is used to send ``out-of-band'' data on sockets that
+     support this notion (e.g., SOCK_STREAM); the underlying protocol must
+     also support ``out-of-band'' data.  MSG_DONTROUTE is usually used only by
+     diagnostic or routing programs.
+
+     See recv(2) for a description of the msghdr structure.
+
+RETURN VALUES
+     The call returns the number of characters sent, or -1 if an error
+     occurred.
+
+ERRORS
+     send(), sendto(), and sendmsg() fail if:
+
+     [EBADF]            An invalid descriptor was specified.
+
+     [ENOTSOCK]         The argument s is not a socket.
+
+     [EFAULT]           An invalid user space address was specified for a
+                        parameter.
+
+     [EMSGSIZE]         The socket requires that message be sent atomically,
+                        and the size of the message to be sent made this
+                        impossible.
+
+     [EAGAIN]           The socket is marked non-blocking and the requested
+                        operation would block.
+
+     [ENOBUFS]          The system was unable to allocate an internal buffer.
+                        The operation may succeed when buffers become avail-
+                        able.
+
+     [ENOBUFS]          The output queue for a network interface was full.
+                        This generally indicates that the interface has
+                        stopped sending, but may be caused by transient con-
+                        gestion.
+
+     [EACCES]           The SO_BROADCAST option is not set on the socket, and
+                        a broadcast address was given as the destination.
+
+     [EHOSTUNREACH]     The destination address specified an unreachable host.
+
+     [EINVAL]           The flags parameter is invalid.
+
+     [EHOSTDOWN]        The destination address specified a host that is down.
+
+     [ENETDOWN]         The destination address specified a network that is
+                        down.
+
+     [ECONNREFUSED]     The destination host rejected the message (or a previ-
+                        ous one).  This error can only be returned by con-
+                        nected sockets.
+
+     [ENOPROTOOPT]      There was a problem sending the message.  This error
+                        can only be returned by connected sockets.
+
+     [EDESTADDRREQ]     The socket is not connected, and no destination
+                        address was specified.
+
+     [EISCONN]          The socket is already connected, and a destination
+                        address was specified.
+
+     In addition, send() and sendto() may return the following error:
+
+     [EINVAL]           len was larger than SSIZE_MAX.
+
+     Also, sendmsg() may return the following errors:
+
+     [EINVAL]           The sum of the iov_len values in the msg_iov array
+                        overflowed an ssize_t.
+
+     [EMSGSIZE]         The msg_iovlen member of msg was less than 0 or larger
+                        than IOV_MAX.
+
+     [EAFNOSUPPORT]     Addresses in the specified address family cannot be
+                        used with this socket.
+
+SEE ALSO
+     fcntl(2), getsockopt(2), poll(2), recv(2), select(2), poll(2), socket(2),
+     write(2)
+
+HISTORY
+     The send() function call appeared in 4.2BSD.
+
+BSD                              July 28, 1998                             BSD
+    

PrevHomeNext
selectUpshutdown
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-shutdown.html b/doc/html/ref/net-common-tcpip-manpages-shutdown.html new file mode 100644 index 00000000..636a9d30 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-shutdown.html @@ -0,0 +1,205 @@ + + + + + + + + +shutdown +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

shutdown

SHUTDOWN(2)                   System Calls Manual                  SHUTDOWN(2)
+
+NAME
+     shutdown - shut down part of a full-duplex connection
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     int
+     shutdown(int s, int how);
+
+DESCRIPTION
+     The shutdown() call causes all or part of a full-duplex connection on the
+     socket associated with s to be shut down.  If how is SHUT_RD, further
+     receives will be disallowed.  If how is SHUT_WR, further sends will be
+     disallowed.  If how is SHUT_RDWR, further sends and receives will be dis-
+     allowed.
+
+RETURN VALUES
+     A 0 is returned if the call succeeds, -1 if it fails.
+
+ERRORS
+     The call succeeds unless:
+
+     [EINVAL]           how is not SHUT_RD, SHUT_WR, or SHUT_RDWR.
+
+     [EBADF]            s is not a valid descriptor.
+
+     [ENOTSOCK]         s is a file, not a socket.
+
+     [ENOTCONN]         The specified socket is not connected.
+
+SEE ALSO
+     connect(2), socket(2)
+
+HISTORY
+     The shutdown() function call appeared in 4.2BSD.  The how arguments used
+     to be simply 0, 1, and 2, but now have named values as specified by
+     X/Open Portability Guide Issue 4 (``XPG4'').
+
+BSD                              June 4, 1993                              BSD
+    

PrevHomeNext
sendUpsocket
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-socket.html b/doc/html/ref/net-common-tcpip-manpages-socket.html new file mode 100644 index 00000000..9e986192 --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-socket.html @@ -0,0 +1,297 @@ + + + + + + + + +socket +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

socket

SOCKET(2)                     System Calls Manual                    SOCKET(2)
+
+NAME
+     socket - create an endpoint for communication
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     int
+     socket(int domain, int type, int protocol);
+
+DESCRIPTION
+     socket() creates an endpoint for communication and returns a descriptor.
+
+     The domain parameter specifies a communications domain within which com-
+     munication will take place; this selects the protocol family which should
+     be used.  These families are defined in the include file <sys/socket.h>.
+     The currently understood formats are
+
+           AF_UNIX         (UNIX internal protocols),
+           AF_INET         (ARPA Internet protocols),
+           AF_INET6        (ARPA IPv6 protocols),
+           AF_ISO          (ISO protocols),
+           AF_NS           (Xerox Network Systems protocols),
+           AF_IPX          (Internetwork Packet Exchange), and
+           AF_IMPLINK      (IMP host at IMP link layer).
+
+     The socket has the indicated type, which specifies the semantics of com-
+     munication.  Currently defined types are:
+
+           SOCK_STREAM
+           SOCK_DGRAM
+           SOCK_RAW
+           SOCK_SEQPACKET
+           SOCK_RDM
+
+     A SOCK_STREAM type provides sequenced, reliable, two-way connection based
+     byte streams.  An out-of-band data transmission mechanism may be sup-
+     ported.  A SOCK_DGRAM socket supports datagrams (connectionless, unreli-
+     able messages of a fixed (typically small) maximum length).  A
+     SOCK_SEQPACKET socket may provide a sequenced, reliable, two-way connec-
+     tion-based data transmission path for datagrams of fixed maximum length;
+     a consumer may be required to read an entire packet with each read system
+     call.  This facility is protocol specific, and presently implemented only
+     for PF_NS.  SOCK_RAW sockets provide access to internal network protocols
+     and interfaces.  The types SOCK_RAW, which is available only to the supe-
+     ruser, and SOCK_RDM, which is planned, but not yet implemented, are not
+     described here.
+
+     The protocol specifies a particular protocol to be used with the socket.
+     Normally only a single protocol exists to support a particular socket
+     type within a given protocol family.  However, it is possible that many
+     protocols may exist, in which case a particular protocol must be speci-
+     fied in this manner.  The protocol number to use is particular to the
+     communication domain in which communication is to take place; see
+     protocols(5).  A value of 0 for protocol will let the system select an
+     appropriate protocol for the requested socket type.
+
+     Sockets of type SOCK_STREAM are full-duplex byte streams, similar to
+     pipes.  A stream socket must be in a connected state before any data may
+     be sent or received on it.  A connection to another socket is created
+     with a connect(2) call.  Once connected, data may be transferred using
+     read(2) and write(2) calls or some variant of the send(2) and recv(2)
+     calls.  When a session has been completed a close(2) may be performed.
+     Out-of-band data may also be transmitted as described in send(2) and
+     received as described in recv(2).
+
+     The communications protocols used to implement a SOCK_STREAM ensure that
+     data is not lost or duplicated.  If a piece of data for which the peer
+     protocol has buffer space cannot be successfully transmitted within a
+     reasonable length of time, then the connection is considered broken and
+     calls will indicate an error with -1 returns and with ETIMEDOUT as the
+     specific code in the global variable errno.  The protocols optionally
+     keep sockets ``warm'' by forcing transmissions roughly every minute in
+     the absence of other activity.  An error is then indicated if no response
+     can be elicited on an otherwise idle connection for a extended period
+     (e.g., 5 minutes).  A SIGPIPE signal is raised if a process sends on a
+     broken stream; this causes naive processes, which do not handle the sig-
+     nal, to exit.
+
+     SOCK_SEQPACKET sockets employ the same system calls as SOCK_STREAM sock-
+     ets.  The only difference is that read(2) calls will return only the
+     amount of data requested, and any remaining in the arriving packet will
+     be discarded.
+
+     SOCK_DGRAM and SOCK_RAW sockets allow sending of datagrams to correspon-
+     dents named in send(2) calls.  Datagrams are generally received with
+     recvfrom(2), which returns the next datagram with its return address.
+
+     An fcntl(2) call can be used to specify a process group to receive a
+     SIGURG signal when the out-of-band data arrives.  It may also enable non-
+     blocking I/O and asynchronous notification of I/O events via SIGIO.
+
+     The operation of sockets is controlled by socket level options.  These
+     options are defined in the file <sys/socket.h>.  setsockopt(2) and
+     getsockopt(2) are used to set and get options, respectively.
+
+RETURN VALUES
+     A -1 is returned if an error occurs, otherwise the return value is a
+     descriptor referencing the socket.
+
+ERRORS
+     The socket() call fails if:
+
+     [EPROTONOSUPPORT]  The protocol type or the specified protocol is not
+                        supported within this domain.
+
+     [EMFILE]           The per-process descriptor table is full.
+
+     [ENFILE]           The system file table is full.
+
+     [EACCES]           Permission to create a socket of the specified type
+                        and/or protocol is denied.
+
+     [ENOBUFS]          Insufficient buffer space is available.  The socket
+                        cannot be created until sufficient resources are
+                        freed.
+
+SEE ALSO
+     accept(2), bind(2), connect(2), getsockname(2), getsockopt(2), ioctl(2),
+     listen(2), poll(2), read(2), recv(2), select(2), send(2), setsockopt(2),
+     shutdown(2), socketpair(2), write(2), getprotoent(3), netintro(4)
+
+     An Introductory 4.3 BSD Interprocess Communication Tutorial, reprinted in
+     UNIX Programmer's Supplementary Documents Volume 1.
+
+     BSD Interprocess Communication Tutorial, reprinted in UNIX Programmer's
+     Supplementary Documents Volume 1.
+
+HISTORY
+     The socket() function call appeared in 4.2BSD.
+
+BSD                              June 4, 1993                              BSD
+    

PrevHomeNext
shutdownUpsocketpair
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip-manpages-socketpair.html b/doc/html/ref/net-common-tcpip-manpages-socketpair.html new file mode 100644 index 00000000..db4ec1cc --- /dev/null +++ b/doc/html/ref/net-common-tcpip-manpages-socketpair.html @@ -0,0 +1,219 @@ + + + + + + + + +socketpair +
eCos Reference Manual
PrevChapter 38. TCP/IP Library ReferenceNext

socketpair

SOCKETPAIR(2)                 System Calls Manual                SOCKETPAIR(2)
+
+NAME
+     socketpair - create a pair of connected sockets
+
+SYNOPSIS
+     #include <sys/types.h>
+     #include <sys/socket.h>
+
+     int
+     socketpair(int d, int type, int protocol, int *sv);
+
+DESCRIPTION
+     The socketpair() call creates an unnamed pair of connected sockets in the
+     specified domain d, of the specified type, and using the optionally spec-
+     ified protocol.  The descriptors used in referencing the new sockets are
+     returned in sv[0] and sv[1].  The two sockets are indistinguishable.
+
+RETURN VALUES
+     A 0 is returned if the call succeeds, -1 if it fails.
+
+ERRORS
+     The call succeeds unless:
+
+     [EMFILE]           Too many descriptors are in use by this process.
+
+     [EAFNOSUPPORT]     The specified address family is not supported on this
+                        machine.
+
+     [EPROTONOSUPPORT]  The specified protocol is not supported on this
+                        machine.
+
+     [EOPNOTSUPP]       The specified protocol does not support creation of
+                        socket pairs.
+
+     [EFAULT]           The address sv does not specify a valid part of the
+                        process address space.
+
+     [ENFILE]           The system file table is full.
+
+SEE ALSO
+     pipe(2), read(2), write(2)
+
+BUGS
+     This call is currently implemented only for the LOCAL domain.  Many oper-
+     ating systems only accept a protocol of PF_UNSPEC, so that should be used
+     instead of PF_LOCAL for maximal portability.
+
+STANDARDS
+     The socketpair() function conforms to X/Open Portability Guide Issue 4.2
+     (``XPG4.2'').
+
+HISTORY
+     The socketpair() function call appeared in 4.2BSD.
+
+BSD                              June 4, 1993                              BSD
+    

PrevHomeNext
socketUpFreeBSD TCP/IP Stack port for eCos
\ No newline at end of file diff --git a/doc/html/ref/net-common-tcpip.html b/doc/html/ref/net-common-tcpip.html new file mode 100644 index 00000000..7ff30058 --- /dev/null +++ b/doc/html/ref/net-common-tcpip.html @@ -0,0 +1,201 @@ + + + + + + + + +TCP/IP Stack Support for eCos +
eCos Reference Manual
PrevNext


PrevHomeNext
µITRON Configuration FAQ Ethernet Driver Design
\ No newline at end of file diff --git a/doc/html/ref/net-common-tests-and-demonstrations.html b/doc/html/ref/net-common-tests-and-demonstrations.html new file mode 100644 index 00000000..540b0bb3 --- /dev/null +++ b/doc/html/ref/net-common-tests-and-demonstrations.html @@ -0,0 +1,248 @@ + + + + + + + + +Tests and Demonstrations +
eCos Reference Manual
PrevNext


PrevHomeNext
Configuring IP AddressesUpBuilding the Network Tests
\ No newline at end of file diff --git a/doc/html/ref/net-ftpclient-features.html b/doc/html/ref/net-ftpclient-features.html new file mode 100644 index 00000000..6dd060bf --- /dev/null +++ b/doc/html/ref/net-ftpclient-features.html @@ -0,0 +1,310 @@ + + + + + + + + +FTP Client Features +
eCos Reference Manual
PrevNext

Chapter 49. FTP Client Features

FTP Client API

This package implements an FTP client. The API is in include file +install/include/ftpclient.h and it can be used thus: +
#include <network.h>
+#include <ftpclient.h>
+It looks like this:


PrevHomeNext
FTP Client for eCos TCP/IP StackUpCRC Algorithms
\ No newline at end of file diff --git a/doc/html/ref/net-ftpclient.html b/doc/html/ref/net-ftpclient.html new file mode 100644 index 00000000..3c092995 --- /dev/null +++ b/doc/html/ref/net-ftpclient.html @@ -0,0 +1,168 @@ + + + + + + + + +FTP Client for eCos TCP/IP Stack +
eCos Reference Manual
PrevNext


PrevHomeNext
System Monitor FTP Client Features
\ No newline at end of file diff --git a/doc/html/ref/net-httpd-chapter.html b/doc/html/ref/net-httpd-chapter.html new file mode 100644 index 00000000..e2ebcfe5 --- /dev/null +++ b/doc/html/ref/net-httpd-chapter.html @@ -0,0 +1,216 @@ + + + + + + + + +Embedded HTTP Server +
eCos Reference Manual
PrevNext


PrevHomeNext
Embedded HTTP ServerUpServer Organization
\ No newline at end of file diff --git a/doc/html/ref/net-httpd-configuration.html b/doc/html/ref/net-httpd-configuration.html new file mode 100644 index 00000000..554d3e33 --- /dev/null +++ b/doc/html/ref/net-httpd-configuration.html @@ -0,0 +1,265 @@ + + + + + + + + +Server Configuration +
eCos Reference Manual
PrevChapter 48. Embedded HTTP ServerNext

Server Configuration

The HTTP server has a number of configuration options:


PrevHomeNext
Server OrganizationUpSupport Functions and Macros
\ No newline at end of file diff --git a/doc/html/ref/net-httpd-html.html b/doc/html/ref/net-httpd-html.html new file mode 100644 index 00000000..336a60f4 --- /dev/null +++ b/doc/html/ref/net-httpd-html.html @@ -0,0 +1,716 @@ + + + + + + + + +Support Functions and Macros +
eCos Reference Manual
PrevChapter 48. Embedded HTTP ServerNext

Support Functions and Macros

The emphasis of this server is on dynamically generated content, +rather than fetching it from a filesystem. To do this the handler +functions make calls to fprintf() and +fputs(). Such handler functions would end up a +mass of print calls, with the actual structure of the HTML page hidden +in the format strings and arguments, making maintenance and debugging +very difficult. Such an approach would also result in the definition +of many, often only slightly different, format strings, leading to +unnecessary bloat.

In an effort to expose the structure of the HTML in the structure of +the C code, and to maximize the sharing of string constants, the +cyg/httpd/httpd.h header file defines a set of +helper functions and macros. Most of these are wrappers for predefined +print calls on the client stream passed to the +hander function. For examples of their use, see the System Monitor +example.

General HTML Support

void cyg_html_tag_begin( FILE *client, char *tag, char *attr );
+void cyg_html_tag_end( FILE *client, char *tag );
+#define html_tag_begin( __client, __tag, __attr )
+#define html_tag_end( __client, __tag )
+#define html_head( __client, __title, __meta )
+#define html_body_begin( __client, __attr )
+#define html_body_end( __client )
+#define html_heading( __client, __level, __heading )
+#define html_para_begin( __client, __attr )
+#define html_url( __client, __text, __link )
+#define html_image( __client, __source, __alt, __attr )

The function cyg_html_tag_begin() generates an +opening tag with the given name. The function +cyg_html_tag_end() generates a closing tag with +the given name. The macros html_tag_begin() and +html_tag_end are just wrappers for these functions.

The macro html_head() generates an HTML header +section with __title as the title. The +__meta argument defines any meta tags that will +be inserted into the header. html_body_begin() and +html_body_end generate HTML body begin and end +tags.

html_heading() generates a complete HTML header +where __level is a numerical level, between 1 +and 6, and __heading is the heading +text. html_para_begin() generates a paragraph +break.

html_url() inserts a URL where +__text is the displayed text and +__link is the URL of the linked +page. html_image() inserts an image tag where +__source is the URL of the image to be +included and __alt is the alternative text for +when the image is not displayed.

Table Support

#define html_table_begin( __client, __attr )
+#define html_table_end( __client )
+#define html_table_header( __client, __content, __attr )        
+#define html_table_row_begin( __client, __attr )     
+#define html_table_row_end( __client )               
+#define html_table_data_begin( __client, __attr )     
+#define html_table_data_end( __client )               

html_table_begin() starts a table and +html_table_end() end +it. html_table_header() generates a simple table +column header containg the string __content.

html_table_row_begin() and +html_table_row_end() begin and end a table row, +and similarly html_table_data_begin() and +html_table_data_end() begin and end a table +entry.

Forms Support

#define html_form_begin( __client, __url, __attr )      
+#define html_form_end( __client )               
+#define html_form_input( __client, __type, __name, __value, __attr )            
+#define html_form_input_radio( __client, __name, __value, __checked )
+#define html_form_input_checkbox( __client, __name, __value, __checked )
+#define html_form_input_hidden( __client, __name, __value ) 
+#define html_form_select_begin( __client, __name, __attr )      
+#define html_form_option( __client, __value, __label, __selected )      
+#define html_form_select_end( __client ) 
+void cyg_formdata_parse( char *data, char *list[], int size );
+char *cyg_formlist_find( char *list[], char *name );

html_form_begin() begins a form, the +__url argument is the value for the +action +attribute. html_form_end() ends the form.

html_form_input() defines a general form input +element with the given type, name and +value. html_form_input_radio creates a radio button +with the given name and value; the __checked +argument is a boolean expression that is used to determine whether the +checked attribute is added to the tag. Similarly +html_form_input_checkbox() defines a checkbox +element. html_form_input_hidden() defines a hidden +form element with the given name and value.

html_form_select_begin() begins a multiple choice +menu with the given name. html_form_select_end() +end it. html_form_option() defines a menu entry +with the given value and label; the __selected +argument is a boolean expression controlling whether the +selected attribute is added to the tag.

cyg_formdata_parse() converts a form response +string into an NULL-terminated array of +"name=value" entries. The data +argument is the string as passed to the handler function; note that +this string is not copied and will be updated in place to form the +list entries. list is a pointer to an array of +character pointers, and is size elements long. +cyg_formlist_find() searches a list generated by +cyg_formdata_parse() and returns a pointer to the +value part of the string whose name part matches +name; if there is no match it will return +NULL.

Predefined Handlers


int cyg_httpd_send_html( FILE *client, char *filename, char *request, void *arg );
+
+typedef struct
+{
+    char        *content_type;
+    cyg_uint32  content_length;
+    cyg_uint8   *data;
+} cyg_httpd_data;
+#define CYG_HTTPD_DATA( __name, __type, __length, __data )
+
+int cyg_httpd_send_data( FILE *client, char *filename, char *request, void *arg );

The HTTP server defines a couple of predefined handers to make it +easier to deliver simple, static content.

cyg_httpd_send_html() takes a +NULL-terminated string as the argument and sends it +to the client with an HTTP header indicating that it is HTML. The +following is an example of its use:


char cyg_html_message[] = "<head><title>Welcome</title></head>\n"
+                          "<body><h2>Welcome to my Web Page</h2></body>\n"
+
+CYG_HTTPD_TABLE_ENTRY( cyg_html_message_entry,
+                       "/message.html",
+                       cyg_httpd_send_html,
+                       cyg_html_message );

cyg_httpd_send_data() Sends arbitrary data to the +client. The argument is a pointer to a cyg_httpd_data +structure that defines the content type and length of the data, and a +pointer to the data itself. The CYG_HTTPD_DATA() +macro automates the definition of the structure. Here is a typical +example of its use:


static cyg_uint8 ecos_logo_gif[] = {
+    ...
+};
+
+CYG_HTTPD_DATA( cyg_monitor_ecos_logo_data,
+                "image/gif",
+                sizeof(ecos_logo_gif),
+                ecos_logo_gif );
+
+CYG_HTTPD_TABLE_ENTRY( cyg_monitor_ecos_logo,
+                       "/monitor/ecos.gif",
+                       cyg_httpd_send_data,
+                       &cyg_monitor_ecos_logo_data );

PrevHomeNext
Server ConfigurationUpSystem Monitor
\ No newline at end of file diff --git a/doc/html/ref/net-httpd-monitor.html b/doc/html/ref/net-httpd-monitor.html new file mode 100644 index 00000000..40352763 --- /dev/null +++ b/doc/html/ref/net-httpd-monitor.html @@ -0,0 +1,177 @@ + + + + + + + + +System Monitor +
eCos Reference Manual
PrevChapter 48. Embedded HTTP ServerNext

System Monitor

Included in the HTTPD package is a simple System Monitor that is +intended to act as a test and an example of how to produce servers. +It is also hoped that it might be of some use in and of itself.

The System Monitor is intended to work in the background of any +application. Adding the network stack and the HTTPD package to any +configuration will enable the monitor by default. It may be disabled +by disabling the CYGPKG_HTTPD_MONITOR option.

The monitor is intended to be simple and self-explanatory in use. It +consists of four main pages. The thread monitor page presents a table +of all current threads showing such things as id, state, priority, +name and stack dimensions. Clicking on the thread ID will link to a +thread edit page where the thread's state and priority may be +manipulated. The interrupt monitor just shows a table of the current +interrupts and indicates which are active. The memory monitor shows a +256 byte page of memory, with controls to change the base address and +display element size. The network monitor page shows +information extracted from the active network interfaces and +protocols. Finally, if kernel instrumentation is enabled, the +instrumentation page provides some controls over the instrumentation +mechanism, and displays the instrumentation buffer.


PrevHomeNext
Support Functions and MacrosUpFTP Client for eCos TCP/IP Stack
\ No newline at end of file diff --git a/doc/html/ref/net-httpd-organization.html b/doc/html/ref/net-httpd-organization.html new file mode 100644 index 00000000..b36d2ca1 --- /dev/null +++ b/doc/html/ref/net-httpd-organization.html @@ -0,0 +1,307 @@ + + + + + + + + +Server Organization +
eCos Reference Manual
PrevChapter 48. Embedded HTTP ServerNext

Server Organization

The server consists of one or more threads running in parallel to any +application threads and which serve web pages to clients. Apart from +defining content, the application does not need to do anything to +start the HTTP server.

The HTTP server is started by a static constructor. This simply +creates an initial thread and sets it running. Since this is called +before the scheduler is started, nothing will happen until the +application calls cyg_scheduler_start().

When the thread gets to run it first optionally delays for some period +of time. This is to allow the application to perform any +initialization free of any interference from the HTTP server. When the +thread does finally run it creates a socket, binds it to the HTTP +server port, and puts it into listen mode. It will then create any +additional HTTPD server threads that have been configured before +becoming a server thread itself.

Each HTTPD server thread simply waits for a connection to be made to +the server port. When the connection is made it reads the HTTP request +and extracts the filename being accessed. If the request also contains +form data, this is also preserved. The filename is then looked up in a +table.

Each table entry contains a filename pattern string, a +pointer to a handler function, and a user defined argument for the +function. Table entries are defined using the same link-time table +building mechanism used to generate device tables. This is all handled +by the CYG_HTTPD_TABLE_ENTRY() macro which has the +following format:


#include <cyg/httpd/httpd.h>
+
+CYG_HTTPD_TABLE_ENTRY( __name, __pattern, __handler, __arg )

The __name argument is a variable name for the +table entry since C does not allow us to define anonymous data +structures. This name should be chosen so that it is unique and does +not pollute the name space. The __pattern +argument is the match pattern. The __handler +argument is a pointer to the handler function and +__arg the user defined value.

The link-time table building means that several different pieces of +code can define server table entries, and so long as the patterns do +not clash they can be totally oblivious of each other. However, note +also that this mechanism does not guarantee the order in which entries +appear, this depends on the order of object files in the link, which +could vary from one build to the next. So any tricky pattern matching +that relies on this may not always work.

A request filename matches an entry in the table if either it exactly +matches the pattern string, or if the pattern ends in an asterisk, and +it matches everything up to that point. So for example the pattern +"/monitor/threads.html" will only match that exact filename, +but the pattern "/monitor/thread-*" will match +"/monitor/thread-0040.html", +"/monitor/thread-0100.html" and any other filename starting +with "/monitor/thread-".

When a pattern is matched, the hander function is called. It has the +following prototype:

cyg_bool cyg_httpd_handler(FILE *client,
+                           char *filename,
+                           char *formdata,
+                           void *arg);

The client argument is the TCP connection to +the client: anything output through this stream will be returned to +the browser. The filename argument is the +filename from the HTTP request and the formdata +argument is any form response data, or NULL if none was sent. The +arg argument is the user defined value from the +table entry.

The handler is entirely responsible for generating the response to the +client, both HTTP header and content. If the handler decides that it +does not want to generate a response it can return +false, in which case the table scan is resumed for +another match. If no match is found, or no handler returns true, then +a default response page is generated indicating that the requested +page cannot be found.

Finally, the server thread closes the connection to the client and +loops back to accept a new connection.


PrevHomeNext
Embedded HTTP ServerUpServer Configuration
\ No newline at end of file diff --git a/doc/html/ref/net-httpd.html b/doc/html/ref/net-httpd.html new file mode 100644 index 00000000..68040623 --- /dev/null +++ b/doc/html/ref/net-httpd.html @@ -0,0 +1,161 @@ + + + + + + + + +Embedded HTTP Server +
eCos Reference Manual
PrevNext


PrevHomeNext
snmpd.conf Embedded HTTP Server
\ No newline at end of file diff --git a/doc/html/ref/net-ns-dns-api.html b/doc/html/ref/net-ns-dns-api.html new file mode 100644 index 00000000..b802628c --- /dev/null +++ b/doc/html/ref/net-ns-dns-api.html @@ -0,0 +1,290 @@ + + + + + + + + +DNS +
eCos Reference Manual
PrevNext

Chapter 45. DNS

DNS API

The DNS client uses the normal BSD API for performing lookups: +gethostbyname() and +gethostbyaddr().

There are a few restrictions:

To initialise the DNS client the following function must be +called:

#include <network.h>
+int cyg_dns_res_init(struct in_addr *dns_server)

where dns_server is the address of the DNS server +the client should query. On Error this function returns -1, otherwise +0 for success. If lookups are attemped before this function has +been called, they will fail and return NULL.

A default, hard coded, server may be specified in the CDL option +CYGDAT_NS_DNS_DEFAULT_SERVER. The use of this is +controlled by CYGPKG_NS_DNS_DEFAULT. If this is +enabled, init_all_network_interfaces will +initialize the resolver with the hard coded address. The DHCP client +or user code my override this address by calling +cyg_dns_res_init again.

The DNS client understands the concepts of the target being +in a domain. By default no domain will be used. Host name lookups +should be for fully qualified names. The domain name can be set +and retrieved using the functions: +

Alternatively, a hard coded domain name can be set using CDL. +The boolean CYGPKG_NS_DNS_DOMAINNAME enables this +and the domain name is taken from +CYGPKG_NS_DNS_DOMAINNAME_NAME.

Once set, the DNS client will first perform a lookup with the domain +name appended. If this fails it will then perform a second lookup +without the appended domain name.


PrevHomeNext
DNS for eCos and RedBootUpEthernet Device Drivers
\ No newline at end of file diff --git a/doc/html/ref/net-ns-dns.html b/doc/html/ref/net-ns-dns.html new file mode 100644 index 00000000..797e36d8 --- /dev/null +++ b/doc/html/ref/net-ns-dns.html @@ -0,0 +1,175 @@ + + + + + + + + +DNS for eCos and RedBoot +
eCos Reference Manual
PrevNext


PrevHomeNext
Enhanced Select() DNS
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-agent-manpages-snmpd.conf.html b/doc/html/ref/net-snmp-agent-manpages-snmpd.conf.html new file mode 100644 index 00000000..63dfff50 --- /dev/null +++ b/doc/html/ref/net-snmp-agent-manpages-snmpd.conf.html @@ -0,0 +1,625 @@ + + + + + + + + +snmpd.conf +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext

snmpd.conf

SNMPD.CONF(5)                                       SNMPD.CONF(5)
+
+
+
+NAME
+       share/snmp/snmpd.conf  -  configuration  file for the ucd-
+       snmp SNMP agent.
+
+DESCRIPTION
+       snmpd.conf is the configuration file which defines how the
+       ucd-smnp SNMP agent operates.  These files may contain any
+       of the directives found in the DIRECTIVES  section  below.
+       This  file  is  not  required for the agent to operate and
+       report mib entries.
+
+PLEASE READ FIRST
+       First, make sure you have read the  snmp_config(5)  manual
+       page  that  describes how the ucd-snmp configuration files
+       operate, where they are located  and  how  they  all  work
+       together.
+
+EXTENSIBLE-MIB
+       The  ucd-snmp  SNMP  agent reports much of its information
+       through queries to the 1.3.6.1.4.1.2021 section of the mib
+       tree.   Every  mib in this section has the following table
+       entries in it.
+
+       .1 -- index
+              This is the table's index numbers for each  of  the
+              DIRECTIVES listed below.
+
+       .2 -- name
+              The  name of the given table entry.  This should be
+              unique, but is not required to be.
+
+       .100 -- errorFlag
+              This is a flag returning either the integer value 1
+              or  0 if an error is detected for this table entry.
+
+       .101 -- errorMsg
+              This is a DISPLAY-STRING describing any error trig-
+              gering the errorFlag above.
+
+       .102 -- errorFix
+              If  this entry is SNMPset to the integer value of 1
+              AND the errorFlag defined above is indeed  a  1,  a
+              program  or script will get executed with the table
+              entry name from above as the argument.  The program
+              to  be  executed is configured in the config.h file
+              at compile time.
+
+   Directives
+       proc NAME
+
+       proc NAME MAX
+
+       proc NAME MAX MIN
+
+              Checks to see if the NAME'd processes  are  running
+              on  the  agent's  machine.  An error flag (1) and a
+              description  message  are  then   passed   to   the
+              1.3.6.1.4.1.2021.2.100  and  1.3.6.1.4.1.2021.2.101
+              mib tables (respectively) if the NAME'd program  is
+              not  found  in  the  process  table  as reported by
+              "/bin/ps -e".
+
+              If MAX and MIN are not specified, MAX is assumed to
+              be infinity and MIN is assumed to be 1.
+
+              If  MAX  is specified but MIN is not specified, MIN
+              is assumed to be 0.
+
+       procfix NAME PROG ARGS
+              This registers a command  that  knows  how  to  fix
+              errors   with   the   given   process  NAME.   When
+              1.3.6.1.4.1.2021.2.102 for a given NAMEd program is
+              set to the integer value of 1, this command will be
+              called.  It defaults to a compiled value set  using
+              the PROCFIXCMD definition in the config.h file.
+
+       exec NAME PROG ARGS
+
+       exec MIBNUM NAME PROG ARGS
+
+              If  MIBNUM is not specified, the agent executes the
+              named PROG with arguments of ARGS and  returns  the
+              exit status and the first line of the STDOUT output
+              of   the   PROG   program   to   queries   of   the
+              1.3.6.1.4.1.2021.8.100  and  1.3.6.1.4.1.2021.8.101
+              mib  tables  (respectively).   All  STDOUT   output
+              beyond the first line is silently truncated.
+
+              If  MIBNUM  is  specified,  it  acts  as  above but
+              returns the exit status  to  MIBNUM.100.0  and  the
+              entire  STDOUT  output to the table MIBNUM.101 in a
+              mib table.  In this case, the MIBNUM.101  mib  con-
+              tains the entire STDOUT output, one mib table entry
+              per line of output (ie, the first line is output as
+              MIBNUM.101.1,  the second at MIBNUM.101.2, etc...).
+
+              Note:  The MIBNUM must be specified in dotted-inte-
+                     ger  notation  and  can  not be specified as
+                     ".iso.org.dod.internet..."  (should  instead
+                     be
+
+              Note:  The  agent caches the exit status and STDOUT
+                     of the executed program for 30 seconds after
+                     the  initial  query.   This  is  to increase
+                     speed and maintain consistency  of  informa-
+                     tion  for  consecutive  table  queries.  The
+                     cache can be flushed by a  snmp-set  request
+                     of  integer(1)  to 1.3.6.1.4.1.2021.100.VER-
+                     CLEARCACHE.
+
+       execfix NAME PROG ARGS
+              This registers a command  that  knows  how  to  fix
+              errors  with  the  given  exec  or  sh  NAME.  When
+              1.3.6.1.4.1.2021.8.102 for a given NAMEd  entry  is
+              set to the integer value of 1, this command will be
+              called.  It defaults to a compiled value set  using
+              the EXECFIXCMD definition in the config.h file.
+
+       disk PATH
+
+       disk PATH [ MINSPACE | MINPERCENT% ]
+
+              Checks  the  named disks mounted at PATH for avail-
+              able disk space.  If the disk space  is  less  than
+              MINSPACE  (kB) if specified or less than MINPERCENT
+              (%) if a  %  sign  is  specified,  or  DEFDISKMINI-
+              MUMSPACE  (kB)  if  not  specified,  the associated
+              entry in the 1.3.6.1.4.1.2021.9.100 mib table  will
+              be  set to (1) and a descriptive error message will
+              be returned to queries of 1.3.6.1.4.1.2021.9.101.
+
+       load MAX1
+
+       load MAX1 MAX5
+
+       load MAX1 MAX5 MAX15
+
+              Checks the load average of the machine and  returns
+              an error flag (1), and an text-string error message
+              to   queries   of    1.3.6.1.4.1.2021.10.100    and
+              1.3.6.1.4.1.2021.10.101   (respectively)  when  the
+              1-minute, 5-minute, or  15-minute  averages  exceed
+              the associated maximum values.  If any of the MAX1,
+              MAX5, or MAX15 values are unspecified, they default
+              to a value of DEFMAXLOADAVE.
+
+       file FILE [MAXSIZE]
+              Monitors  file sizes and makes sure they don't grow
+              beyond a certain size.  MAXSIZE defaults  to  infi-
+              nite  if  not specified, and only monitors the size
+              without reporting errors about it.
+
+   Errors
+       Any errors in obtaining the above information are reported
+       via    the    1.3.6.1.4.1.2021.101.100    flag   and   the
+       1.3.6.1.4.1.2021.101.101 text-string description.
+
+SMUX SUB-AGENTS
+       To enable and SMUX based sub-agent, such as gated, use the
+       smuxpeer configuration entry
+
+       smuxpeer OID PASS
+              For gated a sensible entry might be
+
+       .1.3.6.1.4.1.4.1.3 secret
+
+ACCESS CONTROL
+       snmpd  supports the View-Based Access Control Model (vacm)
+       as defined in RFC 2275.  To this end,  it  recognizes  the
+       following  keywords  in  the  configuration file: com2sec,
+       group, access, and view  as  well  as  some  easier-to-use
+       wrapper   directives:  rocommunity,  rwcommunity,  rouser,
+       rwuser.
+
+       rocommunity COMMUNITY [SOURCE] [OID]
+
+       rwcommunity COMMUNITY [SOURCE] [OID]
+              These create read-only and  read-write  communities
+              that  can  be used to access the agent.  They are a
+              quick method of using the following com2sec, group,
+              access,  and view directive lines.  They are not as
+              efficient either, as groups aren't created  so  the
+              tables  are possibly larger.  In other words: don't
+              use these if you have complex situations to set up.
+
+              The  format  of the SOURCE is token is described in
+              the com2sec directive section below.  The OID token
+              restricts  access  for that community to everything
+              below that given OID.
+
+       rouser USER [noauth|auth|priv] [OID]
+
+       rwuser USER [noauth|auth|priv] [OID]
+              Creates a  SNMPv3  USM  user  in  the  VACM  access
+              configuration  tables.   Again,  its more efficient
+              (and powerful) to use the combined com2sec,  group,
+              access, and view directives instead.
+
+              The minimum level of authentication and privacy the
+              user must use  is  specified  by  the  first  token
+              (which  defaults  to  "auth").   The  OID parameter
+              restricts access for that user to everything  below
+              the given OID.
+
+       com2sec NAME SOURCE COMMUNITY
+              This   directive   specifies  the  mapping  from  a
+              source/community pair to a  security  name.  SOURCE
+              can be a hostname, a subnet, or the word "default".
+              A subnet can be specified as  IP/MASK  or  IP/BITS.
+              The first source/community combination that matches
+              the incoming packet is selected.
+
+       group NAME MODEL SECURITY
+              This directive defines the mapping  from  security-
+              model/securityname  to  group.  MODEL is one of v1,
+              v2c, or usm.
+
+       access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY
+              The  access  directive  maps  from   group/security
+              model/security  level  to  a view.  MODEL is one of
+              any, v1, v2c, or usm.   LEVEL  is  one  of  noauth,
+              auth,  or priv.  PREFX specifies how CONTEXT should
+              be matched against the context of the incoming pdu,
+              either  exact  or  prefix.   READ, WRITE and NOTIFY
+              specifies the view to be used for the corresponding
+              access.   For  v1  or  v2c  access,  LEVEL  will be
+              noauth, and CONTEXT will be empty.
+
+       view NAME TYPE SUBTREE [MASK]
+              The defines the named view. TYPE is either included
+              or  excluded.   MASK is a list of hex octets, sepa-
+              rated by '.' or ':'.  The MASK defaults to "ff"  if
+              not specified.
+
+              The  reason  for the mask is, that it allows you to
+              control access to one row in a table,  in  a  rela-
+              tively  simple  way.  As  an example, as an ISP you
+              might consider giving each customer access  to  his
+              or her own interface:
+
+              view cust1 included interfaces.ifTable.ifEntry.ifIndex.1 ff.a0
+              view cust2 included interfaces.ifTable.ifEntry.ifIndex.2 ff.a0
+
+              (interfaces.ifTable.ifEntry.ifIndex.1 == .1.3.6.1.2.1.2.2.1.1.1,
+              ff.a0 == 11111111.10100000. which nicely covers up and including
+              the row index, but lets the user vary the field of the row)
+
+       VACM Examples:
+              #       sec.name  source          community
+              com2sec local     localhost       private
+              com2sec mynet     10.10.10.0/24   public
+              com2sec public    default         public
+
+              #             sec.model  sec.name
+              group mygroup v1         mynet
+              group mygroup v2c        mynet
+              group mygroup usm        mynet
+              group local   v1         local
+              group local   v2c        local
+              group local   usm        local
+              group public  v1         public
+              group public  v2c        public
+              group public  usm        public
+
+              #           incl/excl subtree                          mask
+              view all    included  .1                               80
+              view system included  system                           fe
+              view mib2   included  .iso.org.dod.internet.mgmt.mib-2 fc
+
+              #              context sec.model sec.level prefix read   write notify
+              access mygroup ""      any       noauth    exact  mib2   none  none
+              access public  ""      any       noauth    exact  system none  none
+              access local   ""      any       noauth    exact  all    all   all
+
+       Default VACM model
+              The default configuration of the agent, as shipped, is functionally
+              equivalent to the following entries:
+              com2sec   public    default   public
+              group     public    v1   public
+              group     public    v2c  public
+              group     public    usm  public
+              view      all  included  .1
+              access    public    ""   any  noauth    exact     all  none none
+
+SNMPv3 CONFIGURATION
+       engineID STRING
+              The  snmpd  agent  needs  to  be configured with an
+              engineID to be able to respond to SNMPv3  messages.
+              With  this  configuration  file  line, the engineID
+              will be configured from STRING.  The default  value
+              of  the  engineID  is  configured with the first IP
+              address found for the hostname of the machine.
+
+       createUser username (MD5|SHA) authpassphrase [DES]  [priv-
+       passphrase]
+              This directive should be placed into the "/var/ucd-
+              snmp"/snmpd.conf  file  instead of the other normal
+              locations.  The reason is that the  information  is
+              read  from  the  file  and then the line is removed
+              (eliminating the storage of the master password for
+              that  user)  and  replaced  with  the  key  that is
+              derived from it.  This key is a localized  key,  so
+              that  if  it is stolen it can not be used to access
+              other agents.  If the password is stolen,  however,
+              it can be.
+
+              MD5  and  SHA  are the authentication types to use,
+              but you must have built the  package  with  openssl
+              installed  in  order  to use SHA.  The only privacy
+              protocol currently supported is DES.  If  the  pri-
+              vacy  passphrase is not specified, it is assumed to
+              be the same as the authentication passphrase.  Note
+              that  the users created will be useless unless they
+              are also added to the VACM  access  control  tables
+              described above.
+
+              Warning:  the minimum pass phrase length is 8 char-
+              acters.
+
+              SNMPv3 users can be created at  runtime  using  the
+              snmpusm command.
+
+
+SETTING SYSTEM INFORMATION
+       syslocation STRING
+
+       syscontact STRING
+
+              Sets the system location and the system contact for
+              the agent.  This information  is  reported  by  the
+              'system' table in the mibII tree.
+
+       authtrapenable NUMBER
+              Setting  authtrapenable  to 1 enables generation of
+              authentication failure traps. The default value  is
+              2 (disable).
+
+       trapcommunity STRING
+              This  defines  the  default  community string to be
+              used when sending traps.  Note  that  this  command
+              must  be  used  prior to any of the following three
+              commands  that  are  intended  use  this  community
+              string.
+
+       trapsink HOST [COMMUNITY [PORT]]
+
+       trap2sink HOST [COMMUNITY [PORT]]
+
+       informsink HOST [COMMUNITY [PORT]]
+              These  commands  define  the hosts to receive traps
+              (and/or inform notifications). The daemon  sends  a
+              Cold  Start  trap when it starts up. If enabled, it
+              also sends traps on authentication failures.   Mul-
+              tiple  trapsink, trap2sink and informsink lines may
+              be specified to specify multiple destinations.  Use
+              trap2sink  to  send  SNMPv2 traps and informsink to
+              send inform notifications.   If  COMMUNITY  is  not
+              specified,  the  string from a preceding trapcommu-
+              nity directive will be used. If PORT is not  speci-
+              fied,  the  well known SNMP trap port (162) will be
+              used.
+
+PASS-THROUGH CONTROL
+       pass MIBOID EXEC
+              Passes entire control of MIBOID to  the  EXEC  pro-
+              gram.   The  EXEC  program  is called in one of the
+              following three ways:
+
+              EXEC -g MIBOID
+
+              EXEC -n MIBOID
+
+                     These call lines match to SNMP get and  get-
+                     next requests.  It is expected that the EXEC
+                     program will take the arguments passed to it
+                     and  return the appropriate response through
+                     it's stdout.
+
+                     The first line of stdout should be  the  mib
+                     OID of the returning value.  The second line
+                     should be the TYPE of value returned,  where
+                     TYPE  is  one  of  the text strings: string,
+                     integer,  unsigned,   objectid,   timeticks,
+                     ipaddress,  counter,  or  gauge.   The third
+                     line of stdout should be  the  VALUE  corre-
+                     sponding with the returned TYPE.
+
+                     For  instance, if a script was to return the
+                     value integer value "42" when a request  for
+                     .1.3.6.1.4.100  was  requested,  the  script
+                     should return the following 3 lines:
+                       .1.3.6.1.4.100
+                       integer
+                       42
+
+                     To indicate that the  script  is  unable  to
+                     comply with the request due to an end-of-mib
+                     condition or an invalid request, simple exit
+                     and  return  no  output to stdout at all.  A
+                     snmp error will be  generated  corresponding
+                     to the SNMP NO-SUCH-NAME response.
+
+              EXEC -s MIBOID TYPE VALUE
+
+                     For SNMP set requests, the above call method
+                     is used.  The TYPE passed to the  EXEC  pro-
+                     gram  is  one  of the text strings: integer,
+                     counter, gauge, timeticks, ipaddress, objid,
+                     or  string,  indicating  the  type  of value
+                     passed in the next argument.
+
+                     Return nothing to stdout, and the  set  will
+                     assumed to have been successful.  Otherwise,
+                     return one of the following error strings to
+                     signal an error: not-writable, or wrong-type
+                     and the appropriate error response  will  be
+                     generated instead.
+
+                      Note:  By   default,   the  only  community
+                             allowed to  write  (ie  snmpset)  to
+                             your  script  will  be the "private"
+                             community,or community #2 if defined
+                             differently by the "community" token
+                             discussed above.  Which  communities
+                             are  allowed  write  access are con-
+                             trolled by the RWRITE definition  in
+                             the snmplib/snmp_impl.h source file.
+
+EXAMPLE
+       See the EXAMPLE.CONF file in the top level  source  direc-
+       tory for a more detailed example of how the above informa-
+       tion is used in real examples.
+
+RE-READING snmpd.conf and snmpd.local.conf
+       The ucd-snmp agent can be forced to re-read its configura-
+       tion files.  It can be told to do so by one of two ways:
+
+       1.     An       snmpset       of       integer(1)       to
+              1.3.6.1.4.1.2021.100.VERUPDATECONFIG.
+
+       2.     A "kill -HUP" signal sent to the snmpd  agent  pro-
+              cess.
+
+FILES
+       share/snmp/snmpd.conf
+
+SEE ALSO
+       snmp_config(5), snmpd(1), EXAMPLE.conf, read_config(3).
+
+
+
+                           27 Jan 2000              SNMPD.CONF(5)
+    

PrevHomeNext
MIB CompilerUpEmbedded HTTP Server
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-clients-and-package-use.html b/doc/html/ref/net-snmp-clients-and-package-use.html new file mode 100644 index 00000000..f7e8c8d2 --- /dev/null +++ b/doc/html/ref/net-snmp-clients-and-package-use.html @@ -0,0 +1,189 @@ + + + + + + + + +SNMP clients and package use +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext

SNMP clients and package use

SNMP clients may use these packages, but this usage is currently +untested: the reason why this port to eCos exists is to acquire +the SNMP agent. The fact that that the SNMP API (for clients) exists +is a side-effect. See the standard man page SNMP_API(3) +for details. There are further caveats below about client-side +use of the SNMP library.

All of the SNMP header files are installed beneath .../include/ucd-snmp +in the install tree. The SNMP code itself assumes that directory +is on its include path, so we recommend that client code does the +same. Further, like the TCP/IP stack, compiling SNMP code +requires definition of _KERNEL and __ECOS, +and additionally IN_UCD_SNMP_SOURCE.

Therefore, add all of these to your compile lines if you wish +to include SNMP header files:

-D_KERNEL 
+-D__ECOS 	
+-DIN_UCD_SNMP_SOURCE=1	 	
+-I$(PREFIX)/include/ucd-snmp

PrevHomeNext
Test casesUpUnimplemented features
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-configuring-ecos.html b/doc/html/ref/net-snmp-configuring-ecos.html new file mode 100644 index 00000000..bc7f8e83 --- /dev/null +++ b/doc/html/ref/net-snmp-configuring-ecos.html @@ -0,0 +1,361 @@ + + + + + + + + +Configuring eCos +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext

Configuring eCos

To use the SNMP agent, the SNMP library and agent packages must be +included in your configuration. To incorporate the stack into your +configuration select the SNMP library and SNMP agent packages in the +eCos Configuration Tool, or at the command line type: +
$ ecosconfig add snmplib snmpagent

After adding the networking, common ethernet device drivers, +snmp library and snmp agent packages, there is no configuration +required. However there are a number of configuration options +that can be set such as some details for the System MIB, and +disabling SNMPv3 support (see below).

Starting the SNMP agent is not integrated into network +tests other than snmpping below, nor is it +started automatically in normal eCos startup - +it is up to the application to start the agent when it is ready, +at least after the network interfaces are both ‘up’.

Version usage (v1, v2 or v3)

The default build supports all three versions of the SNMP protocol, but without +any dispatcher functionality (rfc 2571, section 3.1.1.2). This has the +following implications :

1. There is no community authentication for v1 and v2c.

2. Security provided by v3 can be bypassed by using v1/v2c protocol.

To provide the dispatcher with rfc 2571 type functionality, it is required to +set up security models and access profiles. This can be provided in the normal +Unix style by writing the required configurations in snmpd.conf +file. Application code may setup profiles in snmpd.conf and +optionally set the environment variable SNMPCONFPATH to +point to the file if it is not in the usual location. The whole concept works +in the usual way as with the standard UCD-SNMP distribution.

Traps

The support of the trapsink command in the +snmpd.conf file is not tested +and there may be problems for it working as expected. Moreover, in systems that do not +have filesystem support, there is no way to configure a trap-session in the +conventional way.

For reasons mentioned above, applications need to initialize their own trap +sessions and pass it the details of trap-sink. The following is a small sample +for initializing a v1 trap session :

typedef struct trap {
+        unsigned char ip [4];
+        unsigned int  port;
+        unsigned char community [256];
+}
+
+trap            trapsink;
+unsinged char   sink [16]; 
+
+...
+...
+
+if (trapsink.ip != 0) {
+        sprintf (sink, "%d.%d.%d.%d",
+                 trapsink[0], trapsink[1], trapsink[2], trapsink[3]);
+        if (create_trap_session (sink,
+                trapsink.port,
+                (char *)trapsink.community,
+                SNMP_VERSION_1,
+                SNMP_MSG_TRAP) == 0) {
+                log_error ("Creation of trap session failed \n");
+        }
+}

snmpd.conf file

Using snmpd.conf requires the inclusion of one of the file-system packages +(eg. CYGPKG_RAMFS) and CYGPKG_FILEIO. With these two packages included, the +SNMP sub-system will read the snmpd.conf file from the location specified in +SNMPCONFPATH, or the standard builtin locations, and use +these profiles. Only the profiles specified in the ACCESS-CONTROL +section of snmpd.conf file have +been tested and shown to work. Other profiles which have been implemented in +UCD-SNMP-4.1.2's snmpd.conf may not work +because the sole purpose of adding support for the snmpd.conf file has been to +set up ACCESS-CONTROL models.

At startup, the SNMP module tries to look for file snmp.conf. +If this file is not available, the module successively looks for files +snmpd.conf, snmp.local.conf and +snmpd.local.conf at the locations pointed to by SNMPCONFPATH environment variable. In case SNMPCONFPATH is not defined, the search sequence is carried out in default directories. +The default directories are :/usr/share/snmp, /usr/local/share/snmp and $(HOME)/.snmp. +The configurations read from these files are used to control both, SNMP +applications and the SNMP agent; in the usual UNIX fashion.

The inclusion of snmpd.conf support is enabled by default when suitable +filesystems and FILEIO packages are active.


PrevHomeNext
Starting the SNMP AgentUpTest cases
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-ecos-changes.html b/doc/html/ref/net-snmp-ecos-changes.html new file mode 100644 index 00000000..827cf796 --- /dev/null +++ b/doc/html/ref/net-snmp-ecos-changes.html @@ -0,0 +1,199 @@ + + + + + + + + +Changes to eCos sources +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext

Changes to eCos sources

Small changes have been made in three areas:

  1. Various hardware-specific ethernet drivers.

  2. The generic ethernet device driver.

  3. The OpenBSD TCP/IP networking package.

These changes were made in order to export information about the driver and +the network that the SNMP agent must report. The changes were trivial in +the case of the network stack, since it was already SNMP-friendly. The +generic ethernet device driver was re-organized to have an extensive header +file and to add a couple of APIs to extract statistics that the +hardware-specific device drivers keep within themselves.

There may be a performance hit for recording that data; disabling +a config option named something like +CYGDBG_DEVS_ETH_xxxx_xxxx_KEEP_STATISTICS +depending on the specific device driver will prevent that.

Not all platform ethernet device drivers export complete SNMP statistical +information; if the exported information is missing, SNMP will report zero +values for such data (in the dot3 MIB).

The interface chipset has an ID which is an OID; not all the latest greatest +devices are listed in the abailable database, so new chipsets may need to +be added to the client MIB, if not defined in those from UCD.


PrevHomeNext
MIBs supportedUpStarting the SNMP Agent
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-ecos-port.html b/doc/html/ref/net-snmp-ecos-port.html new file mode 100644 index 00000000..bb2ba098 --- /dev/null +++ b/doc/html/ref/net-snmp-ecos-port.html @@ -0,0 +1,303 @@ + + + + + + + + +SNMP for eCos +
eCos Reference Manual
PrevNext

Chapter 47. SNMP for eCos

Version

This is a port of UCD-SNMP-4.1.2

Originally this document said: See +http://ucd-snmp.ucdavis.edu/ +for details. And send them a postcard.

The project has since been renamed “net-snmp” and re-homed at + http://net-snmp.sourceforge.net/ +where various new releases (of the original, not eCos +ports) are available.

The original source base from which we worked to create the +eCos port is available from various archive sites such +as + ftp://ftp.freesnmp.com/mirrors/net-snmp/ +or + ftp://sunsite.cnlab-switch.ch/mirror/ucd-snmp/ +generally with this filename and details: +
ucd-snmp-4.1.2.tar.gz. . . . . . Nov  2  2000   1164k


PrevHomeNext
SNMPUpSNMP packages in the eCos source repository
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-mib-compiler.html b/doc/html/ref/net-snmp-mib-compiler.html new file mode 100644 index 00000000..95894b32 --- /dev/null +++ b/doc/html/ref/net-snmp-mib-compiler.html @@ -0,0 +1,355 @@ + + + + + + + + +MIB Compiler +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext

MIB Compiler

In the directory + /snmp/agent/VERSION/utils/mib2c, +there are the following files:

README-eCos             notes about running with a nonstandard 
+                        perl path.
+README.mib2c            the README from UCD; full instructions on
+                        using mib2c   
+mib2c                   the perl program
+mib2c.conf              a configuration file altered to include the
+                        eCos/UCD   
+mib2c.conf-ORIG         copyright and better #include paths; and
+                        the ORIGinal.   
+mib2c.storage.conf      other config files, not modified.   
+mib2c.vartypes.conf

mib2c is provided BUT it requires the SNMP perl package SNMP-3.1.0, +and that in turn requires perl nsPerl5.005_03 (part of +Red Hat Linux from 6.0, April 1999).

These are available from the CPAN (“the Comprehensive +Perl Archive Network”) as usual; +http://www.cpan.org/ +and links from there. Specifically:

(note that the .tar.gz files are not browsable)

For documentation on the files produced, see the documentation +available at +http://ucd-snmp.ucdavis.edu/ +in general, and file AGENT.txt in particular.

It is likely that the output of mib2c will be further customized +depending on eCos customer needs; it’s easy to do this +by editing the mib2c.conf file to add or remove whatever you need +with the resulting C sources.

The UCD autoconf-style configuration does not apply to eCos. + So if you add a completely new MIB to the agent, and support it +using mib2c so that the my_new_mib.c file contains +a init_my_new_mib() routine to register +the MIB handler, you will also need to edit a couple of control +files; these claim to be auto-generated, but in the eCos release, +they’re not, don’t worry.

PACKAGES/net/snmp/agent/VERSION/include/mib_module_includes.h

contains a number of lines like

#include “mibgroup/mibII/interfaces.h”

so add your new MIB thus:

#include “mibgroup/mibII/my_new_mib.h”
PACKAGES/net/snmp/agent/VERSION/include/mib_module_inits.h 

contains a number of lines like

init_interfaces();         
+init_dot3(); 

and so on; add your new MIB as follows:

init_my_new_mib(); 

and this should work correctly.


PrevHomeNext
Unimplemented featuresUpsnmpd.conf
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-mibs-supported.html b/doc/html/ref/net-snmp-mibs-supported.html new file mode 100644 index 00000000..ff2b4b65 --- /dev/null +++ b/doc/html/ref/net-snmp-mibs-supported.html @@ -0,0 +1,227 @@ + + + + + + + + +MIBs supported +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext

MIBs supported

The standard set in MIB-II, together with the Ether-Like MIB, are supported +by default. The MIB files used to compile the handlers in the agent and to +“drive” the testing (snmpwalk et +al under LINUX) +are those acquired from that same UCD distribution.

These are the supported MIBs; all are below mib2 == 1.3.6.1.2.1:

system        { mib2 1 }   
+interfaces    { mib2 2 }
+              [ address-translation “at” { mib2 3 } is deprecated ]
+ip            { mib2 4 }   
+icmp          { mib2 5 }   
+tcp           { mib2 6 }   
+udp           { mib2 7 }
+              [ exterior gateway protocol “egp” { mib2 8 } not supported ]
+              [ cmot { mib2 9 } is “historic”, just a placeholder ]
+dot3          { mib2 10 7 } == { transmission 7 } “EtherLike MIB”
+snmp          { mib2 11 }

On inclusion of SNMPv3 support packages, the following MIBs are added to the +default set of MIBs enumerated above :

snmpEngine    { snmpFrameworkMIBObjects 1 }  SNMP-FRAMEWORK-MIB, as described in
+                                             RFC-2571 for support of SNMPv3
+                                             framework.
+
+usmStats      {           usmMIBObjects 1 }  SNMP-USER-BASED-SM-MIB, as 
+usmUser       {           usmMIBObjects 2 }  specified in RFC-2574 for support 
+                                             of user based security model in 
+                                             SNMPv3 management domains.

PrevHomeNext
SNMP packages in the eCos source repositoryUpChanges to eCos sources
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-package-contents.html b/doc/html/ref/net-snmp-package-contents.html new file mode 100644 index 00000000..bd781ea7 --- /dev/null +++ b/doc/html/ref/net-snmp-package-contents.html @@ -0,0 +1,192 @@ + + + + + + + + +SNMP packages in the eCos source repository +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext


PrevHomeNext
SNMP for eCosUpMIBs supported
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-starting-the-snmp-agent.html b/doc/html/ref/net-snmp-starting-the-snmp-agent.html new file mode 100644 index 00000000..b209c10c --- /dev/null +++ b/doc/html/ref/net-snmp-starting-the-snmp-agent.html @@ -0,0 +1,331 @@ + + + + + + + + +Starting the SNMP Agent +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext

Starting the SNMP Agent

A routine to instantiate and start the SNMP agent thread in the default +configuration is provided in +PACKAGES/net/snmp/agent/VERSION/src/snmptask.c

It starts the snmpd thread at priority +CYGPKG_NET_THREAD_PRIORITY+1 +by default, ie. one step less important than the TCP/IP stack service +thread. +It also statically creates and uses a very large stack of around 100 +KiloBytes. +To use that convenience function, this code fragment may be copied (in +plain C).

#ifdef CYGPKG_SNMPAGENT
+{
+                extern void cyg_net_snmp_init(void);
+                cyg_net_snmp_init();
+            
+}
+#endif

In case you need to perform initialization, for example setting up SNMPv3 +security features, when the snmp agent starts and every time it restarts, +you can register a callback function by simply writing the global variable: +
externC void (*snmpd_reinit_function)( void );
+with a suitable function pointer.

The entry point to the SNMP agent is +
externC void snmpd( void (*initfunc)( void ) );
+so you can of course easily start it in a thread of your choice at another +priority instead if required, after performing whatever other +initialization your SNMP MIBs need. A larger than default stacksize is +required. The initfunc parameter is the callback +function mentioned above — a NULL parameter there is safe and +obviously means no callback is registered.

Note that if you call snmpd(); yourself and do +not call cyg_net_snmp_init(); then +that routine, global variable, and the default large stack will not be +used. This is the recommended way control such features from your +application; create and start the thread yourself at the appropriate +moment.

Other APIs from the snmpd module are available, +specifically: +
void SnmpdShutDown(int a);
+which causes the snmpd to restart itself — +including the callback to your init function — as soon as possible.

The parameter a is ignored. It is there because in +snmpd's “natural environment” this routine +is a UNIX signal handler.

The helper functions in the network stack for managing +DHCP +leases will call SnmpdShutDown() +when necessary, for example if network interfaces go down and/or come up +again.


PrevHomeNext
Changes to eCos sourcesUpConfiguring eCos
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-test-cases.html b/doc/html/ref/net-snmp-test-cases.html new file mode 100644 index 00000000..8ecb1a67 --- /dev/null +++ b/doc/html/ref/net-snmp-test-cases.html @@ -0,0 +1,262 @@ + + + + + + + + +Test cases +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext

Test cases

Currently only one test program is provided which uses SNMP.

"snmpping" in the SNMP agent package runs the ping test from +the TCPIP package, with the snmpd running also. This allows you +to interrogate it using host tools of your choice. It supports MIBs +as documented above, so eg. snmpwalk +<hostname> public dot3 under +Linux/UNIX should have the desired effect.

For serious testing, you should increase the length of time +the test runs by setting CYGNUM_SNMPAGENT_TESTS_ITERATIONS +to something big (e.g., 999999). Build the test +(make -C net/snmp/agent/current tests) +and run it on the target.

Then start several jobs, some for pinging the board (to make +the stats change) and some for interrogating the snmpd. Set $IP +to whatever IP address the board has:

# in a root shell, for flood ping
+while(1)
+date
+ping -f -c 3001 $IP
+sleep 5
+ping -c 32 -s 2345 $IP
+end
# have more than one of these going at once
+setenv MIBS all
+while (1)
+snmpwalk -OS $IP  public
+date
+end

Leave to run for a couple of days or so to test stability.

The test program can also test snmpd.conf support. It tries to build a minimal +snmpd.conf file on a RAM filesystem and passes it to the snmp sub-system. With +this profile on target, the following snmp[cmd] (cmd=walk, get, set) should +work :

snmp[cmd] -v1 $IP crux $OID
+snmp[cmd] -v2 $IP crux $OID
+snmp[cmd] -v3 $IP -u root -L noAuthNoPriv $OID
+snmp[cmd] -v3 $IP -u root -L authNoPriv -A MD5 -a md5passwd $OID

The following commands would however fail since they violate the access model :

snmp[cmd] $IP public $OID
+snmp[cmd] -v1 $IP public $OID
+snmp[cmd] -v2c $IP public $OID
+snmp[cmd] -v3 $IP -u no_user -L noAuthNoPriv $OID
+snmp[cmd] -v3 $IP -u root -L authNoPriv -A MD5 -a badpasswd $OID

PrevHomeNext
Configuring eCosUpSNMP clients and package use
\ No newline at end of file diff --git a/doc/html/ref/net-snmp-unimplemented-features.html b/doc/html/ref/net-snmp-unimplemented-features.html new file mode 100644 index 00000000..3eae41e0 --- /dev/null +++ b/doc/html/ref/net-snmp-unimplemented-features.html @@ -0,0 +1,213 @@ + + + + + + + + +Unimplemented features +
eCos Reference Manual
PrevChapter 47. SNMP for eCosNext

Unimplemented features

Currently, the filesystem and persistent storage areas are +left undone, to be implemented by the application.

The SNMP library package is intended to support client and +agent code alike. It therefore contains lots of assumptions about +the presence of persistent storage ie. a filesystem. Currently, +by default, eCos has no such thing, so those areas have been simply +commented out and made to return empty lists or say “no +data here.”

Specifically the following files have omitted/unimplemented code :

PACKAGES/net/snmp/lib/VERSION/src/parse.c

contains code to enumerate MIB files discovered in the system +MIB directories (“/usr/share/snmp/mibs”), +and read them all in, building data structures that are used by +client programs to interrogate an agent. This is not required in +an agent, so the routine which enumerates the directories returns +an empty list.

PACKAGES/net/snmp/lib/VERSION/src/read_config.c +contains two systems:

The first tries to read the configuration file as described in the +snmpd.conf file section and +the second system contains code to record persistent data as files in a +directory (typically /var/ucd-snmp) thus preserving the +state permanently.

The first part is partially implemented to support multiple profiles and enables +dispatcher functionality as discussed in the Section called Version usage (v1, v2 or v3). +The second part is not supported at all in the default implementation. As required, +a cleaner interface to permit application code to manage persistent data will be +developed in consultation with customers.


PrevHomeNext
SNMP clients and package useUpMIB Compiler
\ No newline at end of file diff --git a/doc/html/ref/net-snmp.html b/doc/html/ref/net-snmp.html new file mode 100644 index 00000000..1e054035 --- /dev/null +++ b/doc/html/ref/net-snmp.html @@ -0,0 +1,173 @@ + + + + + + + + +SNMP +
eCos Reference Manual
PrevNext


PrevHomeNext
Calling graph for Transmission and Reception SNMP for eCos
\ No newline at end of file diff --git a/doc/html/ref/ocelot.html b/doc/html/ref/ocelot.html new file mode 100644 index 00000000..a618030e --- /dev/null +++ b/doc/html/ref/ocelot.html @@ -0,0 +1,416 @@ + + + + + + + + +MIPS/RM7000 PMC-Sierra Ocelot +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

MIPS/RM7000 PMC-Sierra Ocelot

Additional commands

The exec command which allows the +loading and execution of Linux kernels, is supported for this architecture + (see the Section called Executing Programs from RedBoot in Chapter 2). The +exec parameters used for MIPS boards are:

-b <addr>

Location to store command line and environment passed to kernel

-w <time>

Wait time in seconds before starting kernel

-c "params"

Parameters passed to kernel

<addr>

Kernel entry point, defaulting to the entry point of the last image +loaded

Linux kernels on MIPS platforms expect the entry point to be called with arguments +in the registers equivalent to a C call with prototype: +
void Linux(int argc, char **argv, char **envp);

RedBoot will place the appropriate data at the offset specified by the +-b parameter, or by default at address 0x80080000, and will set the +arguments accordingly when calling into the kernel.

The default entry point, if no image with explicit entry point has been loaded and +none is specified, is 0x80000750.

Memory Maps

RedBoot sets up the following memory map on the Ocelot board.

Note that these addresses are accessed through kseg0/1 and thus translate +to the actual address range 0x80000000-0xbfffffff, depending on the need for +caching/non-caching access to the bus.

Physical Address Range Description
+----------------------- -----------
+0x00000000 - 0x0fffffff SDRAM
+0x10000000 - 0x10ffffff PCI I/O space
+0x12000000 - 0x13ffffff PCI Memory space
+0x14000000 - 0x1400ffff Galileo system controller
+0x1c000000 - 0x1c0000ff PLD (board logic)
+0x1fc00000 - 0x1fc7ffff flash

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=ocelot
+export ARCH_DIR=mips
+export PLATFORM_DIR=rm7000/ocelot

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
MIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Malta BoardUpMIPS/VR4375 NEC DDB-VRC4375
\ No newline at end of file diff --git a/doc/html/ref/overview.png b/doc/html/ref/overview.png new file mode 100644 index 00000000..00f5c4e6 Binary files /dev/null and b/doc/html/ref/overview.png differ diff --git a/doc/html/ref/pci-library-reference.html b/doc/html/ref/pci-library-reference.html new file mode 100644 index 00000000..d16898b8 --- /dev/null +++ b/doc/html/ref/pci-library-reference.html @@ -0,0 +1,1164 @@ + + + + + + + + +PCI Library reference +
eCos Reference Manual
PrevChapter 30. The eCos PCI LibraryNext

PCI Library reference

This document defines the PCI Support Library for eCos.

The PCI support library provides a set of routines for accessing +the PCI bus configuration space in a portable manner. This is provided +by two APIs. The high level API is used by device drivers, or other +code, to access the PCI configuration space portably. The low level +API is used by the PCI library itself to access the hardware in +a platform-specific manner, and may also be used by device drivers +to access the PCI configuration space directly.

Underlying the low-level API is HAL support for the basic +configuration space operations. These should not generally be used +by any code other than the PCI library, and are present in the HAL +to allow low level initialization of the PCI bus and devices to +take place if necessary.

Types and data structures

The following types are defined:

typedef CYG_WORD32 cyg_pci_device_id;

This is comprised of the bus number, device number and functional +unit numbers packed into a single word. The macro CYG_PCI_DEV_MAKE_ID(), in conjunction with the CYG_PCI_DEV_MAKE_DEVFN() +macro, may be used to construct a device id from the bus, device and functional +unit numbers. Similarly the macros CYG_PCI_DEV_GET_BUS(), +CYG_PCI_DEV_GET_DEVFN(), +CYG_PCI_DEV_GET_DEV(), and +CYG_PCI_DEV_GET_FN() may be used to extract the +constituent parts of a device id. It should not be necessary to use these +macros under normal circumstances. The following code fragment demonstrates +how these macros may be used:

  // Create a packed representation of device 1, function 0
+  cyg_uint8 devfn = CYG_PCI_DEV_MAKE_DEVFN(1,0);
+
+  // Create a packed devid for that device on bus 2
+  cyg_pci_device_id devid = CYG_PCI_DEV_MAKE_ID(2, devfn);
+
+  diag_printf("bus %d, dev %d, func %d\n",
+              CYG_PCI_DEV_GET_BUS(devid),
+              CYG_PCI_DEV_GET_DEV(CYG_PCI_DEV_GET_DEVFN(devid)),
+              CYG_PCI_DEV_GET_FN(CYG_PCI_DEV_GET_DEVFN(devid));
typedef struct cyg_pci_device;

This structure is used to contain data read from a PCI device's +configuration header by cyg_pci_get_device_info(). +It is also used to record the resource allocations made to the device.

typedef CYG_WORD64 CYG_PCI_ADDRESS64;
+typedef CYG_WORD32 CYG_PCI_ADDRESS32;

Pointers in the PCI address space are 32 bit (IO space) or +32/64 bit (memory space). In most platform and device configurations +all of PCI memory will be linearly addressable using only 32 bit +pointers as read from base_map[].

The 64 bit type is used to allow handling 64 bit devices in +the future, should it be necessary, without changing the library's +API.

Functions

void cyg_pci_init(void);

Initialize the PCI library and establish contact with the +hardware. This function is idempotent and can be called either by +all drivers in the system, or just from an application initialization +function.

cyg_bool cyg_pci_find_device( cyg_uint16 vendor,
+			      cyg_uint16 device,
+			      cyg_pci_device_id *devid );

Searches the PCI bus configuration space for a device with +the given vendor and device +ids. The search starts at the device pointed to by devid, +or at the first slot if it contains CYG_PCI_NULL_DEVID. +*devid will be updated with the ID of the next device +found. Returns true if one is found and false if not.

cyg_bool cyg_pci_find_class( cyg_uint32 dev_class,
+			     cyg_pci_device_id *devid );

Searches the PCI bus configuration space for a device with +the given dev_class class code. The search starts at the +device pointed to by devid, or at the first slot if it +contains CYG_PCI_NULL_DEVID.

*devid will be updated with the ID of the next +device found. Returns true if one is found and +false if not.

cyg_bool cyg_pci_find_next( cyg_pci_device_id cur_devid,
+			    cyg_pci_device_id *next_devid );

Searches the PCI configuration space for the next valid device +after cur_devid. If cur_devid +is given the value CYG_PCI_NULL_DEVID, then the search starts +at the first slot. It is permitted for next_devid to +point to cur_devid. Returns true +if another device is found and false if not.

cyg_bool cyg_pci_find_matching( cyg_pci_match_func *matchp,
+                                void * match_callback_data,
+			        cyg_pci_device_id *devid );

Searches the PCI bus configuration space for a device whose properties +match those required by the caller supplied cyg_pci_match_func. +The search starts at the device pointed to by devid, or +at the first slot if it contains CYG_PCI_NULL_DEVID. The +devid will be updated with the ID of the next device found. +This function returns true if a matching device is found +and false if not.

The match_func has a type declared as:

typedef cyg_bool (cyg_pci_match_func)( cyg_uint16 vendor,
+                                       cyg_uint16 device,
+                                       cyg_uint32 class,
+                                       void *     user_data);

The vendor, device, and +class are from the device configuration space. The +user_data is the callback data passed to cyg_pci_find_matching.

void cyg_pci_get_device_info ( cyg_pci_device_id devid,
+			       cyg_pci_device *dev_info );

This function gets the PCI configuration information for the +device indicated in devid. The common fields of the +cyg_pci_device structure, and the appropriate fields +of the relevant header union member are filled in from the device's +configuration space. +If the device has not been enabled, then this function will also fetch +the size and type information from the base address registers and +place it in the base_size[] array.

void cyg_pci_set_device_info ( cyg_pci_device_id devid,
+			       cyg_pci_device *dev_info );

This function sets the PCI configuration information for the +device indicated in devid. Only the configuration space +registers that are writable are actually written. Once all the fields have +been written, the device info will be read back into *dev_info, so that it reflects the true state of the hardware.

void cyg_pci_read_config_uint8(  cyg_pci_device_id devid,
+				 cyg_uint8 offset, cyg_uint8 *val );
+void cyg_pci_read_config_uint16( cyg_pci_device_id devid,
+				 cyg_uint8 offset, cyg_uint16 *val );
+void cyg_pci_read_config_uint32( cyg_pci_device_id devid,
+				 cyg_uint8 offset, cyg_uint32 *val );

These functions read registers of the appropriate size from +the configuration space of the given device. They should mainly +be used to access registers that are device specific. General PCI +registers are best accessed through cyg_pci_get_device_info().

void cyg_pci_write_config_uint8(  cyg_pci_device_id devid,
+				  cyg_uint8 offset, cyg_uint8 val );
+void cyg_pci_write_config_uint16( cyg_pci_device_id devid,
+				  cyg_uint8 offset, cyg_uint16 val );
+void cyg_pci_write_config_uint32( cyg_pci_device_id devid,
+				  cyg_uint8 offset, cyg_uint32 val );

These functions write registers of the appropriate size to +the configuration space of the given device. They should mainly +be used to access registers that are device specific. General PCI +registers are best accessed through cyg_pci_get_device_info(). Writing the general registers this way may render the contents of +a cyg_pci_device structure invalid.

Resource allocation

These routines allocate memory and I/O space to PCI devices.

cyg_bool cyg_pci_configure_device( cyg_pci_device *dev_info )

Allocate memory and IO space to all base address registers +using the current memory and IO base addresses in the library. The +allocated base addresses, translated into directly usable values, +will be put into the matching base_map[] entries +in *dev_info. If *dev_info does +not contain valid base_size[] entries, then the result is +false. This function will also call cyg_pci_translate_interrupt() to put the interrupt vector into the +HAL vector entry.

cyg_bool cyg_pci_configure_bus( cyg_uint8 bus, cyg_uint8 *next_bus )

Allocate memory and IO space to all base address registers on all devices +on the given bus and all subordinate busses. If a PCI-PCI bridge is found on +bus, this function will call itself recursively in order +to configure the bus on the other side of the bridge. Because of the nature of +bridge devices, all devices on the secondary side of a bridge must be allocated +memory and IO space before the memory and IO windows on the bridge device can be +properly configured. The next_bus argument points to the +bus number to assign to the next subordinate bus found. The number will be +incremented as new busses are discovered. If successful, true +is returned. Otherwise, false is returned.

cyg_bool cyg_pci_translate_interrupt( cyg_pci_device *dev_info,
+				      CYG_ADDRWORD *vec );

Translate the device's PCI interrupt (INTA#-INTD#) +to the associated HAL vector. This may also depend on which slot +the device occupies. If the device may generate interrupts, the +translated vector number will be stored in vec and the +result is true. Otherwise the result is false.

cyg_bool cyg_pci_allocate_memory( cyg_pci_device *dev_info,
+                                  cyg_uint32 bar, 
+                                  CYG_PCI_ADDRESS64 *base );
+cyg_bool cyg_pci_allocate_io( cyg_pci_device *dev_info,
+                              cyg_uint32 bar, 
+                              CYG_PCI_ADDRESS32 *base );

These routines allocate memory or I/O space to the base address +register indicated by bar. The base address in +*base will be correctly aligned and the address of the +next free location will be written back into it if the allocation succeeds. If +the base address register is of the wrong type for this allocation, or +dev_info does not contain valid base_size[] entries, the result is false. These functions +allow a device driver to set up its own mappings if it wants. Most devices +should probably use cyg_pci_configure_device().

void cyg_pci_set_memory_base( CYG_PCI_ADDRESS64 base );
+void cyg_pci_set_io_base( CYG_PCI_ADDRESS32 base );

These routines set the base addresses for memory and I/O mappings +to be used by the memory allocation routines. Normally these base +addresses will be set to default values based on the platform. These +routines allow these to be changed by application code if necessary.

PCI Library Hardware API

This API is used by the PCI library to access the PCI bus +configuration space. Although it should not normally be necessary, +this API may also be used by device driver or application code to +perform PCI bus operations not supported by the PCI library.

void cyg_pcihw_init(void);

Initialize the PCI hardware so that the configuration space +may be accessed.

void cyg_pcihw_read_config_uint8(  cyg_uint8 bus,
+               cyg_uint8 devfn, cyg_uint8 offset, cyg_uint8 *val);
+void cyg_pcihw_read_config_uint16( cyg_uint8 bus,
+               cyg_uint8 devfn, cyg_uint8 offset, cyg_uint16 *val);
+void cyg_pcihw_read_config_uint32( cyg_uint8 bus,
+               cyg_uint8 devfn, cyg_uint8 offset, cyg_uint32 *val);

These functions read a register of the appropriate size from +the PCI configuration space at an address composed from the bus, devfn and offset +arguments.

void cyg_pcihw_write_config_uint8(  cyg_uint8 bus,
+                cyg_uint8 devfn, cyg_uint8 offset, cyg_uint8 val);
+void cyg_pcihw_write_config_uint16( cyg_uint8 bus,
+                cyg_uint8 devfn, cyg_uint8 offset, cyg_uint16 val);
+void cyg_pcihw_write_config_uint32( cyg_uint8 bus,
+                cyg_uint8 devfn, cyg_uint8 offset, cyg_uint32 val);

These functions write a register of the appropriate size to +the PCI configuration space at an address composed from the +bus, devfn and +offset arguments.

cyg_bool cyg_pcihw_translate_interrupt( cyg_uint8 bus,
+					cyg_uint8 devfn,
+					CYG_ADDRWORD *vec);

This function interrogates the device and determines which +HAL interrupt vector it is connected to.

HAL PCI support

HAL support consists of a set of C macros that provide the +implementation of the low level PCI API.

HAL_PCI_INIT()

Initialize the PCI bus.

HAL_PCI_READ_UINT8( bus, devfn, offset, val )
+HAL_PCI_READ_UINT16( bus, devfn, offset, val )
+HAL_PCI_READ_UINT32( bus, devfn, offset, val )

Read a value from the PCI configuration space of the appropriate +size at an address composed from the bus, devfn and offset.

HAL_PCI_WRITE_UINT8( bus, devfn, offset, val )
+HAL_PCI_WRITE_UINT16( bus, devfn, offset, val )
+HAL_PCI_WRITE_UINT32( bus, devfn, offset, val )

Write a value to the PCI configuration space of the appropriate +size at an address composed from the bus, devfn and offset.

HAL_PCI_TRANSLATE_INTERRUPT( bus, devfn, *vec, valid )

Translate the device's interrupt line into a HAL +interrupt vector.

HAL_PCI_ALLOC_BASE_MEMORY
+HAL_PCI_ALLOC_BASE_IO

These macros define the default base addresses used to initialize +the memory and I/O allocation pointers.

HAL_PCI_PHYSICAL_MEMORY_BASE
+HAL_PCI_PHYSICAL_IO_BASE

PCI memory and IO range do not always correspond directly +to physical memory or IO addresses. Frequently the PCI address spaces +are windowed into the processor's address range at some +offset. These macros define offsets to be added to the PCI base +addresses to translate PCI bus addresses into physical memory addresses +that can be used to access the allocated memory or IO space.

HAL_PCI_IGNORE_DEVICE( bus, dev, fn )

This macro, if defined, may be used to limit the devices which are +found by the bus scanning functions. This is sometimes necessary for +devices which need special handling. If this macro evaluates to true, the given device will not be found by cyg_pci_find_next or other bus scanning functions.


PrevHomeNext
The eCos PCI LibraryUpeCos POSIX compatibility layer
\ No newline at end of file diff --git a/doc/html/ref/persistent-state-flash.html b/doc/html/ref/persistent-state-flash.html new file mode 100644 index 00000000..44c8a5ce --- /dev/null +++ b/doc/html/ref/persistent-state-flash.html @@ -0,0 +1,730 @@ + + + + + + + + +Persistent State Flash-based Configuration and Control +
eCos Reference Manual
PrevChapter 2. RedBoot Commands and ExamplesNext

Persistent State Flash-based Configuration and Control

RedBoot provides flash management support for storage in the flash memory +of multiple executable images and of non-volatile information such as IP addresses +and other network information.

RedBoot on platforms that support flash based configuration information +will report the following message the first time that RedBoot is booted on +the target:

flash configuration checksum error or invalid key

This error can be ignored if no flash based configuration is desired, +or can be silenced by running the fconfig +command as described below. At this point you may also wish to run the fis init command. See other fis commands in the Section called Flash Image System (FIS).

Certain control and configuration information used by RedBoot can be +stored in flash.

The details of what information is maintained in flash differ, based +on the platform and the configuration. However, the basic operation used to +maintain this information is the same. Using the fconfig -l command, the information may be displayed and/or changed.

If the optional flag -i is specified, +then the configuration database will be reset to its default +state. This is also needed the first time RedBoot is installed on the +target, or when updating to a newer RedBoot with different +configuration keys.

If the optional flag -l is specified, +the configuration data is simply listed. Otherwise, each configuration parameter +will be displayed and you are given a chance to change it. The entire value +must be typed - typing just carriage return will leave a value unchanged. +Boolean values may be entered using the first letter (t +for true, f for false). At any time the editing +process may be stopped simply by entering a period (.) on the line. Entering +the caret (^) moves the editing back to the previous item. See “RedBoot +Editing Commands”, the Section called RedBoot Editing Commands in Chapter 1.

If any changes are made in the configuration, then the updated data +will be written back to flash after getting acknowledgment from the user.

If the optional flag -n is specified +(with or without -l) then “nicknames” +of the entries are used. These are shorter and less descriptive than +“full” names. The full name may also be displayed by adding the +-f flag.

The reason for telling you nicknames is that a quick way to set a single +entry is provided, using the format +
  RedBoot> fconfig nickname value
+If no +value is supplied, the command will list and prompt for only that entry. +If a value is supplied, then the entry will be set to that value. You will +be prompted whether to write the new information into flash if any change +was made. For example +
  RedBoot> fconfig -l -n
+  boot_script: false
+  bootp: false
+  bootp_my_ip: 10.16.19.176
+  bootp_server_ip: 10.16.19.66
+  dns_ip: 10.16.19.1
+  gdb_port: 9000
+  net_debug: false
+  RedBoot> fconfig bootp_my_ip 10.16.19.177
+  bootp_my_ip: 10.16.19.176 Setting to 10.16.19.177
+  Update RedBoot non-volatile configuration - continue (y/n)? y
+  ... Unlock from 0x507c0000-0x507e0000: .
+  ... Erase from 0x507c0000-0x507e0000: .
+  ... Program from 0x0000a8d0-0x0000acd0 at 0x507c0000: .
+  ... Lock from 0x507c0000-0x507e0000: .
+  RedBoot>

Additionally, nicknames can be used like aliases via the format %{nickname}. +This allows the values stored by fconfig to be used +directly by scripts and commands.

Depending on how your terminal program is connected and its +capabilities, you might find that you are unable to use line-editing to +delete the ‘old’ value when using the default behaviour of +fconfig nickname or just +plain fconfig, as shown in this example: +
RedBoot> fco bootp
+bootp: false_
+The user deletes the word “false;” and enters “true” +so the display looks like this: +
RedBoot> fco bootp
+bootp: true
+Update RedBoot non-volatile configuration - continue (y/n)? y
+... Unlock from ...
+RedBoot> _

To edit when you cannot backspace, use the optional flag +-d (for “dumb terminal”) +to provide a simpler interface thus: +
RedBoot> fco -d bootp
+bootp: false ? _
+and you enter the value in the obvious manner thus: +
RedBoot> fco -d bootp
+bootp: false ? true
+Update RedBoot non-volatile configuration - continue (y/n)? y
+... Unlock from ...
+RedBoot> _

One item which is always present in the configuration data is the ability +to execute a script at boot time. A sequence of RedBoot commands can be entered +which will be executed when the system starts up. Optionally, a time-out period +can be provided which allows the user to abort the startup script and proceed +with normal command processing from the console.

RedBoot> fconfig -l
+Run script at boot: false
+Use BOOTP for network configuration: false
+Local IP address: 192.168.1.29
+Default server IP address: 192.168.1.101
+DNS server IP address: 192.168.1.1
+GDB connection port: 9000
+Network debug at boot time: false

The following example sets a boot script and then shows it running. +

RedBoot> fconfig
+Run script at boot: false t
+      Boot script:
+Enter script, terminate with empty line
+>> fi li
+    Boot script timeout: 0 10
+Use BOOTP for network configuration: false .
+Update RedBoot non-volatile configuration - continue (y/n)? y
+... Erase from 0xa0fc0000-0xa0fe0000: .
+... Program from 0x8c021f60-0x8c022360 at 0xa0fc0000: .
+RedBoot>
+RedBoot(tm) debug environment - built 08:22:24, Aug 23 2000
+Copyright (C) 2000, Red Hat, Inc.
+
+
+RAM: 0x8c000000-0x8c800000
+flash: 0xa0000000 - 0xa1000000, 128 blocks of 0x00020000 bytes ea.
+Socket Communications, Inc: Low Power Ethernet CF Revision C \
+5V/3.3V 08/27/98 IP: 192.168.1.29, Default server: 192.168.1.101 \
+== Executing boot script in 10 seconds - enter ^C to abort
+RedBoot> fi li
+Name              flash addr   Mem addr    Length    Entry point
+RedBoot          0xA0000000   0xA0000000  0x020000  0x80000000
+RedBoot config   0xA0FC0000   0xA0FC0000  0x020000  0x00000000
+FIS directory    0xA0FE0000   0xA0FE0000  0x020000  0x00000000
+RedBoot>

NOTE: The bold characters above indicate where something was entered on the +console. As you can see, the fi li command +at the end came from the script, +not the console. Once the script is executed, command processing reverts to +the console.

NOTE: RedBoot supports the notion of a boot script timeout, i.e. a period of +time that RedBoot waits before executing the boot time script. This period +is primarily to allow the possibility of canceling the script. Since +a timeout value of zero (0) seconds would never allow the script to +be aborted or canceled, this value is not allowed. If the timeout +value is zero, then RedBoot will abort the script execution immediately.

+On many targets, RedBoot may be configured to run from ROM or it may be +configured to run from RAM. Other configurations are also possible. All +RedBoot configurations will execute the boot script, but in certain cases +it may be desirable to limit the execution of certain script commands to +one RedBoot configuration or the other. This can be accomplished by +prepending {<startup type>} to the +commands which should be executed only by the RedBoot configured for the +specified startup type. The following boot script illustrates this concept +by having the ROM based RedBoot load and run the RAM based RedBoot. The RAM +based RedBoot will then list flash images.

RedBoot> fco
+Run script at boot: false t
+Boot script:
+Enter script, terminate with empty line
+>> {ROM}fis load RedBoot[RAM]
+>> {ROM}go
+>> {RAM}fis li
+>>
+Boot script timeout (1000ms resolution): 2
+Use BOOTP for network configuration: false
+ ...
+Update RedBoot non-volatile configuration - continue (y/n)? y
+... Unlock from 0x007c0000-0x007e0000: .
+... Erase from 0x007c0000-0x007e0000: .
+... Program from 0xa0015030-0xa0016030 at 0x007df000: .
+... Lock from 0x007c0000-0x007e0000: .
+RedBoot> reset
+... Resetting.
++Ethernet eth0: MAC address 00:80:4d:46:01:05
+IP: 192.168.1.153, Default server: 192.168.1.10
+
+RedBoot(tm) bootstrap and debug environment [ROM]
+Red Hat certified release, version R1.xx - built 17:37:36, Aug 14 2001
+
+Platform: IQ80310 (XScale)
+Copyright (C) 2000, 2001, Red Hat, Inc.
+
+RAM: 0xa0000000-0xa2000000, 0xa001b088-0xa1fdf000 available
+FLASH: 0x00000000 - 0x00800000, 64 blocks of 0x00020000 bytes each.
+== Executing boot script in 2.000 seconds - enter ^C to abort
+RedBoot> fis load RedBoot[RAM]
+RedBoot> go
++Ethernet eth0: MAC address 00:80:4d:46:01:05
+IP: 192.168.1.153, Default server: 192.168.1.10
+
+RedBoot(tm) bootstrap and debug environment [RAM]
+Red Hat certified release, version R1.xx - built 13:03:47, Aug 14 2001
+
+Platform: IQ80310 (XScale)
+Copyright (C) 2000, 2001, Red Hat, Inc.
+
+RAM: 0xa0000000-0xa2000000, 0xa0057fe8-0xa1fdf000 available
+FLASH: 0x00000000 - 0x00800000, 64 blocks of 0x00020000 bytes each.
+== Executing boot script in 2.000 seconds - enter ^C to abort
+RedBoot> fis li
+Name              FLASH addr  Mem addr    Length      Entry point
+RedBoot           0x00000000  0x00000000  0x00040000  0x00002000
+RedBoot config    0x007DF000  0x007DF000  0x00001000  0x00000000
+FIS directory     0x007E0000  0x007E0000  0x00020000  0x00000000
+RedBoot>


PrevHomeNext
fis writeUpExecuting Programs from RedBoot
\ No newline at end of file diff --git a/doc/html/ref/pid.html b/doc/html/ref/pid.html new file mode 100644 index 00000000..9824fd88 --- /dev/null +++ b/doc/html/ref/pid.html @@ -0,0 +1,347 @@ + + + + + + + + +ARM/ARM7+ARM9 ARM PID Board and EPI Dev7+Dev9 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/ARM7+ARM9 ARM PID Board and EPI Dev7+Dev9

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=pid
+export ARCH_DIR=arm
+export PLATFORM_DIR=pid

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/ARM7+ARM9 ARM IntegratorUpARM/ARM7 Atmel AT91 Evaluation Board (EB40)
\ No newline at end of file diff --git a/doc/html/ref/ping-command.html b/doc/html/ref/ping-command.html new file mode 100644 index 00000000..501ec6fa --- /dev/null +++ b/doc/html/ref/ping-command.html @@ -0,0 +1,537 @@ + + + + + + + + +ping +
eCos Reference Manual
PrevNext

ping

Name

ping -- Verify network connectivity

Description

The ping command checks the connectivity of the local network by sending +special (ICMP) packets to a specific host. These packets should be automatically +returned by that host. The command will indicate how many of these round-trips +were successfully completed. +

Examples

Test connectivity to host 192.168.1.101. +
RedBoot> ping -h 192.168.1.101
+Network PING - from 192.168.1.31 to 192.168.1.101
+PING - received 10 of 10 expected

Test connectivity to host 192.168.1.101, with verbose reporting. +
RedBoot> ping -h 192.168.1.101 -v -n 4
+Network PING - from 192.168.1.31 to 192.168.1.101
+ seq: 1, time: 1 (ticks)
+ seq: 2, time: 1 (ticks)
+ seq: 3, time: 1 (ticks)
+ seq: 4, time: 1 (ticks)
+PING - received 10 of 10 expected

Test connectivity to a non-existent host (192.168.1.109).
+RedBoot> ping -h 192.168.1.109 -v -n 4
+PING: Cannot reach server '192.168.1.109' (192.168.1.109)
+


PrevHomeNext
mfillUpreset
\ No newline at end of file diff --git a/doc/html/ref/posix-c-language-services.html b/doc/html/ref/posix-c-language-services.html new file mode 100644 index 00000000..dce41203 --- /dev/null +++ b/doc/html/ref/posix-c-language-services.html @@ -0,0 +1,330 @@ + + + + + + + + +C Language Services [POSIX Section 8] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

C Language Services [POSIX Section 8]

Functions Implemented

char *setlocale( int category, const char *locale ); 
+int fileno( FILE *stream ); 
+FILE *fdopen( int fd, const char *type ); 
+int getc_unlocked( FILE *stream); 
+int getchar_unlocked( void ); 
+int putc_unlocked( FILE *stream ); 
+int putchar_unlocked( void ); 
+char *strtok_r( char *s, const char *sep, 
+                char **lasts ); 
+char *asctime_r( const struct tm *tm, char *buf ); 
+char *ctime_r( const time_t *clock, char *buf ); 
+struct tm *gmtime_r( const time_t *clock,
+                     struct tm *result ); 
+struct tm *localtime_r( const time_t *clock,
+                        struct tm *result ); 
+int rand_r( unsigned int *seed );

Functions Omitted

void flockfile( FILE *file ); 
+int ftrylockfile( FILE *file ); 
+void funlockfile( FILE *file ); 
+int sigsetjmp( sigjmp_buf env, int savemask );			// TBA 
+void siglongjmp( sigjmp_buf env, int val );			// TBA 
+void tzset(void);                                                       // TBA

PrevHomeNext
Device and Class Specific Functions [POSIX Section 7]UpSystem Databases [POSIX Section 9]
\ No newline at end of file diff --git a/doc/html/ref/posix-clocks-and-timers.html b/doc/html/ref/posix-clocks-and-timers.html new file mode 100644 index 00000000..401df585 --- /dev/null +++ b/doc/html/ref/posix-clocks-and-timers.html @@ -0,0 +1,224 @@ + + + + + + + + +Clocks and Timers [POSIX Section 14] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Clocks and Timers [POSIX Section 14]

Functions Implemented

int clock_settime( clockid_t clock_id,
+const struct timespec *tp); 
+int clock_gettime( clockid_t clock_id, struct timespec *tp); 
+int clock_getres( clockid_t clock_id, struct timespec *tp); 
+int timer_create( clockid_t clock_id, struct sigevent *evp,
+	          timer_t *timer_id);
+int timer_delete( timer_t timer_id ); 
+int timer_settime( timer_t timerid, int flags,
+	           const struct itimerspec *value,
+	           struct itimerspec *ovalue ); 
+int timer_gettime( timer_t timerid, struct itimerspec *value ); 
+int timer_getoverrun( timer_t timerid ); 
+int nanosleep( const struct timespec *rqtp, struct timespec *rmtp);

PrevHomeNext
Execution Scheduling [POSIX Section 13]UpMessage Passing [POSIX Section 15]
\ No newline at end of file diff --git a/doc/html/ref/posix-compatibility.html b/doc/html/ref/posix-compatibility.html new file mode 100644 index 00000000..2f678dff --- /dev/null +++ b/doc/html/ref/posix-compatibility.html @@ -0,0 +1,318 @@ + + + + + + + + +eCos POSIX compatibility layer +
eCos Reference Manual
PrevNext

References and Bibliography

[Lewine] + Donald A. Lweine + Posix Programmer’s Guide: Writing Portable Unix + Programs With the POSIX.1 Standard O’Reilly & + Associates; ISBN: 0937175730.

[Lewis1] + Bil Lewis + Daniel J. Berg + Threads Primer: A Guide to Multithreaded Programming + Prentice Hall + ISBN: 013443698 +

[Lewis2] + Bil Lewis + Daniel J. Berg + Multithreaded Programming With Pthreads + Prentice Hall Computer Books + ISBN: 0136807291 +

[Nichols] + Bradford Nichols + Dick Buttlar + Jacqueline Proulx Farrell + Pthreads Programming: A POSIX Standard for Better + Multiprocessing (O’Reilly Nutshell) + O’Reilly & Associates + ISBN: 1565921151 +

[Norton] + Scott J. Norton + Mark D. Depasquale + Thread Time: The MultiThreaded Programming Guide + Prentice Hall + ISBN: 0131900676

[POSIX] + Portable Operating System Interface(POSIX) - +Part 1: System Application Programming Interface (API)[C +Language] + ISO/IEC 9945-1:1996, IEEE

[SUS2] + Open Group; Single Unix Specification, Version 2 + http://www.opengroup.org/public/pubs/online/7908799/index.html +


PrevHomeNext
PCI Library reference POSIX Standard Support
\ No newline at end of file diff --git a/doc/html/ref/posix-data-interchange-format.html b/doc/html/ref/posix-data-interchange-format.html new file mode 100644 index 00000000..9f2bd93d --- /dev/null +++ b/doc/html/ref/posix-data-interchange-format.html @@ -0,0 +1,167 @@ + + + + + + + + +Data Interchange Format [POSIX Section 10] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext


PrevHomeNext
System Databases [POSIX Section 9]UpSynchronization [POSIX Section 11]
\ No newline at end of file diff --git a/doc/html/ref/posix-device-and-class-specific-functions.html b/doc/html/ref/posix-device-and-class-specific-functions.html new file mode 100644 index 00000000..50157c64 --- /dev/null +++ b/doc/html/ref/posix-device-and-class-specific-functions.html @@ -0,0 +1,253 @@ + + + + + + + + +Device and Class Specific Functions [POSIX Section 7] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Device and Class Specific Functions [POSIX Section 7]

Functions Implemented

speed_t cfgetospeed( const struct termios *termios_p ); 
+int cfsetospeed( struct termios *termios_p, speed_t speed ); 
+speed_t cfgetispeed( const struct termios *termios_p ); 
+int cfsetispeed( struct termios *termios_p, speed_t speed ); 
+int tcgetattr( int fd, struct termios *termios_p ); 
+int tcsetattr( int fd, int optional_actions,
+	       const struct termios *termios_p ); 
+int tcsendbreak( int fd, int duration ); 
+int tcdrain( int fd );
+int tcflush( int fd, int queue_selector ); 
+int tcsendbreak( int fd, int action );

Functions Omitted

pid_t tcgetpgrp( int fd ); 
+int tcsetpgrp( int fd, pid_t pgrp );

PrevHomeNext
Input and Output [POSIX Section 6]UpC Language Services [POSIX Section 8]
\ No newline at end of file diff --git a/doc/html/ref/posix-execution-scheduling.html b/doc/html/ref/posix-execution-scheduling.html new file mode 100644 index 00000000..b0a3612e --- /dev/null +++ b/doc/html/ref/posix-execution-scheduling.html @@ -0,0 +1,372 @@ + + + + + + + + +Execution Scheduling [POSIX Section 13] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Execution Scheduling [POSIX Section 13]

Functions Implemented

int sched_yield(void); 
+int sched_get_priority_max(int policy); 
+int sched_get_priority_min(int policy); 
+int sched_rr_get_interval(pid_t pid, struct timespec *t); 
+int pthread_attr_setscope(pthread_attr_t *attr, int scope); 
+int pthread_attr_getscope(const pthread_attr_t *attr, int *scope); 
+int pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit); 
+int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inherit); 
+int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); 
+int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
+int pthread_attr_setschedparam( pthread_attr_t *attr, const struct sched_param *param); 
+int pthread_attr_getschedparam( const pthread_attr_t *attr,
+	                        struct sched_param *param); 
+int pthread_setschedparam(pthread_t thread, int policy,
+	                  const struct sched_param *param); 
+int pthread_getschedparam(pthread_t thread, int *policy,
+	                  struct sched_param *param); 
+int pthread_mutexattr_setprotocol( pthread_mutexattr_t *attr,
+                                   int protocol);
+int pthread_mutexattr_getprotocol( pthread_mutexattr_t *attr,
+                                   int *protocol); 
+int pthread_mutexattr_setprioceiling( pthread_mutexattr_t *attr,
+                                      int prioceiling); 
+int pthread_mutexattr_getprioceiling( pthread_mutexattr_t *attr,
+	                              int *prioceiling);
+int pthread_mutex_setprioceiling( pthread_mutex_t *mutex,
+	                          int prioceiling,
+	                          int *old_ceiling); 
+int pthread_mutex_getprioceiling( pthread_mutex_t *mutex,
+                                  int *prioceiling);

Functions Omitted

int sched_setparam(pid_t pid, const struct sched_param *param); 
+int sched_getparam(pid_t pid, struct sched_param *param); 
+int sched_setscheduler(pid_t pid, int policy,
+	               const struct sched_param *param); 
+int sched_getscheduler(pid_t pid);

Notes


PrevHomeNext
Memory Management [POSIX Section 12]UpClocks and Timers [POSIX Section 14]
\ No newline at end of file diff --git a/doc/html/ref/posix-files-and-directories.html b/doc/html/ref/posix-files-and-directories.html new file mode 100644 index 00000000..5c30874a --- /dev/null +++ b/doc/html/ref/posix-files-and-directories.html @@ -0,0 +1,271 @@ + + + + + + + + +Files and Directories [POSIX Section 5] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Files and Directories [POSIX Section 5]

Functions Implemented

DIR *opendir( const char *dirname ); 
+struct dirent *readdir( DIR *dirp ); 
+int readdir_r( DIR *dirp, struct dirent *entry,
+               struct dirent **result ); 
+void rewinddir( DIR *dirp ); 
+int closedir( DIR *dirp ); 
+int chdir( const char *path ); 
+char *getcwd( char *buf, size_t size );
+int open( const char * path , int oflag , ... ); 
+int creat( const char * path, mode_t mode ); 
+int link( const char *existing, const char *new ); 
+int mkdir( const char *path, mode_t mode ); 
+int unlink( const char *path ); 
+int rmdir( const char *path ); 
+int rename( const char *old, const char *new ); 
+int stat( const char *path, struct stat *buf ); 
+int fstat( int fd, struct stat *buf ); 
+int access( const char *path, int amode ); 
+long pathconf(const char *path, int name); 
+long fpathconf(int fd, int name);

Functions Omitted

mode_t umask( mode_t cmask ); 
+int mkfifo( const char *path, mode_t mode ); 
+int chmod( const char *path, mode_t mode );			// TBA 
+int fchmod( int fd, mode_t mode );				// TBA 
+int chown( const char *path, uid_t owner, gid_t group ); 
+int utime( const char *path, const struct utimbuf *times );	// TBA 
+int ftruncate( int fd, off_t length );                          // TBA

PrevHomeNext
Process Environment [POSIX Section 4]UpInput and Output [POSIX Section 6]
\ No newline at end of file diff --git a/doc/html/ref/posix-input-and-output.html b/doc/html/ref/posix-input-and-output.html new file mode 100644 index 00000000..0d6f2621 --- /dev/null +++ b/doc/html/ref/posix-input-and-output.html @@ -0,0 +1,243 @@ + + + + + + + + +Input and Output [POSIX Section 6] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Input and Output [POSIX Section 6]

Functions Implemented

int dup( int fd ); 
+int dup2( int fd, int fd2 ); 
+int close(int fd); 
+ssize_t	read(int fd, void *buf, size_t nbyte); 
+ssize_t	write(int fd, const void *buf, size_t nbyte); 
+int fcntl( int fd, int cmd, ... ); 
+off_t lseek(int fd, off_t offset, int whence); 
+int fsync( int fd );
+int fdatasync( int fd );

Functions Omitted

int pipe( int fildes[2] ); 
+int aio_read( struct aiocb *aiocbp );				// TBA 
+int aio_write( struct aiocb *aiocbp );				// TBA 
+int lio_listio( int mode, struct aiocb *const list[],
+                int nent, struct sigevent *sig);		// TBA 
+int aio_error( struct aiocb *aiocbp );				// TBA 
+int aio_return( struct aiocb *aiocbp );				// TBA 
+int aio_cancel( int fd, struct aiocb *aiocbp );			// TBA 
+int aio_suspend( const struct aiocb *const list[],
+                 int nent, const struct timespec *timeout );	// TBA 
+int aio_fsync( int op, struct aiocb *aiocbp );
+// TBA

PrevHomeNext
Files and Directories [POSIX Section 5]UpDevice and Class Specific Functions [POSIX Section 7]
\ No newline at end of file diff --git a/doc/html/ref/posix-memory-management.html b/doc/html/ref/posix-memory-management.html new file mode 100644 index 00000000..7fda5d5d --- /dev/null +++ b/doc/html/ref/posix-memory-management.html @@ -0,0 +1,199 @@ + + + + + + + + +Memory Management [POSIX Section 12] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Memory Management [POSIX Section 12]

Functions Omitted

int mlockall( int flags ); 
+int munlockall( void ); 
+int mlock( const void *addr, size_t len ); 
+int munlock( const void *addr, size_t len ); 
+void mmap( void *addr, size_t len, int prot, int flags, 	 
+	   int fd, off_t off ); 
+int munmap( void *addr, size_t len ); 
+int mprotect( const void *addr, size_t len, int prot ); 
+int msync( void *addr, size_t len, int flags ); 
+int shm_open( const char *name, int oflag, mode_t mode ); 
+int shm_unlink( const char *name );

PrevHomeNext
Synchronization [POSIX Section 11]UpExecution Scheduling [POSIX Section 13]
\ No newline at end of file diff --git a/doc/html/ref/posix-message-passing.html b/doc/html/ref/posix-message-passing.html new file mode 100644 index 00000000..d3ad633c --- /dev/null +++ b/doc/html/ref/posix-message-passing.html @@ -0,0 +1,233 @@ + + + + + + + + +Message Passing [POSIX Section 15] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Message Passing [POSIX Section 15]

Functions Implemented

mqd_t mq_open( const char *name, int  oflag, ... ); 
+int mq_close( mqd_t  mqdes ); 
+int mq_unlink( const char *name );
+int mq_send( mqd_t mqdes, const char *msg_ptr,
+	     size_t msg_len, unsigned int msg_prio ); 
+ssize_t mq_receive( mqd_t mqdes, char *msg_ptr,
+	            size_t msg_len, unsigned int *msg_prio );
+int mq_setattr( mqd_t mqdes, const struct mq_attr *mqstat,
+	        struct mq_attr *omqstat ); 
+int mq_getattr( mqd_t mqdes, struct mq_attr *mqstat ); 
+int mq_notify( mqd_t mqdes, const struct sigevent *notification );

From POSIX 1003.1d draft:

int mq_send( mqd_t mqdes, const char *msg_ptr,
+	     size_t msg_len, unsigned int msg_prio,
+             const struct timespec *abs_timeout ); 
+ssize_t mq_receive( mqd_t mqdes, char *msg_ptr,
+	            size_t msg_len, unsigned int *msg_prio,
+             const struct timespec *abs_timeout );

PrevHomeNext
Clocks and Timers [POSIX Section 14]UpThread Management [POSIX Section 16]
\ No newline at end of file diff --git a/doc/html/ref/posix-non-posix-functions.html b/doc/html/ref/posix-non-posix-functions.html new file mode 100644 index 00000000..852513dc --- /dev/null +++ b/doc/html/ref/posix-non-posix-functions.html @@ -0,0 +1,230 @@ + + + + + + + + +Non-POSIX Functions +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Non-POSIX Functions

In addition to the standard POSIX functions defined above, the +following non-POSIX functions are defined in the FILEIO package.

General I/O Functions

int ioctl( int fd, CYG_ADDRWORD com, CYG_ADDRWORD data ); 
+int select( int nfd, fd_set *in, fd_set *out, fd_set *ex, struct timeval *tv);

Socket Functions

int socket( int domain, int type, int protocol); 
+int bind( int s, const struct sockaddr *sa, unsigned int len); 
+int listen( int s, int len); 
+int accept( int s, struct sockaddr *sa, socklen_t *addrlen); 
+int connect( int s, const struct sockaddr *sa, socklen_t len); 
+int getpeername( int s, struct sockaddr *sa, socklen_t *len); 
+int getsockname( int s, struct sockaddr *sa, socklen_t *len); 
+int setsockopt( int s, int level, int optname, const void *optval,
+	        socklen_t optlen); 
+int getsockopt( int s, int level, int optname, void *optval,
+	        socklen_t *optlen); 
+ssize_t recvmsg( int s, struct msghdr *msg, int flags); 
+ssize_t recvfrom( int s, void *buf, size_t len, int flags, 
+	          struct sockaddr *from, socklen_t *fromlen); 
+ssize_t recv( int s, void *buf, size_t len, int flags); 
+ssize_t sendmsg( int s, const struct msghdr *msg, int flags); 
+ssize_t sendto( int s, const void *buf, size_t len, int flags, 
+	        const struct sockaddr *to, socklen_t tolen); 
+ssize_t send( int s, const void *buf, size_t len, int flags); 
+int shutdown( int s, int how);

PrevHomeNext
Thread Cancellation [POSIX Section 18]UpµITRON
\ No newline at end of file diff --git a/doc/html/ref/posix-process-environment.html b/doc/html/ref/posix-process-environment.html new file mode 100644 index 00000000..82273275 --- /dev/null +++ b/doc/html/ref/posix-process-environment.html @@ -0,0 +1,313 @@ + + + + + + + + +Process Environment [POSIX Section 4] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Process Environment [POSIX Section 4]

Functions Implemented

int uname( struct utsname *name ); 
+time_t time( time_t *tloc ); 
+char *getenv( const char *name ); 
+int isatty( int fd );
+long sysconf( int name );

Functions Omitted

pid_t getpid( void ); 
+pid_t getppid( void ); 
+uid_t getuid( void ); 
+uid_t geteuid( void ); 
+gid_t getgid( void ); 
+gid_t getegid( void ); 
+int setuid( uid_t uid ); 
+int setgid( gid_t gid ); 
+int getgroups( int gidsetsize, gid_t grouplist[] ); 
+char *getlogin( void ); 
+int getlogin_r( char *name, size_t namesize ); 
+pid_t getpgrp( void ); 
+pid_t setsid( void );
+int setpgid( pid_t pid, pid_t pgid ); 
+char *ctermid( char *s); 
+char *ttyname( int fd );                             // TBA 
+int ttyname_r( int fd, char *name, size_t namesize); // TBA 
+clock_t times( struct tms *buffer );                 // TBA

Notes


PrevHomeNext
POSIX Standard SupportUpFiles and Directories [POSIX Section 5]
\ No newline at end of file diff --git a/doc/html/ref/posix-standard-support.html b/doc/html/ref/posix-standard-support.html new file mode 100644 index 00000000..c73d367d --- /dev/null +++ b/doc/html/ref/posix-standard-support.html @@ -0,0 +1,479 @@ + + + + + + + + +POSIX Standard Support +
eCos Reference Manual
PrevNext

Chapter 31. POSIX Standard Support

eCos contains support for the POSIX Specification (ISO/IEC + 9945-1)[POSIX]. +

POSIX support is divided between the POSIX and the FILEIO + packages. The POSIX package provides support for threads, + signals, synchronization, timers and message queues. The FILEIO + package provides support for file and device I/O. The two + packages may be used together or separately, depending on + configuration. +

This document takes a functional approach to the POSIX + library. Support for a function implies that the data types and + definitions necessary to support that function, and the objects + it manipulates, are also defined. Any exceptions to this are + noted, and unless otherwise noted, implemented functions behave + as specified in the POSIX standard. +

This document only covers the differences between the eCos + implementation and the standard; it does not provide complete + documentation. For full information, see the POSIX standard + [POSIX]. Online, the Open Group Single Unix + Specification [SUS2] provides complete documentation + of a superset of POSIX. If you have access to a Unix system with + POSIX compatibility, then the manual pages for this will be of + use. There are also a number of books available. + [Lewine] covers the process, signal, file and I/O + functions, while [Lewis1], [Lewis2], + [Nichols] and [Norton] cover Pthreads and + related topics (see Bibliography, xref). However, many of these + books are oriented toward using POSIX in non-embedded systems, + so care should be taken in applying them to programming under + eCos. +

The remainder of this chapter broadly follows the structure + of the POSIX Specification. References to the appropriate + section of the Standard are included. +

Omitted functions marked with “// TBA” + are potential candidates for later implementation. +

Process Primitives [POSIX Section 3]

Functions Implemented

int kill(pid_t pid, int sig); 
+int pthread_kill(pthread_t thread, int sig); 
+int sigaction(int sig, const struct sigaction *act,
+              struct sigaction *oact); 
+int sigqueue(pid_t pid, int sig, const union sigval value); 
+int sigprocmask(int how, const sigset_t *set,
+                sigset_t *oset); 
+int pthread_sigmask(int how, const sigset_t *set,
+                    sigset_t *oset); 
+int sigpending(sigset_t *set);
+int sigsuspend(const sigset_t *set); 
+int sigwait(const sigset_t *set, int *sig); 
+int sigwaitinfo(const sigset_t *set, siginfo_t *info); 
+int sigtimedwait(const sigset_t *set, siginfo_t *info,
+                 const struct timespec *timeout); 
+int sigemptyset(sigset_t *set); 
+int sigfillset(sigset_t *set); 
+int sigaddset(sigset_t *set, int signo); 
+int sigdelset(sigset_t *set, int signo); 
+int sigismember(const sigset_t *set, int signo);
+unsigned int alarm( unsigned int seconds );
+int pause( void ); 
+unsigned int sleep( unsigned int seconds );

Functions Omitted

pid_t fork(void); 
+int execl( const char *path, const char *arg, ... ); 
+int execv( const char *path, char *const argv[] ); 
+int execle( const char *path, const char *arg, ... ); 
+int execve( const char *path, char *const argv[],
+            char *const envp[] ); 
+int execlp( const char *path, const char *arg, ... ); 
+int execvp( const char *path, char *const argv[] ); 
+int pthread_atfork( void(*prepare)(void),
+                    void (*parent)(void),
+                    void (*child)() );
+pid_t wait( int *stat_loc );		    
+pid_t waitpid( pid_t pid, int *stat_loc,
+               int options ); 
+void _exit( int status );

Notes


PrevHomeNext
eCos POSIX compatibility layerUpProcess Environment [POSIX Section 4]
\ No newline at end of file diff --git a/doc/html/ref/posix-synchronization.html b/doc/html/ref/posix-synchronization.html new file mode 100644 index 00000000..7f317c1d --- /dev/null +++ b/doc/html/ref/posix-synchronization.html @@ -0,0 +1,361 @@ + + + + + + + + +Synchronization [POSIX Section 11] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Synchronization [POSIX Section 11]

Functions Implemented

int sem_init(sem_t *sem, int pshared, unsigned int value); 
+int sem_destroy(sem_t *sem); 
+int sem_wait(sem_t *sem); 
+int sem_trywait(sem_t *sem); 
+int sem_post(sem_t *sem);
+int sem_getvalue(sem_t *sem, int *sval); 
+int pthread_mutexattr_init( pthread_mutexattr_t *attr); 
+int pthread_mutexattr_destroy( pthread_mutexattr_t *attr); 
+int pthread_mutex_init(pthread_mutex_t *mutex,
+	               const pthread_mutexattr_t *mutex_attr); 
+int pthread_mutex_destroy(pthread_mutex_t *mutex); 
+int pthread_mutex_lock(pthread_mutex_t *mutex); 
+int pthread_mutex_trylock(pthread_mutex_t *mutex); 
+int pthread_mutex_unlock(pthread_mutex_t *mutex); 
+int pthread_condattr_init(pthread_condattr_t *attr); 
+int pthread_condattr_destroy(pthread_condattr_t *attr); 
+int pthread_cond_init(pthread_cond_t *cond, 
+	               const pthread_condattr_t *attr); 
+int pthread_cond_destroy(pthread_cond_t *cond); 
+int pthread_cond_signal(pthread_cond_t *cond); 
+int pthread_cond_broadcast(pthread_cond_t *cond); 
+int pthread_cond_wait(pthread_cond_t *cond, 
+	               pthread_mutex_t *mutex);
+int pthread_cond_timedwait(pthread_cond_t *cond,
+	                   pthread_mutex_t *mutex,
+	                   const struct timespec *abstime);

Functions Omitted

sem_t *sem_open(const char *name, int oflag, ...);		// TBA 
+int sem_close(sem_t *sem);					// TBA 
+int sem_unlink(const char *name);				// TBA 
+int pthread_mutexattr_getpshared( const pthread_mutexattr_t *attr,
+	                          int *pshared );
+int pthread_mutexattr_setpshared( const pthread_mutexattr_t *attr,
+	                          int pshared );
+int  pthread_condattr_getpshared( const pthread_condattr_t *attr, 
+	                          int *pshared);
+int  pthread_condattr_setpshared( const pthread_condattr_t *attr,
+	                          int pshared);

Notes


PrevHomeNext
Data Interchange Format [POSIX Section 10]UpMemory Management [POSIX Section 12]
\ No newline at end of file diff --git a/doc/html/ref/posix-system-databases.html b/doc/html/ref/posix-system-databases.html new file mode 100644 index 00000000..9e6efdf7 --- /dev/null +++ b/doc/html/ref/posix-system-databases.html @@ -0,0 +1,206 @@ + + + + + + + + +System Databases [POSIX Section 9] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

System Databases [POSIX Section 9]

Functions Omitted

struct group *getgrgid( gid_t gid ); 
+int getgrgid( gid_t gid, struct group *grp, char *buffer, 
+	      size_t bufsize, struct group **result ); 
+struct group *getgrname( const char *name ); 
+int getgrname_r( const char *name, struct group *grp,
+                 char *buffer, size_t bufsize, struct group **result ); 
+struct passwd *getpwuid( uid_t uid ); 
+int getpwuid_r( uid_t uid, struct passwd *pwd,
+                char *buffer, size_t bufsize, struct passwd **result ); 
+struct passwd *getpwnam( const char *name ); 
+int getpwnam_r( const char *name, struct passwd *pwd,
+                char *buffer, size_t bufsize, struct passwd **result );

PrevHomeNext
C Language Services [POSIX Section 8]UpData Interchange Format [POSIX Section 10]
\ No newline at end of file diff --git a/doc/html/ref/posix-thread-cancellation.html b/doc/html/ref/posix-thread-cancellation.html new file mode 100644 index 00000000..1fc356f7 --- /dev/null +++ b/doc/html/ref/posix-thread-cancellation.html @@ -0,0 +1,197 @@ + + + + + + + + +Thread Cancellation [POSIX Section 18] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Thread Cancellation [POSIX Section 18]

Functions Implemented

int pthread_cancel(pthread_t thread); 
+int pthread_setcancelstate(int state, int *oldstate); 
+int pthread_setcanceltype(int type, int *oldtype); 
+void pthread_testcancel(void); 
+void pthread_cleanup_push( void (*routine)(void *),
+                           void *arg); 
+void pthread_cleanup_pop( int execute);

PrevHomeNext
Thread-Specific Data [POSIX Section 17]UpNon-POSIX Functions
\ No newline at end of file diff --git a/doc/html/ref/posix-thread-management.html b/doc/html/ref/posix-thread-management.html new file mode 100644 index 00000000..b7e33bd5 --- /dev/null +++ b/doc/html/ref/posix-thread-management.html @@ -0,0 +1,286 @@ + + + + + + + + +Thread Management [POSIX Section 16] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Thread Management [POSIX Section 16]

Functions Implemented

int pthread_attr_init(pthread_attr_t *attr); 
+int pthread_attr_destroy(pthread_attr_t *attr); 
+int pthread_attr_setdetachstate(pthread_attr_t *attr,
+                                int detachstate); 
+int pthread_attr_getdetachstate(const pthread_attr_t *attr,
+	                        int *detachstate); 
+int pthread_attr_setstackaddr(pthread_attr_t *attr,
+                              void *stackaddr); 
+int pthread_attr_getstackaddr(const pthread_attr_t *attr,
+	                      void **stackaddr); 
+int pthread_attr_setstacksize(pthread_attr_t *attr,
+                              size_t stacksize); 
+int pthread_attr_getstacksize(const pthread_attr_t *attr,
+	                      size_t *stacksize); 
+int pthread_create( pthread_t *thread,
+                    const pthread_attr_t *attr,
+	            void *(*start_routine)(void *),
+	            void *arg);
+pthread_t pthread_self( void ); 
+int pthread_equal(pthread_t thread1, pthread_t thread2); 
+void pthread_exit(void *retval); 
+int pthread_join(pthread_t thread, void **thread_return); 
+int pthread_detach(pthread_t thread); 
+int pthread_once(pthread_once_t *once_control,
+	         void (*init_routine)(void));

Notes


PrevHomeNext
Message Passing [POSIX Section 15]UpThread-Specific Data [POSIX Section 17]
\ No newline at end of file diff --git a/doc/html/ref/posix-thread-specific-data.html b/doc/html/ref/posix-thread-specific-data.html new file mode 100644 index 00000000..df03d25c --- /dev/null +++ b/doc/html/ref/posix-thread-specific-data.html @@ -0,0 +1,214 @@ + + + + + + + + +Thread-Specific Data [POSIX Section 17] +
eCos Reference Manual
PrevChapter 31. POSIX Standard SupportNext

Thread-Specific Data [POSIX Section 17]

Functions Implemented

int pthread_key_create(pthread_key_t *key,
+	               void (*destructor)(void *)); 
+int pthread_setspecific(pthread_key_t key, const void *pointer); 
+void *pthread_getspecific(pthread_key_t key); 
+int pthread_key_delete(pthread_key_t key);

PrevHomeNext
Thread Management [POSIX Section 16]UpThread Cancellation [POSIX Section 18]
\ No newline at end of file diff --git a/doc/html/ref/power-attached.html b/doc/html/ref/power-attached.html new file mode 100644 index 00000000..aa621443 --- /dev/null +++ b/doc/html/ref/power-attached.html @@ -0,0 +1,258 @@ + + + + + + + + +Attached and Detached Controllers +
eCos Reference Manual
PrevNext

Attached and Detached Controllers

Name

Attached and Detached Controllers -- control which power controllers are affected by global changes

Detaching Power Controllers

By default the global operation power_set_mode +affects all power controllers. There may be circumstances when this is +not desirable. For example if a particular device is not currently +being used then it can be left switched off: the rest of the system +could be moving between active, idle and +sleep modes, but there is no point in invoking the power +controller for the unused device. To support this the power management +package supports the concept of attached and detached controllers. By +default all controllers are attached, and hence will be affected by +global mode changes. A specific controller can be detached using the +function power_set_controller_attached. This +function takes two arguments, one to specify a particular controller +and another to specify the desired new state. +power_get_controller_attached can be used to +determine whether or not a specific controller is currently attached.

The attached or detached state of a controller only affects what +happens during a global mode change, in other words following a call +to power_set_mode. It is still possible to +manipulate a detached controller using +power_set_controller_mode or +power_set_controller_mode_now.


PrevHomeNext
Support for Policy ModulesUpImplementing a Power Controller
\ No newline at end of file diff --git a/doc/html/ref/power-change.html b/doc/html/ref/power-change.html new file mode 100644 index 00000000..9ec389fa --- /dev/null +++ b/doc/html/ref/power-change.html @@ -0,0 +1,458 @@ + + + + + + + + +Changing Power Modes +
eCos Reference Manual
PrevNext

Changing Power Modes

Name

Changing Power Modes -- reducing or increasing power consumption as needed

Changing the Global Power Mode

The primary functionality supported by the power management package is +to change the system's global power mode. This is achieved by calling +the function power_set_mode with a single +argument, which should be one of PowerMode_Active, +PowerMode_Idle, PowerMode_Sleep +or PowerMode_Off. Typically this function will only +be invoked in certain scenarios:

  1. A typical system will contain a policy module which is primarily +responsible for initiating power mode changes, and a thread inside the +power management package. The policy module will call +power_set_mode, which has the effect of +manipulating some internal state in the power management package and +waking up its thread. When this thread gets scheduled to run (its +priority is controlled by a configuration option), it will iterate +over the power controllers and invoke each controller to change its +power mode. There is support for a callback function, and for +detached power controllers.

  2. After a call to power_set_mode but before the +power management thread has had a chance to iterate over all the +controllers, or even before the thread has been rescheduled at all, +the policy module may decide that a different power mode would be more +appropriate for the current situation and calls +power_set_mode again. This has the effect of +aborting the previous mode change, followed by the power management +thread iterating over the power controllers again for the new mode.

  3. If there is no single policy module responsible for power mode +changes, any code can call power_set_mode. If +there are multiple calls in quick succession, earlier calls will +be aborted and the system should end up in the power mode +corresponding to the last call

  4. As a special case, it is possible for a power controller to call +power_set_mode when invoked by the power +management thread. For example a power controller could decide that it +is inappropriate for the system to go to sleep because the device it +is associated with is still busy. The effect is as if the policy +module had called power_set_mode again before +the mode change had completed.

If the power management package has been configured not to use a +separate thread then obviously the behaviour is somewhat different. +The call to power_set_mode will now iterate over +the various power controllers immediately, rather than leaving this to +a separate thread, and the whole mode change completes before +power_set_mode returns. If some other thread or a +DSR calls power_set_mode concurrently the +behaviour of the system is undefined. However, it is still legal for a +power controller to call power_set_mode: +effectively this is a recursive call; it is detected by the system, +and internal state is updated; the recursive +power_set_mode call now returns, and when the +power controller returns back to the original +power_set_mode call it detects what has happened, +aborts the previous mode change, and starts a new mode change as +requested by the controller.

power_set_mode is normally invoked from thread +context. If a separate power management thread is used it can be +invoked safely from DSR context. If the system is configured not to +use such a thread, it may or may not be safe to invoke this function +from DSR context: essentially the function just iterates through +the various power controllers, and the documentation or source code of +each controller present in the current system will have to be examined +to determine whether or not this can happen safely in DSR context. +power_set_mode should never be invoked from +ISR context.

Manipulating an Individual Power Controller

In some cases it is desirable to set the power mode of an individual +controller separately from the mode for the system as a whole. For +example if a device is not currently being used then the associated +power controller could be set to PowerMode_Off, +even while the system as a whole is still active. This can be achieved +by calling the function +power_set_controller_mode. It takes two +arguments: the first identifies a particular controller; the second +specifies the desired new power mode for that controller. The function +operates in much the same way as power_set_mode, +for example if a separate power management thread is being used then +power_set_controller_mode operates by +manipulating some internal state and waking up that thread. The +limitations are also much the same as for +power_set_mode, so for example +power_set_controller_mode should not be invoked +from inside ISRs.

Manipulating individual controllers is often used in conjunction with +the function power_set_controller_attached, +allowing the policy module to specify which controllers are affected +by global mode changes.

Direct Manipulation of a Power Controller

In exceptional circumstances it may be necessary to invoke a power +controller directly, bypassing the power management thread and +higher-level functionality such as callback functions. The +function power_set_controller_mode_now allows +this. It takes two arguments, a controller and a mode, just like +power_set_controller_mode.

Use of power_set_controller_mode_now is +dangerous. For example no attempt is made to synchronise with any +other power mode changes that might be happening concurrently. A +possible use is when the system gets woken up out of +sleep mode: depending on the hardware, on which power +controllers are present, and on the application code it may be +necessary to wake up some power controllers immediately before the +system as a whole is ready to run again.


PrevHomeNext
Power Management InformationUpSupport for Policy Modules
\ No newline at end of file diff --git a/doc/html/ref/power-controller.html b/doc/html/ref/power-controller.html new file mode 100644 index 00000000..3d2df873 --- /dev/null +++ b/doc/html/ref/power-controller.html @@ -0,0 +1,656 @@ + + + + + + + + +Implementing a Power Controller +
eCos Reference Manual
PrevNext

Implementing a Power Controller

Name

Implementing a Power Controller -- adding power management support to device drivers and +other packages

Implementing a Power Controller

A system will have some number of power controllers. Usually there +will be one power controller for the cpu, +power_controller_cpu, typically provided by one of +the HAL packages and responsible for managing the processor itself and +associated critical components such as memory. Some or all of the +device drivers will provide power controllers, allowing the power +consumption of the associated devices to be controlled. There may be +some arbitrary number of other controllers present in the system. The +power management package does not impose any restrictions on the +number or nature of the power controllers in the system, other than +insisting that at most one power_controller_cpu be +provided.

Each power controller involves a single data structure of type +PowerController, defined in the header file +cyg/power/power.h. These data +structures should all be placed in the table +__POWER__, so that the power management package and +other code can easily locate all the controllers in the system. This +table is constructed at link-time, avoiding code-size or run-time +overheads. To facilitate this the package provides two macros which +should be used to define a power controller, +POWER_CONTROLLER() and +POWER_CONTROLLER_CPU().

The macro POWER_CONTROLLER takes four arguments:

  1. A variable name. This can be used to access the power controller +directly, as well as via the table.

  2. A priority. The table of power controllers is sorted, such that power +controllers with a numerically lower priority come earlier in the +table. The special controller power_controller_cpu +always comes at the end of the table. When moving from a high-power +mode to a lower-powered mode, the power management package iterates +through the table from front to back. When moving to a higher-powered +mode the reverse direction is used. The intention is that the power +controller for a software-only package such as a TCP/IP stack should +appear near the start of the table, whereas the controllers for the +ethernet and similar devices would be near the end of the table. Hence +when the policy module initiates a mode change to a lower-powered mode +the TCP/IP stack gets a chance to cancel this mode change, before the +devices it depends on are powered down. Similarly when moving to a +higher-powered mode the devices will be re-activated before any +software that depends on those devices.

    The header file cyg/power/power.h defines three +priorities PowerPri_Early, +PowerPri_Typical and +PowerPri_Late. For most controllers one of these +priorities, possibly with a small number added or subtracted, will +give sufficient control. If an application developer is uncertain +about the relative priorities of the various controllers, a simple +test program that iterates over +the table will quickly eliminate any confusion.

  3. A constant string identifier. If the system has been configured +without support for such identifiers +(CYGIMP_POWER_PROVIDE_STRINGS) then this identifer +will be discarded at compile-time. Otherwise it will be made available +to higher-level code using the function +power_get_controller_id.

  4. A function pointer. This will be invoked to perform actual mode +changes, as described below.

A typical example of the use of the +POWER_CONTROLLER macro would be as follows:

#include <pkgconf/system.h>
+
+#ifdef CYGPKG_POWER
+# include <cyg/power/power.h>
+
+static void
+xyzzy_device_power_mode_change(
+    PowerController* controller,
+    PowerMode        desired_mode,
+    PowerModeChange  change)
+{
+   // Do the work
+}
+
+static POWER_CONTROLLER(xyzzy_power_controller, \
+                        PowerPri_Late,          \
+                        "xyzzy device",         \
+                        &xyzzy_device_power_mode_change);
+#endif

This creates a variable xyzzy_power_controller, +which is a power controller data structure that will end up near the +end of the table of power controllers. Higher-level code can +iterate through this table and report the string "xyzzy +device" to the user. Whenever there is a mode change +operation that affects this controller, the function +xyzzy_device_power_mode_change will be invoked. +The variable is declared static so this controller cannot be +manipulated by name in any other code. Alternatively, if the variable +had not been declared static other code could manipulate this +controller by name as well as through the table, especially if the +package for the xyzzy device driver explicitly declared this +variable in an exported header file. Obviously exporting the variable +involves a slight risk of a name clash at link time.

The above code explicitly checks for the presence of the power +management package before including that package's header file or +providing any related functionality. Since power management +functionality is optional, such checks are recommended.

The macro POWER_CONTROLLER_CPU only takes two +arguments, a string identifier and a mode change function pointer. +This macro always instantiates a variable +power_controller_cpu so there is no need to provide +a variable name. The resulting power controller structure always +appears at the end of the table, so there is no need to specify a +priority. Typical usage of the POWER_CONTROLLER_CPU +macro would be:

static void
+wumpus_processor_power_mode_change(
+    PowerController* controller,
+    PowerMode        desired_mode,
+    PowerModeChange  change)
+{
+   // Do the work
+}
+
+POWER_CONTROLLER_CPU("wumpus processor", \
+                     &wumpus_processor_power_mode_change);

This defines a power controller structure +power_controller_cpu. It should not be declared +static since higher-level code may well want to manipulate the cpu's +power mode directly, and the variable is declared by the power +management package's header file.

Some care has to be taken to ensure that the power controllers +actually end up in the final executable. If a power controller +variable ends up in an ordinary library and is never referenced +directly then typically the linker will believe that the variable is +not needed and it will not end up in the executable. For eCos packages +this can be achieved in the CDL, by specifying that the containing +source file should end up in libextras.a rather +than the default libtarget.a:

cdl_package CYGPKG_HAL_WUMPUS_ARCH {
+    …
+    compile -library=libextras.a data.c
+}

If the file data.c instantiates a power +controller this is now guaranteed to end up in the final executable, +as intended. Typically HAL and device driver packages will already +have some data that must not be eliminated by the linker, so they will +already contain a file that gets built into +libextras.a. For power controllers defined inside +application code it is important that the power controllers end up in +.o object files rather than in +.a library archive files.

All the real work of a power controller is done by the mode change +function. If the power management package has been configured to use a +separate thread then this mode change function will be invoked by that +thread (except for the special case of power_set_controller_mode_now). +If no separate thread is used then the mode change function will be +invoked directly by power_set_mode or +power_set_controller_mode.

The mode change function will be invoked with three arguments. The +first argument identifies the power controller. Usually this argument +is not actually required since a given mode change function will only +ever be invoked for a single power controller. For example, +xyzzy_device_power_mode_change will only ever be +used in conjunction with xyzzy_power_controller. +However there may be some packages which contain multiple controllers, +all of which can share a single mode change function, and in that case +it is essential to identify the specific controller. The second +argument specifies the mode the controller should switch to, if +possible: it will be one of PowerMode_Active, +PowerMode_Idle, PowerMode_Sleep +or PowerMode_Off. The final argument will be one of +PowerModeChange_Controller, +PowerModeChange_ControllerNow, or +PowerModeChange_Global, and identifies the call +that caused this invocation. For example, if the mode change function +was invoked because of a call to power_set_mode +then this argument will be PowerModeChange_Global. +It is up to each controller to decide how to interpret this final +argument. A typical controller might reject a global request to switch +to off mode if the associated device is still busy, but +if the request was aimed specifically at this controller then it could +instead abort any current I/O operations and switch off the device.

The PowerController data structure contains +one field, mode, that needs to be updated +by the power mode change function. At all times it should indicate the +current mode for this controller. When a mode change is requested the +desired mode is passed as the second argument. The exact operation of +the power mode change function depends very much on what is being +controlled and the current circumstances, but some guidelines are +possible:

  1. If the request can be satisfied without obvious detriment, do so and +update the mode field. Reducing the power +consumption of a device that is not currently being used is generally +harmless.

  2. If a request is a no-op, for example if the system is switching +from idle to sleep mode and the controller +does not distinguish between these modes, simply act as if the request +was satisfied.

  3. If a request is felt to be unsafe, for example shutting down a +device that is still in use, then the controller may decide +to reject this request. This is especially true if the request was a +global mode change as opposed to one intended specifically for this +controller: in the latter case the policy module should be given due +deference. There are a number of ways in which a request can be +rejected:

    1. If the request cannot be satisfied immediately but may be feasible in +a short while, leave the mode field +unchanged. Higher-level code in the policy module can interpret this +as a hint to retry the operation a little bit later. This approach is +also useful if the mode change can be started but will take some time +to complete, for example shutting down a socket connection, and +additional processing will be needed later on.

    2. If the request is felt to be inappropriate, for example switching off +a device that is still in use, the mode change function can +call power_set_controller_mode to reset the +desired mode for this controller back to the current mode. +Higher-level code can then interpret this as a hint that there is more +activity in the system than had been apparent.

    3. For a global mode change, if the new mode is felt to be inappropriate +then the power controller can call power_set_mode +to indicate this. An example of this would be the policy module +deciding to switch off the whole unit while there is still I/O +activity.

Mode change functions should not directly manipulate any other fields +in the PowerController data structure. If it +is necessary to keep track of additional data then static variables +can be used.

It should be noted that the above are only guidelines. Their +application in any given situation may be unclear. In addition the +detailed requirements of specific systems will vary, so even if the +power controller for a given device driver follows the above +guidelines exactly it may turn out that slightly different behaviour +would be more appropriate for the actual system that is being +developed. Fortunately the open source nature of +eCos allows system developers to fine-tune +power controllers to meet their exact requirements.


PrevHomeNext
Attached and Detached ControllersUpeCos USB Slave Support
\ No newline at end of file diff --git a/doc/html/ref/power-info.html b/doc/html/ref/power-info.html new file mode 100644 index 00000000..3c5f347b --- /dev/null +++ b/doc/html/ref/power-info.html @@ -0,0 +1,491 @@ + + + + + + + + +Power Management Information +
eCos Reference Manual
PrevNext

Power Management Information

Name

Obtaining Power Management Information -- finding out about the various power controllers in the system

Accessing Power Controllers

All the power controllers in a system are held in a table, filled in +at link-time. The symbols __POWER__ and +__POWER_END can be used to iterate through this +table, for example:

PowerController* controller;
+for (controller  = &(__POWER__[0]);
+     controller != &(__POWER_END__);
+     controller++) {
+
+     …
+}

Each controller has an associated priority, controlling the order in +which they appear in the table. Typically a software-only component +such as a TCP/IP stack would use a small number for the priority, so +that it appears near the start of the table, whereas a device driver +would be nearer the back of the table. When switching to a +lower-powered mode the power management package will iterate through +this table from front to back, thus ensuring that for example the +TCP/IP stack gets a chance to shut down before the underlying ethernet +or other hardware that the stack depends on. Similarly when switching +to a higher-powered mode the power management package will iterate +through this table from back to front.

In most systems there will be one special controller, +power_controller_cpu, which should be provided by +one of the architectural, variant or platform HAL packages. This +controller will always be the last entry in the table. It is +responsible for the final power down operation when switching to +off mode. Other packages such as device drivers may or +may not declare variable identifiers for their power controllers, +allowing those controllers to be accessed by name as well as by their +entries in the global table.

Global Power Modes

The function power_get_mode can be called at any +time to determine the current power mode for the system as a whole. +The return value will be one of PowerMode_Active, +PowerMode_Idle, PowerMode_Sleep +or PowerMode_Off. In normal circumstances it is +unlikely that PowerMode_Off would be returned since +that mode generally means that the cpu is no longer running.

The function power_get_desired_mode returns the +power mode that the system should be running at. Most of the time this +will be the same value as returned by +power_get_mode. However a different value may be +returned when in the middle of changing power modes. For example, if +the current thread runs at a higher priority than the power management +thread then the latter may have been pre-empted in the middle of a +mode change: power_get_mode will return the mode +the system was running at before the mode change started, and +power_get_desired_mode will return the mode the +system should end up in when the mode change completes, barring +further calls to power_set_mode.

Individual Controller Power Modes

The power management package keeps track of the current and desired +modes for each power controller, as well as the modes for the system as +a whole. The function power_get_controller_mode +takes a single argument, a pointer to a power controller, and returns +the power mode that controller is currently running at. Similarly +power_get_controller_desired_mode returns the +power mode that controller should be running at. Most of the time the +current and desired modes for a given controller will be the same, and +will also be the same as the global power mode. However if the power +management thread is preeempted in the middle of a mode change then +some of the controllers will have been updated to the desired global +mode, whereas others will still be at the old mode. The power +management package also provides functionality for manipulating +individual controllers, and for detaching controllers from +global mode changes.

Power Controller Identification

In some scenarios the power management package will run completely +automated, and there is no need to identify individual power +controllers. Any form of identification such as a string +description would serve no purpose, but would still consume memory in +the final system. In other scenarios it may be very desirable to +provide some means of identification. For example, while still +debugging it may be useful to see a simple string when printing the +contents of a power controller structure. Alternatively, if the +application is expected to provide some sort of user interface that +gives control over which parts of the system are enabled or disabled, +a string identifier for each controller would be useful. To cope with +these scenarios the power management package provides a configuration +option CYGIMP_POWER_PROVIDE_STRINGS. When enabled, +each power controller will contain a pointer to a constant string +which can be accessed via a function +power_get_controller_id. When disabled the system +will not contain these strings, and the function will not be provided. +The following code illustrates how to use this function.

#include <stdio.h>
+#include <pkgconf/system.h>
+#ifndef CYGPKG_POWER
+# error The power management package is not present.
+#endif
+#include <pkgconf/power.h>
+#ifndef CYGIMP_POWER_PROVIDE_STRINGS
+# error Power controller identifiers are not available.
+#endif
+#include <cyg/power/power.h>
+
+static const char*
+mode_to_string(PowerMode mode)
+{
+    const char* result;
+    switch(mode) {
+      case PowerMode_Active : result = "active"; break;
+      case PowerMode_Idle   : result = "idle"; break;
+      case PowerMode_Sleep  : result = "sleep"; break;
+      case PowerMode_Off    : result = "off"; break;
+      default               : result = "<unknown>"; break;
+    }
+    return result;
+}
+
+int
+main(int argc, char** argv)
+{
+    PowerController* controller;
+
+    for (controller = &(__POWER__[0]);
+         controller != &(__POWER_END__);
+         controller++) {
+        printf("Controller @ %p: %s, %s\n", controller,
+               power_get_controller_id(controller),
+               mode_to_string(power_get_controller_mode(controller)));
+    }
+    return 0;
+}

The Power Management Thread

If the power management package is configured to use a separate thread +then a handle for that thread is made available to higher-level code +via the variable power_thread_handle. This handle +can be used for a variety of purposes, including manipulating that +thread's priority.


PrevHomeNext
IntroductionUpChanging Power Modes
\ No newline at end of file diff --git a/doc/html/ref/power-intro.html b/doc/html/ref/power-intro.html new file mode 100644 index 00000000..d0a69d4a --- /dev/null +++ b/doc/html/ref/power-intro.html @@ -0,0 +1,562 @@ + + + + + + + + +Introduction +
eCos Reference Manual
PrevNext

Introduction

Name

Introduction -- eCos support for Power Management

Introduction

The eCos Power Management package provides a framework for +incorporating power management facilities in an embedded application. +However its functionality is deliberately limited.

  1. The package does not contain any support for controlling the current +power mode of any given processor, device or board. Instead it is the +responsibility of the appropriate HAL or device driver package to +implement such support, by implementing power +controllers. The power management package groups these +power controllers together and provides an interface for manipulating +them.

  2. The package does not contain any power management policy support. +Specifically, including this package in an application does not by +itself ever cause the system to go into low-power mode. Instead it is +the responsibility of a separate policy module, provided by +higher-level application code or by some other package, to decide when +it would be appropriate to switch from one power mode to another. The +power management package then provides the mechanisms for making it +happen.

Including Power Management

The power management package is never included automatically in an +eCos configuration: it is not part of any target specification or of +any template. Instead it must be added explicitly to a configuration +if the intended application requires power management functionality. +When using the command-line ecosconfig tool this +can be achieved using a command such as:

$ ecosconfig add power

The generic eCos user documentation should be consulted for more +information on how to use the various tools. The functionality +provided by the power management package is defined in the header file +cyg/power/power.h. This header +file can be used by both C and C++ code.

Power Modes

There are four defined modes of operation:

active

The system is fully operational, and power consumption is expected to +be high.

idle

There has been little or no activity for a short period of time. It is +up to the policy module to determine what constitutes a short period +of time, but typically it will be some tenths of a second or some +small number of seconds. A possible action when entering idle mode is +to reduce the system's clock speed, thus reducing the power drawn by +the cpu.

Note that typically this power mode is not entered automatically +whenever the idle thread starts running. Instead it is entered when +the policy module discovers that for a certain period of time the +system has been spending most of its time in the idle thread. +Theoretically it is possible to implement a policy module that would +cause a switch to idle mode as soon as the idle thread starts running, +but that could result in a great many power mode changes for no +immediate benefit.

sleep

The system has been idle for a significant period of time, perhaps +some tens of seconds. It is desirable to shut down any hardware that +is drawing a significant amount of power, for example a screen +backlight.

off

The system is powered down. Power consumption should be minimized. +Some special action may be needed before the system comes back up, for +example the user may need to press a specific button.

The exact transitions that will happen are decided by the policy +module. One policy module might include transitions from active to +idle, from idle to sleep, from sleep to off, and from any of idle, +sleep or off directly back to active. Another policy module might +only use the active and off states, bypassing the intermediate ones.

Power Controllers

The power management package operates primarily on power controllers. +The main functionality provided by a power controller is to switch the +power mode for some part of the system, for example the lcd display or +the cpu. A power controller consists primarily of a function which +will be invoked to switch the power mode for the part of the overall +system being controlled, plus some auxiliary data. A typical system +will include a number of different power controllers:

  1. Usually there will be one power controller +power_controller_cpu associated with the processor +or with the target platform, and provided by the corresponding HAL +package. It is this controller which is responsible for switching off +the system when entering the off mode, which makes it +somewhat special: attempting to switch off the cpu before other +devices like the lcd display does not make sense because the cpu would +no longer be executing any instructions for the latter operation. +Therefore this power controller has to be invoked last when switching +to a lower-power mode, and similarly when switching back to a +higher-power mode it will be invoked first.

    It should be noted that providing power management support is not a +hard requirement when porting eCos to a new processor or platform, and +many eCos ports predate the availability of power management support. +Therefore for any given platform it is distinctly possible that +power_controller_cpu is not yet provided, and if +full power management functionality is desired then the appropriate +HAL package would have to be extended first. System developers should +examine the relevant HAL documentation and sources to determine what +is actually available.

  2. Some or all of the device drivers will supply their own power +controllers, as part of the device driver package. It is not required +that all device drivers provide power controllers. In some cases, +especially for devices that are integrated with the processor, +power_controller_cpu will take care of the +integrated devices as a side effect. In other cases the hardware may +not provide any functionality that allows power consumption to be +controlled. For any given device driver it is also possible that no +power controller exists either because it was not required when the +driver was written, or because the driver predates the availability of +power management. Again the relevant documentation and sources should +be consulted for further information.

  3. There may be power controllers which are not associated directly with +any specific hardware. For example a TCP/IP stack could provide a +power controller so that it gets informed when the system has been +reactivated: by looking at the system clock it can determine for how +long the system has been switched off; using this information it can +then recover from expired dhcp leases, or even to shut down any stream +connections that may have become invalid (although arguably the stack +should have refused to go to off mode while there were +open connections).

Basic Operation

By default the Power Management package creates a thread during +initialization. It is also possible for the package to be used without +such a thread, for example in configurations which do not include a +full kernel, and this alternative is described below. When a separate +thread is used the stacksize and priority for this thread can be +controlled by configuration options +CYGNUM_POWER_THREAD_STACKSIZE and +CYGNUM_POWER_THREAD_PRIORITY. Typically the thread +will just wait on a semaphore internal to the package, and will do +nothing until some other part of the system requests a change to the +power mode.

At some point the policy module will decide that the system should +move into a lower-power mode, for example from active to idle. This is +achieved by calling the function power_set_mode, +provided by the power management package and declared in cyg/power/power.h, with a single +argument, PowerMode_Idle. This function manipulates +some internal state and posts the semaphore, thus waking up the power +management thread. Note that the function returns before the mode +change has completed, and in fact depending on thread priorities this +return may happen before any power controller has been invoked.

When the power management thread wakes up it examines the internal +state to figure out what it should be doing. In this case it is +supposed to change the global power mode, so it will iterate over all +the power controllers requesting each one to switch to the +idle mode. It is up to each power controller to handle +this request appropriately. Optionally the thread will invoke a +callback function after processing each power controller, so that +higher-level code such as the policy module can more easily keep +track of the actual state of each controller. Once the thread has +iterated through all the power controllers it will again wait on the +internal semaphore for the next request to arrive.

Note: At present the power management thread always runs at a single +priority, which defaults to a low priority. A possible future +enhancement would be to support two separate priorities. When +switching to a lower-powered mode the thread would run at a low +priority as before, thus allowing other threads to run and get a +chance to cancel this mode change. When switching to a higher-powered +mode the thread would run at a high priority. This could be especially +important when moving out of the off state: for example +it would ensure that all device drivers get a chance to wake up before +ordinary application threads get to run again and possibly attempt I/O +operations.

Although usually calls to power_set_mode will +come from just one place in the policy module, this is not a hard +requirement. It is possible for multiple threads to call this +function, with no need for any synchronization. If the power +management thread is in the middle of performing a mode change and a +new request comes in, the thread will detect this, abort the current +operation, and start iterating through the power controllers again +with the new mode. This check happens between every power controller +invocation. Usefully this makes it possible for power controllers +themselves to manipulate power modes: a power controller is invoked to +change mode; for some reason it determines that the new mode is +inappropriate; it calls power_set_mode to move +the system back to another mode; when the power controller returns +this event will be detected; the power management thread will abort +the current mode change, and start the new one.

In addition to changing the power mode for the system as a whole, +individual controllers can be manipulated using the function +power_set_controller_mode. For example, while the +system as a whole might be in active mode certain devices +might be kept in sleep mode until they are explicitly +activated. It is possible to mix concurrent calls to +power_set_mode and +power_set_controller_mode, and when a power +controller is invoked it may use +power_set_controller_mode to request further +changes to its own or to another controller's mode as required.

There are some scenarios where the power management package should not +use its own thread. One scenario is if the configuration is +specifically for a single-threaded application such as RedBoot. +Another scenario is if the policy module already involves a separate +thread: it may make more sense if the various power management +operations are synchronous with respect to the calling thread. The use +of a separate thread inside the power management package is controlled +by the configuration option CYGPKG_POWER_THREAD, +which is active only if the kernel package is present and enabled by +default.

If no separate power management thread is used then obviously the +implementations of power_set_mode and +power_set_controller_mode will be somewhat +different: instead of waking up a separate thread to do the work, +these functions will now manipulate the power controllers directly. If +the system does still involve multiple threads then only one thread +may call power_set_mode or +power_set_controller_mode at a time: the power +management package will not provide any synchronization, that must +happen at a higher level. However when a power controller is invoked +it can still call these functions as required.


PrevHomeNext
eCos Power Management SupportUpPower Management Information
\ No newline at end of file diff --git a/doc/html/ref/power-policy.html b/doc/html/ref/power-policy.html new file mode 100644 index 00000000..48a27250 --- /dev/null +++ b/doc/html/ref/power-policy.html @@ -0,0 +1,413 @@ + + + + + + + + +Support for Policy Modules +
eCos Reference Manual
PrevNext

Support for Policy Modules

Name

Support for Policy Modules -- closer integration with higher-level code

Policy Callbacks

The use of a separate thread to perform power mode changes in typical +configurations can cause problems for some policy modules. +Specifically, the policy module can request a mode change for the +system as a whole or for an individual controller, but it does not +know when the power management thread actually gets scheduled to run +again and carry out the request. Although it would be possible for the +policy module to perform some sort of polling, in general that is +undesirable.

To avoid such problems the policy module can install a callback +function using power_set_policy_callback. The +current callback function can be retrieved using +power_get_policy_callback. If a callback function +has been installed then it will be called by the power management +package whenever a power controller has been invoked to perform a mode +change. The callback will be called in the context of the power +management thread, so usually it will have to make use of thread +synchronisation primitives to interact with the main policy module. It +is passed five arguments:

  1. The power controller that has just been invoked to perform a mode +change.

  2. The mode this controller was running at before the invocation.

  3. The current mode this controller is now running at.

  4. The desired mode before the power controller was invoked. Usually this +will be the same as the current mode, unless the controller has +decided for some reason that this was inappropriate.

  5. The current desired mode. This will differ from the previous argument +only if there has was another call to +power_set_mode or +power_set_controller_mode while the power +controller was being invoked, probably by the power controller itself.

A simple example of a policy callback function would be:

static void
+power_callback(
+    PowerController* controller,
+    PowerMode old_mode,
+    PowerMode new_mode,
+    PowerMode old_desired_mode,
+    powerMode new_desired_mode)
+{
+    printf("Power mode change: %s, %s -> %d\n",
+        power_get_controller_id(controller),
+        mode_to_string(old_mode),
+        mode_to_string(new_mode));
+
+    CYG_UNUSED_PARAM(PowerMode, old_desired_mode);
+    CYG_UNUSED_PARAM(PowerMode, new_desired_mode);
+}
+
+int
+main(int argc, char** argv)
+{
+    …
+    power_set_policy_callback(&power_callback);
+    …
+}

If power_set_controller_mode_now is used to +manipulate an individual controller the policy callback will not be +invoked. This function may get called from any context including DSRs, +and even if there is already a call to the policy callback happening +in some other context, so invoking the callback would usually be +unsafe.

If the power management package has not been configured to use a +separate thread then power_set_mode and +power_set_controller_mode will manipulate the +power controllers immediately and invoke the policy callback +afterwards. Therefore the policy callback will typically run in the +same context as the main policy module.

Policy-specific Controller Data

Some policy modules may want to associate some additional data with +each power controller. This could be achieved by for example +maintaining a hash table or similar data structure, but for +convenience the power management package allows higher-level code, +typically the policy module, to store and retrieve one word of data in +each power controller. The function +power_set_controller_policy_data takes two +arguments, a pointer to a power controller and a +CYG_ADDRWORD of data: by appropriate use of casts this +word could be an integer or a pointer to some data structure. The +matching function +power_get_controller_policy_data retrieves the +word previously installed, and can be cast back to an integer or +pointer. The default value for the policy data is 0.

For example the following code fragment stores a simple index value in +each power controller. This could then be retrieved by the policy +callback.

    unsigned int     i = 0;
+    PowerController* controller;
+
+    for (controller = &(__POWER__[0]);
+         controller != &(__POWER_END__);
+         controller++) {
+        power_set_controller_policy_data(controller, (CYG_ADDRWORD) i++);
+    }

Not all policy modules will require per-controller data. The +configuration option +CYGIMP_POWER_PROVIDE_POLICY_DATA can be used to +control this functionality, thus avoiding wasting a small amount of +memory inside each power controller structure.


PrevHomeNext
Changing Power ModesUpAttached and Detached Controllers
\ No newline at end of file diff --git a/doc/html/ref/preferences.png b/doc/html/ref/preferences.png new file mode 100644 index 00000000..7b2a6775 Binary files /dev/null and b/doc/html/ref/preferences.png differ diff --git a/doc/html/ref/profile-functions.html b/doc/html/ref/profile-functions.html new file mode 100644 index 00000000..c005355c --- /dev/null +++ b/doc/html/ref/profile-functions.html @@ -0,0 +1,286 @@ + + + + + + + + +Profiling functions +
eCos Reference Manual
PrevNext

Chapter 52. Profiling functions

API

In order for profile data to be gathered for an application, the +program has to initiate the process. +Once started, execution histogram data will be collected in a +dynamic memory buffer. +This data can be uploaded to a host using TFTP. +A side effect of the upload of the data is that the histogram +is reset. +This is useful, especially for high resolution histograms, since +the histogram data are collected as 16-bit counters which can be quickly +saturated. +For example, if the histogram is being collected at a rate of 10,000 +samples per second, a hot spot in the program could saturate after +only 6.5 seconds.

The API for the application profiling functions can be +found in the file <cyg/profile/profile.h>.

profile_on

This function is used to initiate the gathering of the +runtime execution histogram data.

void profile_on(void *start, void *end, int bucket_size, int resolution);

Calling this function will initiate execution profiling. +An execution histogram is collected at the rate of +resolution times per second. +The area between start and end +will be divided up into a number of buckets, each representing +bucket_size +program bytes in length. Using statistical sampling (via a high speed timer), when +the program counter is found to be within the range +start..end, the appropriate +bucket (histogram entry) will be incremented.

The choice of resolution and bucket_size +control how large the data gathered will be, as well as how much overhead is +encumbered for gathering the histogram. +Smaller values for bucket_size will garner better +results (gprof can more closely align the data with +actual function names) at the expense of a larger data buffer.


PrevHomeNext
Application profilingUpeCos Power Management Support
\ No newline at end of file diff --git a/doc/html/ref/rebuilding-redboot.html b/doc/html/ref/rebuilding-redboot.html new file mode 100644 index 00000000..229830e4 --- /dev/null +++ b/doc/html/ref/rebuilding-redboot.html @@ -0,0 +1,530 @@ + + + + + + + + +Rebuilding RedBoot +
eCos Reference Manual
PrevNext

Chapter 3. Rebuilding RedBoot

Introduction

RedBoot is built as an application on top of eCos. The makefile rules +for building RedBoot are part of the eCos CDL package, so it's +possible to build eCos from the Configuration +Tool, as well as from the command line using +ecosconfig.

Building RedBoot requires only a few steps: selecting the +platform and the RedBoot template, importing a platform specific +configuration file, and finally starting the build.

The platform specific configuration file makes sure the settings +are correct for building RedBoot on the given platform. Each platform +should provide at least two of these configuration files: +redboot_RAM.ecm for a RAM mode RedBoot +configuration and redboot_ROM.ecm or +redboot_ROMRAM.ecm for a ROM or ROMRAM mode +RedBoot configuration. There may be additional +configuration files according to the requirements of the particular +platform.

The RedBoot build process results in a number of files in the +install bin directory. The ELF +file redboot.elf is the pricipal +result. Depending on the platform CDL, there will also be generated +versions of RedBoot in other file formats, such as +redboot.bin (binary format, good when doing an +update of a primary RedBoot image, see the Section called Update the primary RedBoot flash image in Chapter 4), redboot.srec +(Motorola S-record format, good when downloading a RAM mode image for +execution), and redboot.img (stripped ELF format, +good when downloading a RAM mode image for execution, smaller than the +.srec file). Some platforms may provide additional file formats and +also relocate some of these files to a +particular address making them more suitable for downloading using a +different boot monitor or flash programming tools.

The platform specific information in Chapter 5 should be consulted, as there may +be other special instructions required to build RedBoot for particular +platforms.

Rebuilding RedBoot using ecosconfig

To rebuild RedBoot using the +ecosconfig tool, create a temporary +directory for building RedBoot, name it according to the desired +configuration of RedBoot, here RAM: +
$ mkdir /tmp/redboot_RAM
+$ cd /tmp/redboot_RAM

Create the build tree according to the chosen platform, here +using the Hitachi Solution Engine 7751 board as +an example: +

+
$ ecosconfig new se7751 redboot
+U CYGPKG_HAL_SH_7750, new inferred value 0
+U CYGPKG_HAL_SH_7751, new inferred value 1
+U CYGHWR_HAL_SH_IRQ_USE_IRQLVL, new inferred value 1
+U CYGSEM_HAL_USE_ROM_MONITOR, new inferred value 0
+U CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM, new inferred value 0
+U CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS, new inferred value 1
+U CYGFUN_LIBC_STRING_BSD_FUNCS, new inferred value 0
+U CYGPKG_NS_DNS_BUILD, new inferred value 0
+Replace the platform name ("se7751") with the appropriate name for the +chosen platform.

Then import the appropriate platform RedBoot configuration file, +here for RAM configuration: +
$ ecosconfig import ${ECOS_REPOSITORY}/hal/sh/se7751/VERSION/misc/redboot_RAM.ecm
+$ ecosconfig tree
+Replace architecture ("sh"), platform ("se7751") and version +("VERSION") with those appropriate for the +chosen platform and the version number of its HAL package. Also +replace the configuration name ("redboot_RAM.ecm") with that of the +appropriate configuration file.

RedBoot can now be built: +
$ make

The resulting RedBoot files will be in the associated +install directory, in this example, ./install/bin.

In Chapter 5 each platform's +details are described in the form of shell variables. Using those, +the steps to build RedBoot are: +
export REDBOOT_CFG=redboot_ROM
+export VERSION=VERSION
+mkdir /tmp/${REDBOOT_CFG}
+cd /tmp/${REDBOOT_CFG}
+ecosconfig new ${TARGET} redboot
+ecosconfig import ${ECOS_REPOSITORY}/hal/${ARCH_DIR}/${PLATFORM_DIR}/${VERSION}/misc/${REDBOOT_CFG}.ecm
+ecosconfig tree
+make
+To build for another configuration, simply change the +REDBOOT_CFG definition accordingly. Also +make sure the VERSION variable matches the +version of the platform package.

Rebuilding RedBoot from the Configuration Tool

To rebuild RedBoot from the Configuration +Tool, open the template window (Build->Templates) and +select the appropriate Hardware target and in Packages select +"redboot". Then press OK. Depending on the platform, a number of +conflicts may need to be resolved before the build can be started; +select "Continue".

Import the desired RedBoot configuration file from the platform HAL +(File->Import...). Depending on the platform, a number of +conflicts may need to be resolved before the build can be started; +select "Continue". For example, if the platform selected is Hitachi +SE7751 board and the RAM configuration RedBoot should be built, import +the file +hal/sh/se7751/VERSION/misc/redboot_RAM.ecm.

Save the configuration somewhere suitable with enough disk space +for building RedBoot (File->Save...). Choose the name according to +the RedBoot configuration, for example +redboot_RAM.ecc.

Then start the build (Build->Library) and wait for it to +complete. The resulting RedBoot files will be in the associated +install directory, for the example this would be redboot_RAM_install/bin.

As noted above, each platform's details are described in Chapter 5. Use the information provided in +the shell variables to find the configuration file - the path to it is +${ECOS_REPOSITORY}/hal/${ARCH_DIR}/${PLATFORM_DIR}/${VERSION}/misc/${REDBOOT_CFG}.ecm, +where ECOS_REPOSITORY points to the +eCos/RedBoot sources, VERSION is the +version of the package (usually "current") and +REDBOOT_CFG is the desired configuration, +e.g. redboot_RAM.


PrevHomeNext
execUpUpdating RedBoot
\ No newline at end of file diff --git a/doc/html/ref/redboot-commands-and-examples.html b/doc/html/ref/redboot-commands-and-examples.html new file mode 100644 index 00000000..a43af937 --- /dev/null +++ b/doc/html/ref/redboot-commands-and-examples.html @@ -0,0 +1,488 @@ + + + + + + + + +RedBoot Commands and Examples +
eCos Reference Manual
PrevNext

Chapter 2. RedBoot Commands and Examples

Introduction

RedBoot provides three basic classes of commands:

Given the extensible and configurable nature of eCos and RedBoot, +there may be extended or enhanced sets of commands available.

The basic format for commands is:
RedBoot> COMMAND [-S]... [-s val]... operand

Commands may require additional information beyond the basic +command name. In most cases this additional information is optional, with +suitable default values provided if they are not present. + +

FormatDescriptionExample
-SA boolean switch; the behavior of the command will differ, depending +on the presence of the switch. In this example, the -f switch +indicates that a complete initialization of the FIS data should be performed. +There may be many such switches available for any given command and any or all of +them may be present, in any order. RedBoot> fis init -f +
-s valA qualified value; the letter "s" introduces the value, qualifying it's meaning. In the +example, -b 0x100000 specifies where the memory dump should begin. +There may be many such switches available for any given command and any or all of +them may be present, in any order. RedBoot> dump -b 0x100000 -l 0x20 +
operandA simple value; some commands require a single parameter for which an additional +-X switch would be redundant. In the example, JFFS2 +is the name of a flash image. The image name is always required, thus is no need to qualify it with +a switch. +Note that any un-qualified operand must always appear at the end of the command. RedBoot> fis delete JFFS2 +

The list of available commands, and their syntax, can be obtained by +typing help at the command line: +
RedBoot> help
+Manage aliases kept in FLASH memory
+      alias name [value]
+Set/Query the system console baud rate
+      baudrate [-b <rate>]
+Manage machine caches
+      cache [ON | OFF]
+Display/switch console channel
+      channel [-1|<channel number>]
+Display disk partitions
+      disks
+Display (hex dump) a range of memory
+      dump -b <location> [-l <length>] [-s]
+Manage flash images
+      fis {cmds}
+Manage configuration kept in FLASH memory
+      fconfig [-i] [-l] [-n] [-f] [-d] | [-d] nickname [value]
+Execute code at a location
+      go [-w <timeout>] [entry]
+Help about help?
+      help [<topic>]
+Set/change IP addresses
+      ip_address [-l <local_ip_address>] [-h <server_address>]
+Load a file
+      load [-r] [-v] [-d] [-c <channel>] [-h <host>] [-m {TFTP | HTTP | {x|y}MODEM | disk}]
+      [-b <base_address>] <file_name>
+Network connectivity test
+      ping [-v] [-n <count>] [-t <timeout>] [-i <IP_addr]
+      -h <host>
+Reset the system
+      reset
+Display RedBoot version information
+      version
+Display (hex dump) a range of memory
+      x -b <location> [-l <length>] [-s]

Commands can be abbreviated to their shortest +unique string. Thus in the list above, d,du,dum +and dump are all valid for the dump command. The fconfig +command can be abbreviated fc, but +f would be ambiguous with fis.

There is one additional, special command. When RedBoot detects '$' or '+' +(unless escaped via '\') in a command, it switches to GDB protocol mode. At this +point, the eCos GDB stubs take over, allowing connections from a GDB host. +The only way to get back to RedBoot from GDB mode is to restart the platform.

NOTE: Multiple commands may be entered on a single line, separated by the semi-colon “;” character.

The standard RedBoot command set is structured around the bootstrap +environment. These commands are designed to be simple to use and remember, +while still providing sufficient power and flexibility to be useful. No attempt +has been made to render RedBoot as the end-all product. As such, things such +as the debug environment are left to other modules, such as GDB stubs, which +are typically included in RedBoot.

The command set may be also be extended on a platform basis.


PrevHomeNext
Configuring the RedBoot EnvironmentUpCommon Commands
\ No newline at end of file diff --git a/doc/html/ref/redboot-editing-commands.html b/doc/html/ref/redboot-editing-commands.html new file mode 100644 index 00000000..0afe05df --- /dev/null +++ b/doc/html/ref/redboot-editing-commands.html @@ -0,0 +1,301 @@ + + + + + + + + +RedBoot Editing Commands +
eCos Reference Manual
PrevChapter 1. Getting Started with RedBootNext

RedBoot Editing Commands

RedBoot +uses the following line editing commands. +

+

  • Delete (0x7F) or +Backspace (0x08) +erases the character to the left of the cursor.

  • ^A +moves the cursor (insertion point) to the beginning of the line.

  • ^K +erases all characters on the line from the cursor to the end.

  • ^E +positions the cursor to the end of the line.

  • ^D +erases the character under the cursor.

  • ^F +moves the cursor one character to the right.

  • ^B +moves the cursor one character to the left.

  • ^P +replaces the current line by a previous line from the history buffer. +A small number of lines +can be kept as history. Using ^P (and ^N), the current line can be replaced +by any one of the previously typed lines.

  • ^N +replaces the current line by the next line from the history buffer.

In the case of the fconfig +command, additional editing commands are possible. +As data are entered for this command, the current/previous value +will be displayed and the cursor placed at the end of that data. +The user may use the editing keys (above) to move around in the data +to modify it as appropriate. +Additionally, when certain +characters are entered at the end of the current value, +i.e. entered separately, certain behavior is elicited.

  • ^ (caret) switch to editing the previous item in the +fconfig list. If fconfig edits item A, followed by item B, +pressing ^ when changing item B, allows you to change item A. This is similar +to the up arrow. +Note: ^P and ^N do not have the same meaning while editing +fconfig data and should not be used.

  • . (period) stop editing any further items. This does not change +the current item.

  • Return leaves the value +for this item unchanged. Currently it is not possible to step through the +value for the start-up script; it must always be retyped.


PrevHomeNext
User InterfaceUpRedBoot Startup Mode
\ No newline at end of file diff --git a/doc/html/ref/redboot.html b/doc/html/ref/redboot.html new file mode 100644 index 00000000..a4263b56 --- /dev/null +++ b/doc/html/ref/redboot.html @@ -0,0 +1,181 @@ + + + + + + + + +RedBoot™ User's Guide +
eCos Reference Manual
PrevNext


PrevHomeNext
Kernel Real-time Characterization Getting Started with RedBoot
\ No newline at end of file diff --git a/doc/html/ref/reset-command.html b/doc/html/ref/reset-command.html new file mode 100644 index 00000000..667105d1 --- /dev/null +++ b/doc/html/ref/reset-command.html @@ -0,0 +1,241 @@ + + + + + + + + +reset +
eCos Reference Manual
PrevNext

reset

Name

reset -- Reset the device

Arguments

None

Description

The reset command causes the target platform to be reset. +Where possible (hardware support permitting), this will be +equivalent to a power-on reset condition. +

Examples

Reset the platform. +
RedBoot> reset
+... Resetting.+... Waiting for network card: .
+Socket Communications, Inc: Low Power Ethernet CF Revision C 5V/3.3V 08/27/98
+Ethernet eth0: MAC address 00:c0:1b:00:ba:28
+IP: 192.168.1.29, Default server: 192.168.1.101
+
+RedBoot(tm) bootstrap and debug environment [ROM]
+Non-certified release, version UNKNOWN - built 10:41:41, May 14 2002
+
+Platform: Compaq iPAQ Pocket PC (StrongARM 1110) 
+Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
+
+RAM: 0x00000000-0x01fc0000, 0x00014748-0x01f71000 available
+FLASH: 0x50000000 - 0x51000000, 64 blocks of 0x00040000 bytes each.
+RedBoot> 
+


PrevHomeNext
pingUpversion
\ No newline at end of file diff --git a/doc/html/ref/resource-usage.html b/doc/html/ref/resource-usage.html new file mode 100644 index 00000000..8eaf54e2 --- /dev/null +++ b/doc/html/ref/resource-usage.html @@ -0,0 +1,330 @@ + + + + + + + + +RedBoot Resource Usage +
eCos Reference Manual
PrevChapter 1. Getting Started with RedBootNext

RedBoot Resource Usage

RedBoot takes up both flash and RAM resources depending on its +startup mode and number of enabled features. There are also other +resources used by RedBoot, such as timers. Platform-specific resources +used by RedBoot are listed in the platform specific parts of this +manual.

Both flash and RAM resources used by RedBoot depend to some +degree on the features enabled in the RedBoot configuration. It is +possible to reduce in particular the RAM resources used by RedBoot by +removing features that are not needed. Flash resources can also be +reduced, but due to the granularity of the flash (the block sizes), +reductions in feature size do not always result in flash resource +savings.

Flash Resources

On many platforms, a ROM mode RedBoot image resides in the first +flash sectors, working as the board's primary boot monitor. On these +platforms, it is also normal to reserve a similar amount of flash for +a secondary RAM mode image, which is used when updating the primary +ROM mode image.

On other platforms, a ROMRAM mode RedBoot image is used as the +primary boot monitor. On these platforms there is not normally +reserved space for a RAM mode RedBoot image, since the ROMRAM mode +RedBoot is capable of updating the primary boot monitor image.

Most platforms also contain a FIS directory (keeping track of +available flash space) and a RedBoot config block (containing RedBoot +board configuration data).

To see the amount of reserved flash memory, run the fis +list command: +
RedBoot> fis list
+Name              FLASH addr  Mem addr    Length      Entry point
+RedBoot           0x00000000  0x00000000  0x00020000  0x00000000
+RedBoot[RAM]      0x00020000  0x06020000  0x00020000  0x060213C0
+RedBoot config    0x0007F000  0x0007F000  0x00001000  0x00000000
+FIS directory     0x00070000  0x00070000  0x0000F000  0x00000000

To save flash resources, use a ROMRAM mode RedBoot, or if using +a ROM mode RedBoot, avoid reserving space for the RedBoot[RAM] image +(this is done by changing the RedBoot configuration) and download the +RAM mode RedBoot whenever it is needed. If the RedBoot image takes up +a fraction of an extra flash block, it may be possible to reduce the +image size enough to free this block by removing some features.

RAM Resources

RedBoot reserves RAM space for its run-time data, and such +things as CPU exception/interrupt tables. It normally does so at the +bottom of the memory map. It may also reserve space at the top of the +memory map for configurable RedBoot features such as the net stack +and zlib decompression support.

To see the actual amount of reserved space, issue the +version command, which prints the RedBoot banner, +including the RAM usage: +
RedBoot> version
+
+RedBoot(tm) bootstrap and debug environment [ROM]
+Non-certified release, version UNKNOWN - built 13:31:57, May 17 2002
+
+Platform: FooBar (SH 7615)
+Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
+
+RAM: 0x06000000-0x06080000, 0x06012498-0x06061000 available
+FLASH: 0x00000000 - 0x00080000, 8 blocks of 0x00010000 bytes each.

To simplify operations that temporarily need data in free +memory, the limits of free RAM are also available as aliases (aligned +to the nearest kilo-byte limit). These are named +FREEMEMLO and +FREEMEMHI, and can +be used in commands like any user defined alias: +
RedBoot> load -r -b %{FREEMEMLO} file
+Raw file loaded 0x06012800-0x06013e53, assumed entry at 0x06012800
+
RedBoot> x -b %{FREEMEMHI}
+06061000: 86 F5 EB D8 3D 11 51 F2  96 F4 B2 DC 76 76 8F 77  |....=.Q.....vv.w|
+06061010: E6 55 DD DB F3 75 5D 15  E0 F3 FC D9 C8 73 1D DA  |.U...u]......s..|

To reduce RedBoot's RAM resource usage, use a ROM mode +RedBoot. The RedBoot features that use most RAM are the net stack, the +flash support and the gunzip support. These, and other features, can +be disabled to reduce the RAM footprint, but obviously at the cost of +lost functionality.


PrevHomeNext
RedBoot Startup ModeUpConfiguring the RedBoot Environment
\ No newline at end of file diff --git a/doc/html/ref/sa1100mm.html b/doc/html/ref/sa1100mm.html new file mode 100644 index 00000000..d470c764 --- /dev/null +++ b/doc/html/ref/sa1100mm.html @@ -0,0 +1,362 @@ + + + + + + + + +ARM/StrongARM(SA1100) Intel SA1100 Multimedia Board +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

ARM/StrongARM(SA1100) Intel SA1100 Multimedia Board

Memory Maps

The first level page table is located at physical address 0xc0004000. +No second level tables are used.

Physical Address Range     Description
+-----------------------    ----------------------------------
+0x00000000 - 0x000fffff    Boot flash
+0x08000000 - 0x083fffff    Application flash
+0x10000000 - 0x107fffff    SA-1101 Board Registers
+0x18000000 - 0x180fffff    Ct8020 DSP
+0x18400000 - 0x184fffff    XBusReg
+0x18800000 - 0x188fffff    SysRegA
+0x18c00000 - 0x18cfffff    SysRegB
+0x19000000 - 0x193fffff    Spare CPLD A
+0x19400000 - 0x197fffff    Spare CPLD B
+0x20000000 - 0x3fffffff    PCMCIA
+0x80000000 - 0xbfffffff    SA1100 Internal Registers
+0xc0000000 - 0xc07fffff    DRAM Bank 0
+0xe0000000 - 0xe7ffffff    Cache Clean
+Virtual Address Range    C B  Description
+
+
+-----------------------  - -  ----------------------------------
+0x00000000 - 0x007fffff  Y Y  DRAM Bank 0
+0x08000000 - 0x083fffff  Y Y  Application flash
+0x10000000 - 0x100fffff  N N  SA-1101 Registers
+0x18000000 - 0x180fffff  N N  Ct8020 DSP
+0x18400000 - 0x184fffff  N N  XBusReg
+0x18800000 - 0x188fffff  N N  SysRegA
+0x18c00000 - 0x18cfffff  N N  SysRegB
+0x19000000 - 0x193fffff  N N  Spare CPLD A
+0x19400000 - 0x197fffff  N N  Spare CPLD B
+0x20000000 - 0x3fffffff  N N  PCMCIA
+0x50000000 - 0x500fffff  Y Y  Boot flash
+0x80000000 - 0xbfffffff  N N  SA1100 Internal Registers
+0xc0000000 - 0xc07fffff  N Y  DRAM Bank 0
+0xe0000000 - 0xe7ffffff  Y Y  Cache Clean

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=sa1100mm
+export ARCH_DIR=arm
+export PLATFORM_DIR=sa11x0/sa1100mm

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
ARM/StrongARM(SA1100) Intel BrutusUpARM/StrongARM(SA1110) Intel SA1110 (Assabet)
\ No newline at end of file diff --git a/doc/html/ref/screen_main.png b/doc/html/ref/screen_main.png new file mode 100644 index 00000000..7be3651f Binary files /dev/null and b/doc/html/ref/screen_main.png differ diff --git a/doc/html/ref/se7709.html b/doc/html/ref/se7709.html new file mode 100644 index 00000000..06505d9b --- /dev/null +++ b/doc/html/ref/se7709.html @@ -0,0 +1,554 @@ + + + + + + + + +SuperH/SH3(SH7709) Hitachi Solution Engine 7709 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

SuperH/SH3(SH7709) Hitachi Solution Engine 7709

Overview

This +description covers the MS7709SE01 variant. See the Section called SuperH/SH3(SH77X9) Hitachi Solution Engine 77X9 +for instructions for the MS7729SE01 and MS7709SSE0101 variants.

RedBoot uses +the COM1 and COM2 serial ports. The default serial port settings are 38400,8,N,1. +Ethernet is also supported using the 10-base T connector.

Management of onboard flash is also supported.

The following RedBoot configurations are supported: + +

Special RedBoot Commands

The exec command which allows the loading +and execution of Linux kernels +is supported for this board (see the Section called Executing Programs from RedBoot in Chapter 2). The exec parameters used for the SE77x9 are:

-b <addr>

Parameter block address. This is normally the first +page of the kernel image and defaults to 0x8c101000

-i <addr>

Start address of initrd +image

-j <size>

Size of initrd image

-c "args"

Kernel arguments string

-m <flags>

Mount rdonly flags. If set to a non-zero value the +root partition will be mounted read-only.

-f <flags>

RAM disk flags. Should normally be 0x4000

-r <device number>

Root device specification. /dev/ram is 0x0101

-l <type>

Loader type

Finally the kernel entry address can be specified as an optional +argument. The default is 0x8c102000

For the the SE77x9, Linux by default expects to be loaded at +0x8c001000 which conflicts with the data space used by RedBoot. +To work around this, either change the CONFIG_MEMORY_START kernel +option to a higher address, or use the compressed kernel image and load +it at a higher address. For example, setting CONFIG_MEMORY_START to +0x8c100000, the kernel expects to be loaded at address 0x8c101000 with +the entry point at 0x8c102000.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=se77x9
+export ARCH_DIR=sh
+export PLATFORM_DIR=se77x9

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
SuperH/SH3(SH7708) Hitachi EDK7708UpSuperH/SH3(SH7729) Hitachi HS7729PCI
\ No newline at end of file diff --git a/doc/html/ref/se7751.html b/doc/html/ref/se7751.html new file mode 100644 index 00000000..09df26b4 --- /dev/null +++ b/doc/html/ref/se7751.html @@ -0,0 +1,541 @@ + + + + + + + + +SuperH/SH4(SH7751) Hitachi Solution Engine 7751 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

SuperH/SH4(SH7751) Hitachi Solution Engine 7751

Special RedBoot Commands

The exec command which allows the loading +and execution of Linux kernels +is supported for this board (see the Section called Executing Programs from RedBoot in Chapter 2). The exec parameters used for the SE7751 are:

-b <addr>

Parameter block address. This is normally the first +page of the kernel image and defaults to 0x8c101000

-i <addr>

Start address of initrd +image

-j <size>

Size of initrd image

-c "args"

Kernel arguments string

-m <flags>

Mount rdonly flags. If set to a non-zero value the +root partition will be mounted read-only.

-f <flags>

RAM disk flags. Should normally be 0x4000

-r <device number>

Root device specification. /dev/ram is 0x0101

-l <type>

Loader type

Finally the kernel entry address can be specified as an optional +argument. The default is 0x8c102000

On the SE7751, Linux expects to be loaded at address 0x8c101000 with +the entry point at 0x8c102000. This is configurable in the kernel +using the CONFIG_MEMORY_START option.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=se7751
+export ARCH_DIR=sh
+export PLATFORM_DIR=se7751

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
SuperH/SH3(SH77X9) Hitachi Solution Engine 77X9UpThe eCos Hardware Abstraction Layer (HAL)
\ No newline at end of file diff --git a/doc/html/ref/se77x9.html b/doc/html/ref/se77x9.html new file mode 100644 index 00000000..40121b0b --- /dev/null +++ b/doc/html/ref/se77x9.html @@ -0,0 +1,549 @@ + + + + + + + + +SuperH/SH3(SH77X9) Hitachi Solution Engine 77X9 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

SuperH/SH3(SH77X9) Hitachi Solution Engine 77X9

Overview

This +description covers the MS7729SE01 and MS7709SSE0101 variants. See the Section called SuperH/SH3(SH7709) Hitachi Solution Engine 7709 +for instructions for the MS7709SE01 variant.

RedBoot uses +the COM1 and COM2 serial ports. The default serial port settings are 38400,8,N,1. +Ethernet is also supported using the 10-base T connector. Management +of onboard flash is also supported.

The following RedBoot configurations are supported: + +

Special RedBoot Commands

The exec command which allows the loading +and execution of Linux kernels +is supported for this board (see the Section called Executing Programs from RedBoot in Chapter 2). The exec parameters used for the SE77x9 are:

-b <addr>

Parameter block address. This is normally the first +page of the kernel image and defaults to 0x8c101000

-i <addr>

Start address of initrd +image

-j <size>

Size of initrd image

-c "args"

Kernel arguments string

-m <flags>

Mount rdonly flags. If set to a non-zero value the +root partition will be mounted read-only.

-f <flags>

RAM disk flags. Should normally be 0x4000

-r <device number>

Root device specification. /dev/ram is 0x0101

-l <type>

Loader type

Finally the kernel entry address can be specified as an optional +argument. The default is 0x8c102000

On the SE77x9, Linux expects to be loaded at address 0x8c101000 with +the entry point at 0x8c102000. This is configurable in the kernel +using the CONFIG_MEMORY_START option.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=se77x9
+export ARCH_DIR=sh
+export PLATFORM_DIR=se77x9

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
SuperH/SH3(SH7729) Hitachi HS7729PCIUpSuperH/SH4(SH7751) Hitachi Solution Engine 7751
\ No newline at end of file diff --git a/doc/html/ref/services-cpuload.html b/doc/html/ref/services-cpuload.html new file mode 100644 index 00000000..e3e52eff --- /dev/null +++ b/doc/html/ref/services-cpuload.html @@ -0,0 +1,169 @@ + + + + + + + + +CPU load measurements +
eCos Reference Manual
PrevNext


PrevHomeNext
CRC Functions CPU Load Measurements
\ No newline at end of file diff --git a/doc/html/ref/services-crc.html b/doc/html/ref/services-crc.html new file mode 100644 index 00000000..5e40536a --- /dev/null +++ b/doc/html/ref/services-crc.html @@ -0,0 +1,170 @@ + + + + + + + + +CRC Algorithms +
eCos Reference Manual
PrevNext


PrevHomeNext
FTP Client Features CRC Functions
\ No newline at end of file diff --git a/doc/html/ref/services-power.html b/doc/html/ref/services-power.html new file mode 100644 index 00000000..9beb3be3 --- /dev/null +++ b/doc/html/ref/services-power.html @@ -0,0 +1,187 @@ + + + + + + + + +eCos Power Management Support +
eCos Reference Manual
PrevNext

XXI. eCos Power Management Support

Table of Contents
Introduction -- eCos support for Power Management
Power Management Information -- finding out about the various power controllers in the system
Changing Power Modes -- reducing or increasing power consumption as needed
Support for Policy Modules -- closer integration with higher-level code
Attached and Detached Controllers -- control which power controllers are affected by global changes
Implementing a Power Controller -- adding power management support to device drivers and +other packages

PrevHomeNext
Profiling functions Introduction
\ No newline at end of file diff --git a/doc/html/ref/services-profile-gprof.html b/doc/html/ref/services-profile-gprof.html new file mode 100644 index 00000000..40ff46b2 --- /dev/null +++ b/doc/html/ref/services-profile-gprof.html @@ -0,0 +1,229 @@ + + + + + + + + +Application profiling +
eCos Reference Manual
PrevNext

XX. Application profiling


PrevHomeNext
CPU Load Measurements Profiling functions
\ No newline at end of file diff --git a/doc/html/ref/simple.png b/doc/html/ref/simple.png new file mode 100644 index 00000000..dd88cad1 Binary files /dev/null and b/doc/html/ref/simple.png differ diff --git a/doc/html/ref/startup-mode.html b/doc/html/ref/startup-mode.html new file mode 100644 index 00000000..e45f81b1 --- /dev/null +++ b/doc/html/ref/startup-mode.html @@ -0,0 +1,257 @@ + + + + + + + + +RedBoot Startup Mode +
eCos Reference Manual
PrevChapter 1. Getting Started with RedBootNext

RedBoot Startup Mode

+

RedBoot can normally be configured to run in a number of startup +modes (or just "modes" for short), determining its location of +residence and execution: +

ROM mode

In this mode, RedBoot both resides and executes from + ROM memory (flash or EPROM). This mode is used when there are limited + RAM resources. The flash commands cannot update the region of flash + where the RedBoot image resides. In order to update the RedBoot image + in flash, it is necessary to run a RAM mode instance of + RedBoot.

ROMRAM mode

In this mode, RedBoot resides in ROM memory (flash or + EPROM), but is copied to RAM memory before it starts executing. The + RAM footprint is larger than for ROM mode, but there are two + advantages to make up for this: it normally runs faster (relevant + only on slower boards) and it is able to update the flash region + where the image resides.

RAM mode

In this mode, RedBoot both resides and executes from + RAM memory. This is used for updating a primary ROM + mode image in situ and sometimes as part of the RedBoot installation + on the board when there's already an existing (non-RedBoot) boot + monitor available.

You can only use ROM and ROMRAM mode images for booting a + board - a RAM mode image cannot run unless loaded by another ROM + monitor. There is no need for this startup mode if a RedBoot ROMRAM + mode image is the primary boot monitor. When this startup mode is + programmed into flash (as a convenience as it's fast to load from + flash) it will generally be named as "RedBoot[RAM]" in the FIS + directory.

+ +The chosen mode has influence on flash and RAM resource usage (see +the Section called RedBoot Resource Usage) and the procedure of an in situ update +of RedBoot in flash (see Chapter 4).

The startup mode is controlled by the option CYG_HAL_STARTUP +which resides in the platform HAL. Some platforms provide only some of +the RAM, ROM, and ROMRAM modes, others provide additional +modes.

To see mode of a currently executing RedBoot, issue the +version command, which prints the RedBoot banner, +including the startup mode (here ROM): +
RedBoot>version
+
+RedBoot(tm) bootstrap and debug environment [ROM]
+Non-certified release, version UNKNOWN - built 13:31:57, May 17 2002


PrevHomeNext
RedBoot Editing CommandsUpRedBoot Resource Usage
\ No newline at end of file diff --git a/doc/html/ref/synth-console.html b/doc/html/ref/synth-console.html new file mode 100644 index 00000000..7bb9b4de --- /dev/null +++ b/doc/html/ref/synth-console.html @@ -0,0 +1,380 @@ + + + + + + + + +The Console Device +
eCos Reference Manual
PrevNext

The Console Device

Name

The console device  -- Show output from the eCos application

Description

The eCos application can generate text output in a variety of ways, +including calling printf or +diag_printf. When the I/O auxiliary is enabled +the eCos startup code will instantiate a console device to process all +such output. If operating in text mode the output will simply go to +standard output, or to a logfile if the -l command +line option is specified. If operating in graphical mode the output +will go to the central text window, and optionally to a logfile as +well. In addition it is possible to control the appearance of the main +text via the target definition file, and to install extra filters for +certain types of text. +

It should be noted that the console device is line-oriented, not +character-oriented. This means that outputting partial lines is not +supported, and some functions such as fflush and +setvbuf will not operate as expected. This +limitation prevents much possible confusion when using filters to +control the appearance of the text window, and has some performance +benefits - especially when the eCos application generates a great deal +of output such as when tracing is enabled. For most applications this +is not a problem, but it is something that developers should be aware +of. +

The console device is output-only, it does not provide any support for +keyboard input. If the application requires keyboard input then that +should be handled by a separate eCos device package and matching +host-side code. +

Installation

The eCos side of the console device is implemented by the +architectural HAL itself, in the source file +synth_diag.c, rather than in a separate device +package. Similarly the host-side implementation, +console.tcl, is part of the architectural HAL's +host-side support. It gets installed automatically alongside the I/O +auxiliary itself, so no separate installation procedure is required. +

Target Definition File

The target definition file +can contain a number of entries related to the console device. These +are all optional, they only control the appearance of text output. If +such control is desired then the relevant options should appear in the +body of a synth_device entry: +

synth_device console {
+    …
+}

The first option is appearance, used to control the +appearance of any text generated by the eCos application that does not +match one of the installed filters. This option takes the same +argument as any other filter, for example: +

synth_device console {
+    appearance -foreground white -background black
+    …
+}

Any number of additional filters can be created with a +filter option, for example: +

synth_device console {
+    …
+    filter trace {^TRACE:.*} -foreground HotPink1 -hide 1
+    …
+}

The first argument gives the new filter a name which will be used in +the filters dialog. Filter names +should be unique. The second argument is a Tcl regular expression. The +console support will match each line of eCos output against this +regular expression, and if a match is found then the filter will be +used for this line of text. The above example matches any line of +output that begins with TRACE:, which corresponds +to the eCos infrastructure's tracing facilities. The remaining options +control the desired appearance for matched text. If some eCos output +matches the regular expressions for several different filters then +only the first match will be used. +

Target-side + Configuration Options

There are no target-side configuration options related to the console +device. +

Command Line Arguments

The console device does not use any command-line arguments. +

Hooks

The console device does not provide any hooks. +

Additional Tcl Procedures

The console device does not provide any additional Tcl procedures that +can be used by other scripts. +


PrevHomeNext
The I/O Auxiliary's User InterfaceUpSystem Calls
\ No newline at end of file diff --git a/doc/html/ref/synth-gui.html b/doc/html/ref/synth-gui.html new file mode 100644 index 00000000..49bcc009 --- /dev/null +++ b/doc/html/ref/synth-gui.html @@ -0,0 +1,745 @@ + + + + + + + + +The I/O Auxiliary's User Interface +
eCos Reference Manual
PrevNext

The I/O Auxiliary's User Interface

Name

User Interface -- Controlling the I/O Auxiliary

Description

The synthetic target auxiliary is designed to support both extensions +and user customization. Support for the desired devices is dynamically +loaded, and each device can extend the user interface. For example it +is possible for a device to add menu options, place new buttons on the +toolbar, create its own sub-window within the overall layout, or even +create entire new toplevel windows. These subwindows or toplevels +could show graphs of activity such as interrupts or packets being +transferred. They could also allow users to interact with the eCos +application, for example by showing a number of buttons which will be +mapped on to digital inputs in the eCos application. Different +applications will have their own I/O requirements, changing the +host-side support files that get loaded and that may modify the user +interface. The I/O auxiliary also reads in user configuration scripts +which can enhance the interface in the same way. Therefore the exact +user interface will depend on the user and on the eCos application +being run. However the overall layout is likely to remain the same. +

The title bar identifies the window as belonging to an eCos synthetic +target application and lists both the application name and its process +id. The latter is especially useful if the application was started +directly from a shell prompt and the user now wants to attach a gdb +session. The window has a conventional menu bar with the usual +entries, plus a toolbar with buttons for common operations such as cut +and paste. Balloon help is supported. +

There is a central text window, +possibly surrounded by various sub-windows for various devices. For +example there could be a row of emulated LED's above the text window, +and monitors of ethernet traffic and interrupt activity on the right. +At the bottom of the window is a status line, including a small +animation that shows whether or not the eCos application is still +running. +

Menus and the Toolbar

Usually there will be four menus on the menu bar: +File, Edit, +View and Help. +

On the File menu there are three entries related to +saving the current contents of the central text window. +Save is used to save the currently visible +contents of the text window. Any text that is hidden because of +filters will not be written to the savefile. If there has been a +previous Save or Save +As operation then the existing savefile will be re-used, +otherwise the user will be asked to select a suitable file. +Save As also saves just the currently +visible contents but will always prompt the user for a filename. +Save All can be used to save the full +contents of the text window, including any text that is currently +hidden. It will always prompt for a new filename, to avoid confusion +with partial savefiles. +

Usually the eCos application will be run from inside gdb or from a +shell prompt. Killing off the application while it is being debugged +in a gdb session is not a good idea, it would be better to use gdb's +own kill command. Alternatively the eCos +application itself can use the CYG_TEST_EXIT or +cyg_hal_sys_exit functionality. However it is +possible to terminate the application from the I/O auxiliary using +Kill eCos. A clean shutdown will be +attempted, but that can fail if the application is currently halted +inside gdb or if it has crashed completely. As a last resort +SIGKILL will be used. +

When operating in graphical mode the I/O auxiliary will normally +continue to run even after the eCos application has exited. This +allows the user to examine the last few lines of output, and perhaps +perform actions such as saving the output to a file. The +Exit menu item can be used to shut down the +auxiliary. Note that this behaviour can be changed with command line +arguments --exit and +--no-exit. +

If Exit is used while the eCos application +is still running then the I/O auxiliary will first attempt to +terminate the application cleanly, and then exit. +

The Edit menu contains the usual entries for +text manipulation: Cut, +Copy, Paste, +Clear and Select +All. These all operate on the central text window. By +default this window cannot be edited so the cut, paste and clear +operations are disabled. If the user wants to edit the contents of the +text window then the Read Only checkbutton +should be toggled. +

The Preferences menu item brings up a +miscellaneous preferences dialog. One of the preferences relates to +online help: the I/O auxiliary does not currently have a built-in html +viewer; instead it will execute an external browser of some sort. With +the example settings shown, the I/O auxiliary will first attempt to +interact with an existing mozilla session. If that fails it will try +to run a new mozilla instance, or as a last result use the Gnome help +viewer. +

The View menu contains the System +Filters entry, used to edit the settings for the current +filters. +

The Help menu can be used to activate online help +for eCos generally, for the synthetic target as a whole, and for +specific devices supported by the generic target. The Preferences +dialog can be used to select the browser that will be used. +

The Main Text Window

The central text window holds the console output from the eCos +application: the screen shot above shows DHCP initialization data from +the TCP/IP stack, and some output from the main +thread at the bottom. Some devices can insert text of their own, for +example the ethernet device support can be configured to show details +of incoming and outgoing packets. Mixing the output from the eCos +application and the various devices can make it easier to understand +the order in which events occur. +

The appearance of text from different sources can be controlled by +means of filters, and it is also possible to hide some of the text. +For example, if tracing is enabled in the eCos configuration then the +trace output can be given its own colour scheme, making it stand out +from the rest of the output. In addition the trace output is generally +voluminous so it can be hidden by default, made visible only to find +out more about what was happening when a particular problem occurred. +Similarly the ethernet device support can output details of the +various packets being transferred, and using a different background +colour for this output again makes it easier to distinguish from +console output. +

The default appearance for most filters is controlled via the +target definition file. An +example entry might be: +

  filter trace {^TRACE:.*} -foreground HotPink1 -hide 1

The various colours and the hide flag for each filter can be changed +at run-time, using the System Filters item +on the View menu. This will bring up a dialog like +the following: +

It should be noted that the text window is line-oriented, not +character-oriented. If an eCos application sends a partial line of +text then that will remain buffered until a newline character is +received, rather than being displayed immediately. This avoids +confusion when there is concurrent output from several sources. +

By default the text window is read-only. This means it will not allow +cut, paste and clear operations, and keyboard input will be ignored. +The Edit menu has a checkbutton Read +Only which can be toggled to allow write operations. For +example, a user could type in a reminder of what was happening at this +time, or paste in part of a gdb session. Such keyboard input does not +get forwarded to the eCos application: if the latter requires keyboard +input then that should happen via a separate keyboard device. +

Positioning Optional Windows

Some devices may create their own subwindows, for example to monitor +ethernet traffic or to provide additional I/O facilities such as +emulated LED's or buttons. Usually the target definition file can be +used to control the layout of +these windows. This requires an understanding of the overall layout of +the display. +

Subwindows are generally packed in one of eight frames surrounding the +central text window: .main.nw, +.main.n, .main.ne, +.main.w, .main.e, +.main.sw, .main.s, and +.main.se. To position a row of LED's above the text +window and towards the left, a target definition file could contain an +entry such as: +

synth_device led {
+    pack -in .main.n -side left
+    …
+}

Similarly, to put a traffic monitor window on the right of the text +window would involve something like: +

    …
+    monitor_pack -in .main.e -side bottom
+    …

Often it will be sufficient to specify a container frame and one of +left, right, +top or bottom. Full control +over the positioning requires an understanding of Tcl/Tk and in +particular the packing algorithm, and an appropriate reference work +should be consulted. +

Global Settings

Note: This section still to be written - it should document the interaction +between X resources and ecosynth, and how users can control settings +such as the main foreground and background colours. +


PrevHomeNext
Running a Synthetic Target ApplicationUpThe Console Device
\ No newline at end of file diff --git a/doc/html/ref/synth-install.html b/doc/html/ref/synth-install.html new file mode 100644 index 00000000..1326d140 --- /dev/null +++ b/doc/html/ref/synth-install.html @@ -0,0 +1,411 @@ + + + + + + + + +Installation +
eCos Reference Manual
PrevNext

Installation

Name

Installation -- Preparing to use the synthetic target

Host-side Software

To get the full functionality of the synthetic target, users must +build and install the I/O auxiliary ecosynth and various support +files. It is possible to develop applications for the synthetic target +without the auxiliary, but only limited I/O facilities will be +available. The relevant code resides in the host subdirectory of the synthetic target +architectural HAL package, and building it involves the standard +configure, make, and +make install steps. +

There are two main ways of building the host-side software. It is +possible to build both the generic host-side software and all +package-specific host-side software, including the I/O auxiliary. in a +single build tree. This involves using the +configure script at the toplevel of the eCos +repository, which will automatically search the packages hierarchy for host-side +software. For more information on this, see the +README.host file at the top of the repository. +Note that if you have an existing build tree which does not include +the synthetic target architectural HAL package then it will be +necessary to rerun the toplevel configure script: the search for +appropriate packages happens at configure time. +

The alternative is to build just the host-side for this package. +This involves creating a suitable build directory and running the +configure script. Note that building directly in +the source tree is not allowed. +

$ cd <somewhere suitable>
+$ mkdir synth_build
+$ cd synth_build
+$ <repo<>/packages/hal/synth/arch/<version>/host/configure <options>
+$ make
+$ make install

The code makes extensive use of Tcl/TK and requires version 8.3 or +later. This is checked by the configure script. By +default it will use the system's Tcl installation in /usr. If a different, more recent Tcl +installation should be used then its location can be specified using +the options --with-tcl=<path>, +--with-tcl-header=<path> and +--with-tcl-lib=<path>. For more information on these options +see the README.host file at the toplevel of the +eCos repository. +

Some users may also want to specify the install location using a +--prefix=<path> option. The default install +location is /usr/local. It is +essential that the bin +subdirectory of the install location is on the user's search +PATH, otherwise the eCos application will be unable to +locate and execute the I/O auxiliary ecosynth. +

Because ecosynth is run automatically by an eCos application rather +than explicitly by the user, it is not installed in the bin subdirectory itself. Instead it is +installed below libexec, +together with various support files such as images. At configure time +it is usually possible to specify an alternative location for +libexec using +--exec-prefix=<path> or +--libexecdir=<path>. These options should not +be used for this package because the eCos application is built +completely separately and does not know how the host-side was +configured. +

Toolchain

When developing eCos applications for a normal embedded target it is +necessary to use a suitable cross-compiler and related tools such as +the linker. Developing for the synthetic target is easier because you +can just use the standard GNU tools (gcc, g++, ld, …) which +were provided with your Linux distribution, or which you used to build +your own Linux setup. Any reasonably recent version of the tools, for +example gcc 2.96(Red Hat) as shipped with Red Hat Linux 7, should be +sufficient. +

There is one important limitation when using these tools: current gdb +will not support debugging of eCos threads on the synthetic target. As +far as gdb is concerned a synthetic target application is +indistinguishable from a normal Linux application, so it assumes that +any threads will be created by calls to the Linux +pthread_create function provided by the C +library. Obviously this is not the case since the application is never +linked with that library. Therefore gdb never notices the eCos thread +mechanisms and assumes the application is single-threaded. Fixing this +is possible but would involve non-trivial changes to gdb. +

Theoretically it is possible to develop synthetic target applications +on, for example, a PC running Windows and then run the resulting +executables on another machine that runs Linux. This is rarely useful: +if a Linux machine is available then usually that machine will also be +used for building ecos and the application. However, if for some +reason it is necessary or desirable to build on another machine then +this requires a suitable cross-compiler and related tools. If the +application will be running on a typical PC with an x86 processor then +a suitable configure triplet would be +i686-pc-linux-gnu. The installation +instructions for the various GNU tools should be consulted for further +information. +

Hardware Preparation

Preparing a real embedded target for eCos development can be tricky. +Often the first step is to install suitable firmware, usually RedBoot. +This means creating and building a special configuration for eCos with +the RedBoot template, then somehow updating the target's flash chips +with the resulting RedBoot image. Typically it will also be necessary +to get a working serial connection, and possibly set up ethernet as +well. Although usually none of the individual steps are particularly +complicated, there are plenty of ways in which things can go wrong and +it can be hard to figure out what is actually happening. Of course +some board manufacturers make life easier for their developers by +shipping hardware with RedBoot preinstalled, but even then it is still +necessary to set up communication between host and target. +

None of this is applicable to the synthetic target. Instead you can +just build a normal eCos configuration, link your application with the +resulting libraries, and you end up with an executable that you can +run directly on your Linux machine or via gdb. A useful side effect of +this is that application development can start before any real +embedded hardware is actually available. +

Typically the memory map for a synthetic target application will be +set up such that there is a read-only ROM region containing all the +code and constant data, and a read-write RAM region for the data. The +default locations and sizes of these regions depend on the specific +platform being used for development. Note that the application always +executes out of ROM: on a real embedded target much of the development +would involve running RedBoot firmware there, with application code +and data loaded into RAM; usually this would change for the final +system; the firmware would be replaced by the eCos application itself, +configured for ROM bootstrap, and it would perform the appropriate +hardware initialization. Therefore the synthetic target actually +emulates the behaviour of a final system, not of a development +environment. In practice this is rarely significant, although having +the code in read-only memory can help catch some problems in +application code. +


PrevHomeNext
OverviewUpRunning a Synthetic Target Application
\ No newline at end of file diff --git a/doc/html/ref/synth-io-overview.png b/doc/html/ref/synth-io-overview.png new file mode 100644 index 00000000..342a1a78 Binary files /dev/null and b/doc/html/ref/synth-io-overview.png differ diff --git a/doc/html/ref/synth-new-host.html b/doc/html/ref/synth-new-host.html new file mode 100644 index 00000000..2f900157 --- /dev/null +++ b/doc/html/ref/synth-new-host.html @@ -0,0 +1,1741 @@ + + + + + + + + +Writing New Devices - host +
eCos Reference Manual
PrevNext

Writing New Devices - host

Name

Writing New Devices -- extending the synthetic target, host-side

Description

On the host-side adding a new device means writing a Tcl/Tk script +that will handle instantiation and subsequent requests from the +target-side. These scripts all run in the same full interpreter, +extended with various commands provided by the main I/O auxiliary +code, and running in an overall GUI framework. Some knowledge of +programming with Tcl/Tk is required to implement host-side device +support. +

Some devices can be implemented entirely using a Tcl/Tk script. For +example, if the final system will have some buttons then those can be +emulated in the synthetic target using a few Tk widgets. A simple +emulation could just have the right number of buttons in a row. A more +advanced emulation could organize the buttons with the right layout, +perhaps even matching the colour scheme, the shapes, and the relative +sizes. With other devices it may be necessary for the Tcl script to +interact with an external program, because the required functionality +cannot easily be accessed from a Tcl script. For example interacting +with a raw ethernet device involves some ioctl +calls, which is easier to do in a C program. Therefore the +ethernet.tcl script which implements the +host-side ethernet support spawns a separate program +rawether, written in C, that performs the +low-level I/O. Raw ethernet access usually also requires root +privileges, and running a small program rawether +with such privileges is somewhat less of a security risk than the +whole eCos application, the I/O auxiliary, and various dynamically +loaded Tcl scripts. +

Because all scripts run in a single interpreter, some care has +to be taken to avoid accidental sharing of global variables. The best +way to avoid problems is to have each script create its own Tcl +namespace, so for example the ethernet.tcl script +creates a namespace ethernet:: and all variables +and procedures reside in this namespace. Similarly the I/O auxiliary +itself makes use of a synth:: namespace. +

Building and Installation

When an eCos device driver or application code instantiates a device, +the I/O auxiliary will attempt to load a matching Tcl script. The +third argument to synth_auxiliary_instantiate +specifies the type of device, for example ethernet, +and the I/O auxiliary will append a .tcl suffix +and look for a script ethernet.tcl. +

If the device being instantiated is application-specific rather than +part of an eCos package, the I/O auxiliary will look first in the +current directory, then in ~/.ecos/synth. If it is part of an eCos +package then the auxiliary will expect to find the Tcl script and any +support files below libexec/ecos in the install tree - note +that the same install tree must be used for the I/O auxiliary itself +and for any device driver support. The directory hierarchy below +libexec/ecos matches the +structure of the eCos repository, allowing multiple versions of a +package to be installed to allow for incompatible protocol changes. +

The preferred way to build host-side software is to use +autoconf and automake. Usually +this involves little more than copying the +acinclude.m4, configure.in +and Makefile.am files from an existing package, +for example the synthetic target ethernet driver, and then making +minor edits. In acinclude.m4 it may be necessary +to adjust the path to the root of the repository. +configure.in may require a similar change, and +the AC_INIT macro invocation will have to be +changed to match one of the files in the new package. A critical macro +in this file is ECOS_PACKAGE_DIRS which will set +up the correct install directory. Makefile.am may +require some more changes, for example to specify the data files that +should be installed (including the Tcl script). These files should +then be processed using aclocal, +autoconf and automake in that +order. Actually building the software then just involves +configure, make and +make install, as per the instructions in the +toplevel README.host file. +

To assist developers, if the environment variable +ECOSYNTH_DEVEL is set then a slightly different +algorithm is used for locating device Tcl scripts. Instead of looking +only in the install tree the I/O auxiliary will also look in the +source tree, and if the script there is more recent than the installed +version it will be used in preference. This allows developers to +modify the master copy without having to run make +install all the time. +

If a script needs to know where it has been installed it can examine +the Tcl variable synth::device_install_dir . This +variable gets updated whenever a script is loaded, so if the +value may be needed later it should be saved away in a device-specific +variable. +

Instantiation

The I/O auxiliary will source the device-specific +Tcl script when the eCos application first attempts to instantiate a +device of that type. The script should return a procedure that will be +invoked to instantiate a device. +

namespace eval ethernet {
+    …
+    proc instantiate { id instance data } {
+        …
+        return ethernet::handle_request
+    }
+}
+return ethernet::instantiate

The id argument is a unique identifier for this +device instance. It will also be supplied on subsequent calls to the +request handler, and will match the return value of +synth_auxiliary_instantiate on the target side. A +common use for this value is as an array index to support multiple +instances of this types of device. The instance and +data arguments match the corresponding arguments to +synth_auxiliary_instantiate on the target side, so +a typical value for instance would be +eth0, and data is used to pass +arbitrary initialization parameters from target to host. +

The actual work done by the instantiation procedure is obviously +device-specific. It may involve allocating an interrupt vector, adding a +device-specific subwindow to the display, opening a real Linux device, +establishing a socket connection to some server, spawning a separate +process to handle the actual I/O, or a combination of some or all of +the above. +

If the device is successfully instantiated then the return value +should be a handler for subsequent I/O requests. Otherwise the return +value should be an empty string, and on the target-side the +synth_auxiliary_instantiate call will return +-1. The script is responsible for providing +diagnostics explaining +why the device could not be instantiated. +

Handling Requests

When the target-side calls +synth_auxiliary_xchgmsg, the I/O auxiliary will +end up calling the request handler for the appropriate device instance +returned during instantiation: +

namespace eval ethernet {
+    …
+    proc handle_request { id request arg1 arg2 txdata txlen max_rxlen } {
+        …
+        if { <some condition> } {
+            synth::send_reply <error code> 0 ""
+            return
+        }
+        …
+        synth::send_reply <reply code> $packet_len $packet
+    }
+    …
+}

The id argument is the same device id that was +passed to the instantiate function, and is typically used as an array +index to access per-device data. The request, +arg1, arg2, and +max_rxlen are the same values that were passed to +synth_auxiliary_xchgmsg on the target-side, +although since this is a Tcl script obviously the numbers have been +converted to strings. The txdata buffer is raw data +as transmitted by the target, or an empty string if the I/O operation +does not involve any additional data. The Tcl procedures +binary scan, string index and +string range may be found especially useful when +manipulating this buffer. txlen is provided for +convenience, although string length $txdata would +give the same information. +

The code for actually processing the request is of course device +specific. If the target does not expect a reply then the request +handler should just return when finished. If a reply is expected then +there should be a call to synth::send_reply. The +first argument is the reply code, and will be turned into a 32-bit +integer on the target side. The second argument specifies the length +of the reply data, and the third argument is the reply data itself. +For some devices the Tcl procedure binary format +may prove useful. If the reply involves just a code and no additional +data, the second and third arguments should be 0 +and an empty string respectively. +

Attempts to send a reply when none is expected, fail to send a reply +when one is expected, or send a reply that is larger than the +target-side expects, will all be detected by the I/O auxiliary and +result in run-time error messages. +

It is not possible for the host-side code to send unsolicited messages +to the target. If host-side code needs attention from the target, for +example because some I/O operation has completed, then an interrupt +should be raised. +

Interrupts

The I/O auxiliary provides a number of procedures for interrupt +handling. +

synth::interrupt_allocate <name>
+synth::interrupt_get_max
+synth::interrupt_get_devicename <vector>
+synth::interrupt_raise <vector>

synth::interrupt_allocate is normally called during +device instantiation, and returns the next free interrupt vector. This +can be passed on to the target-side device driver in response to a +suitable request, and it can then install an interrupt handler on that +vector. Interrupt vector 0 is used within the +target-side code for the real-time clock, so the allocated vectors +will start at 1. The argument identifies the +device, for example eth0. This is not actually used +internally, but can be accessed by user-initialization scripts that +provide some sort of interrupt monitoring facility (typically via the +interrupt hook). It is possible for a +single device to allocate multiple interrupt vectors, but the +synthetic target supports a maximum of 32 such vectors. +

synth::interrupt_get_max returns the highest +interrupt vector that has been allocated, or 0 if +there have been no calls to +synth::interrupt_allocate. +synth::interrupt_get_devicename returns the string +that was passed to synth::interrupt_allocate when +the vector was allocated. +

synth::interrupt_raise can be called any time after +initialization. The argument should be the vector returned by +synth::interrupt_allocate for this device. It will +activate the normal eCos interrupt handling mechanism so, subject to +interrupts being enabled and this particular interrupt not being +masked out, the appropriate ISR will run. +

Note: At this time it is not possible for a device to allocate a specific +interrupt vector. The order in which interrupt vectors are assigned to +devices effectively depends on the order in which the eCos devices get +initialized, and that may change if the eCos application is rebuilt. A +future extension may allow devices to allocate specific vectors, thus +making things more deterministic. However that will introduce new +problems, in particular the code will have to start worrying about +requests for vectors that have already been allocated. +

Flags and Command Line Arguments

The generic I/O auxiliary code will process the standard command line +arguments, and will set various flag variables accordingly. Some of +these should be checked by device-specific scripts. +

synth::flag_gui

This is set when the I/O auxiliary is operating in graphical mode +rather than text mode. Some functionality such as filters and the GUI +layout are only available in graphical mode. +

    if { $synth::flag_gui } {
+        …
+    }
synth::flag_verbose

The user has requested additional information during startup. Each +device driver can decide how much additional information, if any, +should be produced. +

synth::flag_keep_going

The user has specified -k or +--keep-going, so even if an error occurs the I/O +auxiliary and the various device driver scripts should continue running +if at all possible. Diagnostics should still be generated. +

Some scripts may want to support additional command line arguments. +This facility should be used with care since there is no way to +prevent two different scripts from trying to use the same argument. +The following Tcl procedures are available: +

synth::argv_defined <name>
+synth::argv_get_value <name>

synth::argv_defined returns a boolean to indicate +whether or not a particular argument is present. If the argument is +the name part of a name/value pair, an = character +should be appended. Typical uses might be: +

    if { [synth::argv_defined "-o13"] } {
+        …
+    }
+
+    if { [synth::argv_defined "-mark="] } {
+        …
+    }

The first call checks for a flag -o13 or +--o13 - the code treats options with single and +double hyphens interchangeably. The second call checks for an argument +of the form -mark=<value> or a pair of +arguments -mark <value>. The value part of a +name/value pair can be obtained using +synth::argv_get_value; +

    variable speed 1
+    if { [synth::argv_defined "-mark="] } {
+        set mark [synth::argv_get_value "-mark="]
+        if { ![string is integer $mark] || ($mark < 1) || ($mark > 9) } {
+            <issue diagnostic>
+        } else {
+            set speed $mark
+        }
+    }

synth::argv_get_value should only be used after a +successful call to synth::argv_defined. +At present there is no support for some advanced forms of command line +argument processing. For example it is not possible to repeat a +certain option such as -v or +--verbose, with each occurrence increasing the level +of verbosity. +

If a script is going to have its own set of command-line arguments +then it should give appropriate details if the user specifies +--help. This involves a hook function: +

namespace eval my_device {
+    proc help_hook { } {
+        puts " -o13          : activate the omega 13 device"
+        puts " -mark <speed> : set speed. Valid values are 1 to 9."
+    }
+
+    synth::hook_add "help" my_device::help_hook
+}

The Target Definition File

Most device scripts will want to check entries in the target +definition file for run-time configuration information. The Tcl +procedures for this are as follows: +

synth::tdf_has_device <name>
+synth::tdf_get_devices
+synth::tdf_has_option <devname> <option>
+synth::tdf_get_option <devname> <option>
+synth::tdf_get_options <devname> <option>
+synth::tdf_get_all_options <devname>

synth::tdf_has_device can be used to check whether +or not the target definition file had an entry +synth_device <name>. Usually the name +will match the type of device, so the +console.tcl script will look for a target +definition file entry console. +synth::tdf_get_devices returns a list of all +device entries in the target definition file. +

Once it is known that the target definition file has an entry for a +certain device, it is possible to check for options within the entry. +synth::tdf_has_option just checks for the presence, +returning a boolean: +

    if { [synth::tdf_has_option "console" "appearance"] } {
+        …
+    }

synth::tdf_get_option returns a list of all the +arguments for a given option. For example, if the target definition +file contains an entry: +

synth_device console {
+    appearance -foreground white -background black
+    filter trace {^TRACE:.*} -foreground HotPink1 -hide 1
+    filter xyzzy {.*xyzzy.*} -foreground PapayaWhip
+}

A call +synth::tdf_get_option console appearance +will return the list {-foreground white -background +black}. This list can be manipulated using standard Tcl routines +such as llength and lindex. Some +options can occur multiple times in one entry, for example +filter in the console entry. +synth::tdf_get_options returns a list of lists, +with one entry for each option occurrence. +synth::tdf_get_all_options returns a list of lists +of all options. This time each entry will include the option name as +well. +

The I/O auxiliary will not issue warnings about entries in the target +definition file for devices which were not loaded, unless the +-v or --verbose command line +argument was used. This makes it easier to use a single target +definition file for different applications. However the auxiliary will +issue warnings about options within an entry that were ignored, +because often these indicate a typing mistake of some sort. Hence a +script should always call synth::tdf_has_option, +synth:;tdf_get_option or +synth::tdf_get_options for all valid options, even +if some of the options preclude the use of others. +

Hooks

Some scripts may want to take action when particular events occur, for +example when the eCos application has exited and there is no need for +further I/O. This is supported using hooks: +

namespace eval my_device {
+    …
+    proc handle_ecos_exit { arg_list } {
+        …
+    }
+    synth::hook_add "ecos_exit" my_device::handle_ecos_exit
+}

It is possible for device scripts to add their own hooks and call all +functions registered for those hooks. A typical use for this is by +user initialization scripts that want to monitor some types of I/O. +The available Tcl procedures for manipulating hooks are: +

synth::hook_define <name>
+synth::hook_defined <name>
+synth::hook_add <name> <function>
+synth::hook_call <name> <args>

synth::hook_define creates a new hook with the +specified name. This hook must not already exist. +synth::hook_defined can be used to check for the +existence of a hook. synth::hook_add allows other +scripts to register a callback function for this hook, and +synth::hook_call allows the owner script to invoke +all such callback functions. A hook must already be defined before a +callback can be attached. Therefore typically device scripts will only +use standard hooks and their own hooks, not hooks created by some +other device, because the order of device initialization is not +sufficiently defined. User scripts run from +mainrc.tcl can use any hooks that have been +defined. +

synth::hook_call takes an arbitrary list of +arguments, for example: +

    synth::hook_call "ethernet_rx" "eth0" $packet

The callback function will always be invoked with a single argument, +a list of the arguments that were passed to +synth::hook_call: +

    proc rx_callback { arg_list } {
+        set device [lindex $arg_list 0]
+        set packet [lindex $arg_list 1]
+    }

Although it might seem more appropriate to use Tcl's +eval procedure and have the callback functions +invoked with the right number of arguments rather than a single list, +that would cause serious problems if any of the data contained special +characters such as [ or $. The +current implementation of hooks avoids such problems, at the cost of +minor inconvenience when writing callbacks. +

A number of hooks are defined as standard. Some devices will add +additional hooks, and the device-specific documentation should be +consulted for those. User scripts can add their own hooks if desired. +

exit

This hook is called just before the I/O auxiliary exits. Hence it +provides much the same functionality as atexit in +C programs. The argument list passed to the callback function will be +empty. +

ecos_exit

This hook is called when the eCos application has exited. It is used +mainly to shut down I/O operations: if the application is no longer +running then there is no point in raising interrupts or storing +incoming packets. The callback argument list will be empty. +

ecos_initialized

The synthetic target HAL will send a request to the I/O auxiliary once +the static constructors have been run. All devices should now have been +instantiated. A script could now check how many instances there are of +a given type of device, for example ethernet devices, and create a +little monitor window showing traffic on all the devices. The +ecos_initialized callbacks will be run just before +the user's mainrc.tcl script. The callback +argument list will be empty. +

help

This hook is also invoked once static constructors have been run, but +only if the user specified -h or +--help. Any scripts that add their own command line +arguments should add a callback to this hook which outputs details of +the additional arguments. The callback argument list will be empty. +

interrupt

Whenever a device calls synth::interrupt_raise the +interrupt hook will be called with a single +argument, the interrupt vector. The main use for this is to allow +user scripts to monitor interrupt traffic. +

Output and Filters

Scripts can use conventional facilities for sending text output to the +user, for example calling puts or directly +manipulating the central text widget +.main.centre.text. However in nearly all cases it +is better to use output facilities provided by the I/O auxiliary +itself: +

synth::report <msg>
+synth::report_warning <msg>
+synth::report_error <msg>
+synth::internal_error <msg>
+synth::output <msg> <filter>

synth::report is intended for messages related to +the operation of the I/O auxiliary itself, especially additional +output resulting from -v or +--verbose. If running in text mode the output will go +to standard output. If running in graphical mode the output will go to +the central text window. In both modes, use of -l or +--logfile will modify the behaviour. +

synth::report_warning, +synth::report_error and +synth::internal_error have the obvious meaning, +including prepending strings such as Warning: and +Error:. When the eCos application informs the I/O +auxiliary that all static constructors have run, if at that point +there have been any calls to synth::error then the +I/O auxiliary will exit. This can be suppressed with command line +arguments -k or --keep-going. +synth::internal_error will output some information +about the current state of the I/O auxiliary and then exit +immediately. Of course it should never be necessary to call this +function. +

synth::output is the main routine for outputting +text. The second argument identifies a filter. If running in text mode +the filter is ignored, but if running in graphical mode the filter can +be used to control the appearance of this output. A typical use would +be: +

    synth::output $line "console"

This outputs a single line of text using the +console filter. If running in graphical mode the +default appearance of this text can be modified with the +appearance option in the +synth_device console entry of the target +definition file. The System filters menu +option can be used to change the appearance at run-time. +

Filters should be created before they are used. The procedures +available for this are: +

synth::filter_exists <name>
+synth::filter_get_list
+synth::filter_add <name> [options]
+synth::filter_parse_options <options> <parsed_options> <message>
+synth::filter_add_parsed <name> <parsed_options>

synth::filter_exists can be used to check whether +or not a particular filter already exists: creating two filters with +the same name is not allowed. +synth::filter_get_list returns a list of the +current known filters. synth::filter_add can be +used to create a new filter. The first argument names the new filter, +and the remaining arguments control the initial appearance. A typical +use might be: +

    synth::filter_add "my_device_tx" -foreground yellow -hide 1

It is assumed that the supplied arguments are valid, which typically +means that they are hard-wired in the script. If instead the data +comes out of a configuration file and hence may be invalid, the +I/O auxiliary provides a parsing utility. Typical usage would be: +

    array set parsed_options [list]
+    set message ""
+    if { ![synth::filter_parse_options $console_appearance parsed_options message] } {
+        synth::report_error \
+	        "Invalid entry in target definition file $synth::target_definition\
+	         \n  synth_device \"console\", entry \"appearance\"\n$message"
+    } else {
+        synth::filter_add_parsed "console" parsed_options
+    }

On success parsed_options will be updated with an +internal representation of the desired appearance, which can then be +used in a call to synth::filter_add_parsed. On +failure message will be updated with details of the +parsing error that occurred. +

The Graphical Interface

When the I/O auxiliary is running in graphical mode, many scripts will +want to update the user interface in some way. This may be as simple +as adding another entry to the help menu for the device, or adding a +new button to the toolbar. It may also involve adding new subwindows, +or even creating entire new toplevel windows. These may be simple +monitor windows, displaying additional information about what is going +on in the system in a graphical format. Alternatively they may emulate +actual I/O operations, for example button widgets could be used to +emulate real physical buttons. +

The I/O auxiliary does not provide many procedures related to the +graphical interface. Instead it is expected that scripts will just +update the widget hierarchy directly. +

So adding a new item to the Help menu involves a +.menubar.help add operation with suitable +arguments. Adding a new button to the toolbar involves creating a +child window in .toolbar and packing it +appropriately. Scripts can create their own subwindows and then pack +it into one of .main.nw, +.main.n, .main.ne, +.main.w, .main.e, +.main.sw, .main.s or +.main.se. Normally the user should be allowed to +control this via the target +definition file. The central window .main.centre +should normally be left alone by other scripts since it gets used for +text output. +

The following graphics-related utilities may be found useful: +

synth::load_image <image name> <filename>
+synth::register_ballon_help <widget> <message>
+synth::handle_help <URL>

synth::load_image can be used to add a new image to +the current interpreter. If the specified file has a +.xbm extension then the image will be a +monochrome bitmap, otherwise it will be a colour image of some sort. +A boolean will be returned to indicate success or failure, and +suitable diagnostics will be generated if necessary. +

synth::register_balloon_help provides balloon help +for a specific widget, usually a button on the toolbar. +

synth::handle_help is a utility routine that can be +installed as the command for displaying online help, for example: +

    .menubar.help add command -label "my device" -command \
+        [list synth::handle_help "file://$path"]

PrevHomeNext
Writing New Devices - targetUpPorting
\ No newline at end of file diff --git a/doc/html/ref/synth-new-target.html b/doc/html/ref/synth-new-target.html new file mode 100644 index 00000000..f8262bba --- /dev/null +++ b/doc/html/ref/synth-new-target.html @@ -0,0 +1,830 @@ + + + + + + + + +Writing New Devices - target +
eCos Reference Manual
PrevNext

Writing New Devices - target

Name

Writing New Devices -- extending the synthetic target, target-side

Description

In some ways writing a device driver for the synthetic target is very +similar to writing one for a real target. Obviously it has to provide +the standard interface for that class of device, so for example an +ethernet device has to provide can_send, +send, recv and similar +functions. Many devices will involve interrupts, so the driver +contains ISR and DSR functions and will call +cyg_drv_interrupt_create, +cyg_drv_interrupt_acknowledge, and related +functions. +

In other ways writing a device driver for the synthetic target is very +different. Usually the driver will not have any direct access to the +underlying hardware. In fact for some devices the I/O may not involve +real hardware, instead everything is emulated by widgets on the +graphical display. Therefore the driver cannot just peek and poke +device registers, instead it must interact with host-side code by +exchanging message. The synthetic target HAL provides a function +synth_auxiliary_xchgmsg for this purpose. +

Initialization of a synthetic target device driver is also very +different. On real targets the device hardware already exists when the +driver's initialization routine runs. On the synthetic target it is +first necessary to instantiate the device inside the I/O auxiliary, by +a call to synth_auxiliary_instantiate. That +function performs a special message exchange with the I/O auxiliary, +causing it to load a Tcl script for the desired type of device and run +an instantiation procedure within that script. +

Use of the I/O auxiliary is optional: if the user does not specify +--io on the command line then the auxiliary will not +be started and hence most I/O operations will not be possible. Device +drivers should allow for this possibility, for example by just +discarding any data that gets written. The HAL exports a flag +synth_auxiliary_running which should be checked. +

Instantiating a Device

Device instantiation should happen during the C++ prioritized static +constructor phase of system initialization, before control switches to +cyg_user_start and general application code. This +ensures that there is a clearly defined point at which the I/O +auxiliary knows that all required devices have been loaded. It can +then perform various consistency checks and clean-ups, run the user's +mainrc.tcl script, and make the main window +visible. +

For standard devices generic eCos I/O code will call the device +initialization routines at the right time, iterating through the +DEVTAB table in a static constructor. The same +holds for network devices and file systems. For more custom devices +code like the following can be used: +

#include <cyg/infra/cyg_type.h>
+class mydev_init {
+  public:
+    mydev_init() {
+        …
+    }
+};
+static mydev_init mydev_init_object CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO);

Some care has to be taken because the object +mydev_init_object will typically not be referenced +by other code, and hence may get eliminated at link-time. If the code +is part of an eCos package then problems can be avoided by putting the +relevant file in libextras.a: +

cdl_package CYGPKG_DEVS_MINE {
+    …
+    compile -library=libextras.a init.cxx
+}

For devices inside application code the same can be achieved by +linking the relevant module as a .o file rather +than putting it in a .a library. +

In the device initialization routine the main operation is a call to +synth_auxiliary_instantiate. This takes five +arguments, all of which should be strings: +

package

For device drivers which are eCos packages this should be a directory +path relative to the eCos repository, for example +devs/eth/synth/ecosynth. This will allow the I/O +auxiliary to find the various host-side support files for this package +within the install tree. If the device is application-specific and not +part of an eCos package then a NULL pointer can be used, causing the +I/O auxiliary to search for the support files in the current directory +and then in ~/.ecos/synth +instead. +

version

For eCos packages this argument should be the version of the package +that is being used, for example current. A simple +way to get this version is to use the +SYNTH_MAKESTRING macro on the package name. +If the device is application-specific then a NULL pointer should be +used. +

device

This argument specifies the type of device being instantiated, for +example ethernet. More specifically the I/O +auxiliary will append a .tcl suffix, giving +the name of a Tcl script that will handle all I/O requests for the +device. If the application requires several instances of a type +of device then the script will only be loaded once, but the script +will contain an instantiation procedure that will be called for each +device instance. +

instance

If it is possible to have multiple instances of a device then this +argument identifies the particular instance, for example +eth0 or eth1. Otherwise a NULL +pointer can be used. +

data

This argument can be used to pass additional initialization data from +eCos to the host-side support. This is useful for devices where eCos +configury must control certain aspects of the device, rather than +host-side configury such as the target definition file, because eCos +has compile-time dependencies on some or all of the relevant options. +An example might be an emulated frame buffer where eCos has been +statically configured for a particular screen size, orientation and +depth. There is no fixed format for this string, it will be +interpreted only by the device-specific host-side Tcl script. However +the string length should be limited to a couple of hundred bytes to +avoid possible buffer overflow problems. +

Typical usage would look like: +

    if (!synth_auxiliary_running) {
+      return;
+    }
+    id = synth_auxiliary_instantiate("devs/eth/synth/ecosynth",
+             SYNTH_MAKESTRING(CYGPKG_DEVS_ETH_ECOSYNTH),
+             "ethernet",
+             "eth0",
+             (const char*) 0);

The return value will be a device identifier which can be used for +subsequent calls to synth_auxiliary_xchgmsg. If +the device could not be instantiated then -1 will +be returned. It is the responsibility of the host-side software to +issue suitable diagnostics explaining what went wrong, so normally the +target-side code should fail silently. +

Once the desired device has been instantiated, often it will be +necessary to do some additional initialization by a message exchange. +For example an ethernet device might need information from the +host-side about the MAC address, the interrupt vector, and +whether or not multicasting is supported. +

Communicating with a Device

Once a device has been instantiated it is possible to perform I/O by +sending messages to the appropriate Tcl script running inside the +auxiliary, and optionally getting back replies. I/O operations are +always initiated by the eCos target-side, it is not possible for the +host-side software to initiate data transfers. However the host-side +can raise interrupts, and the interrupt handler inside the target can +then exchange one or more messages with the host. +

There is a single function to perform I/O operations, +synth_auxiliary_xchgmsg. This takes the following +arguments: +

device_id

This should be one of the identifiers returned by a previous +call to synth_auxiliary_instantiate, specifying the +particular device which should perform some I/O. +

request

Request are just signed 32-bit integers that identify the particular +I/O operation being requested. There is no fixed set of codes, instead +each type of device can define its own. +

arg1, arg2

For some requests it is convenient to pass one or two additional +parameters alongside the request code. For example an ethernet device +could define a multicast-all request, with arg1 +controlling whether this mode should be enabled or disabled. Both +arg1 and arg2 should be signed +32-bit integers, and their values are interpreted only by the +device-specific Tcl script. +

txdata, txlen

Some I/O operations may involve sending additional data, for example +an ethernet packet. Alternatively a control operation may require many +more parameters than can easily be encoded in arg1 +and arg2, so those parameters have to be placed in +a suitable buffer and extracted at the other end. +txdata is an arbitrary buffer of +txlen bytes that should be sent to the host-side. +There is no specific upper bound on the number of bytes that can be +sent, but usually it is a good idea to allocate the transmit buffer +statically and keep transfers down to at most several kilobytes. +

reply

If the host-side is expected to send a reply message then +reply should be a pointer to an integer variable +and will be updated with a reply code, a simple 32-bit integer. The +synthetic target HAL code assumes that the host-side and target-side +agree on the protocol being used: if the host-side will not send a +reply to this message then the reply argument +should be a NULL pointer; otherwise the host-side must always send +a reply code and the reply argument must be valid. +

rxdata, rxlen

Some operations may involve additional data coming from the host-side, +for example an incoming ethernet packet. rxdata +should be a suitably-sized buffer, and rxlen a +pointer to an integer variable that will end up containing the number +of bytes that were actually received. These arguments will only be +used if the host-side is expected to send a reply and hence the +reply argument was not NULL. +

max_rxlen

If a reply to this message is expected and that reply may involve +additional data, max_rxlen limits the size of that +reply. In other words, it corresponds to the size of the +rxdata buffer. +

Most I/O operations involve only some of the arguments. For example +transmitting an ethernet packet would use the +request, txdata and +txlen fields (in addition to +device_id which is always required), but would not +involve arg1 or arg2 and no +reply would be expected. Receiving an ethernet packet would involve +request, rxdata, +rxlen and max_rxlen; in addition +reply is needed to get any reply from the host-side +at all, and could be used to indicate whether or not any more packets +are buffered up. A control operation such as enabling multicast mode +would involve request and arg1, +but none of the remaining arguments. +

Interrupt Handling

Interrupt handling in the synthetic target is much the same as on a +real target. An interrupt object is created using +cyg_drv_interrupt_create, attached, and unmasked. +The emulated device - in other words the Tcl script running inside the +I/O auxiliary - can raise an interrupt. Subject to interrupts being +disabled and the appropriate vector being masked, the system will +invoke the specified ISR function. The synthetic target HAL +implementation does have some limitations: there is no support for +nested interrupts, interrupt priorities, or a separate interrupt +stack. Supporting those might be appropriate when targetting a +simulator that attempts to model real hardware accurately, but not for +the simple emulation provided by the synthetic target. +

Of course the actual implementation of the ISR and DSR functions will +be rather different for a synthetic target device driver. For real +hardware the device driver will interact with the device by reading +and writing device registers, managing DMA engines, and the like. A +synthetic target driver will instead call +synth_auxiliary_xchgmsg to perform the I/O +operations. +

There is one other significant difference between interrupt handling +on the synthetic target and on real hardware. Usually the eCos code +will know which interrupt vectors are used for which devices. That +information is fixed when the target hardware is designed. With the +synthetic target interrupt vectors are assigned to devices on the host +side, either via the target definition file or dynamically when the +device is instantiated. Therefore the initialization code for a +target-side device driver will need to request interrupt vector +information from the host-side, via a message exchange. Such interrupt +vectors will be in the range 1 to 31 inclusive, with interrupt 0 being +reserved for the real-time clock. +


PrevHomeNext
System CallsUpWriting New Devices - host
\ No newline at end of file diff --git a/doc/html/ref/synth-porting.html b/doc/html/ref/synth-porting.html new file mode 100644 index 00000000..837e78dc --- /dev/null +++ b/doc/html/ref/synth-porting.html @@ -0,0 +1,397 @@ + + + + + + + + +Porting +
eCos Reference Manual
PrevNext

Porting

Name

Porting -- Adding support for other hosts

Description

The initial development effort of the eCos synthetic target happened +on x86 Linux machines. Porting to other platforms involves addressing +a number of different issues. Some ports should be fairly +straightforward, for example a port to Linux on a processor other than +an x86. Porting to Unix or Unix-like operating systems other than +Linux may be possible, but would involve more effort. Porting to a +completely different operating system such as Windows would be very +difficult. The text below complements the eCos Porting Guide. +

Other Linux Platforms

Porting the synthetic target to a Linux platform that uses a processor +other than x86 should be straightforward. The simplest approach is to +copy the existing i386linux +directory tree in the hal/synth +hierarchy, then rename and edit the ten or so files in this package. +Most of the changes should be pretty obvious, for example on a 64-bit +processor some new data types will be needed in the +basetype.h header file. It will also be necessary +to update the toplevel ecos.db database with an +entry for the new HAL package, and a new target entry will be needed. +

Obviously a different processor will have different register sets and +calling conventions, so the code for saving and restoring thread +contexts and for implementing setjmp and +longjmp will need to be updated. The exact way of +performing Linux system calls will vary: on x86 linux this usually +involves pushing some registers on the stack and then executing an +int 0x080 trap instruction, but on a different +processor the arguments might be passed in registers instead and +certainly a different trap instruction will be used. The startup code +is written in assembler, but needs to do little more than extract the +process' argument and environment variables and then jump to the main +linux_entry function provided by the +architectural synthetic target HAL package. +

The header file hal_io.h provided by the +architectural HAL package provides various structure definitions, +function prototypes, and macros related to system calls. These are +correct for x86 linux, but there may be problems on other processors. +For example a structure field that is currently defined as a 32-bit +number may in fact may be a 64-bit number instead. +

The synthetic target's memory map is defined in two files in the +include/pkgconf subdirectory. +For x86 the default memory map involves eight megabytes of read-only +memory for the code at location 0x1000000 and another eight megabytes +for data at 0x2000000. These address ranges may be reserved for other +purposes on the new architecture, so may need changing. There may be +some additional areas of memory allocated by the system for other +purposes, for example the startup stack and any environment variables, +but usually eCos applications can and should ignore those. +

Other HAL functionality such as interrupt handling, diagnostics, and +the system clock are provided by the architectural HAL package and +should work on different processors with few if any changes. There may +be some problems in the code that interacts with the I/O auxiliary +because of lurking assumptions about endianness or the sizes of +various data types. +

When porting to other processors, a number of sources of information +are likely to prove useful. Obviously the Linux kernel sources and +header files constitute the ultimate authority on how things work at +the system call level. The GNU C library sources may also prove very +useful: for a normal Linux application it is the C library that +provides the startup code and the system call interface. +

Other Unix Platforms

Porting to a Unix or Unix-like operating system other than Linux would +be somewhat more involved. The first requirement is toolchains: the +GNU compilers, gcc and g++, must definitely be used; use of other GNU +tools such as the linker may be needed as well, because eCos depends +on functionality such as prioritizing C++ static constructors, and +other linkers may not implement this or may implement it in a +different and incompatible way. A closely related requirement is the +use of ELF format for binary executables: if the operating system +still uses an older format such as COFF then there are likely to be +problems because they do not provide the flexibility required by eCos. +

In the architectural HAL there should be very little code that is +specific to Linux. Instead the code should work on any operating +system that provides a reasonable implementation of the POSIX +standard. There may be some problems with program startup, but those +could be handled at the architectural level. Some changes may also be +required to the exception handling code. However one file which will +present a problem is hal_io.h, which contains +various structure definitions and macros used with the system call +interface. It is likely that many of these definitions will need +changing, and it may well be appropriate to implement variant HAL +packages for the different operating systems where this information +can be separated out. Another possible problem is that the generic +code assumes that system calls such as +cyg_hal_sys_write are available. On an operating +system other than Linux it is possible that some of these are not +simple system calls, and instead wrapper functions will need to be +implemented at the variant HAL level. +

The generic I/O auxiliary code should be fairly portable to other Unix +platforms. However some of the device drivers may contain code that is +specific to Linux, for example the PF_PACKET socket +address family and the ethertap virtual tunnelling interface. These +may prove quite difficult to port. +

The remaining porting task is to implement one or more platform HAL +packages, one per processor type that is supported. This should +involve much the same work as a port to another processor running Linux. +

When using other Unix operating systems the kernel source code may not +be available, which would make any porting effort more challenging. +However there is still a good chance that the GNU C library will have +been ported already, so its source code may contain much useful +information. +

Windows Platforms

Porting the current synthetic target code to some version of Windows +or to another non-Unix platform is likely to prove very difficult. The +first hurdle that needs to be crossed is the file format for binary +executables: current Windows implementations do not use ELF, instead +they use their own format PE which is a variant of the rather old and +limited COFF format. It may well prove easier to first write an ELF +loader for Windows executables, rather than try to get eCos to work +within the constraints of PE. Of course that introduces new problems, +for example existing source-level debuggers will still expect +executables to be in PE format. +

Under Linux a synthetic target application is not linked with the +system's C library or any other standard system library. That would +cause confusion, for example both eCos and the system's C library +might try to define the printf function, and +introduce complications such as working with shared libraries. For +much the same reasons, a synthetic target application under Windows +should not be linked with any Windows DLL's. If an ELF loader has been +specially written then this may not be much of a problem. +

The next big problem is the system call interface. Under Windows +system calls are generally made via DLL's, and it is not clear that +the underlying trap mechanism is well-documented or consistent between +different releases of Windows. +

The current code depends on the operating system providing an +implementation of POSIX signal handling. This is used for I/O +purposes, for example SIGALRM is used for the +system clock, and for exceptions. It is not known what equivalent +functionality is available under Windows. +

Given the above problems a port of the synthetic target to Windows may +or may not be technically feasible, but it would certainly require a +very large amount of effort. +


PrevHomeNext
Writing New Devices - hostUpSA11X0 USB Device Driver
\ No newline at end of file diff --git a/doc/html/ref/synth-running.html b/doc/html/ref/synth-running.html new file mode 100644 index 00000000..5c3b4da7 --- /dev/null +++ b/doc/html/ref/synth-running.html @@ -0,0 +1,971 @@ + + + + + + + + +Running a Synthetic Target Application +
eCos Reference Manual
PrevNext

Running a Synthetic Target Application

Name

Execution -- Arguments and configuration files

Description

The procedure for configuring and building eCos and an application for +the synthetic target is the same as for any other eCos target. Once an +executable has been built it can be run like any Linux program, for +example from a shell prompt, +

$ ecos_hello <options>

or using gdb: +

$ gdb --nw --quiet --args ecos_hello <options>
+(gdb) run
+Starting program: ecos_hello <options>

By default use of the I/O auxiliary is disabled. If its I/O facilities +are required then the option --io must be used. +

Note: In future the default behaviour may change, with the I/O auxiliary +being started by default. The option --nio can be +used to prevent the auxiliary from being run. +

Command-line Arguments

The syntax for running a synthetic target application is: +

$ <ecos_app> [options] [-- [app_options]]

Command line options up to the -- are passed on to +the I/O auxiliary. Subsequent arguments are not passed on to the +auxiliary, and hence can be used by the eCos application itself. The +full set of arguments can be accessed through the variables +cyg_hal_sys_argc and +cyg_hal_sys_argv. +

The following options are accepted as standard: +

--io

This option causes the eCos application to spawn the I/O auxiliary +during HAL initialization. Without this option only limited I/O will +be available. +

--nio

This option prevents the eCos application from spawning the I/O +auxiliary. In the current version of the software this is the default. +

-nw, --no-windows

The I/O auxiliary can either provide a graphical user interface, or it +can run in a text-only mode. The default is to provide the graphical +interface, but this can be disabled with -nw. +Emulation of some devices, for example buttons connected to digital +inputs, requires the graphical interface. +

-w, --windows

The -w causes the I/O auxiliary to provide a +graphical user interface. This is the default. +

-v, --version

The -v option can be used to determine the version of +the I/O auxiliary being used and where it has been installed. Both the +auxiliary and the eCos application will exit immediately. +

-h, --help

-h causes the I/O auxiliary to list all accepted +command-line arguments. This happens after all devices have been +initialized, since the host-side support for some of the devices may +extend the list of recognised options. After this both the auxiliary +and the eCos application will exit immediately. This option implies +-nw. +

-k, --keep-going

If an error occurs in the I/O auxiliary while reading in any of the +configuration files or initializing devices, by default both the +auxiliary and the eCos application will exit. The -k +option can be used to make the auxiliary continue in spite of errors, +although obviously it may not be fully functional. +

-nr, --no-rc

Normally the auxiliary processes two user configuration files +during startup: initrc.tcl and +mainrc.tcl. This can be suppressed using the +-nr option. +

-x, --exit

When providing a graphical user interface the I/O auxiliary will +normally continue running even after the eCos application has exited. +This allows the user to take actions such as saving the current +contents of the main text window. If run with -x then +the auxiliary will exit as soon the application exits. +

-nx, --no-exit

When the graphical user interface is disabled with +-nw the I/O auxiliary will normally exit immediately +when the eCos application exits. Without the graphical frontend there +is usually no way for the user to interact directly with the +auxiliary, so there is no point in continuing to run once the eCos +application will no longer request any I/O operations. Specifying the +-nx option causes the auxiliary to continue running +even after the application has exited. +

-V, --verbose

This option causes the I/O auxiliary to output some additional +information, especially during initialization. +

-l <file>, --logfile <file>

Much of the output of the eCos application and the I/O auxiliary is +simple text, for example resulting from eCos +printf or diag_printf calls. +When running in graphical mode this output goes to a central text +window, and can be saved to a file or edited via menus. The +-l can be used to automatically generate an +additional logfile containing all the text. If graphical +mode is disabled then by default all the text just goes to the current +standard output. Specifying -l causes most of the +text to go into a logfile instead, although some messages such as +errors generated by the auxiliary itself will still go to stdout as +well. +

-t <file>, --target <file>

During initialization the I/O auxiliary reads in a target definition +file. This file holds information such as which Linux devices should +be used to emulate the various eCos devices. The -t +option can be used to specify which target definition should be used +for the current run, defaulting to default.tdf. +It is not necessary to include the .tdf suffix, +this will be appended automatically if necessary. +

-geometry <geometry>

This option can be used to control the size and position of the main +window, as per X conventions. +

The I/O auxiliary loads support for the various devices dynamically +and some devices may accept additional command line arguments. Details +of these can be obtained using the -h option or by +consulting the device-specific documentation. If an unrecognised +command line argument is used then a warning will be issued. +

The Target Definition File

The eCos application will want to access devices such as +eth0 or /dev/ser0. These need to +be mapped on to Linux devices. For example some users may all traffic +on the eCos /dev/ser0 serial device to go via the +Linux serial device /dev/ttyS1, while ethernet I/O +for the eCos eth0 device should be mapped to the +Linux ethertap device tap3. Some devices may need +additional configuration information, for example to limit the +number of packets that should be buffered within the I/O auxiliary. +The target definition file provides all this information. +

By default the I/O auxiliary will look for a file +default.tdf. An alternative target definition can +be specified on the command line using -t, for +example: +

$ bridge_app --io -t twineth

A .tdf suffix will be appended automatically if +necessary. If a relative pathname is used then the I/O auxiliary will +search for the target definition file in the current directory, then +in ~/.ecos/synth/, and finally +in its install location. +

A typical target definition file might look like this: +

synth_device console {
+    # appearance -foreground white -background black
+    filter trace {^TRACE:.*} -foreground HotPink1 -hide 1
+}
+
+synth_device ethernet {
+    eth0 real eth1
+    eth1 ethertap tap4 00:01:02:03:FE:06
+
+    ## Maximum number of packets that should be buffered per interface.
+    ## Default 16
+    #max_buffer 32
+
+    ## Filters for the various recognised protocols.
+    ## By default all filters are visible and use standard colours.
+    filter ether  -hide 0
+    #filter arp    -hide 1
+    #filter ipv4   -hide 1
+    #filter ipv6   -hide 1
+}

A target definition file is actually a Tcl script that gets run in the +main interpreter of the I/O auxiliary during initialization. This +provides a lot of flexibility if necessary. For example the script +could open a socket to a resource management server of some sort to +determine which hardware facilities are already in use and adapt +accordingly. Another possibility is to adapt based on command line arguments. Users who +are not familiar with Tcl programming should still be able to edit a +simple target definition file without too much difficulty, using a +mixture of cut'n'paste, commenting or uncommenting various lines, and +making small edits such as changing tap4 to +eth2. +

Each type of device will have its own entry in the target definition +file, taking the form: +

synth_device <device type> {
+    <options>
+}

The documentaton for each synthetic target device should provide +details of the options available for that device, and often a suitable +fragment that can be pasted into a target definition file and edited. +There is no specific set of options that a given device will always +provide. However in practice many devices will use common code +exported by the main I/O auxiliary, or their implementation will +involve some re-use of code for an existing device. Hence certain +types of option are common to many devices. +

A good example of this is filters, which control the appearance of +text output. The above target definition file defines a filter +trace for output from the eCos application. The +regular expression will match output from the infrastructure package's +tracing facilities when CYGDBG_USE_TRACING and +CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE are enabled. +With the current settings this output will not be visible by default, +but can be made visible using the menu item System +Filters. If made visible the trace output will appear in +an unusual colour, so users can easily distinguish the trace output +from other text. All filters accept the following options: +

-hide [0|1]

This controls whether or not text matching this filter should be +invisible by default or not. At run-time the visibility of each filter +can be controlled using the System Filters +menu item. +

-foreground <colour>

This specifies the foreground colour for all text matching this +filter. The colour can be specified using an RGB value such as +#F08010, or a symbolic name such as +"light steel blue". The X11 utility +showrgb can be used to find out +about the available colours. +

-background <colour>

This specifies the background colour for all text matching the filter. +As with -foreground the colour can be specified using +a symbolic name or an RGB value. +

Some devices may create their own subwindows, for example to monitor +ethernet traffic or to provide additional I/O facilities such as +emulated LED's or buttons. Usually the target definition file can be +used to control the layout of +these windows. +

The I/O auxiliary will not normally warn about +synth_device entries in the target definition file +for devices that are not actually needed by the current eCos +application. This makes it easier to use a single file for several +different applications. However it can lead to confusion if an entry +is spelled incorrectly and hence does not actually get used. The +-V command line option can be used to get warnings +about unused device entries in the target definition file. +

If the body of a synth_device command contains an +unrecognised option and the relevant device is in use, the I/O +auxiliary will always issue a warning about such options. +

User Configuration Files

During initialization the I/O auxiliary will execute two user +configuration files, initrc.tcl and +mainrc.tcl. It will look for these files in the +directory ~/.ecos/synth/. If +that directory does not yet exist it will be created and populated +with initial dummy files. +

Both of these configuration files are Tcl scripts and will be run in +the main interpreter used by the I/O auxiliary itself. This means that +they have full access to the internals of the auxiliary including the +various Tk widgets, and they can perform file or socket I/O if +desired. The section Writing New Devices - host contains +information about the facilities available on the host-side for +writing new device drivers, and these can also be used in the +initialization scripts. +

The initrc.tcl script is run before the auxiliary +has processed any requests from the eCos application, and hence before +any devices have been instantiated. At this point the generic +command-line arguments has been processed, the target definition file +has been read in, and the hooks functionality has been initialized. If +running in graphical mode the main window will have been created, but +has been withdrawn from the screen to allow new widgets to be added +without annoying screen flicker. A typical +initrc.tcl script could add some menu or toolbar +options, or install a hook function that will be run when the +eCos application exits. +

The mainrc.tcl script is run after eCos has +performed all its device initialization and after C++ static +constructors have run, and just before the call to +cyg_start which will end up transferring control +to the application itself. A typical mainrc.tcl +script could look at what interrupt vectors have been allocated to +which devices and create a little monitor window that shows interrupt +activity. +

Session Information

When running in graphical mode, the I/O auxiliary will read in a file +~/.ecos/synth/guisession containing session +information. This file should not normally be edited manually, instead +it gets updated automatically when the auxiliary exits. The purpose of +this file is to hold configuration options that are manipulated via +the graphical interface, for example which browser should be used to +display online help. +

Warning

GUI session functionality is not yet available in the current release. +When that functionality is fully implemented it is possible that some +target definition file options may be removed, to be replaced by +graphical editing via a suitable preferences dialog, with the +current settings saved in the session file. +


PrevHomeNext
InstallationUpThe I/O Auxiliary's User Interface
\ No newline at end of file diff --git a/doc/html/ref/synth-syscalls.html b/doc/html/ref/synth-syscalls.html new file mode 100644 index 00000000..43209c66 --- /dev/null +++ b/doc/html/ref/synth-syscalls.html @@ -0,0 +1,340 @@ + + + + + + + + +System Calls +
eCos Reference Manual
PrevNext

System Calls

Name

cyg_hal_sys_xyz -- Access Linux system facilities

Description

On a real embedded target eCos interacts with the hardware by peeking +and poking various registers, manipulating special regions of memory, +and so on. The synthetic target does not access hardware directly. +Instead I/O and other operations are emulated by making appropriate +Linux system calls. The HAL package exports a number of functions +which allow other packages, or even application code, to make these +same system calls. However this facility must be used with care: any +code which calls, for example, cyg_hal_sys_write +will only ever run on the synthetic target; that functionality is +obviously not provided on any real hardware because there is no +underlying Linux kernel to implement it. +

The synthetic target only provides a subset of the available system +calls, specifically those calls which have proved useful to implement +I/O emulation. This subset can be extended fairly easily if necessary. +All of the available calls, plus associated data structures and +macros, are defined in the header file cyg/hal/hal_io.h. There is a simple +convention: given a Linux system call such as +open, the synthetic target will prefix +cyg_hal_sys and provide a function with that name. +The second argument to the open system call is +a set of flags such as O_RDONLY, and the header +file will define a matching constant +CYG_HAL_SYS_O_RDONLY. There are also data +structures such as cyg_hal_sys_sigset_t, +matching the Linux data structure sigset_t. +

In most cases the functions provided by the synthetic target behave as +per the documentation for the Linux system calls, and section 2 of the +Linux man pages can be consulted for more information. There is one +important difference: typically the documentation will say that a +function returns -1 to indicate an error, with the +actual error code held in errno; the actual +underlying system call and hence the +cyg_hal_sys_xyz provided by eCos instead returns +a negative number to indicate an error, with the absolute value of +that number corresponding to the error code; usually it is the C +library which handles this and manipulates errno, but of course +synthetic target applications are not linked with that Linux library. +

However, there are some exceptions. The Linux kernel has evolved over +the years, and some of the original system call interfaces are no +longer appropriate. For example the original +select system call has been superseded by +_newselect, and that is what the +select function in the C library actually uses. +The old call is still available to preserve binary compatibility but, +like the C library, eCos makes use of the new one because it provides +the appropriate functionality. In an attempt to reduce confusion the +eCos function is called cyg_hal_sys__newselect, +in other words it matches the official system call naming scheme. The +authoritive source of information on such matters is the Linux kernel +sources themselves, and especially its header files. +

eCos packages and applications should never +#include Linux header files directly. For example, +doing a #include </usr/include/fcntl.h> +to access additional macros or structure definitions, or alternatively +manipulating the header file search path, will lead to problems +because the Linux header files are likely to duplicate and clash with +definitions in the eCos headers. Instead the appropriate functionality +should be extracted from the Linux headers and moved into either +cyg/hal/hal_io.h or into +application code, with suitable renaming to avoid clashes with eCos +names. Users should be aware that large-scale copying may involve +licensing complications. +

Adding more system calls is usually straightforward and involves +adding one or more lines to the platform-specific file in the +appropriate platform HAL, for example +syscall-i386-linux-1.0.S. However it is necessary +to do some research first about the exact interface implemented by the +system call, because of issues such as old system calls that have been +superseded. The required information can usually be found fairly +easily by searching through the Linux kernel sources and possibly the +GNU C library sources. +


PrevHomeNext
The Console DeviceUpWriting New Devices - target
\ No newline at end of file diff --git a/doc/html/ref/synth.html b/doc/html/ref/synth.html new file mode 100644 index 00000000..01b5ddbe --- /dev/null +++ b/doc/html/ref/synth.html @@ -0,0 +1,379 @@ + + + + + + + + +Overview +
eCos Reference Manual
PrevNext

Overview

Name

The eCos synthetic target -- Overview

Description

Usually eCos runs on either a custom piece of hardware, specially +designed to meet the needs of a specific application, or on a +development board of some sort that is available before the final +hardware. Such boards have a number of things in common: +

  1. Obviously there has to be at least one processor to do the work. Often +this will be a 32-bit processor, but it can be smaller or larger. +Processor speed will vary widely, depending on the expected needs of +the application. However the exact processor being used tends not to +matter very much for most of the development process: the use of +languages such as C or C++ means that the compiler will handle those +details. +

  2. There needs to be memory for code and for data. A typical system will +have two different types of memory. There will be some non-volatile +memory such as flash, EPROM or masked ROM. There will also be some +volatile memory such as DRAM or SRAM. Often the code for the final +application will reside in the non-volatile memory and all of the RAM +will be available for data. However updating non-volatile memory +requires a non-trivial amount of effort, so for much of the +development process it is more convenient to burn suitable firmware, +for example RedBoot, into the non-volatile memory and then use that to +load the application being debugged into RAM, alongside the +application data and a small area reserved for use by the firmware. +

  3. The platform must provide certain mimimal I/O facilities. Most eCos +configurations require a clock signal of some sort. There must also be +some way of outputting diagnostics to the user, often but not always +via a serial port. Unless special debug hardware is being used, source +level debugging will require bidirectional communication between a +host machine and the target hardware, usually via a serial port or an +ethernet device. +

  4. All the above is not actually very useful yet because there is no way +for the embedded device to interact with the rest of the world, except +by generating diagnostics. Therefore an embedded device will have +additional I/O hardware. This may be fairly standard hardware such as +an ethernet or USB interface, or special hardware designed +specifically for the intended application, or quite often some +combination. Standard hardware such as ethernet or USB may be +supported by eCos device drivers and protocol stacks, whereas the +special hardware will be driven directly by application code. +

Much of the above can be emulated on a typical PC running Linux. +Instead of running the embedded application being developed on a +target board of some sort, it can be run as a Linux process. The +processor will be the PC's own processor, for example an x86, and the +memory will be the process' address space. Some I/O facilities can be +emulated directly through system calls. For example clock hardware can +be emulated by setting up a SIGALRM signal, which +will cause the process to be interrupted at regular intervals. This +emulation of real hardware will not be particularly accurate, the +number of cpu cycles available to the eCos application between clock +ticks will vary widely depending on what else is running on the PC, +but for much development work it will be good enough. +

Other I/O facilities are provided through an I/O auxiliary process, +ecosynth, that gets spawned by the eCos application during startup. +When an eCos device driver wants to perform some I/O operation, for +example send out an ethernet packet, it sends a request to the I/O +auxiliary. That is an ordinary Linux application so it has ready +access to all normal Linux I/O facilities. To emulate a device +interrupt the I/O auxiliary can raise a SIGIO +signal within the eCos application. The HAL's interrupt subsystem +installs a signal handler for this, which will then invoke the +standard eCos ISR/DSR mechanisms. The I/O auxiliary is based around +Tcl scripting, making it easy to extend and customize. It should be +possible to configure the synthetic target so that its I/O +functionality is similar to what will be available on the final target +hardware for the application being developed. +

A key requirement for synthetic target code is that the embedded +application must not be linked with any of the standard Linux +libraries such as the GNU C library: that would lead to a confusing +situation where both eCos and the Linux libraries attempted to provide +functions such as printf. Instead the synthetic +target support must be implemented directly on top of the Linux +kernels' system call interface. For example, the kernel provides a +system call for write operations. The actual function +write is implemented in the system's C library, +but all it does is move its arguments on to the stack or into certain +registers and then execute a special trap instruction such as +int 0x80. When this instruction is executed +control transfers into the kernel, which will validate the arguments +and perform the appropriate operation. Now, a synthetic target +application cannot be linked with the system's C library. Instead it +contains a function cyg_hal_sys_write which, like +the C library's write function, pushes its +arguments on to the stack and executes the trap instruction. The Linux +kernel cannot tell the difference, so it will perform the I/O +operation requested by the synthetic target. With appropriate +knowledge of what system calls are available, this makes it possible +to emulate the required I/O facilities. For example, spawning the +ecosynth I/O auxiliary involves system calls +cyg_hal_sys_fork and +cyg_hal_sys_execve, and sending a request to the +auxiliary uses cyg_hal_sys_write. +

In many ways developing for the synthetic target is no different from +developing for real embedded targets. eCos must be configured +appropriately: selecting a suitable target such as +i386linux will cause the configuration system +to load the appropriate packages for this hardware; this includes an +architectural HAL package and a platform-specific package; the +architectural package contains generic code applicable to all Linux +platforms, whereas the platform package is for specific Linux +implementations such as the x86 version and contains any +processor-specific code. Selecting this target will also bring in some +device driver packages. Other aspects of the configuration such as +which API's are supported are determined by the template, by adding +and removing packages, and by fine-grained configuration. +

In other ways developing for the synthetic target can be much easier +than developing for a real embedded target. For example there is no +need to worry about building and installing suitable firmware on the +target hardware, and then downloading and debugging the actual +application over a serial line or a similar connection. Instead an +eCos application built for the synthetic target is mostly +indistinguishable from an ordinary Linux program. It can be run simply +by typing the name of the executable file at a shell prompt. +Alternatively you can debug the application using whichever version of +gdb is provided by your Linux distribution. There is no need to build +or install special toolchains. Essentially using the synthetic target +means that the various problems associated with real embedded hardware +can be bypassed for much of the development process. +

The eCos synthetic target provides emulation, not simulation. It is +possible to run eCos in suitable architectural simulators but that +involves a rather different approach to software development. For +example, when running eCos on the psim PowerPC simulator you need +appropriate cross-compilation tools that allow you to build PowerPC +executables. These are then loaded into the simulator which interprets +every instruction and attempts to simulate what would happen if the +application were running on real hardware. This involves a lot of +processing overhead, but depending on the functionality provided by +the simulator it can give very accurate results. When developing for +the synthetic target the executable is compiled for the PC's own +processor and will be executed at full speed, with no need for a +simulator or special tools. This will be much faster and somewhat +simpler than using an architectural simulator, but no attempt is made +to accurately match the behaviour of a real embedded target. +


PrevHomeNext
eCos Synthetic TargetUpInstallation
\ No newline at end of file diff --git a/doc/html/ref/tcpip-freebsd-building-the-network-stack.html b/doc/html/ref/tcpip-freebsd-building-the-network-stack.html new file mode 100644 index 00000000..d88edddf --- /dev/null +++ b/doc/html/ref/tcpip-freebsd-building-the-network-stack.html @@ -0,0 +1,209 @@ + + + + + + + + +Building the Network Stack +
eCos Reference Manual
PrevChapter 40. Freebsd TCP/IP stack portNext

Building the Network Stack

Using the Build->Packages dialog, +add the packages “Networking”, +“Freebsd TCP/IP Stack” +and “Common Ethernet Support” +to your configuration. Their package names +are CYGPKG_NET, CYGPKG_NET_FREEBSD_STACK and CYGPKG_NET_ETH_DRIVERS +respectively.

A short-cut way to do this is by +using the “net” template +if it is available for your platform.

The platform-specific ethernet device driver for your platform +will be added as part of the target selection (in the +Build->Templates “Hardware” item), +along with the +PCI I/O subsystem (if relevent) and the appropriate serial device driver.

For example, the PowerPC MBX target selection adds the package +PKG_NET_QUICC_ETH_DRIVERS, +and the Cirrus Logic EDB7xxx target selection adds the package +CYGPKG_NET_EDB7XXX_ETH_DRIVERS. +After this, eCos and its tests can be built exactly as usual.


PrevHomeNext
Freebsd TCP/IP stack portUpAPIs
\ No newline at end of file diff --git a/doc/html/ref/tcpip-freebsd-enhanced-select.html b/doc/html/ref/tcpip-freebsd-enhanced-select.html new file mode 100644 index 00000000..6042d7c5 --- /dev/null +++ b/doc/html/ref/tcpip-freebsd-enhanced-select.html @@ -0,0 +1,222 @@ + + + + + + + + +Enhanced Select() +
eCos Reference Manual
PrevChapter 41. APIsNext


PrevHomeNext
APIsUpOpenBSD TCP/IP Stack port for eCos
\ No newline at end of file diff --git a/doc/html/ref/tcpip-freebsd-networking-stack-features.html b/doc/html/ref/tcpip-freebsd-networking-stack-features.html new file mode 100644 index 00000000..e137706f --- /dev/null +++ b/doc/html/ref/tcpip-freebsd-networking-stack-features.html @@ -0,0 +1,205 @@ + + + + + + + + +Networking Stack Features +
eCos Reference Manual
PrevNext


PrevHomeNext
FreeBSD TCP/IP Stack port for eCosUpFreebsd TCP/IP stack port
\ No newline at end of file diff --git a/doc/html/ref/tcpip-freebsd-stack-port.html b/doc/html/ref/tcpip-freebsd-stack-port.html new file mode 100644 index 00000000..93ccd0af --- /dev/null +++ b/doc/html/ref/tcpip-freebsd-stack-port.html @@ -0,0 +1,198 @@ + + + + + + + + +Freebsd TCP/IP stack port +
eCos Reference Manual
PrevNext

Chapter 40. Freebsd TCP/IP stack port

This document describes how to get started with the Freebsd +TCP/IP network stack.


PrevHomeNext
Networking Stack FeaturesUpBuilding the Network Stack
\ No newline at end of file diff --git a/doc/html/ref/tcpip-freebsd-tcpip-apis.html b/doc/html/ref/tcpip-freebsd-tcpip-apis.html new file mode 100644 index 00000000..66afae99 --- /dev/null +++ b/doc/html/ref/tcpip-freebsd-tcpip-apis.html @@ -0,0 +1,208 @@ + + + + + + + + +APIs +
eCos Reference Manual
PrevNext


PrevHomeNext
Building the Network StackUpEnhanced Select()
\ No newline at end of file diff --git a/doc/html/ref/tcpip-freebsd.html b/doc/html/ref/tcpip-freebsd.html new file mode 100644 index 00000000..015ea39c --- /dev/null +++ b/doc/html/ref/tcpip-freebsd.html @@ -0,0 +1,187 @@ + + + + + + + + +FreeBSD TCP/IP Stack port for eCos +
eCos Reference Manual
PrevNext


PrevHomeNext
socketpair Networking Stack Features
\ No newline at end of file diff --git a/doc/html/ref/tcpip-library-reference.html b/doc/html/ref/tcpip-library-reference.html new file mode 100644 index 00000000..dbb05f55 --- /dev/null +++ b/doc/html/ref/tcpip-library-reference.html @@ -0,0 +1,410 @@ + + + + + + + + +TCP/IP Library Reference +
eCos Reference Manual
PrevNext

Chapter 38. TCP/IP Library Reference

getdomainname

GETDOMAINNAME(3)        System Library Functions Manual       GETDOMAINNAME(3)
+
+NAME
+     getdomainname, setdomainname - get/set YP domain name of current host
+
+SYNOPSIS
+     #include <unistd.h>
+
+     int
+     getdomainname(char *name, size_t namelen);
+
+     int
+     setdomainname(const char *name, size_t namelen);
+
+DESCRIPTION
+     The getdomainname() function returns the YP domain name for the current
+     processor, as previously set by setdomainname().  The parameter namelen
+     specifies the size of the name array.  If insufficient space is provided,
+     the returned name is truncated.  The returned name is always null termi-
+     nated.
+
+     setdomainname() sets the domain name of the host machine to be name,
+     which has length namelen.  This call is restricted to the superuser and
+     is normally used only when the system is bootstrapped.
+
+RETURN VALUES
+     If the call succeeds a value of 0 is returned.  If the call fails, a
+     value of -1 is returned and an error code is placed in the global vari-
+     able errno.
+
+ERRORS
+     The following errors may be returned by these calls:
+
+     [EFAULT]           The name or namelen parameter gave an invalid address.
+
+     [EPERM]            The caller tried to set the domain name and was not
+                        the superuser.
+
+SEE ALSO
+     domainname(1), gethostid(3), gethostname(3), sysctl(3), sysctl(8), yp(8)
+
+BUGS
+     Domain names are limited to MAXHOSTNAMELEN (from <sys/param.h>) charac-
+     ters, currently 256.  This includes the terminating NUL character.
+
+     If the buffer passed to getdomainname() is too small, other operating
+     systems may not guarantee termination with NUL.
+
+HISTORY
+     The getdomainname function call appeared in SunOS 3.x.
+
+BSD                               May 6, 1994                              BSD
+    

PrevHomeNext
DHCPUpgethostname
\ No newline at end of file diff --git a/doc/html/ref/tcpip-openbsd-building-the-network-stack.html b/doc/html/ref/tcpip-openbsd-building-the-network-stack.html new file mode 100644 index 00000000..edc3df06 --- /dev/null +++ b/doc/html/ref/tcpip-openbsd-building-the-network-stack.html @@ -0,0 +1,209 @@ + + + + + + + + +Building the Network Stack +
eCos Reference Manual
PrevChapter 43. OpenBSD TCP/IP stack portNext

Building the Network Stack

Using the Build->Packages dialog, +add the packages “Networking”, +“OpenBSD TCP/IP Stack” +and “Common Ethernet Support” +to your configuration. Their package names +are CYGPKG_NET, CYGPKG_NET_OPENBSD_STACK and CYGPKG_NET_ETH_DRIVERS +respectively.

A short-cut way to do this is by +using the “net” template +if it is available for your platform.

The platform-specific ethernet device driver for your platform +will be added as part of the target selection (in the +Build->Templates “Hardware” item), +along with the +PCI I/O subsystem (if relevent) and the appropriate serial device driver.

For example, the PowerPC MBX target selection adds the package +PKG_NET_QUICC_ETH_DRIVERS, +and the Cirrus Logic EDB7xxx target selection adds the package +CYGPKG_NET_EDB7XXX_ETH_DRIVERS. +After this, eCos and its tests can be built exactly as usual.


PrevHomeNext
OpenBSD TCP/IP stack portUpAPIs
\ No newline at end of file diff --git a/doc/html/ref/tcpip-openbsd-enhanced-select.html b/doc/html/ref/tcpip-openbsd-enhanced-select.html new file mode 100644 index 00000000..ff0859c1 --- /dev/null +++ b/doc/html/ref/tcpip-openbsd-enhanced-select.html @@ -0,0 +1,222 @@ + + + + + + + + +Enhanced Select() +
eCos Reference Manual
PrevChapter 44. APIsNext


PrevHomeNext
APIsUpDNS for eCos and RedBoot
\ No newline at end of file diff --git a/doc/html/ref/tcpip-openbsd-networking-stack-features.html b/doc/html/ref/tcpip-openbsd-networking-stack-features.html new file mode 100644 index 00000000..88c5eb4c --- /dev/null +++ b/doc/html/ref/tcpip-openbsd-networking-stack-features.html @@ -0,0 +1,198 @@ + + + + + + + + +Networking Stack Features +
eCos Reference Manual
PrevNext


PrevHomeNext
OpenBSD TCP/IP Stack port for eCosUpOpenBSD TCP/IP stack port
\ No newline at end of file diff --git a/doc/html/ref/tcpip-openbsd-stack-port.html b/doc/html/ref/tcpip-openbsd-stack-port.html new file mode 100644 index 00000000..69fc4393 --- /dev/null +++ b/doc/html/ref/tcpip-openbsd-stack-port.html @@ -0,0 +1,198 @@ + + + + + + + + +OpenBSD TCP/IP stack port +
eCos Reference Manual
PrevNext

Chapter 43. OpenBSD TCP/IP stack port

This document describes how to get started with the OpenBSD +TCP/IP network stack.


PrevHomeNext
Networking Stack FeaturesUpBuilding the Network Stack
\ No newline at end of file diff --git a/doc/html/ref/tcpip-openbsd-tcpip-apis.html b/doc/html/ref/tcpip-openbsd-tcpip-apis.html new file mode 100644 index 00000000..d6f5ad26 --- /dev/null +++ b/doc/html/ref/tcpip-openbsd-tcpip-apis.html @@ -0,0 +1,269 @@ + + + + + + + + +APIs +
eCos Reference Manual
PrevNext

Chapter 44. APIs

Standard networking

The APIs for the standard networking calls such as +socket(), recv() and so on, are +in header files relative to the top-level +include directory, within the standard subdirectories as conventionally +found in /usr/include. For example: +
 install/include/arpa/tftp.h
+ install/include/netinet/tcpip.h
+ install/include/sys/socket.h
+ install/include/sys/socketvar.h
+ install/include/sys/sockio.h

network.h at the top level +defines various extensions, for example the API +init_all_network_interfaces(void) +described +above. We advise including network.h whether +you use these features or not.

In general, using the networking code may require definition +of two symbols: _KERNEL and __ECOS. _KERNEL +is not normally required; __ECOS is normally required. +So add this to your compile lines for files which use the network +stack:

	-D__ECOS

To expand a little, it’s like this because this is +a port of a standard distribution external to Red Hat. One goal +is to perturb the sources as little as possible, so that upgrading +and maintenance from the external distribution is simplified. The __ECOS +symbol marks out Red Hat’s additions in making the port. +The _KERNEL symbol is traditional UNIX practice: it distinguishes +a compilation which is to be linked into the kernel from one which +is part of an application. eCos applications are fully linked, +so this distinction does not apply. _KERNEL can however +be used to control the visibility of the internals of the stack, +so depending on what features your application uses, it may or may +not be necessary.

The include file network.h undefines _KERNEL +unconditionally, to provide an application-like compilation environment. +If you were writing code which, for example, +enumerates the stack’s internal +structures, that is a kernel-like compilation environment, so you +would need to define _KERNEL (in addition to __ECOS) +and avoid including network.h.


PrevHomeNext
Building the Network StackUpEnhanced Select()
\ No newline at end of file diff --git a/doc/html/ref/tcpip-openbsd.html b/doc/html/ref/tcpip-openbsd.html new file mode 100644 index 00000000..36d5219b --- /dev/null +++ b/doc/html/ref/tcpip-openbsd.html @@ -0,0 +1,185 @@ + + + + + + + + +OpenBSD TCP/IP Stack port for eCos +
eCos Reference Manual
PrevNext


PrevHomeNext
Enhanced Select() Networking Stack Features
\ No newline at end of file diff --git a/doc/html/ref/tcpip.png b/doc/html/ref/tcpip.png new file mode 100644 index 00000000..4d3e394f Binary files /dev/null and b/doc/html/ref/tcpip.png differ diff --git a/doc/html/ref/the-ecos-hardware-abstraction-layer.html b/doc/html/ref/the-ecos-hardware-abstraction-layer.html new file mode 100644 index 00000000..6318ff56 --- /dev/null +++ b/doc/html/ref/the-ecos-hardware-abstraction-layer.html @@ -0,0 +1,191 @@ + + + + + + + + +The eCos Hardware Abstraction Layer (HAL) +
eCos Reference Manual
PrevNext


PrevHomeNext
SuperH/SH4(SH7751) Hitachi Solution Engine 7751 Introduction
\ No newline at end of file diff --git a/doc/html/ref/updating-redboot.html b/doc/html/ref/updating-redboot.html new file mode 100644 index 00000000..dde397de --- /dev/null +++ b/doc/html/ref/updating-redboot.html @@ -0,0 +1,602 @@ + + + + + + + + +Updating RedBoot +
eCos Reference Manual
PrevNext

Chapter 4. Updating RedBoot

Introduction

RedBoot +normally resides in an EPROM or, more common these days, a flash +on the board. In the former case, updating RedBoot necessitates +physically removing the part and +reprogramming a new RedBoot image into it using prommer hardware. In +the latter case, it is often possible to update RedBoot in situ using +Redboot's flash management commands.

The process of updating RedBoot in situ is documented in this +section. For this process, it is assumed that the target is connected +to a host system and that there is a serial connection giving access +to the RedBoot CLI. For platforms with a ROMRAM mode RedBoot, skip to +the Section called Update the primary RedBoot flash image.

Note: The addresses and sizes included in the below are examples +only, and will differ from those you will see. This is normal and +should not cause concern.

Load and start a RedBoot RAM instance

There are a number of choices here. The basic case is where a RAM +mode image has been stored in the FIS (flash Image System). To load and +execute this image, use the commands:
RedBoot> fis load RedBoot[RAM]
+RedBoot> go
+If this image is not available, or does not work, +then an alternate RAM mode image must be loaded: +
RedBoot> load redboot_RAM.img
+Entry point: 0x060213c0, address range: 0x06020000-0x060369c8                   
+RedBoot> go
+ +

+ +

Note: If you expect to be doing this more than once, it is a +good idea to program the RAM mode image into the flash. You do this +using the fis create command after having +downloaded the RAM mode image, but before you start it.

Some platforms support locking (write protecting) certain regions of +the flash, while others do not. If your platform does not support +locking, simply ignore the fis unlock and +fis lock steps (the commands will not be +recognized by RedBoot).

RedBoot> fis unlock RedBoot[RAM]
+  ... Unlock from 0x00000000-0x00020000: ..
+RedBoot> fis create RedBoot[RAM]
+An image named 'RedBoot[RAM]' exists - continue (y/n)? y
+* CAUTION * about to program 'RedBoot[RAM]'
+            at 0x00020000..0x000369c7 from 0x06020000 - continue (y/n)?y
+... Erase from 0x00020000-0x00040000: ..                                        
+... Program from 0x06020000-0x060369c8 at 0x00020000: ..                        
+... Erase from 0x00070000-0x00080000: .                                         
+... Program from 0x0606f000-0x0607f000 at 0x00070000: .                         
+RedBoot> fis lock RedBoot[RAM]
+  ... Lock from 0x00000000-0x00020000: ..

Update the primary RedBoot flash image

An +instance of RedBoot should now be running on the target from RAM. This +can be verified by looking for the mode identifier in the banner. It +should be either [RAM] or [ROMRAM].

If this is the first time RedBoot is running on the board or if +the flash contents has been damaged, initialize the FIS directory: +
RedBoot> fis init -f
+About to initialize [format] FLASH image system - continue (y/n)? y
+*** Initialize FLASH Image System
+... Erase from 0x00020000-0x00070000: .....
+... Erase from 0x00080000-0x00080000:
+... Erase from 0x00070000-0x00080000: .
+... Program from 0x0606f000-0x0607f000 at 0x00070000: .

It is important to understand that the presence of a correctly +initialized FIS directory allows RedBoot to automatically determine +the flash parameters. Additionally, executing the steps below as +stated without loading other data or using other flash commands (than +possibly fis list) allows RedBoot to automatically +determine the image location and size parameters. This greatly reduces +the risk of potential critical mistakes due to typographical errors. It is +still always possible to explicitly specify parameters, and indeed +override these, but it is not advised.

Using the load command, download the +new flash based image from the host, relocating the image to RAM:: +
RedBoot> load -r -b %{FREEMEMLO} redboot_ROM.bin
+Raw file loaded 0x06046800-0x06062fe8, assumed entry at 0x06046800
+ +

+ +

Note: Note that the binary version of the image is being +downloaded. This is to ensure that the memory after the image is +loaded should match the contents of the file on the host. Loading SREC +or ELF versions of the image does not guarantee this since these +formats may contain holes, leaving bytes in these holes in an unknown +state after the load, and thus causing a likely cksum difference. It +is possible to use these, but then the step verifying the cksum below +may fail.

Once the image is loaded into RAM, it should be checksummed, +thus verifying that the image on the target is indeed the image +intended to be loaded, and that no corruption of the image has +happened. This is done using the cksum +command: +
RedBoot> cksum
+Computing cksum for area 0x06046800-0x06062fe8                                  
+POSIX cksum = 2535322412 116712 (0x971df32c 0x0001c7e8)                         
+Compare the numbers with those for the binary version of the image on +the host. If they do not match, try downloading the image again.

Assuming the cksum matches, the next step is programming the +image into flash using the FIS commands.

Some platforms support locking (write protecting) certain +regions of the flash, while others do not. If your platform does not +support locking, simply ignore the fis unlock and +fis lock steps (the commands will not be recognized +by RedBoot).

RedBoot> fis unlock RedBoot
+  ... Unlock from 0x00000000-0x00020000: ..
+RedBoot> fis create RedBoot
+An image named 'RedBoot' exists - continue (y/n)? y
+* CAUTION * about to program 'RedBoot'
+            at 0x00000000..0x0001c7e7 from 0x06046800 - continue (y/n)? y
+... Erase from 0x00000000-0x00020000: ..
+... Program from 0x06046800-0x06062fe8 at 0x00000000: ..
+... Erase from 0x00070000-0x00080000: .
+... Program from 0x0606f000-0x0607f000 at 0x00070000: .
+RedBoot> fis lock RedBoot
+  ... Lock from 0x00000000-0x00020000: ..

PrevHomeNext
Rebuilding RedBootUpInstallation and Testing
\ No newline at end of file diff --git a/doc/html/ref/usbs-control.html b/doc/html/ref/usbs-control.html new file mode 100644 index 00000000..f95b25c5 --- /dev/null +++ b/doc/html/ref/usbs-control.html @@ -0,0 +1,1016 @@ + + + + + + + + +Control Endpoints +
eCos Reference Manual
PrevNext

Control Endpoints

Name

Control Endpoints -- Control endpoint data structure

usbs_control_endpoint Data Structure

The device driver for a USB slave device should supply one +usbs_control_endpoint data structure per USB +device. This corresponds to endpoint 0 which will be used for all +control message interaction between the host and that device. The data +structure is also used for internal management purposes, for example +to keep track of the current state. In a typical USB peripheral there +will only be one such data structure in the entire system, but if +there are multiple USB slave ports, allowing the peripheral to be +connected to multiple hosts, then there will be a separate data +structure for each one. The name or names of the data structures are +determined by the device drivers. For example, the SA11x0 USB device +driver package provides usbs_sa11x0_ep0.

The operations on a control endpoint do not fit cleanly into a +conventional open/read/write I/O model. For example, when the host +sends a control message to the USB peripheral this may be one of four +types: standard, class, vendor and reserved. Some or all of the +standard control messages will be handled automatically by the common +USB slave package or by the device driver itself. Other standard +control messages and the other types of control messages may be +handled by a class-specific package or by application code. Although +it would be possible to have devtab entries such as +/dev/usbs_ep0/standard and +/dev/usbs_ep0/class, and then support read and +write operations on these devtab entries, this would add significant +overhead and code complexity. Instead, all of the fields in the +control endpoint data structure are public and can be manipulated +directly by higher level code if and when required.

Control endpoints involve a number of callback functions, with +higher-level code installing suitable function pointers in the control +endpoint data structure. For example, if the peripheral involves +vendor-specific control messages then a suitable handler for these +messages should be installed. Although the exact details depend on the +device driver, typically these callback functions will be invoked at +DSR level rather than thread level. Therefore, only certain eCos +functions can be invoked; specifically, those functions that are +guaranteed not to block. If a potentially blocking function such as a +semaphore wait or a mutex lock operation is invoked from inside the +callback then the resulting behaviour is undefined, and the system as +a whole may fail. In addition, if one of the callback functions +involves significant processing effort then this may adversely affect +the system's real time characteristics. The eCos kernel documentation +should be consulted for more details of DSR handling.

Initialization

The usbs_control_endpoint data structure +contains the following fields related to initialization.

typedef struct usbs_control_endpoint {
+    …
+    const usbs_enumeration_data* enumeration_data;
+    void                         (*start_fn)(usbs_control_endpoint*);
+    …
+};

It is the responsibility of higher-level code, usually the +application, to define the USB enumeration data. This needs to be +installed in the control endpoint data structure early on during +system startup, before the USB device is actually started and any +interaction with the host is possible. Details of the enumeration data +are supplied in the section USB Enumeration +Data. Typically, the enumeration data is constant for a given +peripheral, although it can be constructed dynamically if necessary. +However, the enumeration data cannot change while the peripheral is +connected to a host: the peripheral cannot easily claim to be a +keyboard one second and a printer the next.

The start_fn member is normally accessed +via the utility usbs_start rather +than directly. It is provided by the device driver and should be +invoked once the system is fully initialized and interaction with the +host is possible. A typical implementation would change the USB data +pins from tristated to active. If the peripheral is already plugged +into a host then the latter should detect this change and start +interacting with the peripheral, including requesting the enumeration +data.

State

There are three usbs_control_endpoint fields +related to the current state of a USB slave device, plus some state +constants and an enumeration of the possible state changes:

typedef struct usbs_control_endpoint {
+    …
+    int     state;
+    void    (*state_change_fn)(struct usbs_control_endpoint*, void*,
+                               usbs_state_change, int);
+    void*   state_change_data;
+    …
+};
+
+#define USBS_STATE_DETACHED             0x01
+#define USBS_STATE_ATTACHED             0x02
+#define USBS_STATE_POWERED              0x03
+#define USBS_STATE_DEFAULT              0x04
+#define USBS_STATE_ADDRESSED            0x05
+#define USBS_STATE_CONFIGURED           0x06
+#define USBS_STATE_MASK                 0x7F
+#define USBS_STATE_SUSPENDED            (1 << 7)
+
+typedef enum {
+    USBS_STATE_CHANGE_DETACHED          = 1,
+    USBS_STATE_CHANGE_ATTACHED          = 2,
+    USBS_STATE_CHANGE_POWERED           = 3,
+    USBS_STATE_CHANGE_RESET             = 4,    
+    USBS_STATE_CHANGE_ADDRESSED         = 5,
+    USBS_STATE_CHANGE_CONFIGURED        = 6,
+    USBS_STATE_CHANGE_DECONFIGURED      = 7,    
+    USBS_STATE_CHANGE_SUSPENDED         = 8,
+    USBS_STATE_CHANGE_RESUMED           = 9
+} usbs_state_change;

The USB standard defines a number of states for a given USB +peripheral. The initial state is detached, where +the peripheral is either not connected to a host at all or, from the +host's perspective, the peripheral has not started up yet because the +relevant pins are tristated. The peripheral then moves via +intermediate attached and +powered states to its default or +reset state, at which point the host and +peripheral can actually start exchanging data. The first message is +from host to peripheral and provides a unique 7-bit address within the +local USB network, resulting in a state change to +addressed. The host then requests enumeration +data and performs other initialization. If everything succeeds the +host sends a standard set-configuration control message, after which +the peripheral is configured and expected to be +up and running. Note that some USB device drivers may be unable to +distinguish between the detached, +attached and powered states +but generally this is not important to higher-level code.

A USB host should generate at least one token every millisecond. If a +peripheral fails to detect any USB traffic for a period of time then +typically this indicates that the host has entered a power-saving +mode, and the peripheral should do the same if possible. This +corresponds to the suspended bit. The actual +state is a combination of suspended and the +previous state, for example configured and +suspended rather than just +suspended. When the peripheral subsequently +detects USB traffic it would switch back to the +configured state.

The USB device driver and the common USB slave package will maintain +the current state in the control endpoint's +state field. There should be no need for +any other code to change this field, but it can be examined whenever +appropriate. In addition whenever a state change occurs the generic +code can invoke a state change callback function. By default, no such +callback function will be installed. Some class-specific packages such +as the USB-ethernet package will install a suitable function to keep +track of whether or not the host-peripheral connection is up, that is +whether or not ethernet packets can be exchanged. Application code can +also update this field. If multiple parties want to be informed of +state changes, for example both a class-specific package and +application code, then typically the application code will install its +state change handler after the class-specific package and is +responsible for chaining into the package's handler.

The state change callback function is invoked with four arguments. The +first identifies the control endpoint. The second is an arbitrary +pointer: higher-level code can fill in the +state_change_data field to set this. The +third argument specifies the state change that has occurred, and the +last argument supplies the previous state (the new state is readily +available from the control endpoint structure).

eCos does not provide any utility functions for updating or examining +the state_change_fn or +state_change_data fields. Instead, it is +expected that the fields in the +usbs_control_endpoint data structure will be +manipulated directly. Any utility functions would do just this, but +at the cost of increased code and cpu overheads.

Standard Control Messages

typedef struct usbs_control_endpoint {
+    …
+    unsigned char       control_buffer[8];
+    usbs_control_return (*standard_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               standard_control_data;
+    …
+} usbs_control_endpoint;
+
+typedef enum {
+    USBS_CONTROL_RETURN_HANDLED = 0,
+    USBS_CONTROL_RETURN_UNKNOWN = 1,
+    USBS_CONTROL_RETURN_STALL   = 2
+} usbs_control_return;
+
+extern usbs_control_return usbs_handle_standard_control(struct usbs_control_endpoint*);

When a USB peripheral is connected to the host it must always respond +to control messages sent to endpoint 0. Control messages always +consist of an initial eight-byte header, containing fields such as a +request type. This may be followed by a further data transfer, either +from host to peripheral or from peripheral to host. The way this is +handled is described in the Buffer Management section below.

The USB device driver will always accept the initial eight-byte +header, storing it in the control_buffer +field. Then it determines the request type: standard, class, vendor, +or reserved. The way in which the last three of these are processed is +described in the section Other +Control Messages. Some +standard control messages will be handled by the device driver itself; +typically the set-address request and the +get-status, set-feature and +clear-feature requests when applied to endpoints.

If a standard control message cannot be handled by the device driver +itself, the driver checks the +standard_control_fn field in the control +endpoint data structure. If higher-level code has installed a suitable +callback function then this will be invoked with two argument, the +control endpoint data structure itself and the +standard_control_data field. The latter +allows the higher level code to associate arbitrary data with the +control endpoint. The callback function can return one of three +values: HANDLED to indicate that the request has +been processed; UNKNOWN if the message should be +handled by the default code; or STALL to indicate +an error condition. If higher level code has not installed a callback +function or if the callback function has returned +UNKNOWN then the device driver will invoke a +default handler, usbs_handle_standard_control +provided by the common USB slave package.

The default handler can cope with all of the standard control messages +for a simple USB peripheral. However, if the peripheral involves +multiple configurations, multiple interfaces in a configuration, or +alternate settings for an interface, then this cannot be handled by +generic code. For example, a multimedia peripheral may support various +alternate settings for a given data source with different bandwidth +requirements, and the host can select a setting that takes into +account the current load. Clearly higher-level code needs to be aware +when the host changes the current setting, so that it can adjust the +rate at which data is fed to or retrieved from the host. Therefore the +higher-level code needs to install its own standard control callback +and process appropriate messages, rather than leaving these to the +default handler.

The default handler will take care of the +get-descriptor request used to obtain the +enumeration data. It has support for string descriptors but ignores +language encoding issues. If language encoding is important for the +peripheral then this will have to be handled by an +application-specific standard control handler.

The header file <cyg/io/usb/usb.h> defines various +constants related to control messages, for example the function codes +corresponding to the standard request types. This header file is +provided by the common USB package, not by the USB slave package, +since the information is also relevant to USB hosts.

Other Control Messages

typedef struct usbs_control_endpoint {
+    …
+    usbs_control_return (*class_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               class_control_data;
+    usbs_control_return (*vendor_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               vendor_control_data;
+    usbs_control_return (*reserved_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               reserved_control_data;
+    …
+} usbs_control_endpoint;

Non-standard control messages always have to be processed by +higher-level code. This could be class-specific packages. For example, +the USB-ethernet package will handle requests for getting the MAC +address and for enabling or disabling promiscuous mode. In all cases +the device driver will store the initial request in the +control_buffer field, check for an +appropriate handler, and invoke it with details of the control +endpoint and any handler-specific data that has been installed +alongside the handler itself. The handler should return either +USBS_CONTROL_RETURN_HANDLED to report success or +USBS_CONTROL_RETURN_STALL to report failure. The +device driver will report this to the host.

If there are multiple parties interested in a particular type of +control messages, it is the responsibility of application code to +install an appropriate handler and process the requests appropriately.

Buffer Management

typedef struct usbs_control_endpoint {
+    …
+    unsigned char*      buffer;
+    int                 buffer_size;
+    void                (*fill_buffer_fn)(struct usbs_control_endpoint*);
+    void*               fill_data;
+    int                 fill_index;
+    usbs_control_return (*complete_fn)(struct usbs_control_endpoint*, int);
+    …
+} usbs_control_endpoint;

Many USB control messages involve transferring more data than just the +initial eight-byte header. The header indicates the direction of the +transfer, OUT for host to peripheral or IN for peripheral to host. +It also specifies a length field, which is exact for an OUT transfer +or an upper bound for an IN transfer. Control message handlers can +manipulate six fields within the control endpoint data structure to +ensure that the transfer happens correctly.

For an OUT transfer, the handler should examine the length field in +the header and provide a single buffer for all the data. A +class-specific protocol would typically impose an upper bound on the +amount of data, allowing the buffer to be allocated statically. +The handler should update the buffer and +complete_fn fields. When all the data has +been transferred the completion callback will be invoked, and its +return value determines the response sent back to the host. The USB +standard allows for a new control message to be sent before the +current transfer has completed, effectively cancelling the current +operation. When this happens the completion function will also be +invoked. The second argument to the completion function specifies what +has happened, with a value of 0 indicating success and an error code +such as -EPIPE or -EIO +indicating that the current transfer has been cancelled.

IN transfers are a little bit more complicated. The required +information, for example the enumeration data, may not be in a single +contiguous buffer. Instead a mechanism is provided by which the buffer +can be refilled, thus allowing the transfer to move from one record to +the next. Essentially, the transfer operates as follows:

  1. When the host requests another chunk of data (typically eight bytes), +the USB device driver will examine the +buffer_size field. If non-zero then +buffer contains at least one more byte of +data, and then buffer_size is decremented.

  2. When buffer_size has dropped to 0, the +fill_buffer_fn field will be examined. If +non-null it will be invoked to refill the buffer.

  3. The fill_data and +fill_index fields are not used by the +device driver. Instead these fields are available to the refill +function to keep track of the current state of the transfer.

  4. When buffer_size is 0 and +fill_buffer_fn is NULL, no more data is +available and the transfer has completed.

  5. Optionally a completion function can be installed. This will be +invoked with 0 if the transfer completes successfully, or with an +error code if the transfer is cancelled because of another control +messsage.

If the requested data is contiguous then the only fields that need +to be manipulated are buffer and +buffer_size, and optionally +complete_fn. If the requested data is not +contiguous then the initial control message handler should update +fill_buffer_fn and some or all of the other +fields, as required. An example of this is the handling of the +standard get-descriptor control message by +usbs_handle_standard_control.

Polling Support

typedef struct usbs_control_endpoint {
+    void                (*poll_fn)(struct usbs_control_endpoint*);
+    int                 interrupt_vector;
+    …
+} usbs_control_endpoint;

In nearly all circumstances USB I/O should be interrupt-driven. +However, there are special environments such as RedBoot where polled +operation may be appropriate. If the device driver can operate in +polled mode then it will provide a suitable function via the +poll_fn field, and higher-level code can +invoke this regularly. This polling function will take care of all +endpoints associated with the device, not just the control endpoint. +If the USB hardware involves a single interrupt vector then this will +be identified in the data structure as well.


PrevHomeNext
Halted EndpointsUpData Endpoints
\ No newline at end of file diff --git a/doc/html/ref/usbs-data.html b/doc/html/ref/usbs-data.html new file mode 100644 index 00000000..2b880a2b --- /dev/null +++ b/doc/html/ref/usbs-data.html @@ -0,0 +1,384 @@ + + + + + + + + +Data Endpoints +
eCos Reference Manual
PrevNext

Data Endpoints

Name

Data Endpoints -- Data endpoint data structures

Receive and Transmit Data Structures

In addition to a single usbs_control_endpoint +data structure per USB slave device, the USB device driver should also +provide receive and transmit data structures corresponding to the +other endpoints. The names of these are determined by the device +driver. For example, the SA1110 USB device driver package provides +usbs_sa11x0_ep1 for receives and +usbs_sa11x0_ep2 for transmits.

Unlike control endpoints, the common USB slave package does provide a +number of utility routines to manipulate data endpoints. For example +usbs_start_rx_buffer +can be used to receive data from the host into a buffer. In addition +the USB device driver can provide devtab entries such as +/dev/usbs1r and /dev/usbs2w, so +higher-level code can open these devices and then +perform blocking read and +write operations.

However, the operation of data endpoints and the various +endpoint-related functions is relatively straightforward. First +consider a usbs_rx_endpoint structure. The +device driver will provide the members +start_rx_fn and +set_halted_fn, and it will maintain the +halted field. To receive data, higher-level +code sets the buffer, +buffer_size, +complete_fn and optionally the +complete_data fields. Next the +start_rx_fn member should be called. When +the transfer has finished the device driver will invoke the completion +function, using complete_data as the first +argument and a size field for the second argument. A negative size +indicates an error of some sort: -EGAIN indicates +that the endpoint has been halted, usually at the request of the host; +-EPIPE indicates that the connection between the +host and the peripheral has been broken. Certain device drivers may +generate other error codes.

If higher-level code needs to halt or unhalt an endpoint then it can +invoke the set_halted_fn member. When an +endpoint is halted, invoking start_rx_fn +wit buffer_size set to 0 indicates that +higher-level code wants to block until the endpoint is no longer +halted; at that point the completion function will be invoked.

USB device drivers are allowed to assume that higher-level protocols +ensure that host and peripheral agree on the amount of data that will +be transferred, or at least on an upper bound. Therefore there is no +need for the device driver to maintain its own buffers, and copy +operations are avoided. If the host sends more data than expected then +the resulting behaviour is undefined.

Transmit endpoints work in essentially the same way as receive +endpoints. Higher-level code should set the +buffer and +buffer_size fields to point at the data to +be transferred, then call start_tx_fn, and +the device driver will invoked the completion function when the +transfer has completed.

USB device drivers are not expected to perform any locking. If at any +time there are two concurrent receive operations for a given endpoint, +or two concurrent transmit operations, then the resulting behaviour is +undefined. It is the responsibility of higher-level code to perform +any synchronisation that may be necessary. In practice, conflicts are +unlikely because typically a given endpoint will only be accessed +sequentially by just one part of the overall system.


PrevHomeNext
Control EndpointsUpWriting a USB Device Driver
\ No newline at end of file diff --git a/doc/html/ref/usbs-devtab.html b/doc/html/ref/usbs-devtab.html new file mode 100644 index 00000000..d880da58 --- /dev/null +++ b/doc/html/ref/usbs-devtab.html @@ -0,0 +1,487 @@ + + + + + + + + +Devtab Entries +
eCos Reference Manual
PrevNext

Devtab Entries

Name

Devtab Entries -- Data endpoint data structure

Devtab Entries

USB device drivers provide two ways of transferring data between host +and peripheral. The first involves USB-specific functionality such as +usbs_start_rx_buffer. +This provides non-blocking I/O: a transfer is started, and some time +later the device driver will call a supplied completion function. The +second uses the conventional I/O model: there are entries in the +device table corresponding to the various endpoints. Standard calls +such as open can then be used to get a suitable +handle. Actual I/O happens via blocking read and +write calls. In practice the blocking operations +are simply implemented using the underlying non-blocking +functionality.

Each endpoint will have its own devtab entry. The exact names are +controlled by the device driver package, but typically the root will +be /dev/usb. This is followed by one or more +decimal digits giving the endpoint number, followed by +c for a control endpoint, r for +a receive endpoint (host to peripheral), and w for +a transmit endpoint (peripheral to host). If the target hardware +involves more than one USB device then different roots should be used, +for example /dev/usb0c and +/dev/usb1_0c. This may require explicit +manipulation of device driver configuration options by the application +developer.

At present the devtab entry for a control endpoint does not support +any I/O operations.

write operations

cyg_io_write and similar functions in +higher-level packages can be used to perform a transfer from +peripheral to host. Successive write operations will not be coalesced. +For example, when doing a 1000 byte write to an endpoint that uses the +bulk transfer protocol this will involve 15 full-size 64-byte packets +and a terminating 40-byte packet. USB device drivers are not expected +to do any locking, and if higher-level code performs multiple +concurrent write operations on a single endpoint then the resulting +behaviour is undefined.

A USB write operation will never transfer less +data than specified. It is the responsibility of higher-level code to +ensure that the amount of data being transferred is acceptable to the +host-side code. Usually this will be defined by a higher-level +protocol. If an attempt is made to transfer more data than the host +expects then the resulting behaviour is undefined.

There are two likely error conditions. EPIPE +indicates that the connection between host and target has been broken. +EAGAIN indicates that the endpoint has been +stalled, either at the request of the host or by other activity +inside the peripheral.

read operations

cyg_io_read and similar functions in higher-level +packages can be used to perform a transfer from host to peripheral. +This should be a complete transfer: higher-level protocols should +define an upper bound on the amount of data being transferred, and the +read operation should involve at least this +amount of data. The return value will indicate the actual transfer +size, which may be less than requested.

Some device drivers may support partial reads, but USB device drivers +are not expected to perform any buffering because that involves both +memory and code overheads. One technique that may work for bulk +transfers is to exploit the fact that such transfers happen in 64-byte +packets. It is possible to read an initial 64 +bytes, corresponding to the first packet in the transfer. These 64 +bytes can then be examined to determine the total transfer size, and +the remaining data can be transferred in another +read operation. This technique is not guaranteed +to work with all USB hardware. Also, if the delay between accepting +the first packet and the remainder of the transfer is excessive then +this could cause timeout problems for the host-side software. For +these reasons the use of partial reads should be avoided.

There are two likely error conditions. EPIPE +indicates that the connection between host and target has been broken. +EAGAIN indicates that the endpoint has been +stalled, either at the request of the host or by other activity +inside the peripheral.

USB device drivers are not expected to do any locking. If higher-level +code performs multiple concurrent read operations on a single endpoint +then the resulting behaviour is undefined.

select operations

Typical USB device drivers will not provide any support for +select. Consider bulk transfers from the host to +the peripheral. At the USB device driver level there is no way of +knowing in advance how large a transfer will be, so it is not feasible +for the device driver to buffer the entire transfer. It may be +possible to buffer part of the transfer, for example the first 64-byte +packet, and copy this into application space at the start of a +read, but this adds code and memory overheads. +Worse, it means that there is an unknown but potentially long delay +between a peripheral accepting the first packet of a transfer and the +remaining packets, which could confuse or upset the host-side +software.

With some USB hardware it may be possible for the device driver to +detect OUT tokens from the host without actually accepting the data, +and this would indicate that a read is likely to +succeed. However, it would not be reliable since the host-side I/O +operation could time out. A similar mechanism could be used to +implement select for outgoing data, but again +this would not be reliable.

Some device drivers may provide partial support for +select anyway, possibly under the control of a +configuration option. The device driver's documentation should be +consulted for further information. It is also worth noting that the +USB-specific non-blocking API can often be used as an alternative to +select.

get_config and +set_config operations

There are no set_config or +get_config (also known as +ioctl) operations defined for USB devices. +Some device drivers may provide hardware-specific facilities this way.

Note: Currently the USB-specific functions related to halted endpoints cannot be accessed readily +via devtab entries. This functionality should probably be made +available via set_config and +get_config. It may also prove useful to provide +a get_config operation that maps from the +devtab entries to the underlying endpoint data structures.

Presence

The devtab entries are optional. If the USB device is accessed +primarily by class-specific code such as the USB-ethernet package and +that package uses the USB-specific API directly, the devtab entries +are redundant. Even if application code does need to access the USB +device, the non-blocking API may be more convenient than the blocking +I/O provided via the devtab entries. In these cases the devtab entries +serve no useful purpose, but they still impose a memory overhead. It +is possible to suppress the presence of these entries by disabling the +configuration option +CYGGLO_IO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES.


PrevHomeNext
Starting up a USB DeviceUpReceiving Data from the Host
\ No newline at end of file diff --git a/doc/html/ref/usbs-enum.html b/doc/html/ref/usbs-enum.html new file mode 100644 index 00000000..416986bf --- /dev/null +++ b/doc/html/ref/usbs-enum.html @@ -0,0 +1,841 @@ + + + + + + + + +USB Enumeration Data +
eCos Reference Manual
PrevNext

USB Enumeration Data

Name

Enumeration Data -- The USB enumeration data structures

Synopsis

#include <cyg/io/usb/usb.h>
+#include <cyg/io/usb/usbs.h>
+
+typedef struct usb_device_descriptor {
+    …
+} usb_device_descriptor __attribute__((packed));
+
+typedef struct usb_configuration_descriptor {
+    …
+} usb_configuration_descriptor __attribute__((packed));
+
+typedef struct usb_interface_descriptor {
+    …
+} usb_interface_descriptor __attribute__((packed));        
+
+typedef struct usb_endpoint_descriptor {
+    …
+} usb_endpoint_descriptor;
+
+typedef struct usbs_enumeration_data {
+    usb_device_descriptor               device;
+    int                                 total_number_interfaces;
+    int                                 total_number_endpoints;
+    int                                 total_number_strings;
+    const usb_configuration_descriptor* configurations;
+    const usb_interface_descriptor*     interfaces;
+    const usb_endpoint_descriptor*      endpoints;
+    const unsigned char**               strings;
+} usbs_enumeration_data;

USB Enumeration Data

When a USB host detects that a peripheral has been plugged in or +powered up, one of the first steps is to ask the peripheral to +describe itself by supplying enumeration data. Some of this data +depends on the class of peripheral. Other fields are vendor-specific. +There is also a dependency on the hardware, specifically which +endpoints are available should be used. In general it is not possible +for generic code to provide this information, so it is the +responsibility of application code to provide a suitable +usbs_enumeration_data data structure and +install it in the endpoint 0 data structure during initialization. +This must happen before the USB device is enabled by a call to +usbs_start, for example:

const usbs_enumeration_data usb_enum_data = {
+    …
+};
+
+int
+main(int argc, char** argv)
+{
+    usbs_sa11x0_ep0.enumeration_data = &usb_enum_data;
+    …
+    usbs_start(&usbs_sa11x0_ep0);
+    …
+}

For most applications the enumeration data will be static, although +the usbs_enumeration_data structure can be +filled in at run-time if necessary. Full details of the enumeration +data can be found in the Universal Serial Bus specification obtainable +from the USB Implementers Forum web +site, although the meaning of most fields is fairly obvious. +The various data structures and utility macros are defined in the +header files cyg/io/usb/usb.h +and cyg/io/usb/usbs.h. Note +that the example code below makes use of the gcc labelled element +extension.

usb_device_descriptor

The main information about a USB peripheral comes from a single +usb_device_descriptor structure, which is +embedded in the usbs_enumeration_data +structure. A typical example might look like this:

const usbs_enumeration_data usb_enum_data = {
+    {
+        length:                 USB_DEVICE_DESCRIPTOR_LENGTH,
+        type:                   USB_DEVICE_DESCRIPTOR_TYPE,
+        usb_spec_lo:            USB_DEVICE_DESCRIPTOR_USB11_LO,
+        usb_spec_hi:            USB_DEVICE_DESCRIPTOR_USB11_HI,
+        device_class:           USB_DEVICE_DESCRIPTOR_CLASS_VENDOR,
+        device_subclass:        USB_DEVICE_DESCRIPTOR_SUBCLASS_VENDOR,
+        device_protocol:        USB_DEVICE_DESCRIPTOR_PROTOCOL_VENDOR,
+        max_packet_size:        8,
+        vendor_lo:              0x42,
+        vendor_hi:              0x42,
+        product_lo:             0x42,
+        product_hi:             0x42,
+        device_lo:              0x00,
+        device_hi:              0x01,
+        manufacturer_str:       1,
+        product_str:            2,
+        serial_number_str:      0,
+        number_configurations:  1
+    },
+    …
+};

The length and type fields are specified by the USB standard. The +usb_spec_lo and +usb_spec_hi fields identify the particular +revision of the standard that the peripheral implements, for example +revision 1.1.

The device class, subclass, and protocol fields are used by generic +host-side USB software to determine which host-side device driver +should be loaded to interact with the peripheral. A number of standard +classes are defined, for example mass-storage devices and +human-interface devices. If a peripheral implements one of the +standard classes then a standard existing host-side device driver may +exist, eliminating the need to write a custom driver. The value +0xFF (VENDOR) is reserved for +peripherals that implement a vendor-specific protocol rather than a +standard one. Such peripherals will require a custom host-side device +driver. The value 0x00 +(INTERFACE) is reserved and indicates that the +protocol used by the peripheral is defined at the interface level +rather than for the peripheral as a whole.

The max_package_size field specifies the +maximum length of a control message. There is a lower bound of eight +bytes, and typical hardware will not support anything larger because +control messages are usually small and not performance-critical.

The vendor_lo and +vendor_hi fields specify a vendor id, which +must be obtained from the USB Implementor's Forum. The numbers used in +the code fragment above are examples only and must not be used in real +USB peripherals. The product identifier is determined by the vendor, +and different USB peripherals should use different identifiers. The +device identifier field should indicate a release number in +binary-coded decimal.

The above fields are all numerical in nature. A USB peripheral can +also provide a number of strings as described below, for example the name of the +vendor can be provided. The various _str +fields act as indices into an array of strings, with index 0 +indicating that no string is available.

A typical USB peripheral involves just a single configuration. However +more complicated peripherals can support multiple configurations. Only +one configuration will be active at any one time, and the host will +switch between them as appropriate. If a peripheral does involve +multiple configurations then typically it will be the responsibility +of application code to handle the standard +set-configuration control message.

usb_configuration_descriptor

A USB peripheral involves at least one and possible several different +configurations. The usbs_enumeration_data +structure requires a pointer to an array, possibly of length 1, of +usb_configuration_descriptor structures. +Usually a single structure suffices:

const usb_configuration_descriptor usb_configuration = {
+    length:             USB_CONFIGURATION_DESCRIPTOR_LENGTH,
+    type:               USB_CONFIGURATION_DESCRIPTOR_TYPE,
+    total_length_lo:    USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_LO(1, 2),
+    total_length_hi:    USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_HI(1, 2),
+    number_interfaces:  1,
+    configuration_id:   1,
+    configuration_str:  0,
+    attributes:         USB_CONFIGURATION_DESCRIPTOR_ATTR_REQUIRED |
+                        USB_CONFIGURATION_DESCRIPTOR_ATTR_SELF_POWERED,
+    max_power:          50
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    …
+    configurations:             &usb_configuration,
+    …
+};

The values for the length and +type fields are determined by the standard. +The total_length field depends on the +number of interfaces and endpoints used by this configuration, and +convenience macros are provided to calculate this: the first argument +to the macros specify the number of interfaces, the second the number +of endpoints. The number_interfaces field +is self-explanatory. If the peripheral involves multiple +configurations then each one must have a unique id, and this will be +used in the set-configuration control message. The id +0 is reserved, and a set-configuration control +message that uses this id indicates that the peripheral should be +inactive. Configurations can have a string description if required. +The attributes field must have the +REQUIRED bit set; the +SELF_POWERED bit informs the host that the +peripheral has its own power supply and will not draw any power over +the bus, leaving more bus power available to other peripherals; the +REMOTE_WAKEUP bit is used if the peripheral can +interrupt the host when the latter is in power-saving mode. For +peripherals that are not self-powered, the +max_power field specifies the power +requirements in units of 2mA.

usb_interface_descriptor

A USB configuration involves one or more interfaces, typically +corresponding to different streams of data. For example, one interface +might involve video data while another interface is for audio. +Multiple interfaces in a single configuration will be active at the +same time.

const usb_interface_descriptor usb_interface = {
+    length:             USB_INTERFACE_DESCRIPTOR_LENGTH,
+    type:               USB_INTERFACE_DESCRIPTOR_TYPE,
+    interface_id:       0,
+    alternate_setting:  0,
+    number_endpoints:   2,
+    interface_class:    USB_INTERFACE_DESCRIPTOR_CLASS_VENDOR,
+    interface_subclass: USB_INTERFACE_DESCRIPTOR_SUBCLASS_VENDOR,
+    interface_protocol: USB_INTERFACE_DESCRIPTOR_PROTOCOL_VENDOR,
+    interface_str:      0
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    …
+    total_number_interfaces:    1,
+    interfaces:                 &usb_interface,
+    …
+};

Again, the length and +type fields are specified by the standard. +Each interface within a configuration requires its own id. However, a +given interface may have several alternate settings, in other words +entries in the interfaces array with the same id but different +alternate_setting fields. For example, +there might be one setting which requires a bandwidth of 100K/s and +another setting that only needs 50K/s. The host can use the standard +set-interface control message to choose the most appropriate setting. +The handling of this request is the responsibility of higher-level +code, so the application may have to install its own handler.

The number of endpoints used by an interface is specified in the +number_endpoints field. Exact details of +which endpoints are used is held in a separate array of endpoint +descriptors. The class, subclass and protocol fields are used by +host-side code to determine which host-side device driver should +handle this specific interface. Usually this is determined on a +per-peripheral basis in the +usb_device_descriptor structure, but that can +defer the details to individual interfaces. A per-interface string +is allowed as well.

For USB peripherals involving multiple configurations, the array of +usb_interface_descriptor structures should +first contain all the interfaces for the first configuration, then all +the interfaces for the second configuration, and so on.

usb_endpoint_descriptor

The host also needs information about which endpoint should be used +for what. This involves an array of endpoint descriptors:

const usb_endpoint_descriptor usb_endpoints[] = {
+    {
+        length:         USB_ENDPOINT_DESCRIPTOR_LENGTH,
+        type:           USB_ENDPOINT_DESCRIPTOR_TYPE,
+        endpoint:       USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT | 1,
+        attributes:     USB_ENDPOINT_DESCRIPTOR_ATTR_BULK,
+        max_packet_lo:  64,
+        max_packet_hi:  0,
+        interval:       0
+    },
+    {
+        length:         USB_ENDPOINT_DESCRIPTOR_LENGTH,
+        type:           USB_ENDPOINT_DESCRIPTOR_TYPE,
+        endpoint:       USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN | 2,
+        attributes:     USB_ENDPOINT_DESCRIPTOR_ATTR_BULK,
+        max_packet_lo:  64,
+        max_packet_hi:  0,
+        interval:       0
+    }
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    …
+    total_number_endpoints:     2,
+    endpoints:                  usb_endpoints,
+    …
+};

As usual the values for the length and +type fields are specified by the standard. +The endpoint field gives both the endpoint +number and the direction, so in the above example endpoint 1 is used +for OUT (host to peripheral) transfers and endpoint 2 is used for IN +(peripheral to host) transfers. The +attributes field indicates the USB protocol +that should be used on this endpoint: CONTROL, +ISOCHRONOUS, BULK or +INTERRUPT. The +max_packet field specifies the maximum size +of a single USB packet. For bulk transfers this will typically be 64 +bytes. For isochronous transfers this can be up to 1023 bytes. For +interrupt transfers it can be up to 64 bytes, although usually a +smaller value will be used. The interval +field is ignored for control and bulk transfers. For isochronous +transfers it should be set to 1. For interrupt transfers it can be a +value between 1 and 255, and indicates the number of milliseconds +between successive polling operations.

For USB peripherals involving multiple configurations or interfaces +the array of endpoint descriptors should be organized sequentially: +first the endpoints corresponding to the first interface of the first +configuration, then the second interface in that configuration, and so +on; then all the endpoints for all the interfaces in the second +configuration; etc.

Strings

The enumeration data can contain a number of strings with additional +information. Unicode encoding is used for the strings, and it is +possible for a peripheral to supply a given string in multiple +languages using the appropriate characters. The first two bytes of +each string give a length and type field. The first string is special; +after the two bytes header it consists of an array of 2-byte language +id codes, indicating the supported languages. The language code +0x0409 corresponds to English (United States).

const unsigned char* usb_strings[] = {
+    "\004\003\011\004",
+    "\020\003R\000e\000d\000 \000H\000a\000t\000"
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    …
+    total_number_strings:       2,
+    strings:                    usb_strings,
+    …
+};

The default handler for standard control messages assumes that the +peripheral only uses a single language. If this is not the case then +higher-level code will have to handle the standard get-descriptor +control messages when a string descriptor is requested.

usbs_enumeration_data

The usbs_enumeration_data data structure +collects together all the various descriptors that make up the +enumeration data. It is the responsibility of application code to +supply a suitable data structure and install it in the control +endpoints's enumeration_data field before +the USB device is started.


PrevHomeNext
IntroductionUpStarting up a USB Device
\ No newline at end of file diff --git a/doc/html/ref/usbs-halt.html b/doc/html/ref/usbs-halt.html new file mode 100644 index 00000000..71dc8b0e --- /dev/null +++ b/doc/html/ref/usbs-halt.html @@ -0,0 +1,320 @@ + + + + + + + + +Halted Endpoints +
eCos Reference Manual
PrevNext

Halted Endpoints

Name

Halted Endpoints -- Support for Halting and Halted Endpoints

Description

Normal USB traffic involves straightforward handshakes, with either an +ACK to indicate that a packet was transferred +without errors, or a NAK if an error occurred, or +if a peripheral is currently unable to process another packet from the +host, or has no packet to send to the host. There is a third form of +handshake, a STALL, which indicates that the +endpoint is currently halted.

When an endpoint is halted it means that the host-side code needs to +take some sort of recovery action before communication over that +endpoint can resume. The exact circumstances under which this can +happen are not defined by the USB specification, but one example would +be a protocol violation if say the peripheral attempted to transmit +more data to the host than was permitted by the protocol in use. The +host can use the standard control messages get-status, set-feature and +clear-feature to examine and manipulate the halted status of a given +endpoint. There are USB-specific functions which can be used inside +the peripheral to achieve the same effect. Once an endpoint has been +halted the host can then interact with the peripheral using class or +vendor control messages to perform appropriate recovery, and then the +halted condition can be cleared.

Halting an endpoint does not constitute a device state change, and +there is no mechanism by which higher-level code can be informed +immediately. However, any ongoing receive or transmit operations will +be aborted with an -EAGAIN error, and any new +receives or transmits will fail immediately with the same error.

There are six functions to support halted endpoints, one set for +receive endpoints and another for transmit endpoints, with both sets +behaving in essentially the same way. The first, +usbs_rx_endpoint_halted, can be used to determine +whether or not an endpoint is currently halted: it takes a single +argument that identifies the endpoint of interest. The second +function, usbs_set_rx_endpoint_halted, can be +used to change the halted condition of an endpoint: it takes two +arguments; one to identify the endpoint and another to specify the new +state. The last function +usbs_start_rx_endpoint_wait operates in much the +same way as usbs_start_rx_buffer: when the +endpoint is no longer halted the device driver will invoke the +supplied completion function with a status of 0. The completion +function has the same signature as that for a transfer operation. +Often it will be possible to use a single completion function and have +the foreground code invoke either +usbs_start_rx_buffer or +usbs_start_rx_endpoint_wait depending on the +current state of the endpoint.


PrevHomeNext
Sending Data to the HostUpControl Endpoints
\ No newline at end of file diff --git a/doc/html/ref/usbs-intro.html b/doc/html/ref/usbs-intro.html new file mode 100644 index 00000000..f6a4deea --- /dev/null +++ b/doc/html/ref/usbs-intro.html @@ -0,0 +1,482 @@ + + + + + + + + +Introduction +
eCos Reference Manual
PrevNext

Introduction

Name

Introduction -- eCos support for USB slave devices

Introduction

The eCos USB slave support allows developers to produce USB +peripherals. It consists of a number of different eCos packages:

  1. Device drivers for specific implementations of USB slave hardware, for +example the on-chip USB Device Controller provided by the Intel SA1110 +processor. A typical USB peripheral will only provide one USB slave +port and therefore only one such device driver package will be needed. +Usually the device driver package will be loaded automatically when +you create an eCos configuration for target hardware that has a USB +slave device. If you select a target which does have a USB slave +device but no USB device driver is loaded, this implies that no such +device driver is currently available.

  2. The common USB slave package. This serves two purposes. It defines the +API that specific device drivers should implement. It also provides +various utilities that will be needed by most USB device drivers and +applications, such as handlers for standard control messages. +Usually this package will be loaded automatically at the same time as +the USB device driver.

  3. The common USB package. This merely provides some information common +to both the host and slave sides of USB, such as details of the +control protocol. It is also used to place the other USB-related +packages appropriately in the overall configuration hierarchy. Usually +this package will be loaded at the same time as the USB device driver.

  4. Class-specific USB support packages. These make it easier to develop +specific classes of USB peripheral, such as a USB-ethernet device. If +no suitable package is available for a given class of peripheral then +the USB device driver can instead be accessed directly from +application code. Such packages will never be loaded automatically +since the configuration system has no way of knowing what class of USB +peripheral is being developed. Instead developers have to add the +appropriate package or packages explicitly.

These packages only provide support for developing USB peripherals, +not USB hosts.

USB Concepts

Information about USB can be obtained from a number of sources +including the USB Implementers Forum +web site. Only a brief summary is provided here.

A USB network is asymmetrical: it consists of a single host, one or +more slave devices, and possibly some number of intermediate hubs. The +host side is significantly more complicated than the slave side. +Essentially, all operations are initiated by the host. For example, if +the host needs to receive some data from a particular USB peripheral +then it will send an IN token to that peripheral; the latter should +respond with either a NAK or with appropriate data. Similarly, when +the host wants to transmit data to a peripheral it will send an OUT +token followed by the data; the peripheral will return a NAK if it is +currently unable to receive more data or if there was corruption, +otherwise it will return an ACK. All transfers are check-summed and +there is a clearly-defined error recovery process. USB peripherals can +only interact with the host, not with each other.

USB supports four different types of communication: control messages, +interrupt transfers, isochronous transfers, and bulk transfers. +Control messages are further subdivided into four categories: +standard, class, vendor and a reserved category. All USB peripherals +must respond to certain standard control messages, and usually this +will be handled by the common USB slave package (for complicated +peripherals, application support will be needed). Class and vendor +control messages may be handled by an class-specific USB support +package, for example the USB-ethernet package will handle control +messages such as getting the MAC address or enabling/disabling +promiscuous mode. Alternatively, some or all of these messages will +have to be handled by application code.

Interrupt transfers are used for devices which need to be polled +regularly. For example, a USB keyboard might be polled once every +millisecond. The host will not poll the device more frequently than +this, so interrupt transfers are best suited to peripherals that +involve a relatively small amount of data. Isochronous transfers are +intended for multimedia-related peripherals where typically a large +amount of video or audio data needs to be exchanged continuously. +Given appropriate host support a USB peripheral can reserve some of +the available bandwidth. Isochronous transfers are not reliable; if a +particular packet is corrupted then it will just be discarded and +software is expected to recover from this. Bulk transfers are used for +everything else: after taking care of any pending control, isochronous +and interrupt transfers the host will use whatever bandwidth remains +for bulk transfers. Bulk transfers are reliable.

Transfers are organized into USB packets, with the details depending +on the transfer type. Control messages always involve an initial +8-byte packet from host to peripheral, optionally followed by some +additional packets; in theory these additional packets can be up to 64 +bytes, but hardware may limit it to 8 bytes. Interrupt transfers +involve a single packet of up to 64 bytes. Isochronous transfers +involve a single packet of up to 1024 bytes. Bulk transfers involve +multiple packets. There will be some number, possibly zero, of 64-byte +packets. The transfer is terminated by a single packet of less than 64 +bytes. If the transfer involves an exact multiple of 64 bytes than the +final packet will be 0 bytes, consisting of just a header and checksum +which typically will be generated by the hardware. There is no +pre-defined limit on the size of a bulk transfer. Instead higher-level +protocols are expected to handle this, so for a USB-ethernet +peripheral the protocol could impose a limit of 1514 bytes of data +plus maybe some additional protocol overhead.

Transfers from the host to a peripheral are addressed not just to that +peripheral but to a specific endpoint within that peripheral. +Similarly, the host requests incoming data from a specific endpoint +rather than from the peripheral as a whole. For example, a combined +keyboard/touchpad device could provide the keyboard events on endpoint +1 and the mouse events on endpoint 2. A given USB peripheral can have +up to 16 endpoints for incoming data and another 16 for outgoing data. +However, given the comparatively high speed of USB I/O this endpoint +addressing is typically implemented in hardware rather than software, +and the hardware will only implement a small number of endpoints. +Endpoint 0 is generally used only for control messages.

In practice, many of these details are irrelevant to application code +or to class packages. Instead, such higher-level code usually just +performs blocking read and +write, or non-blocking USB-specific calls, to +transfer data between host and target via a specific endpoint. Control +messages are more complicated but are usually handled by existing +code.

When a USB peripheral is plugged into the host there is an initial +enumeration and configuration process. The peripheral provides +information such as its class of device (audio, video, etc.), a +vendor id, which endpoints should be used for what kind of data, and +so on. The host OS uses this information to identify a suitable host +device driver. This could be a generic driver for a class of +peripherals, or it could be a vendor-specific driver. Assuming a +suitable driver is installed the host will then activate the USB +peripheral and perform additional application-specific initialisation. +For example for a USB-ethernet device this would involve obtaining an +ethernet MAC address. Most USB peripherals will be fairly simple, but +it is possible to build multifunction peripherals with multiple +configurations, interfaces, and alternate interface settings.

It is not possible for any of the eCos packages to generate all the +enumeration data automatically. Some of the required information such +as the vendor id cannot be supplied by generic packages; only by the +application developer. Class support code such as the USB-ethernet +package could in theory supply some of the information automatically, +but there are also hardware dependencies such as which endpoints get +used for incoming and outgoing ethernet frames. Instead it is the +responsibility of the application developer to provide all the +enumeration data and perform some additional initialisation. In +addition, the common USB slave package can handle all the standard +control messages for a simple USB peripheral, but for something like a +multifunction peripheral additional application support is needed.

Note: The initial implementation of the eCos USB slave packages involved +hardware that only supported control and bulk transfers, not +isochronous or interrupt. There may be future changes to the USB +code and API to allow for isochronous and interrupt transfers, +especially the former. Other changes may be required to support +different USB devices. At present there is no support for USB remote +wakeups, since again it is not supported by the hardware.

eCos USB I/O Facilities

For protocols other than control messages, eCos provides two ways of +performing USB I/O. The first involves device table or devtab entries such +as /dev/usb1r, +with one entry per endpoint per USB device. It is possible to +open these devices and use conventional blocking +I/O functions such as read and +write to exchange data between host and +peripheral.

There is also a lower-level USB-specific API, consisting of functions +such as usbs_start_rx_buffer. +A USB device driver will supply a data structure for each endpoint, +for example a usbs_rx_endpoint +structure for every receive endpoint. The first argument to +usbs_start_rx_buffer should be a pointer to such +a data structure. The USB-specific API is non-blocking: the initial +call merely starts the transfer; some time later, once the transfer +has completed or has been aborted, the device driver will invoke a +completion function.

Control messages are different. With four different categories of +control messages including application and vendor specific ones, the +conventional +open/read/write +model of I/O cannot easily be applied. Instead, a USB device driver +will supply a usbs_control_endpoint +data structure which can be manipulated appropriately. In practice the +standard control messages will usually be handled by the common USB +slave package, and other control messages will be handled by +class-specific code such as the USB-ethernet package. Typically, +application code remains responsible for supplying the enumeration data and for actually starting up the USB device.

Enabling the USB code

If the target hardware contains a USB slave device then the +appropriate USB device driver and the common packages will typically +be loaded into the configuration automatically when that target is +selected (assuming a suitable device driver exists). However, the +driver will not necessarily be active. For example a processor might +have an on-chip USB device, but not all applications using that +processor will want to use USB functionality. Hence by default the USB +device is disabled, ensuring that applications do not suffer any +memory or other penalties for functionality that is not required.

If the application developer explicitly adds a class support package +such as the USB-ethernet one then this implies that the USB device is +actually needed, and the device will be enabled automatically. +However, if no suitable class package is available and the USB device +will instead be accessed by application code, it is necessary to +enable the USB device manually. Usually the easiest way to do this is +to enable the configuration option +CYGGLO_IO_USB_SLAVE_APPLICATION, and the USB device +driver and related packages will adjust accordingly. Alternatively, +the device driver may provide some configuration options to provide +more fine-grained control.


PrevHomeNext
eCos USB Slave SupportUpUSB Enumeration Data
\ No newline at end of file diff --git a/doc/html/ref/usbs-start-rx.html b/doc/html/ref/usbs-start-rx.html new file mode 100644 index 00000000..1cb8f67c --- /dev/null +++ b/doc/html/ref/usbs-start-rx.html @@ -0,0 +1,449 @@ + + + + + + + + +Receiving Data from the Host +
eCos Reference Manual
PrevNext

Receiving Data from the Host

Name

usbs_start_rx_buffer -- Receiving Data from the Host

Description

usbs_start_rx_buffer is a USB-specific function +to accept a transfer from host to peripheral. It can be used for bulk, +interrupt or isochronous transfers, but not for control messages. +Instead those involve manipulating the usbs_control_endpoint +data structure directly. The function takes five arguments:

  1. The first argument identifies the specific endpoint that should be +used. Different USB devices will support different sets of endpoints +and the device driver will provide appropriate data structures. The +device driver's documentation should be consulted for details of which +endpoints are available.

  2. The buffer and length +arguments control the actual transfer. USB device drivers are not +expected to perform any buffering or to support partial transfers, so +the length specified should correspond to the maximum transfer that is +currently possible and the buffer should be at least this large. For +isochronous transfers the USB specification imposes an upper bound of +1023 bytes, and a smaller limit may be set in the enumeration data. Interrupt +transfers are similarly straightforward with an upper bound of 64 +bytes, or less as per the enumeration data. Bulk transfers are more +complicated because they can involve multiple 64-byte packets plus a +terminating packet of less than 64 bytes, so there is no predefined +limit on the transfer size. Instead it is left to higher-level +protocols to specify an appropriate upper bound.

    One technique that may work for bulk transfers is to exploit the fact +that such transfers happen in 64-byte packets: it may be possible to +receive an initial 64 bytes, corresponding to the first packet in the +transfer; these 64 bytes can then be examined to determine the total +transfer size, and the remaining data can be transferred in another +receive operation. This technique is not guaranteed to work with all +USB hardware. Also, if the delay between accepting the first packet and +the remainder of the transfer is excessive then this could cause +timeout problems for the host-side software. For these reasons this +technique should be avoided.

  3. usbs_start_rx_buffer is non-blocking. It merely +starts the receive operation, and does not wait for completion. At +some later point the USB device driver will invoke the completion +function parameter with two arguments: the completion data defined by +the last parameter and a result field. A result >= +0 indicates a successful transfer of that many +bytes, which may be less than the upper bound imposed by the +length argument. A result < +0 indicates an error. The most likely errors are +-EPIPE to indicate that the connection between the +host and the target has been broken, and -EAGAIN +for when the endpoint has been halted. Specific USB device drivers may +specify additional error conditions.

The normal sequence of events is that the USB device driver will +update the appropriate hardware registers. At some point after that +the host will attempt to send data by transmitting an OUT token +followed by a data packet, and since a receive operation is now in +progress the data will be accepted and ACK'd. If there were no receive +operation then the peripheral would instead generate a NAK. The USB +hardware will generate an interrupt once the whole packet has been +received, and the USB device driver will service this interrupt and +arrange for a DSR to be called. Isochronous and interrupt transfers +involve just a single packet. However, bulk transfers may involve +multiple packets so the device driver has to check whether the packet +was a full 64 bytes or whether it was a terminating packet of less +than this. When the device driver DSR detects a complete transfer it +will inform higher-level code by invoking the supplied completion +function.

This means that the completion function will normally be invoked by a +DSR and not in thread context - although some USB device drivers may +have a different implementation. Therefore the completion function is +restricted in what it can do. In particular it must not make any +calls that will or may block such as locking a mutex or allocating +memory. The kernel documentation should be consulted for more details +of DSR's and interrupt handling generally.

It is possible that the completion function will be invoked before +usbs_start_rx_buffer returns. Such an event would +be unusual because the transfer cannot happen until the next time the +host tries to send data to this peripheral, but it may happen if for +example another interrupt happens and a higher priority thread is +scheduled to run. Also, if the endpoint is currently halted then the +completion function will be invoked immediately with +-EAGAIN: typically this will happen in the current +thread rather than in a separate DSR. The completion function is +allowed to start another transfer immediately by calling +usbs_start_rx_buffer again.

USB device drivers are not expected to perform any locking. It is the +responsibility of higher-level code to ensure that there is only one +receive operation for a given endpoint in progress at any one time. If +there are concurrent calls to +usbs_start_rx_buffer then the resulting behaviour +is undefined. For typical USB applications this does not present any +problems, because only one piece of code will access a given endpoint +at any particular time.

The following code fragment illustrates a very simple use of +usbs_start_rx_buffer to implement a blocking +receive, using a semaphore to synchronise between the foreground +thread and the DSR. For a simple example like this no completion data +is needed.

static int error_code = 0;
+static cyg_sem_t completion_wait;
+
+static void
+completion_fn(void* data, int result)
+{
+    error_code = result;
+    cyg_semaphore_post(&completion_wait);
+}
+
+int
+blocking_receive(usbs_rx_endpoint* ep, unsigned char* buf, int len)
+{
+    error_code = 0;
+    usbs_start_rx_buffer(ep, buf, len, &completion_fn, NULL);
+    cyg_semaphore_wait(&completion_wait);
+    return error_code;
+}

There is also a utility function usbs_start_rx. This +can be used by code that wants to manipulate data endpoints directly, specifically the +complete_fn, +complete_data, +buffer and +buffer_size fields. +usbs_start_tx just invokes a function +supplied by the device driver.


PrevHomeNext
Devtab EntriesUpSending Data to the Host
\ No newline at end of file diff --git a/doc/html/ref/usbs-start-tx.html b/doc/html/ref/usbs-start-tx.html new file mode 100644 index 00000000..3521756f --- /dev/null +++ b/doc/html/ref/usbs-start-tx.html @@ -0,0 +1,441 @@ + + + + + + + + +Sending Data to the Host +
eCos Reference Manual
PrevNext

Sending Data to the Host

Name

usbs_start_tx_buffer -- Sending Data to the Host

Description

usbs_start_tx_buffer is a USB-specific function +to transfer data from peripheral to host. It can be used for bulk, +interrupt or isochronous transfers, but not for control messages; +instead those involve manipulating the usbs_control_endpoint +data structure directly. The function takes five arguments:

  1. The first argument identifies the specific endpoint that should be +used. Different USB devices will support different sets of endpoints +and the device driver will provide appropriate data structures. The +device driver's documentation should be consulted for details of which +endpoints are available.

  2. The buffer and length +arguments control the actual transfer. USB device drivers are not +allowed to modify the buffer during the transfer, so the data can +reside in read-only memory. The transfer will be for all the data +specified, and it is the responsibility of higher-level code to make +sure that the host is expecting this amount of data. For isochronous +transfers the USB specification imposes an upper bound of 1023 bytes, +but a smaller limit may be set in the enumeration data. Interrupt +transfers have an upper bound of 64 bytes or less, as per the +enumeration data. Bulk transfers are more complicated because they can +involve multiple 64-byte packets plus a terminating packet of less +than 64 bytes, so the basic USB specification does not impose an upper +limit on the total transfer size. Instead it is left to higher-level +protocols to specify an appropriate upper bound. If the peripheral +attempts to send more data than the host is willing to accept then the +resulting behaviour is undefined and may well depend on the specific +host operating system being used.

    For bulk transfers, the USB device driver or the underlying hardware +will automatically split the transfer up into the appropriate number +of full-size 64-byte packets plus a single terminating packet, which +may be 0 bytes.

  3. usbs_start_tx_buffer is non-blocking. It merely +starts the transmit operation, and does not wait for completion. At +some later point the USB device driver will invoke the completion +function parameter with two arguments: the completion data defined by +the last parameter, and a result field. This result will be either an +error code < 0, or the amount of data +transferred which should correspond to the +length argument. The most likely errors are +-EPIPE to indicate that the connection between the +host and the target has been broken, and -EAGAIN +for when the endpoint has been halted. Specific USB device drivers may +define additional error conditions.

The normal sequence of events is that the USB device driver will +update the appropriate hardware registers. At some point after that +the host will attempt to fetch data by transmitting an IN token. Since +a transmit operation is now in progress the peripheral can send a +packet of data, and the host will generate an ACK. At this point the +USB hardware will generate an interrupt, and the device driver will +service this interrupt and arrange for a DSR to be called. Isochronous +and interrupt transfers involve just a single packet. However, bulk +transfers may involve multiple packets so the device driver has to +check whether there is more data to send and set things up for the +next packet. When the device driver DSR detects a complete transfer it +will inform higher-level code by invoking the supplied completion +function.

This means that the completion function will normally be invoked by a +DSR and not in thread context - although some USB device drivers may +have a different implementation. Therefore the completion function is +restricted in what it can do, in particular it must not make any +calls that will or may block such as locking a mutex or allocating +memory. The kernel documentation should be consulted for more details +of DSR's and interrupt handling generally.

It is possible that the completion function will be invoked before +usbs_start_tx_buffer returns. Such an event would +be unusual because the transfer cannot happen until the next time the +host tries to fetch data from this peripheral, but it may happen if, +for example, another interrupt happens and a higher priority thread is +scheduled to run. Also, if the endpoint is currently halted then the +completion function will be invoked immediately with +-EAGAIN: typically this will happen in the current +thread rather than in a separate DSR. The completion function is +allowed to start another transfer immediately by calling +usbs_start_tx_buffer again.

USB device drivers are not expected to perform any locking. It is the +responsibility of higher-level code to ensure that there is only one +transmit operation for a given endpoint in progress at any one time. +If there are concurrent calls to +usbs_start_tx_buffer then the resulting behaviour +is undefined. For typical USB applications this does not present any +problems because only piece of code will access a given endpoint at +any particular time.

The following code fragment illustrates a very simple use of +usbs_start_tx_buffer to implement a blocking +transmit, using a semaphore to synchronise between the foreground +thread and the DSR. For a simple example like this no completion data +is needed.

static int error_code = 0;
+static cyg_sem_t completion_wait;
+
+static void
+completion_fn(void* data, int result)
+{
+    error_code = result;
+    cyg_semaphore_post(&completion_wait);
+}
+
+int
+blocking_transmit(usbs_tx_endpoint* ep, const unsigned char* buf, int len)
+{
+    error_code = 0;
+    usbs_start_tx_buffer(ep, buf, len, &completion_fn, NULL);
+    cyg_semaphore_wait(&completion_wait);
+    return error_code;
+}

There is also a utility function usbs_start. This +can be used by code that wants to manipulate data endpoints directly, specifically the +complete_fn, +complete_data, +buffer and +buffer_size fields. +usbs_start_tx just calls a function supplied by +the device driver.


PrevHomeNext
Receiving Data from the HostUpHalted Endpoints
\ No newline at end of file diff --git a/doc/html/ref/usbs-start.html b/doc/html/ref/usbs-start.html new file mode 100644 index 00000000..993edb35 --- /dev/null +++ b/doc/html/ref/usbs-start.html @@ -0,0 +1,269 @@ + + + + + + + + +Starting up a USB Device +
eCos Reference Manual
PrevNext

Starting up a USB Device

Name

usbs_start -- Starting up a USB Device

Description

Initializing a USB device requires some support from higher-level +code, typically the application, in the form of enumeration data. +Hence it is not possible for the low-level USB driver to activate a +USB device itself. Instead the higher-level code has to take care of +this by invoking usbs_start. This function takes +a pointer to a USB control endpoint data structure. USB device drivers +should provide exactly one such data structure for every USB device, +so the pointer uniquely identifies the device.

const usbs_enumeration_data usb_enum_data = {
+    …
+};
+
+int
+main(int argc, char** argv)
+{
+    usbs_sa11x0_ep0.enumeration_data = &usb_enum_data;
+    …
+    usbs_start(&usbs_sa11x0_ep0);
+    …
+}

The exact behaviour of usbs_start depends on the +USB hardware and the device driver. A typical implementation would +change the USB data pins from tristated to active. If the peripheral +is already plugged into a host then the latter should detect this +change and start interacting with the peripheral, including requesting +the enumeration data. Some of this may happen before +usbs_start returns, but given that multiple +interactions between USB host and peripheral are required it is likely +that the function will return before the peripheral is fully +configured. Control endpoints provide a mechanism for informing +higher-level code of USB state changes. +usbs_start will return even if the peripheral is +not currently connected to a host: it will not block until the +connection is established.

usbs_start should only be called once for a given +USB device. There are no defined error conditions. Note that the +function affects the entire USB device and not just the control +endpoint: there is no need to start any data endpoints as well.


PrevHomeNext
USB Enumeration DataUpDevtab Entries
\ No newline at end of file diff --git a/doc/html/ref/usbs-testing.html b/doc/html/ref/usbs-testing.html new file mode 100644 index 00000000..7fd68165 --- /dev/null +++ b/doc/html/ref/usbs-testing.html @@ -0,0 +1,2285 @@ + + + + + + + + +Testing +
eCos Reference Manual
PrevNext

Testing

Name

Testing -- Testing of USB Device Drivers

Introduction

The support for USB testing provided by the eCos USB common slave +package is somewhat different in nature from the kind of testing used +in many other packages. One obvious problem is that USB tests cannot +be run on just a bare target platform: instead the target platform +must be connected to a suitable USB host machine, and that host +machine must be running appropriate software for the test code to +interact with. This is very different from say a kernel test which +typically will have no external dependencies. Another important +difference between USB testing and say a C library +strcmp test is sensitivity to timing and to +hardware boundary conditions: although a simple test case that just +performs a small number of USB transfers is better than no testing at +all, it should also be possible to run tests for hours or days on end, +under a variety of loads. In order to provide the required +functionality the basic architecture of the USB testing support is as +follows:

  1. There is a single target-side program + usbtarget. By default when this is run + on a target platform it will appear to do nothing. In fact it is + waiting to be contacted by another program + usbhost which will tell it what test or + tests to run. usbtarget provides + mechanisms for running a wide range of tests. +

  2. usbtarget is a generic program, but USB + testing depends to some extent on the functionality provided by the + hardware. For example there is no point in testing bulk transmits + to endpoint 12 if the target hardware does not support an endpoint + 12. Therefore each USB device driver should supply information about + what the hardware is actually capable of, in the form of an array of + usbs_testing_endpoint data structures. +

  3. There is a single host-side program + usbhost, which acts as a counterpart to + usbtarget. Again + usbhost has no built-in knowledge of + the test or tests that are supposed to run, it only provides + mechanisms for running a wide range of tests. On start-up + usbhost will search the USB bus for + hardware running the target-side program, specifically a USB device + that identifies itself as the product "Red Hat eCos + USB test". +

  4. usbhost contains a Tcl interpreter, and + will execute any Tcl scripts specified on the command line + together with appropriate arguments. The Tcl interpreter has been + extended with various commands such as + usbtest::bulktest, so the script can perform + the desired test or tests. +

  5. Adding a new test simply involves writing a short Tcl script that + invokes the appropriate USB-specific commands. Running multiple + tests involves passing appropriate arguments to + usbhost, or alternatively writing a + single script that just invokes other scripts. +

The current implementation of usbhost +depends heavily on functionality provided by the Linux kernel and in +particular the usbdevfs support. It uses +/proc/bus/usb/devices to find out what devices +are attached to the bus, and will then access the device by opening +/proc/bus/usb/xxx/yyy and performing +ioctl operations. This allows USB testing to take +place without having to write a new host-side device driver, but +getting the code working on host machines not running Linux would +obviously be problematical.

Building and Running the Target-side Code

The target-side component of the USB testing software consists of a +single program usbtarget which contains +support for a range of different tests, under the control of host-side +software. This program is not built by default alongside other eCos +test cases since it will only operate in certain environments, +specifically when the target board's connector is plugged into a Linux +host, and when the appropriate host-side software has been installed +on that host. Instead the user must enable a configuration option +CYGBLD_IO_USB_SLAVE_USBTEST to add the program to +the list of tests for the current configuration.

Starting the usbtarget program does not +require anything unusual, so it can be run in a normal +gdb session just like any eCos application. +After initialization the program will wait for activity from the host. +Depending on the hardware, the Linux host will detect that a new USB +peripheral is present on the bus either when the +usbtarget initialization is complete or +when the cable between target and host is connected. The host will +perform the normal USB enumeration sequence and discover that the +peripheral does not match any known vendor or product id and that +there is no device driver for "Red Hat eCos USB +test", so it will ignore the peripheral. When the +usbhost program is run on the host it will +connect to the target-side software, and testing can now commence.

Building and Running the Host-side Code

Note: In theory the host-side software should be built when the package is +installed in the component repository, and removed when a package +is uninstalled. The current eCos administration tool does not provide +this functionality.

The host-side software should be built via the usual sequence of +"configure/make/make install". It can only be built on a +Linux host and the configure script contains an +explicit test for this. Because the eCos component repository should +generally be treated as a read-only resource the configure script will +also prevent you from trying to build inside the source tree. Instead +a separate build tree is required. Hence a typical sequence for +building the host-side software would be as follows:

$ mkdir usbhost_build
+$ cd usbhost_build
+$ <repo>packages/io/usb/slave/current/host/configure   <args> 
+$ make
+<output from make>
+$ su 
+$ make install
+<output from make install>
+$
The location of the eCos component repository should be substituted +for <repo>.
If the package has been obtained via CVS or anonymous CVS then the +package version will be current, as per the +example. If instead the package has been obtained as part of a full +eCos release or as a separate .epk file then the +appropriate package version should be used instead of +current.
The configure script takes the usual arguments such +as --prefix= to specify where the executables +and support files should be installed. The only other parameter that +some users may wish to specify is the location of a suitable Tcl +installation. By default usbhost will use +the existing Tcl installation in /usr, +as provided by your Linux distribution. An alternative Tcl +installation can be specified using the parameter +--with-tcl=, or alternatively using some +combination of --with-tcl-include, +--with-tcl-lib and +--with-tcl-version.
One of the host-side executables that gets built, +usbchmod, needs to be installed with suid +root privileges. Although the Linux kernel makes it possible for +applications to perform low-level USB operations such as transmitting +bulk packets, by default access to this functionality is restricted to +programs with superuser privileges. It is undesirable to run a complex +program such as usbhost with such +privileges, especially since the program contains a general-purpose +Tcl interpreter. Therefore when usbhost +starts up and discovers that it does not have sufficient access to the +appropriate entries in /proc/bus/usb, +it spawns an instance of usbchmod to modify +the permissions on these entries. usbchmod +will only do this for a USB device "Red Hat eCos USB +test", so installing this program suid root should not +introduce any security problems.

During make install the following actions will take +place:

  1. usbhost will be installed in /usr/local/bin, +or some other bin directory if +the default location is changed at configure-time using a +--prefix= or similar option. It will be +installed as the executable +usbhost_<version>, for example +usbhost_current, thus allowing several +releases of the USB slave package to co-exist. For convenience a +symbolic link from usbhost to this executable +will be created, so users can just run usbhost to +access the most recently-installed version.

  2. usbchmod will be installed in +/usr/local/libexec/ecos/io_usb_slave_<version>. +This program should only be run by usbhost, +not invoked directly, so it is not placed in the bin +directory. Again the presence of the package version in the directory +name allows multiple releases of the package to co-exist.

  3. A Tcl script usbhost.tcl will get installed in +the same directory as usbchmod. This Tcl +script is loaded automatically by the +usbhost executable.

  4. A number of additional Tcl scripts, for example +list.tcl will get installed alongside +usbhost.tcl. These correspond to various test +cases provided as standard. If a given test case is specified on the +command line and cannot be found relative to the current directory +then usbhost will search the install +directory for these test cases.

    Note: Strictly speaking installing the usbhost.tcl and +other Tcl scripts below the libexec +directory deviates from standard practice: they are +architecture-independent data files so should be installed below +the share subdirectory. In +practice the files are sufficiently small that there is no point in +sharing them, and keeping them below libexec +simplifies the host-side software somewhat.

The usbhost should be run only when there is a +suitable target attached to the USB bus and running the +usbtarget program. It will search +/proc/bus/usb/devices for an entry corresponding +to this program, invoke usbchmod if +necessary to change the access rights, and then interact with +usbtarget over the USB bus. +usbhost should be invoked as follows:

$ usbhost [-v|--version] [-h|--help] [-V|--verbose] <test> [<test parameters>]

  1. The -v or --version +option will display version information for +usbhost including the version of the USB +slave package that was used to build the executable.

  2. The -h or --help option +will display usage information.

  3. The -V or --verbose +option can be used to obtain more information at run-time, for example +some output for every USB transfer. This option can be repeated +multiple times to increase the amount of output.

  4. The first argument that does not begin with a hyphen specifies a test +that should be run, in the form of a Tcl script. For example an +argument of list.tcl will cause +usbhost to look for a script with that +name, adding a .tcl suffix if necessarary, and +run that script. usbhost will look in the +current directory first, then in the install tree for standard test +scripts provided by the USB slave package.

  5. Some test scripts may want their own parameters, for example a +duration in seconds. These can be passed on the command line after +the name of the test, for example +usbhost mytest 60.

Writing a Test

Each test is defined by a Tcl script, running inside an interpreter +provided by usbhost. In addition to the +normal Tcl functionality this interpreter provides a number of +variables and functions related to USB testing. For example there is a +variable bulk_in_endpoints that lists all the +endpoints on the target that can perform bulk IN operations, and a +related array bulk_in which contains information +such as the minimum and maximum packets sizes. There is a function +bulktest which can be used to perform bulk tests +on a particular endpoint. A simple test script aimed at specific +hardware could ignore the information variables since it would know +exactly what USB hardware is available on the target, whereas a +general-purpose script would use the information to adapt to the +hardware capabilities.

To avoid namespace pollution all USB-related Tcl variables and +functions live in the usbtest:: namespace. +Therefore accessing requires either explicitly including the +namespace any references, for example +$usbtest::bulk_in_endpoints, or by using Tcl's +namespace import facility.

A very simple test script might look like this:

usbtest::bulktest 1 out 4000
+usbtest::bulktest 2 in  4000
+if { [usbtest::start 60] } {
+    puts "Test successful"
+} else
+    puts "Test failed"
+    foreach result $usbtest::results {
+        puts $result
+    }
+}

This would perform a test run involving 4000 bulk transfers from the +host to the target's endpoint 1, and concurrently 4000 bulk transfers +from endpoint 2. Default settings for packet sizes, contents, and +delays would be used. The actual test would not start running until +usbtest is invoked, and it is expected that the +test would complete within 60 seconds. If any failures occur then they +are reported.

Available Hardware

Each target-side USB device driver provides information about the +actual capabilities of the hardware, for example which endpoints are +available. Strictly speaking it provides information about what is +actually supported by the device driver, which may be a subset of what +the hardware is capable of. For example, the hardware may support +isochronous transfers on a particular endpoint but if there is no +software support for this in the driver then this endpoint will not be +listed. When usbhost first contacts the +usbtarget program running on the target +platform, it obtains this information and makes it available to test +scripts via Tcl variables:

bulk_in_endpoints

This is a simple list of the endpoints which can support bulk IN + transfers. For example if the target-side hardware supports + these transfers on endpoints 3 and 5 then the value would be + "3 5" Typical test scripts would + iterate over the list using something like: +

  if { 0 != [llength $usbtest::bulk_in_endpoints] } {
+      puts"Bulk IN endpoints: $usbtest::bulk_in_endpoints"
+      foreach endpoint $usbtest:bulk_in_endpoints {
+          …
+      }
+  }
+  
bulk_in()

This array holds additional information about each bulk IN endpoint. + The array is indexed by two fields, the endpoint number and one of + min_size, max_size, + max_in_padding and devtab: +

min_size

This field specifies a lower bound on the size of bulk transfers, + and will typically will have a value of 1. +

Note: The typical minimum transfer size of a single byte is not strictly + speaking correct, since under some circumstances it can make sense + to have a transfer size of zero bytes. However current target-side + device drivers interpret a request to transfer zero bytes as a way + for higher-level code to determine whether or not an endpoint is + stalled, so it is not actually possible to perform zero-byte + transfers. This issue will be addressed at some future point. +

max_size

This field specifies an upper bound on the size of bulk transfers. + Some target-side drivers may be limited to transfers of say + 0x0FFFF bytes because of hardware limitations. In practice the + transfer size is likely to be limited primarily to limit memory + consumption of the test code on the target hardware, and to ensure + that tests complete reasonably quickly. At the time of writing + transfers are limited to 4K. +

max_in_padding

On some hardware it may be necessary for the target-side device + driver to send more data than is actually intended. For example + the SA11x0 USB hardware cannot perform bulk transfers that are + an exact multiple of 64 bytes, instead it must pad such + transfers with an extra byte and the host must be ready to + accept and discard this byte. The + max_in_padding field indicates the amount of + padding that is required. The low-level code inside + usbhost will use this field + automatically, and there is no need for test scripts to adjust + packet sizes for padding. The field is provided for + informational purposes only. +

devtab

This is a string indicating whether or not the + target-side USB device driver supports access to this endpoint + via entries in the device table, in other words through + conventional calls like open and + write. Some device drivers may only + support low-level USB access because typically that is what gets + used by USB class-specific packages such as USB-ethernet. + An empty string indicates that no devtab entry is available, + otherwise it will be something like + "/dev/usbs2w". +

Typical test scripts would access this data using something like: +

  foreach endpoint $usbtest:bulk_in_endpoints {
+      puts "Endpoint $endpoint: "
+      puts "    minimum transfer size $usbtest::bulk_in($endpoint,min_size)"
+      puts "    maximum transfer size $usbtest::bulk_in($endpoint,max_size)"
+      if { 0 == $usbtest::bulk_in($endpoint,max_in_padding) } {
+          puts "    no IN padding required"
+      } else {
+          puts "    $usbtest::bulk_in($endpoint,max_in_padding) bytes of IN padding required"
+      }
+      if { "" == $usbtest::bulk_in($endpoint,devtab) } {
+          puts "    no devtab entry provided"
+      } else {
+          puts "    corresponding devtab entry is $usbtest::bulk_in($endpoint,devtab)"
+      }
+  }
+  
bulk_out_endpoint

This is a simple list of the endpoints which can support bulk OUT + transfers. It is analogous to + bulk_in_endpoints. +

bulk_out()

This array holds additional information about each bulk OUT + endpoint. It can be accessed in the same way as + bulk_in(), except that there is no + max_in_padding field because that field only + makes sense for IN transfers. +

control()

This array holds information about the control endpoint. It contains + two fields, min_size and + max_size. Note that there is no variable + control_endpoints because a USB target always + supports a single control endpoint 0. Similarly + the control array does not use an endpoint number + as the first index because that would be redundant. +

isochronous_in_endpoints and + isochronous_in()

These variables provide the same information as + bulk_in_endpoints and bulk_in, + but for endpoints that support isochronous IN transfers. +

isochronous_out_endpoints and + isochronous_out()

These variables provide the same information as + bulk_out_endpoints and bulk_out, + but for endpoints that support isochronous OUT transfers. +

interrupt_in_endpoints and + interrupt_in()

These variables provide the same information as + bulk_in_endpoints and bulk_in, + but for endpoints that support interrupt IN transfers. +

interrupt_out_endpoints and + interrupt_out()

These variables provide the same information as + bulk_out_endpoints and bulk_out, + but for endpoints that support interrupt OUT transfers. +

Testing Bulk Transfers

The main function for initiating a bulk test is +usbtest::bulktest. This takes three compulsory +arguments, and can be given a number of additional arguments to +control the exact behaviour. The compulsory arguments are:

endpoint

This specifies the endpoint to use. It should correspond to + one of the entries in + usbtest::bulk_in_endpoints or + usbtest::bulk_out_endpoints, depending on the + transfer direction. +

direction

This should be either in or out. +

number of transfers

This specifies the number of transfers that should take place. The + testing software does not currently support the concept of performing + transfers for a given period of time because synchronising this on + both the host and a wide range of targets is difficult. However it + is relatively easy to work out the approximate time a number of bulk + transfers should take place, based on a typical bandwidth of + 1MB/second and assuming say a 1ms overhead per transfer. + Alternatively a test script could perform a small initial run to + determine what performance can actually be expected from a given + target, and then use this information to run a much longer test. +

Additional arguments can be used to control the exact transfer. For +example a txdelay+ argument can be used to +slowly increase the delay between transfers. All such arguments involve +a value which can be passed either as part of the argument itself, +for example txdelay+=5, or as a subsequent +argument, txdelay+ 5. The possible arguments fall +into a number of categories: data, I/O mechanism, transmit size, +receive size, transmit delay, and receive delay.

Data

An obvious parameter to control is the actual data that gets sent. +This can be controlled by the argument data +which can take one of five values: none, +bytefill, intfill, +byteseq and wordseq. The default +value is none.

none

The transmit code will not attempt to fill the buffer in any way, + and the receive code will not check it. The actual data that gets + transferred will be whatever happened to be in the buffer before + the transfer started. +

bytefill

The entire buffer will be filled with a single byte, as per + memset. +

intfill

The buffer will be treated as an array of 32-bit integers, and will + be filled with the same integer repeated the appropriate number of + times. If the buffer size is not a multiple of four bytes then + the last few bytes will be set to 0. +

byteseq

The buffer will be filled with a sequence of bytes, generated by + a linear congruential generator. If the first byte in the buffer is + filled with the value x, the next byte will be + (m*x)+i. For example a sequence of slowly + incrementing bytes can be achieved by setting both the multiplier + and the increment to 1. Alternatively a pseudo-random number + sequence can be achieved using values 1103515245 and 12345, as + per the standard C library rand function. + For convenience these two constants are available as Tcl + variables usbtest::MULTIPLIER and + usbtest::INCREMENT. +

wordseq

This acts like byteseq, except that the buffer is + treated as an array of 32-bit integers rather than as an array of + bytes. If the buffer is not a multiple of four bytes then the last + few bytes will be filled with zeroes. +

The above requires three additional parameters +data1, data* and +data+. data1 specifies +the value to be used for byte or word fills, or the first number when +calculating a sequence. The default value is 0. +data* and data+ specify +the multiplier and increment for a sequence, and have default values +of 1 and 0 respectively. For +example, to perform a bulk transfer of a pseudo-random sequence of +integers starting with 42 the following code could be used:

bulktest 2 IN 1000 data=wordseq data1=42 \
+    data* $usbtest::MULTIPLIER data+ $usbtest::INCREMENT

The above parameters define what data gets transferred for the first +transfer, but a test can involve multiple transfers. The data format +will be the same for all transfers, but it is possible to adjust the +current value, the multiplier, and the increment between each +transfer. This is achieved with parameters data1*, +data1+, data**, +data*+, data+*, and +data++, with default values of 1 for each +multiplier and 0 for each increment. For example, if the multiplier +for the first transfer is set to 2 using +data*, and arguments +data** 2 and data*+ -1 are also +supplied, then the multiplier for subsequent transfers will be +3, 5, 9, +….

Note: Currently it is not possible for a test script to send specific data, +for example a specific sequence of bytes captured by a protocol analyser +that caused a problem. If the transfer was from host to target then +the target would have to know the exact sequence of bytes to expect, +which means transferring data over the USB bus when that data is known +to have caused problems in the past. Similarly for target to host +transfers the target would have to know what bytes to send. A possible +future extension of the USB testing support would allow for bounce +operations, where a given message is first sent to the target and then +sent back to the host, with only the host checking that the data was +returned correctly.

I/O Mechanism

On the target side USB transfers can happen using either low-level +USB calls such as usbs_start_rx_buffer, or by +higher-level calls which go through the device table. By default the +target-side code will use the low-level calls. If it is desired to +test the higher-level calls instead, for example because those are +what the application uses, then that can be achieved with an +argument mechanism=devtab.

Transmit Size

The next set of arguments can be used to control the size of the +transmitted buffer: txsize1, +txsize>=, txsize<= +txsize*, txsize/, +and txsize+.

txsize1 determines the size of the first +transfer, and has a default value of 32 bytes. The size of the next +transfer is calculated by first multiplying by the +txsize* value, then dividing by the +txsize/ value, and finally adding the +txsize+ value. The defaults for these are +1, 1, and 0 +respectively, which means that the transfer size will remain +unchanged. If for example the transfer size should increase by +approximately 50 per cent each time then suitable values might be +txsize* 3, txsize/ 2, +and txsize+ 1.

The txsize>= and +txsize<= arguments can be used to impose +lower and upper bounds on the transfer. By default the +min_size and max_size values +appropriate for the endpoint will be used. If at any time the +current size falls outside the bounds then it will be normalized.

Receive Size

The receive size, in other words the number of bytes that either host +or target will expect to receive as opposed to the number of bytes +that actually get sent, can be adjusted using a similar set of +arguments: rxsize1, +rxsize>=, +rxsize<=, +rxsize*, rxsize/ and +rxsize+. The current receive size will be +adjusted between transfers just like the transmit size. However when +communicating over USB it is not a good idea to attempt to receive +less data than will actually be sent: typically neither the hardware +nor the software will be able to do anything useful with the excess, +so there will be problems. Therefore if at any time the calculated +receive size is less than the transmit size, the actual receive will +be for the exact number of bytes that will get transmitted. However +this will not affect the calculations for the next receive size.

The default values for rxsize1, +rxsize*, rxsize/ and +rxsize+ are 0, +1, 1 and 0 +respectively. This means that the calculated receive size will always +be less than the transmit size, so the receive operation will be for +the exact number of bytes transmitted. For some USB protocols this +would not accurately reflect the traffic that will happen. For example +with USB-ethernet transfer sizes will vary between 16 and 1516 bytes, +so the receiver will always expect up to 1516 bytes. This can be +achieved using rxsize1 1516, leaving the +other parameters at their default values.

For target hardware which involves non-zero +max_in_padding, on the host side the padding will +be added automatically to the receive size if necessary.

Transmit and Receive Delays

Typically during the testing there will be some minor delays between +transfers on both host and target. Some of these delays will be caused +by timeslicing, for example another process running on the host, or a +concurrent test thread running inside the target. Other delays will be +caused by the USB bus itself, for example activity from another device +on the bus. However it is desirable that test cases be allowed to +inject additional and somewhat more controlled delays into the system, +for example to make sure that the target behaves correctly even if the +target is not yet ready to receive data from the host.

The transmit delay is controlled by six parameters: +txdelay1, txdelay*, +txdelay/, txdelay+, +txdelay>= and +txdelay<=. The default values for these are +0, 1, 1, +0, 0 and +1000000000 respectively, so that by default +transmits will happen as quickly as possible. Delays are measured in +nanoseconds, so a value of 1000000 would correspond +to a delay of 0.001 seconds or one millisecond. By default delays have +an upper bound of one second. Between transfers the transmit delay is +updated in much the same was as the transfer sizes.

The receive delay is controlled by a similar set of six parameters: +rxdelay1, rxdelay*, +rxdelay/, rxdelay+, +rxdelay>= and +rxdelay<=. The default values for these are +the same as for transmit delays.

The transmit delay is used on the side which sends data over the USB +bus, so for a bulk IN transfer it is the target that sends data and +hence sleeps for the specified transmit delay, while the host receives +data sleeps for the receive delay. For an OUT transfer the positions +are reversed.

It should be noted that although the delays are measured in +nanoseconds, the actual delays will be much less precise and are +likely to be of the order of milliseconds. The exact details will +depend on the kernel clock speed.

Other Types of Transfer

Support for testing other types of USB traffic such as isochronous +transfers is not yet implemented.

Starting a Test and Collecting Results

A USB test script should prepare one or more transfers using +appropriate functions such as usbtest::bulktest. +Once all the individual tests have been prepared they can be started +by a call to usbtest::start. This takes a single +argument, a maximum duration measured in seconds. If all transfers +have not been completed in the specified time then any remaining +transfers will be aborted.

usbtest::start will return 1 +if all the tests have succeeded, or 0 if any of +them have failed. More detailed reports will be stored in the +Tcl variable usbtests::results, which will be a +list of string messages.

Existing Test Scripts

A number of test scripts are provided as standard. These are located +in the host subdirectory of the +common USB slave package, and will be installed as part of the process +of building the host-side software. When a script is specified on the +command line usbhost will first search for +it in the current directory, then in the install tree. Standard +test scripts include the following:

list.tcl

This script simply displays information about the capabilities + of the target platform, as provided by the target-side USB + device driver. It can help with tracking down problems, but its + primary purpose is to let users check that everything is working + correctly: if running usbhost list.tcl + outputs sensible information then the user knows that the + target side is running correctly and that communication between + host and target is possible. +

verbose.tcl

The target-side code can provide information about what + is happening while tests are prepared and run. This facility + should not normally be used since the extra I/O involved will + significantly affect the behaviour of the system, but in some + circumstances it may prove useful. Since an eCos application + cannot easily be given command-line arguments the target-side + verbosity level cannot be controlled using + -V or --verbose + options. Instead it can be controlled from inside + gdb by changing the integer + variable verbose. Alternatively it can + be manipulated by running the test script + verbose.tcl. This script takes a single + argument, the desired verbosity level, which should be a small + integer. For example, to disable target-side run-time logging + the command usbhost verbose 0 can + be used. +

Possible Problems

If all transfers succeed within the specified time then both host and +target remain in synch and further tests can be run without problem. +However, if at any time a failure occurs then things get more +complicated. For example, if the current test involves a series of +bulk OUT transfers and the target detects that for one of these +transfers it received less data than was expected then the test has +failed, and the target will stop accepting data on this endpoint. +However the host-side software may not have detected anything wrong +and is now blocked trying to send the next lot of data.

The test code goes to considerable effort to recover from problems +such as these. On the host-side separate threads are used for +concurrent transfers, and on the target-side appropriate asynchronous +I/O mechanisms are used. In addition there is a control thread on the +host that checks the state of all the main host-side threads, and the +state of the target using private control messages. If it discovers +that one side has stopped sending or receiving data because of an +error and the other side is blocked as a result, it will set certain +flags and then cause one additional transfer to take place. That +additional transfer will have the effect of unblocking the other side, +which then discovers that an error has occurred by checking the +appropriate flags. In this way both host and target should end up back +in synch, and it is possible to move on to the next set of tests.

However, the above assumes that the testing has not triggered any +serious hardware conditions. If instead the target-side hardware has +been left in some strange state so that, for example, it will no +longer raise an interrupt for traffic on a particular endpoint then +recovery is not currently possible, and the testing software will just +hang.

A possible future enhancement to the testing software would allow the +host-side to raise a USB reset signal whenever a failure occurs, in +the hope that this would clear any remaining problems within the +target-side USB hardware.


PrevHomeNext
Writing a USB Device DriverUpeCos Support for Developing USB-ethernet Peripherals
\ No newline at end of file diff --git a/doc/html/ref/usbs-writing.html b/doc/html/ref/usbs-writing.html new file mode 100644 index 00000000..b4becf95 --- /dev/null +++ b/doc/html/ref/usbs-writing.html @@ -0,0 +1,946 @@ + + + + + + + + +Writing a USB Device Driver +
eCos Reference Manual
PrevNext

Writing a USB Device Driver

Name

Writing a USB Device Driver -- USB Device Driver Porting Guide

Introduction

Often the best way to write a USB device driver will be to start with +an existing one and modify it as necessary. The information given here +is intended primarily as an outline rather than as a complete guide.

Note: At the time of writing only one USB device driver has been +implemented. Hence it is possible, perhaps probable, that some +portability issues have not yet been addressed. One issue +involves the different types of transfer, for example the initial +target hardware had no support for isochronous or interrupt transfers, +so additional functionality may be needed to switch between transfer +types. Another issue would be hardware where a given endpoint number, +say endpoint 1, could be used for either receiving or transmitting +data, but not both because a single fifo is used. Issues like these +will have to be resolved as and when additional USB device drivers are +written.

The Control Endpoint

A USB device driver should provide a single usbs_control_endpoint +data structure for every USB device. Typical peripherals will have +only one USB port so there will be just one such data structure in the +entire system, but theoretically it is possible to have multiple USB +devices. These may all involve the same chip, in which case a single +device driver should support multiple device instances, or they may +involve different chips. The name or names of these data structures +are determined by the device driver, but appropriate care should be +taken to avoid name clashes.

A USB device cannot be used unless the control endpoint data structure +exists. However, the presence of USB hardware in the target processor +or board does not guarantee that the application will necessarily want +to use that hardware. To avoid unwanted code or data overheads, the +device driver can provide a configuration option to determine whether +or not the endpoint 0 data structure is actually provided. A default +value of CYGINT_IO_USB_SLAVE_CLIENTS ensures that +the USB driver will be enabled automatically if higher-level code does +require USB support, while leaving ultimate control to the user.

The USB device driver is responsible for filling in the +start_fn, +poll_fn and +interrupt_vector fields. Usually this can +be achieved by static initialization. The driver is also largely +responsible for maintaining the state +field. The control_buffer array should be +used to hold the first packet of a control message. The +buffer and other fields related to data +transfers will be managed jointly by higher-level code and +the device driver. The remaining fields are generally filled in by +higher-level code, although the driver should initialize them to NULL +values.

Hardware permitting, the USB device should be inactive until the +start_fn is invoked, for example by +tristating the appropriate pins. This prevents the host from +interacting with the peripheral before all other parts of the system +have initialized. It is expected that the +start_fn will only be invoked once, shortly +after power-up.

Where possible the device driver should detect state changes, such as +when the connection between host and peripheral is established, and +report these to higher-level +code via the state_change_fn callback, if +any. The state change to and from configured state cannot easily be +handled by the device driver itself, instead higher-level code such as +the common USB slave package will take care of this.

Once the connection between host and peripheral has been established, +the peripheral must be ready to accept control messages at all times, +and must respond to these within certain time constraints. For +example, the standard set-address control message must be handled +within 50ms. The USB specification provides more information on these +constraints. The device driver is responsible for receiving the +initial packet of a control message. This packet will always be eight +bytes and should be stored in the +control_buffer field. Certain standard +control messages should be detected and handled by the device driver +itself. The most important is set-address, but usually the get-status, +set-feature and clear-feature requests when applied to halted +endpoints should also be handled by the driver. Other standard control +messages should first be passed on to the +standard_control_fn callback (if any), and +finally to the default handler +usbs_handle_standard_control provided by the +common USB slave package. Class, vendor and reserved control messages +should always be dispatched to the appropriate callback and there is +no default handler for these.

Some control messages will involve further data transfer, not just the +initial packet. The device driver must handle this in accordance with +the USB specification and the buffer management strategy. The +driver is also responsible for keeping track of whether or not the +control operation has succeeded and generating an ACK or STALL +handshake.

The polling support is optional and may not be feasible on all +hardware. It is only used in certain specialised environments such as +RedBoot. A typical implementation of the polling function would just +check whether or not an interrupt would have occurred and, if so, call +the same code that the interrupt handler would.

Data Endpoints

In addition to the control endpoint data structure, a USB device +driver should also provide appropriate data +endpoint data structures. Obviously this is only relevant if +the USB support generally is desired, that is if the control endpoint is +provided. In addition, higher-level code may not require all the +endpoints, so it may be useful to provide configuration options that +control the presence of each endpoint. For example, the intended +application might only involve a single transmit endpoint and of +course control messages, so supporting receive endpoints might waste +memory.

Conceptually, data endpoints are much simpler than the control +endpoint. The device driver has to supply two functions, one for +data transfers and another to control the halted condition. These +implement the functionality for +usbs_start_rx_buffer, +usbs_start_tx_buffer, +usbs_set_rx_endpoint_halted and +usbs_set_tx_endpoint_halted. +The device driver is also responsible for maintaining the +halted status.

For data transfers, higher-level code will have filled in the +buffer, +buffer_size, +complete_fn and +complete_data fields. The transfer function +should arrange for the transfer to start, allowing the host to send or +receive packets. Typically this will result in an interrupt at the end +of the transfer or after each packet. Once the entire transfer has +been completed, the driver's interrupt handling code should invoke the +completion function. This can happen either in DSR context or thread +context, depending on the driver's implementation. There are a number +of special cases to consider. If the endpoint is halted when the +transfer is started then the completion function can be invoked +immediately with -EAGAIN. If the transfer cannot be +completed because the connection is broken then the completion +function should be invoked with -EPIPE. If the +endpoint is stalled during the transfer, either because of a standard +control message or because higher-level code calls the appropriate +set_halted_fn, then again the completion +function should be invoked with -EAGAIN. Finally, +the <usbs_start_rx_endpoint_wait and +usbs_start_tx_endpoint_wait functions involve +calling the device driver's data transfer function with a buffer size +of 0 bytes.

Note: Giving a buffer size of 0 bytes a special meaning is problematical +because it prevents transfers of that size. Such transfers are allowed +by the USB protocol, consisting of just headers and acknowledgements +and an empty data phase, although rarely useful. A future modification +of the device driver specification will address this issue, although +care has to be taken that the functionality remains accessible through +devtab entries as well as via low-level accesses.

Devtab Entries

For some applications or higher-level packages it may be more +convenient to use traditional open/read/write I/O calls rather than +the non-blocking USB I/O calls. To support this the device driver can +provide a devtab entry for each endpoint, for example:

#ifdef CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY
+
+static CHAR_DEVIO_TABLE(usbs_sa11x0_ep1_devtab_functions,
+                        &cyg_devio_cwrite,
+                        &usbs_devtab_cread,
+                        &cyg_devio_bwrite,
+                        &cyg_devio_bread,
+                        &cyg_devio_select,
+                        &cyg_devio_get_config,
+                        &cyg_devio_set_config);
+
+static CHAR_DEVTAB_ENTRY(usbs_sa11x0_ep1_devtab_entry,
+                         CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME "1r",
+                         0,
+                         &usbs_sa11x0_ep1_devtab_functions,
+                         &usbs_sa11x0_devtab_dummy_init,
+                         0,
+                         (void*) &usbs_sa11x0_ep1);
+#endif

Again care must be taken to avoid name clashes. This can be achieved +by having a configuration option to control the base name, with a +default value of e.g. /dev/usbs, and appending an +endpoint-specific string. This gives the application developer +sufficient control to eliminate any name clashes. The common USB slave +package provides functions usbs_devtab_cwrite and +usbs_devtab_cread, which can be used in the +function tables for transmit and receive endpoints respectively. The +private field priv of the devtab entry +should be a pointer to the underlying endpoint data structure.

Because devtab entries are never accessed directly, only indirectly, +they would usually be eliminated by the linker. To avoid this the +devtab entries should normally be defined in a separate source file +which ends up the special library libextras.a +rather than in the default library libtarget.a.

Not all applications or higher-level packages will want to use the +devtab entries and the blocking I/O facilities. It may be appropriate +for the device driver to provide additional configuration options that +control whether or not any or all of the devtab entries should be +provided, to avoid unnecessary memory overheads.

Interrupt Handling

A typical USB device driver will need to service interrupts for all of +the endpoints and possibly for additional USB events such as entering +or leaving suspended mode. Usually these interrupts need not be +serviced directly by the ISR. Instead, they can be left to a DSR. If +the peripheral is not able to accept or send another packet just yet, +the hardware will generate a NAK and the host will just retry a little +bit later. If high throughput is required then it may be desirable to +handle the bulk transfer protocol largely at ISR level, that is take +care of each packet in the ISR and only activate the DSR once the +whole transfer has completed.

Control messages may involve invoking arbitrary callback functions in +higher-level code. This should normally happen at DSR level. Doing it +at ISR level could seriously affect the system's interrupt latency and +impose unacceptable constraints on what operations can be performed by +those callbacks. If the device driver requires a thread anyway then it +may be appropriate to use this thread for invoking the callbacks, but +usually it is not worthwhile to add a new thread to the system just +for this; higher-level code is expected to write callbacks that +function sensibly at DSR level. Much the same applies to the +completion functions associated with data transfers. These should also +be invoked at DSR or thread level.

Support for USB Testing

Optionally a USB device driver can provide support for the +USB test software. This requires +defining a number of additional data structures, allowing the +generic test code to work out just what the hardware is capable of and +hence what testing can be performed.

The key data structure is +usbs_testing_endpoint, defined in cyg/io/usb/usbs.h. In addition some +commonly required constants are provided by the common USB package in +cyg/io/usb/usb.h. One +usbs_testing_endpoint structure should be +defined for each supported endpoint. The following fields need to be +filled in:

endpoint_type

This specifies the type of endpoint and should be one of + USB_ENDPOINT_DESCRIPTOR_ATTR_CONTROL, + BULK, ISOCHRONOUS or + INTERRUPT. +

endpoint_number

This identifies the number that should be used by the host + to address this endpoint. For a control endpoint it should + be 0. For other types of endpoints it should be between + 1 and 15. +

endpoint_direction

For control endpoints this field is irrelevant. For other + types of endpoint it should be either + USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN or + USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT. If a given + endpoint number can be used for traffic in both directions then + there should be two entries in the array, one for each direction. +

endpoint

This should be a pointer to the appropriate + usbs_control_endpoint, + usbs_rx_endpoint or + usbs_tx_endpoint structure, allowing the + generic testing code to perform low-level I/O. +

devtab_entry

If the endpoint also has an entry in the system's device table then + this field should give the corresponding string, for example + "/dev/usbs1r". This allows the + generic testing code to access the device via higher-level + calls like open and read. +

min_size

This indicates the smallest transfer size that the hardware can + support on this endpoint. Typically this will be one. +

Note: Strictly speaking a minimum size of one is not quite right since it + is valid for a USB transfer to involve zero bytes, in other words a + transfer that involves just headers and acknowledgements and an + empty data phase, and that should be tested as well. However current + device drivers interpret a transfer size of 0 as special, so that + would have to be resolved first. +

max_size

Similarly, this specifies the largest transfer size. For control + endpoints the USB protocol uses only two bytes to hold the transfer + length, so there is an upper bound of 65535 bytes. In practice + it is very unlikely that any control transfers would ever need to + be this large, and in fact such transfers would take a long time + and probably violate timing constraints. For other types of endpoint + any of the protocol, the hardware, or the device driver may impose + size limits. For example a given device driver might be unable to + cope with transfers larger than 65535 bytes. If it should be + possible to transfer arbitrary amounts of data then a value of + -1 indicates no upper limit, and transfer + sizes will be limited by available memory and by the capabilities + of the host machine. +

max_in_padding

This field is needed on some hardware where it is impossible to + send packets of a certain size. For example the hardware may be + incapable of sending an empty bulk packet to terminate a transfer + that is an exact multiple of the 64-byte bulk packet size. + Instead the driver has to do some padding and send an extra byte, + and the host has to be prepared to receive this extra byte. Such a + driver should specify a value of 1 for the + padding field. For most drivers this field should be set to + 0. +

A better solution would be for the device driver to supply a + fragment of Tcl code that would adjust the receive buffer size + only when necessary, rather than for every transfer. Forcing + receive padding on all transfers when only certain transfers + will actually be padded reduces the accuracy of certain tests. +

alignment

On some hardware data transfers may need to be aligned to certain + boundaries, for example a word boundary or a cacheline boundary. + Although in theory device drivers could hide such alignment + restrictions from higher-level code by having their own buffers and + performing appropriate copying, that would be expensive in terms of + both memory and cpu cycles. Instead the generic testing code will + align any buffers passed to the device driver to the specified + boundary. For example, if the driver requires that buffers be + aligned to a word boundary then it should specify an alignment + value of 4. +

The device driver should provide an array of these structures +usbs_testing_endpoints[]. The USB testing code +examines this array and uses the information to perform appropriate +tests. Because different USB devices support different numbers of +endpoints the number of entries in the array is not known in advance, +so instead the testing code looks for a special terminator +USBS_TESTING_ENDPOINTS_TERMINATOR. An example +array, showing just the control endpoint and the terminator, might +look like this:

usbs_testing_endpoint usbs_testing_endpoints[] = {
+    {
+        endpoint_type       : USB_ENDPOINT_DESCRIPTOR_ATTR_CONTROL, 
+        endpoint_number     : 0,
+        endpoint_direction  : USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN,
+        endpoint            : (void*) &ep0.common,
+        devtab_entry        : (const char*) 0,
+        min_size            : 1,
+        max_size            : 0x0FFFF,
+        max_in_padding      : 0,
+        alignment           : 0
+    },
+    …,
+    USBS_TESTING_ENDPOINTS_TERMINATOR
+};

Note: The use of a single array usbs_testing_endpoints +limits USB testing to platforms with a single USB device: if there +were multiple devices, each defining their own instance of this array, +then there would a collision at link time. In practice this should not +be a major problem since typical USB peripherals only interact with a +single host machine via a single slave port. In addition, even if a +peripheral did have multiple slave ports the current USB testing code +would not support this since it would not know which port to use.


PrevHomeNext
Data EndpointsUpTesting
\ No newline at end of file diff --git a/doc/html/ref/usbseth-control.html b/doc/html/ref/usbseth-control.html new file mode 100644 index 00000000..d483a525 --- /dev/null +++ b/doc/html/ref/usbseth-control.html @@ -0,0 +1,315 @@ + + + + + + + + +USB-ethernet State Handling +
eCos Reference Manual
PrevNext

USB-ethernet State Handling

Name

USB-ethernet State Handling -- Maintaining the USB-ethernet connection with the host

Description

When the USB-ethernet package is initialized by a call to usbs_eth_init it +installs usbs_eth_state_change_handler to handle +USB state changes. This allows the package to detect when the +connection between the host and the peripheral is established or +broken, resulting in internal calls to +usbs_eth_enable and +usbs_eth_disable respectively. This is +appropriate if no other code needs to access the USB device. However, +if there is other code, either other USB-related packages or the +application itself, that needs to perform I/O over the USB bus, then +typically the USB-ethernet package should not have exclusive access to +state change events. Instead, the assumption is that higher-level +code, typically provided by the application, will install an +alternative state change handler in the control endpoint data +structure after the call to usbs_eth_init. This +alternative handler will either chain into +usbs_eth_state_change_handler when appropriate, +or else it will invoke usbs_eth_enable and +usbs_eth_disable directly. For further details of +state change handlers and control endpoints generally, see the +documentation for the common USB-slave package.

Similarly, usbs_eth_init will install +usbs_eth_class_control_handler in the control +endpoint data structure as the appropriate handler for class-specific +USB control messages. This code will handle the ethernet-specific +control messages , for example +requests by the host to enable or disable promiscuous mode or to +obtain the MAC address. If the USB device is not shared with any other +code then this is both necessary and sufficient. However, if other code +is involved and if that code also needs to process certain control +messages, higher-level code should install its own handler and chain +to the USB-ethernet one when appropriate. It should be noted that the +request code is encoded in just a single byte, so there is a real +possibility that exactly the same number will be used by different +protocols for different requests. Any such problems will have to be +identified and resolved by application developers, and may involve +modifying the source code for the USB-ethernet package.

As an alternative to chaining the state change handler, higher-level +code can instead call usbs_eth_disable and +usbs_eth_enable directly. These functions may +also be called if the USB-ethernet package should become inactive for +reasons not related directly to events on the USB bus. The main effect +of usbs_eth_enable is to restart receive +operations and to allow transmits. The main effect of +usbs_eth_disable is to block further transmits: +any current receive operations need to be aborted at the USB level, +for example by halting the appropriate endpoint.


PrevHomeNext
USB-ethernet Data TransfersUpNetwork Device for the eCos TCP/IP Stack
\ No newline at end of file diff --git a/doc/html/ref/usbseth-data.html b/doc/html/ref/usbseth-data.html new file mode 100644 index 00000000..30c5c813 --- /dev/null +++ b/doc/html/ref/usbseth-data.html @@ -0,0 +1,380 @@ + + + + + + + + +USB-ethernet Data Transfers +
eCos Reference Manual
PrevNext

USB-ethernet Data Transfers

Name

USB-ethernet Data Transfers -- Exchanging ethernet packets with the USB host

Description

The USB-ethernet package provides two main modes of operation. In the +first mode it provides a network device +driver for use by a TCP/IP stack running inside the USB +peripheral. All incoming ethernet packages should be passed up the +TCP/IP stack, and only the stack will generate outgoing packets. Apart +from initialization and possibly +certain control operations, +higher-level code will not interact with the USB-ethernet package +directly.

In the second mode there is no TCP/IP stack running inside the USB +peripheral. For example, a simple USB-ethernet converter has an +ethernet chip and a USB port: ethernet packets received by the +ethernet chip need to be forwarded to the USB host, and ethernet +packets sent by the USB host need to be sent out of the ethernet chip. +usbs_eth_start_rx and +usbs_eth_start_tx allow for this lower-level +access to the USB-ethernet package.

The two modes of operation are mutually exclusive. If the network +device driver mode is enabled then application code should communicate +at the TCP/IP level, and not by using the lower-level functions. +Instead, it is the network device driver that will make use of these +functions, and it assumes that it has exclusive access. The package +does not perform any locking.

The transmit and receive functions work in much the same way. The +first argument identifies the usbs_eth +structure that should be used. For the majority of applications this +will be usbs_eth0. The second argument specifies +the location of the ethernet packet; outgoing for +usbs_eth_start_tx and incoming for +usbs_eth_start_rx. This buffer should correspond +to the protocol:

  1. Outgoing packets can consist of up to 1516 bytes, consisting of a +two-byte header specific to USB-ethernet followed by a standard +ethernet frame (a header with 6-byte destination address, 6-byte +source address and a further two bytes, followed by a payload of +up to 1500 bytes). The two-byte USB-ethernet header consists simply of +the size of the ethernet frame, i.e. the size of the rest of the +packet not including the USB-ethernet header, with the least +significant byte first.

  2. For incoming packets the supplied buffer should usually be at least +1516 bytes. There may be special circumstances in which a smaller +buffer might be safe; for example, if the host-side device driver is +modified to support only smaller packets. Once the packet has been +received the buffer will contain a two-byte header specific to +USB-ethernet, followed by a normal ethernet frame. The header +gives the size of the ethernet frame, excluding the header, with the +least significant byte first.

Both usbs_eth_start_tx and +usbs_eth_start_rx are asynchronous: the transfer +is started and, some time later, a completion function will be invoked. +The third and fourth arguments to both +usbs_eth_start_tx and +usbs_eth_start_rx supply the completion function +and an argument to that function respectively. The completion function +will be invoked with three arguments: a pointer to the +usbs_eth data structure, usually +usbs_eth0; the supplied completion data ; and a +return code field. A negative value indicates that an error occurred, +for example -EPIPE if the connection between USB +host and peripheral has been broken, or -EAGAIN if +an endpoint has been halted. A positive value indicates the total size +of the transfer, which should correspond to the size in the +USB-ethernet header plus an additional two bytes for the header +itself.

If the data transfer is succesful then the completion function will +typically be invoked in DSR context rather than in thread context, +although this depends on the implementation of the underlying USB +device driver. Therefore the completion function is restricted in what +it can do; in particular, it must not make any calls that will or may +block such as locking a mutex or allocating memory. The kernel +documentation should be consulted for more details of DSR's and +interrupt handling generally. Note that if the transfer finishes +quickly then the completion function may be invoked before +usbs_eth_start_rx or +usbs_eth_start_tx returns. This is especially +likely to happen if the current thread is descheduled after starting +the data transfer but before returning from these functions.

For transmit operations, it is possible for +usbs_eth_start_tx to invoke the completion +function immediately. If there is no current connection between host +and target then the transmit will fail immediately with +-EPIPE. In addition the USB-ethernet package will +check the destination MAC address and make sure that the ethernet +frame really is intended for the host: either it must be for the +address specified in the initialization call usbs_eth_init, or +it must be a broadcast packet, or the host must have enabled +promiscuous mode.


PrevHomeNext
Initializing the USB-ethernet PackageUpUSB-ethernet State Handling
\ No newline at end of file diff --git a/doc/html/ref/usbseth-host.html b/doc/html/ref/usbseth-host.html new file mode 100644 index 00000000..a6db0122 --- /dev/null +++ b/doc/html/ref/usbseth-host.html @@ -0,0 +1,338 @@ + + + + + + + + +Example Host-side Device Driver +
eCos Reference Manual
PrevNext

Example Host-side Device Driver

Name

Example Host-side Device Driver -- Provide host-side support for the eCos USB-ethernet package

Description

The USB-ethernet package is supplied with a single host-side device +driver. This driver has been developed against the Linux kernel +2.2.16-22, as shipped with Red Hat 7. The driver is provided as is and +should not be considered production quality: for example it only +checks for a bogus vendor id 0x4242 rather than an +official vendor id supplied by the USB Implementers Forum. Also, if the +peripheral involves multiple configurations or multiple interfaces, it +will fail to detect this. However, the driver can be used for simple +testing and as the basis of a full device driver. Details of the +protocol used between host and peripheral can be found in the Communication Protocol section.

The host-side device driver can be found in the host subdirectory of the USB-ethernet +package, specifically the file ecos_usbeth.c, and +comes with a Makefile. Both files may need +to be modified for specific applications. For example, the vendor id +table ecos_usbeth_implementations may need to be +updated for the specific USB peripheral being built. The +Makefile assumes that the Linux kernel sources +reside in /usr/src/linux, and +that the kernel has already been configured and built. Assuming this +is the case, the device driver can be built simply by invoking +make with no additional arguments. This will result +in a dynamically loadable kernel module, +ecos_usbeth.o, in the current directory.

Note: As normal for Linux kernel builds, the generated files such as +ecos_usbeth.o live in the same directory as the +source tree. This is very different from eCos where the source tree +(or component repository) is kept separate from any builds. There may +be problems if the component repository is kept read-only or if it is +put under source code control. Any such problems can be avoided by +making a copy of the host +subdirectory and building that copy.

Loading the kernel module into the current system requires root +privileges. If the generic USB support is also a loadable module and +has not been loaded already, this must happen first:

# insmod usb-uhci
+Using /lib/modules/2.2.16-22/usb/usb-uhci.o

Depending on the host hardware, the uhci or +usb-ohci modules may be more appropriate. Loading +the generic USB module will typically result in a number of messages +to the logfile /var/log/messages, giving details +of the specific host-side hardware that has been detected plus any +hubs. The next step is to load the USB-ethernet module:

# insmod ecos_usbeth.o

This should result in a number of additional diagnostics in the +logfile:

Apr 1 18:01:08 grumpy kernel: eCos USB-ethernet device driver
+Apr 1 18:01:08 grumpy kernel: usb.c: registered new driver ecos_usbeth

If a suitable USB peripheral is now connected the host will detect +this, assign an address in the local USB network, obtain enumeration +data, and find a suitable device driver. Assuming the peripheral and +device driver agree on the supported vendor ids, the +ecos_usbeth.o module will be selected and this +will be reported in the system log:

Apr 1 18:04:12 grumpy kernel: usb.c: USB new device connect, assigned device number 3
+Apr 1 18:04:12 grumpy kernel: eCos-based USB ethernet peripheral active at eth1

What can happen next depends very much on the software that is running +on top of the USB-ethernet package inside the peripheral. For example, +if there is a TCP/IP stack then it should be possible to bring up a +network connection between host and peripheral using +ifconfig.


PrevHomeNext
Network Device for the eCos TCP/IP StackUpCommunication Protocol
\ No newline at end of file diff --git a/doc/html/ref/usbseth-init.html b/doc/html/ref/usbseth-init.html new file mode 100644 index 00000000..7c1e6eee --- /dev/null +++ b/doc/html/ref/usbseth-init.html @@ -0,0 +1,332 @@ + + + + + + + + +Initializing the USB-ethernet Package +
eCos Reference Manual
PrevNext

Initializing the USB-ethernet Package

Name

usbs_eth_init -- Initializing the USB-ethernet Package

Description

The USB-ethernet package is not tied to any specific hardware. It +requires certain functionality: there must be USB-slave hardware +supported by a device driver; there must also be two endpoints for +bulk transfers between host and peripheral, one for each direction; +there must also be a control endpoint, although of course that is +implicit with any USB hardware.

However, USB-slave hardware may well provide more endpoints than the +minimum required for ethernet support. Some of those endpoints might +be used by other packages, while other endpoints might be used +directly by the application, or might not be needed for the peripheral +being built. There is also the possibility of a USB peripheral that +supports multiple configurations, with the ethernet support active in +only some of those configurations. The USB-ethernet package has no +knowledge about any of this, so it relies on higher-level code to tell +it which endpoints should be used and other information. This is the +purpose of the usbs_eth_init function.

The first argument identifies the specific +usbs_eth data structure that is affected. It +is expected that the vast majority of affected applications will only +provide a single USB-ethernet device to a single host, and the package +automatically provides a suitable data structure +usbs_eth0 to support this. If multiple +usbs_eth structures are needed for some +reason then these need to be instantiated by other code, and each one +needs to be initialised by a call to +usbs_eth_init().

The next three arguments identify the endpoints that should be used +for USB communications: a control endpoint, a receive endpoint for +ethernet packets coming from the host to the peripheral, and a +transmit endpoint for ethernet packets going in the other direction. +Obviously all three endpoints should be provided by the same USB +hardware. The USB-ethernet package assumes that it has sole access to +the receive and transmit endpoints, subject to the use of +usbs_eth_disable and +usbs_eth_enable control functions. The package +also assumes that no other code is interested in USB state changes or +class control messages: it installs handlers +usbs_eth_state_change_handler +and +usbs_eth_class_control_handler +in the control endpoint. If any other code does need to handle USB +state changes or class control messages then replacement handlers +should be installed after the call to +usbs_eth_init, and those replacements should +invoke the USB-ethernet ones when appropriate.

The final argument to usbs_eth_init specifies +the MAC address (or Ethernet Station Address) that should be provided +to the host-side device driver. Since the USB-ethernet package does not +interact directly with a real ethernet device it cannot obtain the MAC +address from any hardware. Instead, it must be supplied by higher-level +code. The details depend on the scenario in which the +USB-ethernet package is being used.

The call to usbs_eth_init should normally happen +after the enumeration data has been provided but before the underlying +USB device driver has been started. If the USB device were to be +started first then a connection between host and peripheral could be +established immediately, and the host-side device driver would attempt +to contact the USB-ethernet package for information such as the MAC +address.

int
+main(int argc, char** argv)
+{
+    unsigned char host_MAC[6] = { 0x40, 0x5d, 0x90, 0xa9, 0xbc, 0x02 };
+
+    usbs_sa11x0_ep0.enumeration_data    = &usb_enum_data;
+    …
+    usbs_eth_init(&usbs_eth0, &usbs_sa11x0_ep0, &usbs_sa11x0_ep1, &usbs_sa11x0_ep2, host_MAC);
+    …
+    usbs_start(&usbs_sa11x0_ep0);
+    …
+}

PrevHomeNext
IntroductionUpUSB-ethernet Data Transfers
\ No newline at end of file diff --git a/doc/html/ref/usbseth-intro.html b/doc/html/ref/usbseth-intro.html new file mode 100644 index 00000000..441d8e56 --- /dev/null +++ b/doc/html/ref/usbseth-intro.html @@ -0,0 +1,318 @@ + + + + + + + + +Introduction +
eCos Reference Manual
PrevNext

Introduction

Name

Introduction -- eCos support for developing USB ethernet peripherals

Introduction

The eCos USB-ethernet package provides additional support for USB +peripherals that involve some sort of ethernet-style network. This can +be a traditional ethernet, or it can involve some other networking +technology that uses ethernet frames as a unit of transfer. It +provides functions to transfer ethernet frames over the USB bus, +handles certain control messages from the host, and optionally it can +provide a network device driver for use by the eCos TCP/IP stack. +The package comes with an example host-side device driver.

The USB-ethernet package is not tied to any specific hardware. It +requires the presence of USB hardware and a suitable device driver, +but not all USB peripherals involve ethernet communications. Hence the +configuration system cannot load the package automatically for +specific targets, in the way that a USB device driver or an ethernet +driver can be loaded automatically. Instead, the package has to be +added explicitly. When using the command line tools this will involve +an operation like the following:

$ ecosconfig add usbs_eth

Typically, this will automatically cause the USB device driver to +become active. Loading the USB-ethernet package automatically provides +functionality for initialization, +data transfer, and the handling of +control messages and state +changes. If the current configuration includes the eCos TCP/IP stack +then the network device driver +support will be enabled as well by default, allowing the stack to +exchange ethernet frames over the USB bus.

There is a USB standard for a class of communication devices including +ethernet. The package does not implement this standard, due to +limitations in the hardware for which the package was first developed. +Instead, the package uses its own protocol between USB +host device driver and the +peripheral.

Usage Scenarios

The USB-ethernet package can be used several different scenarios. In +a simple scenario, the peripheral serves only to connect the USB host +to a suitable network:

After initialization, and once the USB connection between host and +peripheral has been established, higher-level code needs to detect +packets that are intended for the host, and to forward these. This can +be achieved by the low-level usbs_eth_start_tx +function. Similarly, higher-level code needs to detect packets coming +from the host, using usbs_eth_start_rx, and to +forward these using the real network. As far as the host is concerned +it is connected directly to the network. In this scenario there is no +confusion about addresses: there is a single MAC address for the +host/peripheral combination, corresponding to the connection to the +real network, and it is this address which should be supplied during +initialization.

In a more complicated scenario, there is a TCP/IP stack running inside +the peripheral.

This involves the USB-ethernet package providing a service both to the +host and to the eCos TCP/IP stack. It achieves the latter by acting as +an eCos network device. Typically, the TCP/IP stack will be configured +to act as a network bridge. The USB peripheral needs to examine the +packets arriving over the real network. Some of these packets will be +intended for the host, while others will be intended for the +peripheral itself. To distinguish between these two scenarios, two +distinct MAC addresses are needed: one for the host, and one for the +peripheral. Similarly, packets sent by the host may have to be +forwarded via the real network, or they may be intended for the TCP/IP +stack inside the peripheral. Packets generated inside the peripheral's +TCP/IP stack may need to be sent via the real network or over the USB +bus. The network bridge software will have to take care of all these +possibilities. Unusually for a network bridge, one of the network +segments being bridged will only ever have one machine attached.

There are other possible usage scenarios. For example, the peripheral +might not be attached to a real network at all. Instead it could be +the USB host that acts as a network bridge, allowing a TCP/IP stack +inside the peripheral to communicate with the outside world. The +various details will depend on the exact type of peripheral being +developed.


PrevHomeNext
eCos Support for Developing USB-ethernet PeripheralsUpInitializing the USB-ethernet Package
\ No newline at end of file diff --git a/doc/html/ref/usbseth-netdev.html b/doc/html/ref/usbseth-netdev.html new file mode 100644 index 00000000..1283daa8 --- /dev/null +++ b/doc/html/ref/usbseth-netdev.html @@ -0,0 +1,229 @@ + + + + + + + + +Network Device for the eCos TCP/IP Stack +
eCos Reference Manual
PrevNext

Network Device for the eCos TCP/IP Stack

Name

Network Device -- USB-ethernet support for the eCos TCP/IP Stack

Description

If the USB peripheral involves running the eCos TCP/IP stack and that +stack needs to use USB-ethernet as a transport layer (or as one of the +transports), then the USB-ethernet package can provide a suitable +network device driver. It is still necessary for higher-level code to +perform appropriate initialization by calling usbs_eth_init, but +after that it will be the TCP/IP stack rather than application code +that transmits or receives ethernet frames.

Not all peripherals involving the USB-ethernet package will require a +TCP/IP stack. Hence the provision of the network device is controlled +by a configuration option CYGPKG_USBS_ETHDRV. By +default this will be enabled if the TCP/IP package +CYGPKG_NET is loaded, and disabled otherwise.

There are a number of other configuration options related to the +network device. CYGFUN_USBS_ETHDRV_STATISTICS +determines whether or not the package will maintain statistics, mainly +intended for SNMP: by default this will be enabled if the SNMP support +package CYGPKG_SNMPAGENT is loaded, and disabled +otherwise. The name of the ethernet device is controlled by +CYGDATA_USBS_ETHDRV_NAME, and has a default value +of either eth0 or eth1 +depending on whether or not there is another network device driver +present in the configuration.

Usually eCos network device drivers default to using DHCP for +obtaining necessary information such as IP addresses. This is not +appropriate for USB-ethernet devices. On the host-side the +USB-ethernet network device will not exist until the USB peripheral +has been plugged in and communication has been established. Therefore +any DHCP daemon on the host would not be listening on that network +device at the point that eCos requests its IP and other information. A +related issue is that the use of DHCP would imply the presence of a +DHCP daemon on every affected host machine, as opposed to a single +daemon (plus backups) for the network as a whole. For these reasons +the USB-ethernet package precludes the use of DHCP as a way of setting +the IP address, instead requiring alternatives such as manual +configuration.


PrevHomeNext
USB-ethernet State HandlingUpExample Host-side Device Driver
\ No newline at end of file diff --git a/doc/html/ref/usbseth-protocol.html b/doc/html/ref/usbseth-protocol.html new file mode 100644 index 00000000..4e3f6c64 --- /dev/null +++ b/doc/html/ref/usbseth-protocol.html @@ -0,0 +1,288 @@ + + + + + + + + +Communication Protocol +
eCos Reference Manual
PrevNext

Communication Protocol

Name

Communication Protocol -- Protocol used between the host-side device driver and the eCos +USB-ethernet package

Description

There is a USB standard for the protocol to be used between the host +and a class of communication devices, including ethernet. However, the +eCos USB-ethernet package does not implement this protocol: the target +hardware for which the package was first developed had certain +limitations, and could not implement the standard. Instead, the package +implements a simple new protocol.

A USB-ethernet peripheral involves bulk transfers on two endpoints: +one endpoint will be used for packets from host to peripheral and the +other will be used for the opposite direction. Transfers in both +directions are variable length, with a lower limit of 16 bytes and an +upper limit of 1516 bytes. The first two bytes of each transfer +constitute a header specific to USB-ethernet. The next 14 bytes form +the normal header for an ethernet frame: destination MAC address, +source MAC address, and a protocol field. The remaining data, up to +1500 bytes, are the payload. The first two bytes give the size of the +ethernet frame, least significant byte first, with a value between 14 +and 1514.

For example an ARP request from host to peripheral involves an +ethernet frame of 42 bytes (0x002A), with the usual 14-byte header and +a 28-byte payload. The destination is the broadcast address +0xFFFFFFFFFFFF. The source depends on the MAC address specified for +the host in the call to usbs_eth_init, e.g. +0x405D90A9BC02. The remaining data is as specified by the appropriate +IETF RFC's. The actual bulk +USB transfer involves the following sequence of 44 bytes:

2a 00 ff ff ff ff ff ff 40 5d 90 a9 bc 02 08 06
+00 01 08 00 06 04 00 01 40 5d 90 a9 bc 02 0a 00
+00 01 00 00 00 00 00 00 0a 00 00 02

In addition there are two control messages. These will be sent by the +host to endpoint 0, the control endpoint, and by default they will +be handled by usbs_eth_class_control_handler. If class-specific +control messages are intercepted by other code then it is the +responsibility of that code to invoke the USB-ethernet handler when +appropriate.

The first control message can be used by the host to obtain a MAC +address:

#define ECOS_USBETH_CONTROL_GET_MAC_ADDRESS         0x01

The control message's type field should specify IN as the direction. +The request field should be 0x01. The length fields +should specify a size of 6 bytes. The remaining fields of the control +message will be ignored by the USB-ethernet package. The response +consists of the 6-byte MAC address supplied by the initialization call +usbs_eth_init.

The second control message can be used by the host to enable or +disable promiscuous mode.

#define ECOS_USBETH_CONTROL_SET_PROMISCUOUS_MODE    0x02

This control message involves no further data so the length field +should be set to 0. The value field should be non-zero to enable +promiscuous mode, zero to disable it. The request field should be +0x02. The remaining fields in the control message +will be ignored. It is the responsibility of the host-side device +driver to keep track of whether or not promiscuous mode is currently +enabled. It will be disabled when the peripheral changes to +Configured state, typically at the point where the host-side device +driver has been activated.


PrevHomeNext
Example Host-side Device DriverUpeCos Synthetic Target
\ No newline at end of file diff --git a/doc/html/ref/user-interface.html b/doc/html/ref/user-interface.html new file mode 100644 index 00000000..b1b7817f --- /dev/null +++ b/doc/html/ref/user-interface.html @@ -0,0 +1,179 @@ + + + + + + + + +User Interface +
eCos Reference Manual
PrevChapter 1. Getting Started with RedBootNext

User Interface

RedBoot +provides a command line user interface (CLI). At the minimum, this interface +is normally available on a serial port on the platform. If more than one serial +interface is available, RedBoot is normally configured to try to use any one +of the ports for the CLI. Once command input has been received on one port, +that port is used exclusively until the board is reset or the channel +is manually changed by the +user. If the platform has networking +capabilities, the RedBoot CLI is also accessible using the telnet access protocol. By default, RedBoot runs telnet on port TCP/9000, +but this is configurable and/or settable by the user.

RedBoot also contains a set of GDB "stubs", consisting of code which supports the GDB remote +protocol. GDB stub mode is automatically invoked when the '$' character appears +anywhere on a command line unless escaped using the '\' character. +The platform will remain in GDB +stub mode until explicitly disconnected (via the GDB protocol). The GDB stub +mode is available regardless of the connection method; either serial or network. +Note that if a GDB connection is made via the network, then special care must +be taken to preserve that connection when running user code. eCos contains +special network sharing code to allow for this situation, and can be used +as a model if this methodology is required in other OS environments.


PrevHomeNext
Installing RedBootUpRedBoot Editing Commands
\ No newline at end of file diff --git a/doc/html/ref/version-command.html b/doc/html/ref/version-command.html new file mode 100644 index 00000000..35c04197 --- /dev/null +++ b/doc/html/ref/version-command.html @@ -0,0 +1,229 @@ + + + + + + + + +version +
eCos Reference Manual
PrevNext

version

Name

version -- Display RedBoot version information

Arguments

None

Description

The version command simply displays version information about RedBoot. +

Examples

Display RedBoot's version. +
RedBoot> version
+RedBoot(tm) debug environment - built 09:12:03, Feb 12 2001
+Platform: XYZ (PowerPC 860)
+Copyright (C) 2000, 2001, Red Hat, Inc.
+RAM: 0x00000000-0x00400000
+


PrevHomeNext
resetUpFlash Image System (FIS)
\ No newline at end of file diff --git a/doc/html/ref/viper.html b/doc/html/ref/viper.html new file mode 100644 index 00000000..3ef43386 --- /dev/null +++ b/doc/html/ref/viper.html @@ -0,0 +1,295 @@ + + + + + + + + +PowerPC/MPC860T Analogue & Micro PowerPC 860T +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

PowerPC/MPC860T Analogue & Micro PowerPC 860T

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=viper
+export ARCH_DIR=powerpc
+export PLATFORM_DIR=viper

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
MIPS/VR4375 NEC DDB-VRC4375UpPowerPC/MPC8XX Motorola MBX
\ No newline at end of file diff --git a/doc/html/ref/vrc4375.html b/doc/html/ref/vrc4375.html new file mode 100644 index 00000000..d07e8f7f --- /dev/null +++ b/doc/html/ref/vrc4375.html @@ -0,0 +1,397 @@ + + + + + + + + +MIPS/VR4375 NEC DDB-VRC4375 +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

MIPS/VR4375 NEC DDB-VRC4375

Memory Maps

RedBoot sets up the memory map primarily as described in the board's +User Manual. There are some minor differences, noted in the following +table: +
Physical                Virtual                 Resource
+Addresses               Addresses
+00000000-01FFFFFF       80000000-81FFFFFF       Base SDRAM (cached)
+00000000-01FFFFFF       A0000000-A1FFFFFF       Base SDRAM (uncached)
+0C000000-0C0BFFFF       AC000000-AC0B0000       PCI IO space
+0F000000-0F0001FF       AF000000-AF0001FF       VRC4375 Registers
+1C000000-1C0FFFFF       BC000000-BC0FFFFF       VRC4372 Registers
+1C100000-1DFFFFFF       BC100000-BDFFFFFF       PCI Memory space
+1FC00000-1FC7FFFF       BFC00000-BFC7FFFF       FLASH ROM
+80000000-8000000D       C0000000-C000000D       RTC
+8000000E-80007FFF       C000000E-C0007FFF       NVRAM
+81000000-81FFFFFF       C1000000-C1FFFFFF       Z85C30 DUART
+82000000-82FFFFFF       C2000000-C2FFFFFF       Z8536 Timer
+83000000-83FFFFFF       C3000000-C3FFFFFF       8255 Parallel port
+87000000-87FFFFFF       C7000000-C7FFFFFF       Seven segment display

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=vrc4373
+export ARCH_DIR=mips
+export PLATFORM_DIR=vrc4373

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
MIPS/RM7000 PMC-Sierra OcelotUpPowerPC/MPC860T Analogue & Micro PowerPC 860T
\ No newline at end of file diff --git a/doc/html/ref/x86pc.html b/doc/html/ref/x86pc.html new file mode 100644 index 00000000..57355eb7 --- /dev/null +++ b/doc/html/ref/x86pc.html @@ -0,0 +1,400 @@ + + + + + + + + +IA32/x86 x86-Based PC +
eCos Reference Manual
PrevChapter 5. Installation and TestingNext

IA32/x86 x86-Based PC

Initial Installation

RedBoot takes the form of a self-booting image that must be written +onto a formatted floppy disk. The process will erase any file system or data +that already exists on that disk, so proceed with caution.

For Red Hat Linux users, this can be done by:

$ dd conv=sync if=install/bin/redboot.bin of=/dev/fd0H1440

For NT Cygwin users, this can be done by first ensuring that the raw +floppy device is mounted as /dev/fd0. To check if this +is the case, type the command mount at the Cygwin bash +prompt. If the floppy drive is already mounted, it will be listed as something +similar to the following line:

  \\.\a: /dev/fd0 user binmode

If this line is not listed, then mount the floppy drive using the command:

$ mount -f -b //./a: /dev/fd0

To actually install the boot image on the floppy, use the command:

$ dd conv=sync if=install/bin/redboot.bin of=/dev/fd0

Insert this floppy in the A: drive of the PC to be used as a target +and ensure that the BIOS is configured to boot from A: by default. On reset, +the PC will boot from the floppy and be ready to be debugged via either serial +line, or via the ethernet interface if it is installed.

Rebuilding RedBoot

These shell variables provide the platform-specific information +needed for building RedBoot according to the procedure described in +Chapter 3: +
export TARGET=pc
+export ARCH_DIR=i386
+export PLATFORM_DIR=pc

The names of configuration files are listed above with the +description of the associated modes.


PrevHomeNext
FRV/FRV400 Fujitsu FR-V 400 (MB-93091)UpMIPS/MIPS32(CoreLV 4Kc)+MIPS64(CoreLV 5Kc) Atlas Board
\ No newline at end of file diff --git a/doc/html/user-guide/appendices.html b/doc/html/user-guide/appendices.html new file mode 100644 index 00000000..2d56a2ad --- /dev/null +++ b/doc/html/user-guide/appendices.html @@ -0,0 +1,171 @@ + + + + + + + + +Appendixes +
eCos User Guide
PrevNext


PrevHomeNext
Package Structure Target Setup
\ No newline at end of file diff --git a/doc/html/user-guide/appendix-target-setup.html b/doc/html/user-guide/appendix-target-setup.html new file mode 100644 index 00000000..2c8d1110 --- /dev/null +++ b/doc/html/user-guide/appendix-target-setup.html @@ -0,0 +1,388 @@ + + + + + + + + +Target Setup +
eCos User Guide
PrevNext

Appendix A. Target Setup

Table of Contents
MN10300 stdeval1 Hardware Setup
MN10300 Architectural Simulator Setup
AM33 STB Hardware Setup
TX39 Hardware Setup
TX39 Architectural Simulator Setup
TX49 Hardware Setup
VR4300 Hardware Setup
VRC4375 Hardware Setup
Atlas/Malta Hardware Setup
PowerPC Cogent Hardware Setup
PowerPC MBX860 Hardware Setup
PowerPC Architectural Simulator Setup
SPARClite Hardware Setup
SPARClite Architectural Simulator Setup
ARM PID Hardware Setup
ARM AEB-1 Hardware Setup
ARM Cogent CMA230 Hardware Setup
Cirrus Logic ARM EP7211 Development +Board Hardware Setup
Cirrus Logic ARM EP7212 Development Board +Hardware Setup
Cirrus Logic ARM EP7312 Development Board +Hardware Setup
Cirrus Logic ARM EP7209 Development Board Hardware Setup
Cirrus Logic ARM CL-PS7111 Evaluation Board Hardware Setup
StrongARM EBSA-285 Hardware Setup
Compaq iPAQ PocketPC Hardware Setup
SH3/EDK7708 Hardware Setup
SH3/CQ7708 Hardware Setup
SH3/HS7729PCI Hardware Setup
SH3/SE77x9 Hardware Setup
SH4/CQ7750 Hardware Setup
SH4/SE7751 Hardware Setup
NEC CEB-V850/SA1 Hardware Setup
NEC CEB-V850/SB1 Hardware Setup
i386 PC Hardware Setup
i386/Linux Synthetic Target Setup

The following sections detail the setup of many of the targets +supported by eCos.

Caution

This information is presented here only temporarily. It is intended +that there will be separate documents detailing this information for +each target in future releases. Consequently not much effort has been +put into bringing the following documentation up to date -- much of it +is obsolete, bogus or just plain wrong.

MN10300 stdeval1 Hardware Setup

The eCos Developer’s Kit package comes with a pair +of EPROMs which provide GDB support for the Matsushita MN10300 (AM31) +series evaluation board using CygMon, the Cygnus ROM monitor. Images +of these EPROMs are also provided at BASE_DIR/loaders/mn10300-stdeval1/cygmon.bin. +The LSB EPROM (LROM) is installed to socket IC8 on the board and +the MSB EPROM (UROM) is installed to socket IC9. Attention should +be paid to the correct orientation of these EPROMs during installation.

The CygMon stubs allows communication with GDB by way of the +serial port at connector CN2. The communication parameters are fixed +at 38400 baud, 8 data bits, no parity bit, and 1 stop bit (8-N-1). +No flow control is employed. Connection to the host computer should +be made using a standard RS232C serial cable (not a null modem cable). +A gender changer may also be required.


PrevHomeNext
AppendixesUpMN10300 Architectural Simulator Setup
\ No newline at end of file diff --git a/doc/html/user-guide/build-tree.html b/doc/html/user-guide/build-tree.html new file mode 100644 index 00000000..d1eeadf0 --- /dev/null +++ b/doc/html/user-guide/build-tree.html @@ -0,0 +1,237 @@ + + + + + + + + +Build Tree +
eCos User Guide
PrevChapter 25. The Component Repository and Working DirectoriesNext


PrevHomeNext
The Component Repository and Working DirectoriesUpInstall Tree
\ No newline at end of file diff --git a/doc/html/user-guide/building-and-running-sample-appliations.html b/doc/html/user-guide/building-and-running-sample-appliations.html new file mode 100644 index 00000000..23c71779 --- /dev/null +++ b/doc/html/user-guide/building-and-running-sample-appliations.html @@ -0,0 +1,435 @@ + + + + + + + + +Building and Running Sample Applications +
eCos User Guide
PrevNext

Chapter 13. Building and Running Sample Applications

The example programs in this tutorial are included, along +with a Makefile, in the examples directory +of the eCos distribution. The first program you will run is a hello +world-style application, then you will run a more complex +application that demonstrates the creation of threads and the use +of cyg_thread_delay(), and finally you will run +one that uses clocks and alarm handlers.

The Makefile depends on an externally +defined variable to find the eCos library and header files. This +variable is INSTALL_DIR and must be set to the +pathname of the install directory created in the Section called Configuration Tool on Windows and Linux Quick Start in Chapter 11.

INSTALL_DIR may be either be set in the shell +environment or may be supplied on the command line. To set it in the +shell do the following in a bash shell:

$ export INSTALL_DIR=BASE_DIR/ecos-work/arm_install

You can then run make without any extra parameters +to build the examples.

Alternatively, if you can do the following:

$ make INSTALL_DIR=BASE_DIR/ecos-work/arm_install

eCos Hello World

The following code is found in the file hello.c +in the examples directory:

eCos hello world program listing

/* this is a simple hello world program */
+#include <stdio.h>
+int main(void)
+{
+ printf("Hello, eCos world!\n");
+ return 0;
+}

To compile this or any other program that is not part of the +eCos distribution, you can follow the procedures described below. Type +this explicit compilation command (assuming your current working +directory is also where you built the eCos kernel):

$ TARGET-gcc -g -IBASE_DIR/ecos-work/install/include hello.c -LBASE_DIR/ecos-work/install/lib -Ttarget.ld -nostdlib

The compilation command above contains some standard GCC +options (for example, -g enables debugging), as well +as some mention of paths +(-IBASE_DIR/ecos-work/install/include allows files +like cyg/kernel/kapi.h to be found, and +-LBASE_DIR/ecos-work/install/lib allows the linker to +find -Ttarget.ld).

The executable program will be called a.out.

You can now run the resulting program using GDB in exactly the +same the way you ran the test case before. The procedure will be the +same, but this time run +TARGET-gdb specifying +-nw a.out on the command line:

$ TARGET-gdb -nw a.out

For targets other than the synthetic linux target, you should +now run the usual GDB commands described earlier. Once this is done, +typing the command "continue" at the (gdb) prompt ("run" for +simulators) will allow the program to execute and print the string +"Hello, eCos world!" on your screen.

On the synthetic linux target, you may use the "run" command +immediately - you do not need to connect to the target, nor use the +"load" command.


PrevHomeNext
Testing FiltersUpA Sample Program with Two Threads
\ No newline at end of file diff --git a/doc/html/user-guide/building-the-system.html b/doc/html/user-guide/building-the-system.html new file mode 100644 index 00000000..4cbe73d4 --- /dev/null +++ b/doc/html/user-guide/building-the-system.html @@ -0,0 +1,307 @@ + + + + + + + + +Building the System +
eCos User Guide
PrevChapter 28. Manual ConfigurationNext

Building the System

Once a build tree has been generated with + ecosconfig, building eCos is straightforward:

$ make

The build tree contains the subdirectories, makefiles, + and everything else that is needed to generate the default + configuration for the selected architecture and platform. + The only requirement is that the tools needed for that + architecture, for example + powerpc-eabi-g++, + are available using the standard search path. If this is not + the case then the make will + fail with an error message. If you have a multiprocessor + system then it may be more efficient to use:

$ make -j n

where n is equal to the + number of processors on your system.

Once the make process + has completed, the install tree will contain the header + files and the target library that are needed for application + development.

It is also possible to build the system’s test cases +for the current configuration:

$ make tests

The resulting test executables will end up in a + tests subdirectory of the + install tree.

If disk space is scarce then it is possible to make the copy +of the install tree for application development purposes, and then +use:

$ make clean

The build tree will now use up a minimum of disk space — the +bulk of what is left consists of configuration header files that +you may have edited and hence should not be deleted automatically. +However, it is possible to rebuild the system at any time without +re-invoking ecosconfig, just by +running make again.

Under exceptional circumstances it may be necessary to run make +clean for other reasons, such as when a new release +of the toolchain is installed. The toolchain includes a number of +header files which are closely tied to the compiler, for example limits.h, +and these header files are not and should not be duplicated by eCos. +The makefiles perform header file dependency analysis, so that when +a header file is changed all affected sources will be rebuilt during +the next make. This is very useful +when the configuration header files are changed, but it also means +that a build tree containing information about the locations of +header files must be rebuilt. If a new version of the toolchain +is installed and the old version is removed then this location information +is no longer accurate, and make will +complain that certain dependencies cannot be satisfied. Under such circumstances +it is necessary to do a make clean first.


PrevHomeNext
Conflicts and constraintsUpPackages
\ No newline at end of file diff --git a/doc/html/user-guide/cdl-component-definition-language.html b/doc/html/user-guide/cdl-component-definition-language.html new file mode 100644 index 00000000..9cdbdd99 --- /dev/null +++ b/doc/html/user-guide/cdl-component-definition-language.html @@ -0,0 +1,177 @@ + + + + + + + + +Component Definition Language +
eCos User Guide
PrevChapter 24. CDL ConceptsNext


PrevHomeNext
Component RepositoryUpPackages
\ No newline at end of file diff --git a/doc/html/user-guide/cdl-component-repository.html b/doc/html/user-guide/cdl-component-repository.html new file mode 100644 index 00000000..bfa32036 --- /dev/null +++ b/doc/html/user-guide/cdl-component-repository.html @@ -0,0 +1,167 @@ + + + + + + + + +Component Repository +
eCos User Guide
PrevChapter 24. CDL ConceptsNext


PrevHomeNext
CDL ConceptsUpComponent Definition Language
\ No newline at end of file diff --git a/doc/html/user-guide/cdl-concepts.html b/doc/html/user-guide/cdl-concepts.html new file mode 100644 index 00000000..0892a629 --- /dev/null +++ b/doc/html/user-guide/cdl-concepts.html @@ -0,0 +1,290 @@ + + + + + + + + +CDL Concepts +
eCos User Guide
PrevNext

Chapter 24. CDL Concepts

About this chapter

This chapter serves as a brief introduction to the + concepts involved in eCos (Embedded Configurable Operating + System). It describes the configuration architecture and the + underlying technology to a level required for the embedded + systems developer to configure eCos. It does not describe in + detail aspects such as how to write reusable components for + eCos: this information is given in the Component + Writer’s Guide.


PrevHomeNext
eCos Programming Concepts and TechniquesUpComponent Repository
\ No newline at end of file diff --git a/doc/html/user-guide/cdl-configuration-items.html b/doc/html/user-guide/cdl-configuration-items.html new file mode 100644 index 00000000..51f4425f --- /dev/null +++ b/doc/html/user-guide/cdl-configuration-items.html @@ -0,0 +1,550 @@ + + + + + + + + +Configuration Items +
eCos User Guide
PrevChapter 24. CDL ConceptsNext

Configuration Items

Configuration items are the + individual entities that form a configuration. Each item + corresponds to the setting of a C pre-processor macro (for + example, + CYGHWR_HAL_ARM_PID_GDB_BAUD). + The code of eCos itself is written to test such pre-processor + macros so as to tailor the code. User code can do + likewise.

Configuration items come in the following flavors:

Like packages, configuration items exist in a tree-based hierarchy: +each configuration item has a parent which may be another configuration +item or a package. Under some conditions (such as when packages +are added or removed from a configuration), items may be “re-parented” such +that their position in the tree changes.

Properties

Each configuration item has a set of properties. The following +table describes the most commonly used:

Table 24-2. Configuration properties

PropertyUse
FlavorThe “type” of the item, as + described above
EnabledWhether + the item is enabled
Current_valueThe current value of the item
Default_valueAn ordinary expression defining the default value of the + item
Legal_valuesA + list expression defining the values the item may hold (for example, + 1 to10)
Active_ifA + goal expression denoting the requirement for this item to be active +(see below: Inactive Items)
RequiresA goal +expression denoting requirements this item places on others (see +below: Conflicts)
CalculatedWhether +the item as non-modifiable
MacroThe corresponding +C pre-processor macro
FileThe C header +file in which the macro is defined
URLThe URL of +a documentation page describing the item
HardwareIndicates +that a particular package is related to specific hardware

A complete description of properties is contained in the Component +Writer’s Guide.


PrevHomeNext
PackagesUpConflicts
\ No newline at end of file diff --git a/doc/html/user-guide/cdl-conflicts.html b/doc/html/user-guide/cdl-conflicts.html new file mode 100644 index 00000000..37336fea --- /dev/null +++ b/doc/html/user-guide/cdl-conflicts.html @@ -0,0 +1,263 @@ + + + + + + + + +Conflicts +
eCos User Guide
PrevChapter 24. CDL ConceptsNext

Conflicts

Not all settings of configuration items will lead to a + coherent configuration; for example, the use of a timeout + facility might require the existence of timer support, so if + the one is required the other cannot be removed. Coherence + is policed by means of consistency rules (in particular, the + goal expressions that appear as CDL items + requires and + active_if attributes [see + above]). A violation of consistency rules creates a + conflict, which must be resolved in + order to ensure a consistent configuration. Conflict + resolution can be performed manually or with the assistance + of the eCos tools. Conflicts come in the following + flavors:


PrevHomeNext
Configuration ItemsUpTemplates
\ No newline at end of file diff --git a/doc/html/user-guide/cdl-packages.html b/doc/html/user-guide/cdl-packages.html new file mode 100644 index 00000000..7d512bb2 --- /dev/null +++ b/doc/html/user-guide/cdl-packages.html @@ -0,0 +1,203 @@ + + + + + + + + +Packages +
eCos User Guide
PrevChapter 24. CDL ConceptsNext

Packages

The building blocks of an eCos configuration are called + packages. Packages are the units of + software distribution. A set of core packages (such as + kernel, C library and math library) is provided by Red Hat: + additional third-party packages will be available in + future.

A package may exist in one of a number of versions. + The default version is the current version. + Only one version of a given package may be present in the component +repository at any given time.

Packages are organized in a tree hierarchy. Each package +is either at the top-level or is the child of another package.

The eCos Package Administration Tool can be used to add or remove +packages from the component repository. The eCos Configuration Tool can be used to include or exclude packages from the configuration +being built.


PrevHomeNext
Component Definition LanguageUpConfiguration Items
\ No newline at end of file diff --git a/doc/html/user-guide/cdl-templates.html b/doc/html/user-guide/cdl-templates.html new file mode 100644 index 00000000..3596083f --- /dev/null +++ b/doc/html/user-guide/cdl-templates.html @@ -0,0 +1,172 @@ + + + + + + + + +Templates +
eCos User Guide
PrevChapter 24. CDL ConceptsNext


PrevHomeNext
ConflictsUpThe Component Repository and Working Directories
\ No newline at end of file diff --git a/doc/html/user-guide/clocks-and-alarm-handlers.html b/doc/html/user-guide/clocks-and-alarm-handlers.html new file mode 100644 index 00000000..9b346e08 --- /dev/null +++ b/doc/html/user-guide/clocks-and-alarm-handlers.html @@ -0,0 +1,467 @@ + + + + + + + + +More Features — Clocks and Alarm +Handlers +
eCos User Guide
PrevNext

Chapter 14. More Features — Clocks and Alarm +Handlers

If a program wanted to execute a task at a given time, or +periodically, it could do it in an inefficient way by sitting in a +loop and checking the real-time clock to see if the proper amount of +time has elapsed. But operating systems usually provide system calls +which allow the program to be informed at the desired time.

eCos provides a rich timekeeping formalism, involving +counters, clocks, +alarms, and timers. The +precise definition, relationship, and motivation of these features is +beyond the scope of this tutorial, but these examples illustrate how +to set up basic periodic tasks.

Alarms are events that happen at +a given time, either once or periodically. A thread associates an +alarm handling function with the alarm, so that the function will +be invoked every time the alarm “goes off”.

A Sample Program with Alarms

simple-alarm.c (in +the examples directory) is a short program that creates a thread that +creates an alarm. The alarm is handled by the function +test_alarm_func(), which sets a global +variable. When the main thread of execution sees that the variable has +changed, it prints a message.

Example 14-1. A sample program that creates an alarm

/* this is a very simple program meant to demonstrate
+ a basic use of time, alarms and alarm-handling functions  in eCos */
+
+#include <cyg/kernel/kapi.h>
+
+#include <stdio.h>
+
+#define NTHREADS 1
+#define STACKSIZE 4096
+
+static cyg_handle_t thread[NTHREADS];
+
+static cyg_thread thread_obj[NTHREADS];
+static char stack[NTHREADS][STACKSIZE];
+
+static void alarm_prog( cyg_addrword_t data );
+
+/* we install our own startup routine which sets up
+  threads and starts the scheduler */
+void cyg_user_start(void)
+{
+ cyg_thread_create(4, alarm_prog, (cyg_addrword_t) 0,
+	"alarm_thread", (void *) stack[0],
+	STACKSIZE, &thread[0], &thread_obj[0]);
+ cyg_thread_resume(thread[0]);
+}
+
+/* we need to declare the alarm handling function (which is
+ defined below), so that we can pass it to  cyg_alarm_initialize() */
+cyg_alarm_t test_alarm_func;
+
+/* alarm_prog() is a thread which sets up an alarm which is then
+ handled by test_alarm_func() */
+static void alarm_prog(cyg_addrword_t data)
+{
+ cyg_handle_t test_counterH, system_clockH, test_alarmH;
+ cyg_tick_count_t ticks;
+ cyg_alarm test_alarm;
+ unsigned how_many_alarms = 0, prev_alarms = 0, tmp_how_many;
+
+ system_clockH = cyg_real_time_clock();
+ cyg_clock_to_counter(system_clockH, &test_counterH);
+ cyg_alarm_create(test_counterH, test_alarm_func,
+	(cyg_addrword_t) &how_many_alarms,
+	&test_alarmH, &test_alarm);
+ cyg_alarm_initialize(test_alarmH, cyg_current_time()+200, 200);
+
+ /* get in a loop in which we read the current time and
+    print it out, just to have something scrolling by */
+ for (;;) {
+   ticks = cyg_current_time();
+   printf("Time is %llu\n", ticks);
+   /* note that we must lock access to how_many_alarms, since the
+   alarm handler might change it. this involves using the
+   annoying temporary variable tmp_how_many so that I can keep the
+   critical region short */
+   cyg_scheduler_lock();
+   tmp_how_many = how_many_alarms;
+   cyg_scheduler_unlock();
+   if (prev_alarms != tmp_how_many) {
+     printf(" --- alarm calls so far: %u\n", tmp_how_many);
+     prev_alarms = tmp_how_many;
+   }
+   cyg_thread_delay(30);
+ }
+}
+
+/* test_alarm_func() is invoked as an alarm handler, so
+   it should be quick and simple. in this case it increments
+   the data that is passed to it. */
+void test_alarm_func(cyg_handle_t alarmH, cyg_addrword_t data)
+{
+ ++*((unsigned *) data);
+}

When you run this program (by typing continue at +the (gdb) prompt) the output should look like +this:

Starting program: BASE_DIR/examples/simple-alarm.exe
+Time is 0
+Time is 30
+Time is 60
+Time is 90
+Time is 120
+Time is 150
+Time is 180
+Time is 210
+  --- alarm calls so far: 1
+Time is 240
+Time is 270
+Time is 300
+Time is 330
+Time is 360
+Time is 390
+Time is 420
+  --- alarm calls so far: 2
+Time is 450
+Time is 480

Here are a few things you might notice about this program:


PrevHomeNext
A Sample Program with Two ThreadsUpThe eCos Configuration Tool
\ No newline at end of file diff --git a/doc/html/user-guide/coarse-grained-configuration.html b/doc/html/user-guide/coarse-grained-configuration.html new file mode 100644 index 00000000..4c62a1bd --- /dev/null +++ b/doc/html/user-guide/coarse-grained-configuration.html @@ -0,0 +1,328 @@ + + + + + + + + +Coarse-grained Configuration +
eCos User Guide
PrevChapter 28. Manual ConfigurationNext

Coarse-grained Configuration

Coarse-grained configuration of + an eCos system means making configuration changes using the + ecosconfig tool. These changes + include:

  1. switching to different target hardware

  2. switching to a different template

  3. adding or removing a package

  4. changing the version of a package

Whenever ecosconfig generates or + updates an eCos configuration, it generates a configuration + save file.

Suppose that the configuration was first created using + the following command line:

$ ecosconfig new stdeval1

To change the target hardware to the Cogent CMA28x + PowerPC board, the following command would be needed: +

$ ecosconfig target cma28x

To switch to the PowerPC simulator instead:

$ ecosconfig target psim

As the hardware changes, hardware-related packages such as +the HAL packages and device drivers will be added to and removed +from the configuration as appropriate.

To remove any package from the current configuration, use +the remove command:

$ ecosconfig remove uitron

You can disable multiple packages using multiple arguments, +for example:

$ ecosconfig remove uitron libm

If this turns out to have been a mistake then you can + re-enable one or more packages with the + add command:

$ ecosconfig add libm

Changing the desired version for a package is also + straightforward:

$ ecosconfig version v2_1 kernel

It is necessary to regenerate the build tree and header + files following any changes to the configuration before + rebuilding eCos:

$ ecosconfig tree

PrevHomeNext
PackagesUpFine-grained Configuration
\ No newline at end of file diff --git a/doc/html/user-guide/compiler-and-linker-options.html b/doc/html/user-guide/compiler-and-linker-options.html new file mode 100644 index 00000000..993b5dbf --- /dev/null +++ b/doc/html/user-guide/compiler-and-linker-options.html @@ -0,0 +1,367 @@ + + + + + + + + +Compiler and Linker Options +
eCos User Guide
PrevNext

Chapter 26. Compiler and Linker Options

eCos is built using + the GNU C and C++ compilers. eCos relies on certain features of these + tools such as constructor priority ordering and selective linking + which are not part of other toolchains. +

Some GCC options are required for eCos, +and others can be useful. This chapter gives a brief description +of the required options as well as some recommended eCos-specific options. +All other GCC options (described in the GCC manuals) +are available.

Compiling a C Application

The following command lines demonstrate the + minimum set of options required to + compile and link an eCos program written in C.

$ TARGET-gcc -c  -IINSTALL_DIR/include file.c
+$ TARGET-gcc -o program file.o -LINSTALL_DIR/lib -Ttarget.ld -nostdlib

PrevHomeNext
Application Build TreeUpCompiling a C++ Application
\ No newline at end of file diff --git a/doc/html/user-guide/compiling-cpp-app.html b/doc/html/user-guide/compiling-cpp-app.html new file mode 100644 index 00000000..a7b0f65f --- /dev/null +++ b/doc/html/user-guide/compiling-cpp-app.html @@ -0,0 +1,320 @@ + + + + + + + + +Compiling a C++ Application +
eCos User Guide
PrevChapter 26. Compiler and Linker OptionsNext

Compiling a C++ Application

The following command lines demonstrate the + minimum set of options required to + compile and link an eCos program written in C++. +

$ TARGET-g++ -c  -IINSTALL_DIR/include -fno-rtti -fno-exceptions file.cxx
+$ TARGET-g++ -o program file.o -LINSTALL_DIR/lib -Ttarget.ld -nostdlib

PrevHomeNext
Compiler and Linker OptionsUpDebugging Techniques
\ No newline at end of file diff --git a/doc/html/user-guide/component-repo-and-working-dirs.html b/doc/html/user-guide/component-repo-and-working-dirs.html new file mode 100644 index 00000000..cb7e2ca9 --- /dev/null +++ b/doc/html/user-guide/component-repo-and-working-dirs.html @@ -0,0 +1,421 @@ + + + + + + + + +The Component Repository and Working Directories +
eCos User Guide
PrevNext

Chapter 25. The Component Repository and Working Directories

Each of the file trees involved in eCos development has a + different role.

Component Repository

The eCos component repository + contains directories for all the packages that are shipped + with eCos or provided by third parties.

The component repository should not be modified as part of +application development.


PrevHomeNext
TemplatesUpBuild Tree
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-building.html b/doc/html/user-guide/config-tool-building.html new file mode 100644 index 00000000..3f3e63a8 --- /dev/null +++ b/doc/html/user-guide/config-tool-building.html @@ -0,0 +1,332 @@ + + + + + + + + +Building +
eCos User Guide
PrevNext

Chapter 21. Building

When you have configured eCos, you may build the configuration.

On the Build menu, click:

  • +Library + (or click the Build Library icon on the toolbar) – this +causes the eCos configuration to be built. The result of a successful +build will be (among other things) a library against which user +code can be linked

  • +Tests + – this causes the eCos configuration to be built, and +additionally builds the relevant test cases linked against the eCos library

  • +Clean + – this removes all intermediate files, thus causing a +subsequent build/library or build/tests operation +to cause recompilation of all relevant files.

  • +Stop + – this causes a currently executing build (any of the +above steps) to be interrupted

Build options may be displayed by using the Build->Options menu +item. This displays a dialog box containing a drop-list control +and two windows. The drop-list control allows you to select the +type of build option to be displayed (for example “LDFLAGS” are +the options applied at link-time. The left-hand window is a tree +view of the packages loaded in the current configuration. The right-hand +window is a list of the build options that will be used for the +currently selected package.

Note that this dialog box currently affords only read-only +access to the build options. In order to change build options you +must edit the relevant string configuration item.

A single level of inheritance is supported: each package’s +build options are combined with the global options (these are to +be found in the “Global build options” folder +in the configuration view).


PrevHomeNext
SearchingUpSelecting User Tools
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-component-repository.html b/doc/html/user-guide/config-tool-component-repository.html new file mode 100644 index 00000000..d3cffe67 --- /dev/null +++ b/doc/html/user-guide/config-tool-component-repository.html @@ -0,0 +1,274 @@ + + + + + + + + +The Component Repository +
eCos User Guide
PrevChapter 15. Getting StartedNext

The Component Repository

When you invoke the eCos Configuration Tool, it accesses the Component + Repository, a read-only location of configuration + information. For an explanation of “Component + Repository” see Chapter 24.

The eCos Configuration Tool will look + for a component repository using (in descending order of preference):

  • A location specified on the command line

  • The component repository most recently used by the +current user

  • An eCos distribution under /opt/ecos (under +Linux) or a default location set by the installation procedure (under +Windows)

  • User input

The final case above will normally only occur if the previous + repository has been moved or (under Windows) installation information stored in + the Windows registry has been modified; it will result in a dialog box +being displayed that allows you to specify the repository location:

Note that in order to use the eCos Configuration Tool you are obliged to provide a + valid repository location.

In the rare event that you subsequently wish to change + the component location, select + Build->Repository + and the above dialog box will then be displayed.

You can check the location of the current repository, the current save file +path, and the current hardware template and default package, +by selecting Help->Repository Information.... +A summary will be displayed.


PrevHomeNext
Invoking the eCos Configuration ToolUpeCos Configuration Tool Documents
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-context-help-config-items.html b/doc/html/user-guide/config-tool-context-help-config-items.html new file mode 100644 index 00000000..17e79a80 --- /dev/null +++ b/doc/html/user-guide/config-tool-context-help-config-items.html @@ -0,0 +1,172 @@ + + + + + + + + +Context-sensitive Help for Configuration Items +
eCos User Guide
PrevChapter 16. Getting HelpNext


PrevHomeNext
Context-sensitive Help for Other WindowsUpMethods of Displaying HTML Help
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-context-help-otherwin.html b/doc/html/user-guide/config-tool-context-help-otherwin.html new file mode 100644 index 00000000..95bfb1f3 --- /dev/null +++ b/doc/html/user-guide/config-tool-context-help-otherwin.html @@ -0,0 +1,176 @@ + + + + + + + + +Context-sensitive Help for Other Windows +
eCos User Guide
PrevChapter 16. Getting HelpNext


PrevHomeNext
Getting HelpUpContext-sensitive Help for Configuration Items
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-creating-a-shell.html b/doc/html/user-guide/config-tool-creating-a-shell.html new file mode 100644 index 00000000..2c7fb2cf --- /dev/null +++ b/doc/html/user-guide/config-tool-creating-a-shell.html @@ -0,0 +1,719 @@ + + + + + + + + +Creating a Shell +
eCos User Guide
PrevNext

Chapter 23. Creating a Shell

To call up a shell window, select Tools->Shell. +Under Windows, you will get a Cygwin shell similar to the one below. On Linux, you will +get a standard Linux shell window.

Keyboard Accelerators

The following table presents the list of keyboard accelerators +that can be used with the Configuration Tool.

Table 23-1. Keyboard accelerators

AcceleratorActionRemarks
Alt+1hide/show properties window 
Alt+2hide/show output window 
Alt+3hide/show short description window 
Alt+4hide/show conflicts window 
Ctrl+Aselect alloutput +window and in-cell editing
Ctrl+Ccopyoutput window +and in-cell editing
Ctrl+FEdit->Find 
Ctrl+NFile->New 
Ctrl+OFile->Open 
Ctrl+SFile->Save 
Ctrl+VPastein-cell editing +only
Ctrl+XCutin-cell-editing +only
Ctrl+ZUndoin-cell editing +only
F1Context-sensitive help 
F3Find next 
F7Build->Library 
Shift+F7Build->Tests 
Alt+F6View->Next window 
Shift+Alt+0View->Previous window 
Shift+InsPastein-cell editing +only
Shift+F10Display context menuConfiguration +window
Alt+EnterDisplay properties dialog boxConfiguration window
>Increment item valueConfiguration +window
<Decrement +item valueConfiguration window
SpaceToggle item valueConfiguration +window

PrevHomeNext
ExecutionUpeCos Programming Concepts and Techniques
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-customization.html b/doc/html/user-guide/config-tool-customization.html new file mode 100644 index 00000000..05ba4aa8 --- /dev/null +++ b/doc/html/user-guide/config-tool-customization.html @@ -0,0 +1,259 @@ + + + + + + + + +Customization +
eCos User Guide
PrevNext

Chapter 17. Customization

The following visual aspects of the eCos Configuration Tool can be changed to suit + individual preferences. These aspects are saved on a per-user + basis, so that when the eCos Configuration Tool is next invoked by the same + user, the appearance will be as set in the previous + session.


PrevHomeNext
Methods of Displaying HTML HelpUpSettings
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-documents.html b/doc/html/user-guide/config-tool-documents.html new file mode 100644 index 00000000..679e5409 --- /dev/null +++ b/doc/html/user-guide/config-tool-documents.html @@ -0,0 +1,395 @@ + + + + + + + + +eCos Configuration Tool Documents +
eCos User Guide
PrevChapter 15. Getting StartedNext

eCos Configuration Tool Documents

Configuration Save File

eCos configuration settings and other information + (such as disabled conflicts) that are set using the + eCos Configuration Tool are saved to + a file between sessions. By default, when the + eCos Configuration Tool is first + invoked, it reads and displays information from the + Component Registry and displays the information in an + untitled blank document. You can perform the following + operations on a document:


PrevHomeNext
The Component RepositoryUpGetting Help
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-getting-help.html b/doc/html/user-guide/config-tool-getting-help.html new file mode 100644 index 00000000..722dc6f0 --- /dev/null +++ b/doc/html/user-guide/config-tool-getting-help.html @@ -0,0 +1,252 @@ + + + + + + + + +Getting Help +
eCos User Guide
PrevNext

Chapter 16. Getting Help

The eCos Configuration Tool contains +several methods for accessing online help.

Context-sensitive Help for Dialogs

Most dialogs displayed by the eCos Configuration Tool are supplied +with context-sensitive help. You can then get help relating +to any control within the current dialog box by

Some dialogs may have a Help + button. You can press this to display a more general + description of the function of the dialog box as a whole. + This help will be in HTML form; for more information, see + below.


PrevHomeNext
eCos Configuration Tool DocumentsUpContext-sensitive Help for Other Windows
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-getting-started.html b/doc/html/user-guide/config-tool-getting-started.html new file mode 100644 index 00000000..b8f69492 --- /dev/null +++ b/doc/html/user-guide/config-tool-getting-started.html @@ -0,0 +1,251 @@ + + + + + + + + +Getting Started +
eCos User Guide
PrevNext

Chapter 15. Getting Started


PrevHomeNext
The eCos Configuration ToolUpInvoking the eCos Configuration Tool
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-invoking.html b/doc/html/user-guide/config-tool-invoking.html new file mode 100644 index 00000000..9a843a7c --- /dev/null +++ b/doc/html/user-guide/config-tool-invoking.html @@ -0,0 +1,424 @@ + + + + + + + + +Invoking the eCos Configuration Tool +
eCos User Guide
PrevChapter 15. Getting StartedNext

Invoking the eCos Configuration Tool

On Windows

There are two ways in which to invoke the eCos Configuration Tool:

You may run configtool with zero, one or two arguments. You can specify the eCos repository +location, and/or an eCos save file (extension .ecc) on the command line. The ordering of these +two arguments is not significant. For example:

configtool "c:\Program Files\eCos\packages" myfile.ecc

If you invoke the configuration tool from the command line with +--help, you will see this output:

Usage: eCos Configuration Tool [-h] [-e] [-v] [-c] [input file 1] [input file 2]
+  -h  --help        	displays help on the command line parameters
+  -e  --edit-only   	edit save file only
+  -v  --version     	print version
+  -c  --compile-help	compile online help only

This summarizes valid parameters and switches. Switches are shown with +both short form and long form.

--help shows valid options and parameters, as above.

--edit-only runs the Configuration Tool in a mode that +suppresses creation of a build tree, in case you only want to create and edit save files.

--version shows version and build date information, and exits.

--compile-help compiles help contents files from the HTML documentation +files that the tool finds in the eCos repository, and exits.


PrevHomeNext
Getting StartedUpThe Component Repository
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-platform-selection.html b/doc/html/user-guide/config-tool-platform-selection.html new file mode 100644 index 00000000..afc32aa2 --- /dev/null +++ b/doc/html/user-guide/config-tool-platform-selection.html @@ -0,0 +1,255 @@ + + + + + + + + +Platform Selection +
eCos User Guide
PrevChapter 19. Updating the ConfigurationNext

Platform Selection

To add, modify or remove entries in the list of + platforms used for running tests, select + Tools->Platforms. The following + dialog will be displayed:

You may add, modify or remove platform entries as you + wish, but in order to run tests, a platform must be defined + to correspond to the currently loaded hardware template. The + information associated with each platform name is used to + run tests.

To modify a platform, click the + Modify button with the appropriate + platform selected, or double-click on an entry in the list. + A dialog will be displayed that allows you to change the + command prefix, platform type and arguments for + GDB.

To add a new platform, click the + Add button. A similar dialog will be + displayed that allows you to define a new platform. To + remove a platform, click the Delete + button or press the DEL key with the + appropriate platform selected.

The command prefix is used when running tests in order + to determine the names of the executables (such as gdb) to + be used. For example, if the gdb executable name is + “arm-elf-gdb.exe” the prefix should be set to + “arm-elf”.

The platform type indicates the capabilities of the platform +- whether it is hardware or a simulator, and whether breakpoints +are supported.

The arguments for the GDB field allow +additional arguments to be passed to gdb when it is used to run +a test. This is typically used in the case of simulators linked +to gdb in order to define memory layout.


PrevHomeNext
Updating the ConfigurationUpUsing Templates
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-screen-layout.html b/doc/html/user-guide/config-tool-screen-layout.html new file mode 100644 index 00000000..e1bca73b --- /dev/null +++ b/doc/html/user-guide/config-tool-screen-layout.html @@ -0,0 +1,635 @@ + + + + + + + + +Screen Layout +
eCos User Guide
PrevNext

Chapter 18. Screen Layout

The following windows are available within the + eCos Configuration + Tool: +

The layout of the windows may be adjusted to suit your + preferences: see the Section called Settings in Chapter 17.

Configuration Window

This is the principal window used to configure eCos. It + takes the form of a tree-based representation of the + configuration items within the currently loaded eCos + packages.

In the case of items whose values may be changed, + controls are available to set the item values. These either + take the form of check boxes or radio buttons within the + tree itself or cells to the right of the thin vertical + splitter bar. Controls in the tree may be used in the usual + way; cells, however, must first be activated.

To activate a cell, simply click on it: it will assume a sunken +appearance and data can then be edited in the cell. To terminate +in-cell editing, click elsewhere in the configuration window or +press ENTER. To discard the partial results +of in-cell editing and revert to the previous value, press ESCAPE.

Cells come in three varieties, according to the type of + data they accept:

In the case of string cells, you can double-click the cell +to display a dialog box containing a larger region in which to edit +the string value. This is useful in the case of long strings, or +those spanning multiple lines.

Disabled items

Some items will appear disabled. In this case the item + label and any associated controls and cells will be + grayed. It is not be possible to change the values of + disabled items.

Right-Clicking

You can right-click on an item in the configuration + window item to display a pop-up menu which (depending on + the type of the item selected) allows you to:

Conflicts Window

This window exists to display any configuration item + conflicts. Conflicts are the result of failures to meet + the requirements between configuration items expressed in + the CDL. See the Section called Conflicts in Chapter 24 .

The window comprises three columns:

  • Item

    This is the macro name of the first item involved + in the conflict.

  • + Conflict

    This is a description of the conflict type. The currently + supported types are “unresolved”, “illegal + value”, “evaluation exception”, “goal + unsatisfied” and “bad data”.

  • + Property

    This contains a description of the configuration + item’s property that caused the conflict.

    Within the conflicts window you can right-click on + any item to display a context menu which allows you to + choose from one of the following options:

To locate the item involved in the +conflict, double-click in the first or third column, or +right-click over the item and choose Locate +from the popup menu.

You can use the Tools->Resolve Conflicts menu +item, or right-click over the item and select Resolve from the popup menu, +to resolve conflicts — the Section called Resolving conflicts in Chapter 19.

Properties Window

This window displays the CDL properties of the item + currently selected in the configuration window. The same + information may be displayed by right-clicking the item + and selecting “properties”.

Two properties may be double-clicked as + follows:


PrevHomeNext
SettingsUpUpdating the Configuration
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-searching.html b/doc/html/user-guide/config-tool-searching.html new file mode 100644 index 00000000..191c7b64 --- /dev/null +++ b/doc/html/user-guide/config-tool-searching.html @@ -0,0 +1,214 @@ + + + + + + + + +Searching +
eCos User Guide
PrevNext


PrevHomeNext
Using TemplatesUpBuilding
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-selecting-user-tools.html b/doc/html/user-guide/config-tool-selecting-user-tools.html new file mode 100644 index 00000000..72e6b120 --- /dev/null +++ b/doc/html/user-guide/config-tool-selecting-user-tools.html @@ -0,0 +1,194 @@ + + + + + + + + +Selecting User Tools +
eCos User Guide
PrevChapter 21. BuildingNext


PrevHomeNext
BuildingUpExecution
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-settings.html b/doc/html/user-guide/config-tool-settings.html new file mode 100644 index 00000000..8efe1d71 --- /dev/null +++ b/doc/html/user-guide/config-tool-settings.html @@ -0,0 +1,347 @@ + + + + + + + + +Settings +
eCos User Guide
PrevChapter 17. CustomizationNext

Settings

To change other visual aspects, select + View->Settings + and then select the Display and + View tabs depending on the settings + you wish to alter.. + The options are as follows:

Settings: Display tab


PrevHomeNext
CustomizationUpScreen Layout
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-test-execution.html b/doc/html/user-guide/config-tool-test-execution.html new file mode 100644 index 00000000..fa9a1411 --- /dev/null +++ b/doc/html/user-guide/config-tool-test-execution.html @@ -0,0 +1,685 @@ + + + + + + + + +Execution +
eCos User Guide
PrevNext

Chapter 22. Execution

Test executables that have been linked using the Build/Tests +operation against the current configuration can be executed by selecting Tools->Run +Tests.

When tests are run, the Configuration Tool looks +for a platform name corresponding to the currently loaded hardware template. +If no such platform is found, a dialog will be displayed for you +to define one; this dialog is similar to that displayed by the Add function +in the Tools->Platforms dialog, but +in this case the platform name cannot be changed.

When a test run is invoked, a property sheet is displayed, +comprising three tabs: Executables, Output and Summary.

Note that the property sheet is resizable.

Three buttons appear on the property sheet itself: Run/Stop, Close and Properties.

The Run button is used to initiate a +test run. Those tests selected on the Executables tab +are run, and the output recorded on the Output and Summary tabs. +During the course of a run, the Run button +changes to “Stop”. The button may be used to interrupt +a test run at any point.

Properties

The Properties button is used to change +the connectivity properties for the test run.

Executables Tab

This is used to adjust the set of tests available for execution. +A check box against each executable name indicates whether that +executable will be included when the Run button +is pressed. The Check All and Uncheck +All buttons may be used to check or uncheck all items.

When the property sheet is first displayed, it will be pre-populated +with those test executables that have been linked using the Build/Tests +operation against the current configuration.

You can right-click in the window to display a context menu +containing Add and Remove items. +Clicking Remove will remove those executables +selected. Clicking Add will display a dialog +box that allows you to add to the set of items. Equivalently the Add button +may be used to add executables, and the DEL key +may be used to remove them.

You can use the Add from Folder button +to add a number of executables in a specified folder (optionally +including subfolders, if you click on Yes when +asked).

Summary Tab

This tab is used to display a record, in summary form, of +those tests executed. For each execution, the following information +is displayed:

The output can be saved to a file or cleared by means of the +popup menu displayed when you right-click in the window.


PrevHomeNext
Selecting User ToolsUpCreating a Shell
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-updating-configuration.html b/doc/html/user-guide/config-tool-updating-configuration.html new file mode 100644 index 00000000..f17d5641 --- /dev/null +++ b/doc/html/user-guide/config-tool-updating-configuration.html @@ -0,0 +1,272 @@ + + + + + + + + +Updating the Configuration +
eCos User Guide
PrevNext

Chapter 19. Updating the Configuration

Adding and Removing Packages

To add or remove packages from the configuration, select + Build->Packages. + The following dialog box will be displayed:

The left-hand list shows those packages that are available to + be loaded. The right-hand list shows those that are + currently loaded. In order to transfer packages from one + list to another (that is, to load or unload packages) + double-click the selection or click the + Add or Remove + buttons.

The version drop-down list displays the versions of the + selected packages. When loading packages, this control may + be used to load versions other than the most recent + (current). Note that if more than one package is selected, + the version drop-down list will display only the versions + common to all the selected packages.

The window under the version displays a brief + description of the selected package. If more than one + package is selected, this window will be blank.

Under the description window there is a Keywords +control into which you can type a string to be matched against +package names, macro names and descriptions. The lists are updated +a second or so after typing has stopped. +If you type several separate words, +all of these words must be associated with a given package +for that package to be displayed. If you select +the Match exactly checkbox, then the string +is taken to be a complete fragment and matched against the beginning +of a name, macro name or descriptions. All matches are done +case-insensitively.

If you check Omit hardware packages, only +non-hardware packages will be shown.


PrevHomeNext
Screen LayoutUpPlatform Selection
\ No newline at end of file diff --git a/doc/html/user-guide/config-tool-using-templates.html b/doc/html/user-guide/config-tool-using-templates.html new file mode 100644 index 00000000..67617e08 --- /dev/null +++ b/doc/html/user-guide/config-tool-using-templates.html @@ -0,0 +1,373 @@ + + + + + + + + +Using Templates +
eCos User Guide
PrevChapter 19. Updating the ConfigurationNext

Using Templates

To load a configuration based on a template, select + Build->Templates.

The following dialog box will be displayed:

Change the hardware template, the packages template, or + both. To select a hardware template, choose from the first + drop-list. To choose a packages template, choose from the + second. Brief descriptions of each kind of template are + provided in the corresponding edit boxes.

Resolving conflicts

During the process of configuring eCos it is possible + that conflicts will be created. For more details of the + meaning of conflicts, see Chapter 24.

The Conflicts Window displays all conflicts in the + current configuration. Additionally, a window in the + status bar displays a count of the conflicts. Because the + resolution of conflicts can be time-consuming, a mechanism + exists whereby conflicts can be resolved + automatically.

You can choose to have a conflicts resolution dialog + box displayed by means of the View->Settings... + menu item, on the Conflict Resolution +tab of the dialog.

You can choose to have conflicts checked under the + following circumstances:

The method you chose depends on how much you need + your configuration to be free of conflicts. You may + want to avoid having to clean up all the conflicts at + once, or you may want to keep the configuration + consistent at all times. If you have major changes to + implement, which may resolve the conflicts, then you + might want to wait until after you have completed + these changes before you check for conflicts.

Automatic resolution

If you check the “Automatically suggest + fixes” check box, a conflicts resolution dialog box + will be displayed whenever new conflicts are created. The + same dialog box may be displayed at any stage by means of + the Tools->Resolve Conflicts + menu item. +

The conflicts resolution dialog box contains two major windows.

The upper contains the set of conflicts to be addressed; the +format of the data being as that of the Conflicts Window. The lower +window contains a set of proposed resolutions – each entry +is a suggested configuration item value change that as a whole may +be expected to lead to the currently selected conflict being resolved.

Note that there is no guarantee:

The above warnings are, however, conservative. In practice +(so long as the number and extent of conflicts are limited) automatic +conflict resolution may be used to good effect to correct problems +without undue amounts of programmer intervention.

In order to select the conflicts to be applied, select or +clear the check boxes against the resolutions for each proposed +resolution. By default all resolutions are selected; you can return +to the default state (in other words, cause all check boxes for +each conflict to again become checked) by pressing the “Reset” button. +Note that multiple selection may be used in the resolutions control +to allow ranges of check boxes to be toggled in one gesture.

When you are happy to apply the selected resolutions for each +conflict displayed, click Apply; this will +apply the resolutions. Alternatively you may cancel from the dialog +box without any resolutions being applied.


PrevHomeNext
Platform SelectionUpSearching
\ No newline at end of file diff --git a/doc/html/user-guide/configuration-and-the-package-repository.html b/doc/html/user-guide/configuration-and-the-package-repository.html new file mode 100644 index 00000000..a3a7b4f7 --- /dev/null +++ b/doc/html/user-guide/configuration-and-the-package-repository.html @@ -0,0 +1,182 @@ + + + + + + + + +Configuration and the Package Repository +
eCos User Guide
PrevNext


PrevHomeNext
Kernel Instrumentation Manual Configuration
\ No newline at end of file diff --git a/doc/html/user-guide/configuring-and-building-ecos-from-source.html b/doc/html/user-guide/configuring-and-building-ecos-from-source.html new file mode 100644 index 00000000..f2fd0c81 --- /dev/null +++ b/doc/html/user-guide/configuring-and-building-ecos-from-source.html @@ -0,0 +1,409 @@ + + + + + + + + +Configuring and Building eCos from Source +
eCos User Guide
PrevNext

Chapter 11. Configuring and Building eCos from Source

This chapter documents the configuration of eCos. The process is +the same for any of the supported targets: you may select a +hardware target (if you have a board available), any one of the +simulators, or a synthetic target (if your host platform has synthetic +target support).

eCos Start-up Configurations

There are various ways to download an executable image to a +target board, and these involve different ways of preparing the +executable image. In the eCos Hardware Abstraction Layer (HAL package) +there are configuration options to support the different download +methods. Table 11-1 summarizes the +ways in which an eCos image can be prepared for different types of +download. This is not an exhaustive list, some targets define +additional start-up types of their own. Where a ROM Monitor is +mentioned, this will usually be RedBoot, although on some older, or +low resource, targets you may need to use CygMon or the GDB stubs ROM, +see the target documentation for details.

Caution

You cannot run an application configured for RAM start-up +on the simulator directly: it will fail during start-up. You can +only download it to the simulator if +you are already running RedBoot in the simulator, +as described in the toolchain documentation +or you load through the +SID +GDB debugging component. This is not the same as the simulated +stub, since it does not require a target program to be running to +get GDB to talk to it. It can be done before letting the simulator +run +or you use the ELF loader component to get a program into memory.

The debugging environment for most developers will be either +a hardware board or the simulator, in which case they will be able +to select a single HAL configuration.


PrevHomeNext
Programming With eCosUpConfiguration Tool on Windows and Linux Quick Start
\ No newline at end of file diff --git a/doc/html/user-guide/conflicts-and-constraints.html b/doc/html/user-guide/conflicts-and-constraints.html new file mode 100644 index 00000000..54b50cc8 --- /dev/null +++ b/doc/html/user-guide/conflicts-and-constraints.html @@ -0,0 +1,402 @@ + + + + + + + + +Conflicts and constraints +
eCos User Guide
PrevChapter 28. Manual ConfigurationNext

Conflicts and constraints

Configuration options are not completely independent. For example +the C library's strtod() and atof() +functions rely on the math library package to provide certain functionality. If the math library package is removed then the C +library can no longer provide these functions. Each package describes constraints like these in CDL "requires" properties. If a constraint is not satisfied, then the configuration contains a conflict. For any given conflict there can +be several resolution options. For example, it would be possible to add the math library package back to the +configuration, or to disable the strtod() and atof() functions.

The eCos configuration tools will report any conflicts in the current configuration. If there are any such conflicts +then the configuration is usually unsafe and it makes no sense to build and run eCos in such circumstances. In fact, +any attempt at building eCos is likely to fail. In exceptional cases it is possible to override this by using e.g. the +--ignore-errors qualifier with ecosconfig.

Many constraints are fairly simple in nature, and the configuration tools contain an inference engine which can +resolve the associated conflicts automatically. For example, if the math library package is removed then the +inference engine can resolve the resulting conflict by disabling the configuration option for strtod() and atof(). All +such changes will be reported. Sometimes the inference engine cannot resolve a conflict, for example it is not +allowed to override a change that has been made explicitly by the user. Sometimes it will find a solution which does +not match the application's requirements.

A typical session involving conflicts would look something like this: +
$ ecosconfig new pid
This creates a new configuration with the default template. For most targets this will not result in any conflicts, +because the default settings for the various options meet the requirements of the default template.

For some targets +there may be conflicts and the inference engine would come into play. +
$ ecosconfig remove libm 
+U CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT, new inferred value 0 
+U CYGFUN_LIBC_strtod, new inferred value 0 
+U CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT, new inferred value 0 
+ecosconfig reports that this change caused three conflicts, all in the C library. The inference engine was able to +resolve all the conflicts and update the relevant configuration options accordingly.

To suppress the inference engine --no-resolve can be used: +
$ ecosconfig new pid
+$ ecosconfig --no-resolve remove libm 
+C CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT, "requires" constraint not satisfied:      CYGPKG_LIBM 
+C CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT, "requires" constraint not satisfied:      CYGPKG_LIBM 
+C CYGFUN_LIBC_strtod, "requires" constraint not satisfied: CYGPKG_LIBM 
+Three unresolved conflicts are reported.

The check command can be used to get the current state of the +configuration, and the --verbose qualifier will provide additional information:

$ ecosconfig --srcdir /home/bartv/ecc/ecc --verbose check 
+Target: pid 
+Template: default 
+Removed:
+ CYGPKG_LIBM 
+3 conflict(s): 
+C CYGFUN_LIBC_strtod, "requires" constraint not satisfied: CYGPKG_LIBM
+ Possible solution: 
+    CYGFUN_LIBC_strtod -> 0 
+    CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT -> 0 
+C CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT, "requires" constraint not satisfied:      CYGPKG_LIBM 
+ Possible solution: 
+    CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT -> 0 
+C CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT, "requires" constraint not satisfied:      CYGPKG_LIBM 
+ Possible solution: 
+    CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT -> 0 

If the proposed solutions are acceptable, the resolve command can be used to apply them: +
$ ecosconfig resolve 
+U CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT, new inferred value 0 
+U CYGFUN_LIBC_strtod, new inferred value 0 
+U CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT, new inferred value 0 

The current configuration is again conflict-free and it is possible to generate a build tree. The --quiet qualifier can +be used to suppress the change messages, if desired.

When changing individual configuration options by editing the ecos.ecc file (as described below), the resulting +system should be checked and any problems should be resolved. For example, if CYGFUN_LIBC_strtod is +explicitly enabled in the savefile: +
$ edit ecos.ecc
+$ ecosconfig check 
+Target: pid 
+Template: default 
+Removed: 
+    CYGPKG_LIBM 
+1 conflict(s): 
+C CYGFUN_LIBC_strtod, "requires" constraint not satisfied: CYGPKG_LIBM 
+$ ecosconfig resolve 
+C CYGFUN_LIBC_strtod, "requires" constraint not satisfied: CYGPKG_LIBM 
+In this case the inference engine cannot resolve the conflict automatically because that would involve changing a +user setting. Any attempt to generate a build tree will fail: +
$ ecosconfig --srcdir /home/bartv/ecc/ecc tree 
+C CYGFUN_LIBC_strtod, "requires" constraint not satisfied: CYGPKG_LIBM
+Unable to generate build tree, this configuration still contains conflicts.
+Either resolve the conflicts or use --ignore-errors 

It is still possible to generate a build tree: +
$ ecosconfig --srcdir /home/bartv/ecc/ecc --ignore-errors tree 
+C CYGFUN_LIBC_strtod, "requires" constraint not satisfied: CYGPKG_LIBM 
+$ make 
+In this case eCos will fail to build. In other cases of unresolved conflicts eCos may build, but may not run. In +general all conflicts should be resolved by editing the ecos.ecc file, by letting the inference engine make appropriate +changes, or by other means, before any attempt is made to build or run eCos.


PrevHomeNext
Creating the Build TreeUpBuilding the System
\ No newline at end of file diff --git a/doc/html/user-guide/connecting-target-ethernet.html b/doc/html/user-guide/connecting-target-ethernet.html new file mode 100644 index 00000000..c8fa555a --- /dev/null +++ b/doc/html/user-guide/connecting-target-ethernet.html @@ -0,0 +1,209 @@ + + + + + + + + +Connecting Via Ethernet +
eCos User Guide
PrevChapter 9. Target SetupNext

Connecting Via Ethernet

Some targets allow GDB to connect via Ethernet - if so, it will +be mentioned in the document describing the target. Substitute the +target's assigned IP address or hostname for <hostname> in the +following. Depending on how RedBoot has been configured, it will +either have this address allocated statically, or will acquire it via +BOOTP. In both cases RedBoot will report the IP address it is +listening on in its startup message printed on the serial port. The +<port> is the TCP port which RedBoot is listening on, usually +9000. It is also listed in the target document.

Connect to the target by issuing the following command in +GDB console mode:

(gdb) target remote <hostname>:<port>

In Insight, connect by opening the File->Target +Settings window and enter:

Target: Remote/TCP     
+Hostname: <hostname>     
+Port: <port>

Set other options according to +preference, close the window and select Run->Connect to +target.


PrevHomeNext
Target SetupUpUsing A Simulator Target
\ No newline at end of file diff --git a/doc/html/user-guide/connecting-target-sim.html b/doc/html/user-guide/connecting-target-sim.html new file mode 100644 index 00000000..0c69bc9c --- /dev/null +++ b/doc/html/user-guide/connecting-target-sim.html @@ -0,0 +1,202 @@ + + + + + + + + +Using A Simulator Target +
eCos User Guide
PrevChapter 9. Target SetupNext


PrevHomeNext
Connecting Via EthernetUpUsing A Synthetic Target
\ No newline at end of file diff --git a/doc/html/user-guide/connecting-target-synth.html b/doc/html/user-guide/connecting-target-synth.html new file mode 100644 index 00000000..7cc6a1de --- /dev/null +++ b/doc/html/user-guide/connecting-target-synth.html @@ -0,0 +1,183 @@ + + + + + + + + +Using A Synthetic Target +
eCos User Guide
PrevChapter 9. Target SetupNext


PrevHomeNext
Using A Simulator TargetUpProgramming With eCos
\ No newline at end of file diff --git a/doc/html/user-guide/creating-build-tree.html b/doc/html/user-guide/creating-build-tree.html new file mode 100644 index 00000000..187d5a54 --- /dev/null +++ b/doc/html/user-guide/creating-build-tree.html @@ -0,0 +1,673 @@ + + + + + + + + +Creating the Build Tree +
eCos User Guide
PrevChapter 28. Manual ConfigurationNext

Creating the Build Tree

Generating a build tree is a non-trivial operation and + should not be attempted manually. Instead, eCos is shipped + with a tool called ecosconfig that should + be used to create a build tree.

Usually ecosconfig will be +run inside the build tree itself. If you are creating a new build +tree then typically you will create a new empty directory using +the mkdir command, cd into +that directory, and then invoke ecosconfig to +create a configuration. By default, the configuration is stored +in a file ecos.ecc in the current +directory. The configuration may be modified by editing this file directly. ecosconfig itself +deals with a number of coarse-grained configuration options such +as the target platform and the packages that should be used.

The ecosconfig tool is also +used subsequently to generate a build tree for a configuration. +Once a build tree exists, it is possible to run ecosconfig again +inside the same build tree. This will be necessary if your wish +to change some of the configuration options.

ecosconfig does not generate +the top-level directory of the build tree; you must do this + yourself.

$ mkdir ecos-work
+$ cd ecos-work

The next step is to run ecosconfig:

$ ecosconfig <qualifiers> <command>

ecosconfig qualifiers

The available command line qualifiers for + ecosconfig are as follows. Multiple + qualifiers may be used on the command line: +

--help

Provides basic usage guidelines for the + available commands and qualifiers.

--config=<file>

Specifies an eCos configuration save file for + use by the tool. By default, the file + ecos.ecc in the + current directory is used. Developers may prefer to + use a common location for all their eCos + configurations rather than keep the configuration + information in the base of the build tree.

--prefix=<dir>

Specifies an alternative location for the + install tree. By default, the install tree resides + inside the install + directory in the build tree. Developers may prefer + to locate the build tree in a temporary file + hierarchy but keep the install tree in a more + permanent location.

--srcdir=<dir>

Specifies the location of the component + repository. By default, the tool uses the location + specified in the + ECOS_REPOSITORY + environment variable. Developers may prefer to use + of this qualifier if they are working with more than + one repository.

--no-resolve

Disables the implicit resolution of conflicts + while manipulating the configuration data. + developers may prefer to resolve conflicts by + editing the eCos configuration save file + manually.

--ignore-errors, -i

By default, ecosconfig will exit with an error code if the current +configuration contains any conflicts, and it is not possible to +generate or update a build tree for such configurations. This +qualifier causes ecosconfig to ignore such problems, and hence it is +possible to generate a build tree even if there are still +conflicts. Of course, there are no guarantees that the resulting +system will actually do anything.

--verbose, -v

Display more information.

--quiet, -q

Display less information.

The --config, --prefix and +--srcdir qualifiers can also be written with two arguments, +for example:

ecosconfig --srcdir <dir> ...

This simplifies filename completion with some shells.

ecosconfig commands

The available commands for + ecosconfig are as + follows:

list

Lists the available packages, targets and + templates as installed in the eCos repository. + Aliases and package versions are also + reported.

new <target> [<template> [<version>]]

Creates a new eCos configuration for + the specified target hardware and saves it. A + software template may also be specified. By default, + the template named ‘default’ is used. If + the template version is not specified, the latest + version is used.

target <target>

Changes the target hardware selection + for the eCos configuration. This has the effect of + unloading packages supporting the target selected + previously and loading the packages which support + the new hardware. This command will be used + typically when switching between a simulator and + real hardware.

template <template> [<version>]

Changes the template selection for the eCos + configuration. This has the effect of unloading + packages specified by the template selected + previously and loading the packages specified by the + new template. By default, the latest version of the + specified template is used.

remove <packages>

Removes the specified packages from the eCos + configuration. This command will be used typically + when the template on which a configuration is based + contains packages which are not required.

add <packages>

Adds the specified packages to the eCos configuration. This +command will be used typically when the template on which a +configuration is based does not contain all the packages which are +required.For example, add-on packages provided by third parties will +not be known to the standard templates, so they will have to be added +explicitly.

version <version> <packages>

Selects the specified version of a + number of packages in the eCos configuration. By + default, the most recent version of each package is + used. This command will be used typically when an + older version of a package is required.

check

Presents the following information + concerning the current configuration:

  1. the selected target hardware

  2. the selected template

  3. additional packages

  4. removed packages

  5. the selected version of packages + where this is not the most recent + version

  6. conflicts in the current configuration

resolve

Resolves conflicts identified in the + current eCos configuration by invoking an inference + capability. Resolved conflicts are reported, but not + all conflicts may be resolvable. This command will + be used typically following manual editing of the + configuration.

export <file>

Exports a minimal eCos configuration + save file with the specified name. This file + contains only those options which do not have their + default value. Such files are used typically to + transfer option values from one configuration to + another.

import <file>

Imports a minimal eCos configuration + save file with the specified name. The values of + those options specified in the file are applied to + the current configuration.

tree

Generates a build tree based on the current eCos + configuration. This command will be used typically + just before building eCos.Normally a build tree can +only be generated if if the configuration has no unresolved +conflicts, but --ignore-errors can be used to override +this.


PrevHomeNext
Manual ConfigurationUpConflicts and constraints
\ No newline at end of file diff --git a/doc/html/user-guide/debugging-techniques.html b/doc/html/user-guide/debugging-techniques.html new file mode 100644 index 00000000..9cda45f7 --- /dev/null +++ b/doc/html/user-guide/debugging-techniques.html @@ -0,0 +1,350 @@ + + + + + + + + +Debugging Techniques +
eCos User Guide
PrevNext

Chapter 27. Debugging Techniques

eCos applications and components can be debugged in + traditional ways, with printing statements and debugger + single-stepping, but there are situations in which these + techniques cannot be used. One example of this is when a + program is getting data at a high rate from a real-time + source, and cannot be slowed down or interrupted.

eCos’s infrastructure module provides a + tracing formalism, allowing the + kernel’s tracing macros to be configured in many useful + ways. eCos’s kernel provides instrumentation + buffers which also collect specific + (configurable) data about the system’s history and + performance.

Tracing

To use eCos’s tracing facilities you must first + configure your system to use tracing. + You should enable the Asserts and Tracing component + (CYGPKG_INFRA_DEBUG) and the + Use tracing component within it + (CYGDBG_USE_TRACING). These + options can be enabled with the Configuration + Tool or by editing the file + BUILD_DIR/pkgconf/infra.h + manually.

You should then examine all the tracing-related options in +the Package: Infrastructure chapter of the eCos Reference +Manual. One useful set of configuration options are: CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS and CYGDBG_INFRA_DEBUG_TRACE_MESSAGE, +which are both enabled by default when tracing is enabled.

The following “Hello world with tracing” shows +the output from running the hello world program (from the Section called eCos Hello World in Chapter 13) that was +built with tracing enabled:

Example 27-1. Hello world with tracing

$ mips-tx39-elf-run --board=jmr3904  hello
+Hello, eCos world!
+ASSERT FAIL: <2>cyg_trac.h          [ 623] Cyg_TraceFunction_Report_::set_exitvoid()                                                            exitvoid used in typed function
+TRACE: <1>mlqueue.cxx         [ 395] Cyg_ThreadQueue_Implementation::enqueue()                                                            {{enter
+TRACE: <1>mlqueue.cxx         [ 395] Cyg_ThreadQueue_Implementation::enqueue()                                                            }}RETURNING UNSET!
+TRACE: <1>mlqueue.cxx         [ 126] Cyg_Scheduler_Implementation::add_thread()                                                           }}RETURNING UNSET!
+TRACE: <1>thread.cxx          [ 654] Cyg_Thread::resume()                                                                                 }}return void
+TRACE: <1>cstartup.cxx        [ 160] cyg_iso_c_start()                                                                                    }}return void
+TRACE: <1>startup.cxx         [ 142] cyg_package_start()                                                                                  }}return void
+TRACE: <1>startup.cxx         [ 150] cyg_user_start()                                                                                     {{enter
+TRACE: <1>startup.cxx         [ 150] cyg_user_start()                                                                                     (((void)))
+TRACE: <1>startup.cxx         [ 153] cyg_user_start()                                                                                     'This is the system default cyg_user_start()'
+TRACE: <1>startup.cxx         [ 157] cyg_user_start()                                                                                     }}return void
+TRACE: <1>sched.cxx           [ 212] Cyg_Scheduler::start()                                                                               {{enter
+TRACE: <1>mlqueue.cxx         [ 102] Cyg_Scheduler_Implementation::schedule()                                                             {{enter
+TRACE: <1>mlqueue.cxx         [ 437] Cyg_ThreadQueue_Implementation::highpri()                                                            {{enter
+TRACE: <1>mlqueue.cxx         [ 437] Cyg_ThreadQueue_Implementation::highpri()                                                            }}RETURNING UNSET!
+TRACE: <1>mlqueue.cxx         [ 102] Cyg_Scheduler_Implementation::schedule()                                                             }}RETURNING UNSET!
+TRACE: <2>intr.cxx            [ 450] Cyg_Interrupt::enable_interrupts()                                                                   {{enter
+TRACE: <2>intr.cxx            [ 450] Cyg_Interrupt::enable_interrupts()                                                                   }}RETURNING UNSET!
+TRACE: <2>thread.cxx          [  69] Cyg_HardwareThread::thread_entry()                                                                   {{enter
+TRACE: <2>cstartup.cxx        [ 127] invoke_main()                                                                                        {{enter
+TRACE: <2>cstartup.cxx        [ 127] invoke_main()                                                                                        ((argument is ignored))
+TRACE: <2>dummyxxmain.cxx     [  60] __main()                                                                                             {{enter
+TRACE: <2>dummyxxmain.cxx     [  60] __main()                                                                                             (((void)))
+TRACE: <2>dummyxxmain.cxx     [  63] __main()                                                                                             'This is the system default __main()'
+TRACE: <2>dummyxxmain.cxx     [  67] __main()                                                                                             }}return void
+TRACE: <2>memcpy.c            [ 112] _memcpy()                                                                                            {{enter
+TRACE: <2>memcpy.c            [ 112] _memcpy()                                                                                            ((dst=80002804, src=BFC14E58, n=19))
+TRACE: <2>memcpy.c            [ 164] _memcpy()                                                                                            }}returning 80002804
+TRACE: <2>cstartup.cxx        [ 137] invoke_main()                                                                                        'main() has returned with code 0. Calling exit()'
+TRACE: <2>exit.cxx            [  71] __libc_exit()                                                                                        {{enter
+TRACE: <2>exit.cxx            [  71] __libc_exit()                                                                                        ((status=0 ))
+TRACE: <2>atexit.cxx          [  84] cyg_libc_invoke_atexit_handlers()                                                                    {{enter
+TRACE: <2>atexit.cxx          [  84] cyg_libc_invoke_atexit_handlers()                                                                      (((void)))
+
+Scheduler:
+
+Lock:                0
+Current Thread:      <null>
+
+Threads:
+
+Idle Thread          pri =  31 state = R      id =   1
+                     stack base = 800021F0 ptr = 80002510 size = 00000400
+                     sleep reason NONE     wake reason NONE    
+                     queue = 80000C54      wait info = 00000000
+
+<null>               pri =   0 state = R      id =   2
+                     stack base = 80002A48 ptr = 8000A968 size = 00008000
+                     sleep reason NONE     wake reason NONE    
+                     queue = 80000BD8      wait info = 00000000
+	  

PrevHomeNext
Compiling a C++ ApplicationUpKernel Instrumentation
\ No newline at end of file diff --git a/doc/html/user-guide/directory-and-file-system-conventions.html b/doc/html/user-guide/directory-and-file-system-conventions.html new file mode 100644 index 00000000..964fc96c --- /dev/null +++ b/doc/html/user-guide/directory-and-file-system-conventions.html @@ -0,0 +1,180 @@ + + + + + + + + +Directory and File System Conventions +
eCos User Guide
PrevChapter 4. Notation and ConventionsNext


PrevHomeNext
Notation and ConventionsUpVersion Conventions
\ No newline at end of file diff --git a/doc/html/user-guide/documentation-roadmap.html b/doc/html/user-guide/documentation-roadmap.html new file mode 100644 index 00000000..a9fda848 --- /dev/null +++ b/doc/html/user-guide/documentation-roadmap.html @@ -0,0 +1,469 @@ + + + + + + + + +Documentation Roadmap +
eCos User Guide
PrevNext

Chapter 5. Documentation Roadmap

The eCos documentation is divided into a +three main parts:

User Guide

This document. It includes the following sections:

Installing eCos

This section describes how to install the + eCos software, how to set up your + hardware and how to test that it is all working. +

Programming Under eCos

This section describes how to write programs that run under + eCos by running through some examples. +

The eCos Configuration Tool

This section describes the eCos graphical + configuration tool and how to use it to change how + eCos behaves.

eCos Programming Concepts and Techniques

An explanation of the eCos programming + cycle, and a description of some debugging facilities that + eCos offers. +

Configuration and the Package + Repository

Information on how to configure eCos + manually, including a reference on the + ecosconfig command, memory layouts, + and information on how to manage a package repository + using the eCos Package Administration + Tool. +

Reference Guide

The Reference Guide provides detailed documentation on various +aspects of eCos. This document is being +constantly updated, so the following list just mentions the more +important sections, take a look at the guide itself for the full +story.

The eCos Kernel

In-depth description of eCos"s + native C kernel API Important considerations are given + for programming the eCos + kernel. The semantics for each kernel function are + described, including how they are affected by + configuration.

POSIX and µITRON APIs

A description of the POSIX and µITRON APIs and how they + are supported under eCos. +

The eCos Hardware Abstraction Layer (HAL)

A description of the structure and functionality of the + eCos HAL. This section also includes a + porting guide to help moving eCos to + different platforms. +

Device Drivers

A description of the philosophy behind + eCos device drivers, as well as a + presentation of the C language APIs for using the current + device drivers.

Device driver support includes serial, ethernet and FLASH devices, + and support for PCI, PCMCIA and USB interconnects. +

RedBoot User's Guide

This describes RedBoot, which provides a complete bootstrap + environment for a range of embedded operating systems, such as + embedded Linux and eCos, and + includes facilities such as network downloading and + debugging. It also provides a simple flash file system for + boot images. +

TCP/IP Stack Support

This describes the Common Networking for + eCos package, which provides + support for a complete TCP/IP networking stack. The design + allows for the actual stack to be modular and at the current + time two different implementations, one based on OpenBSD from + 2000 and a new version based on FreeBSD, are available. +

Other components related to networking, including support for + SNMP, DNS, HTTP and FTP, are also described. +

Component Writer's Guide

The Component Writer's Guide is intended for developers who need +to add or modify parts of eCos itself. It +describes the following things:


PrevHomeNext
Version ConventionsUpInstalling eCos
\ No newline at end of file diff --git a/doc/html/user-guide/ecos-key-features.html b/doc/html/user-guide/ecos-key-features.html new file mode 100644 index 00000000..168b8f89 --- /dev/null +++ b/doc/html/user-guide/ecos-key-features.html @@ -0,0 +1,260 @@ + + + + + + + + +Key Features +
eCos User Guide
PrevNext

Chapter 1. Key Features

  • eCos is distributed under the GPL +license with an exception which permits proprietary application code +to be linked with eCos without itself being +forced to be released under the GPL. It is also royalty and buyout +free.

  • As an Open Source project, eCos is +under constant improvement, with an active developer community, based +around the eCos web site at http://sources.redhat.com/ecos/.

  • Powerful GUI-based configuration system allowing both large and +fine grained configuration of eCos. This +allows the functionality of eCos to be +customized to the exact requirements of the application.

  • Full-featured, flexible, configurable, real time embedded +kernel. The kernel provides thread scheduling, synchronization, +timer, and communication primitives. It handles hardware resources +such as interrupts, exceptions, memory and caches.

  • The Hardware Abstraction Layer (HAL) hides the specific features +of each supported CPU and platform, so that the kernel and other +run-time components can be implemented in a portable fashion.

  • Support for µITRON and POSIX Application Programmer +Interfaces (APIs). It also includes a fully featured, thread-safe ISO +standard C library and math library.

  • Support for a wide variety of devices including many serial +devices, ethernet controllers and FLASH memories. There is also +support for PCMCIA, USB and PCI interconnects.

  • A fully featured TCP/IP stack implementing IP, IPv6, ICMP, UDP +and TCP over ethernet. Support for SNMP, HTTP, TFTP and FTP are also +present.

  • The RedBoot ROM monitor is an application that uses the +eCos HAL for portability. It provides +serial and ethernet based booting and debug services during +development.

  • Many components include test programs that validate the +components behaviour. These can be used both to check that hardware is +functioning correctly, and as examples of +eCos usage.

  • eCos documentation included this User +Guide, the Reference Manual and the Components Writer's Guide. These +are being continually updated as the system develops.


PrevHomeNext
IntroductionUpeCos Overview
\ No newline at end of file diff --git a/doc/html/user-guide/ecos-licensing-previous.html b/doc/html/user-guide/ecos-licensing-previous.html new file mode 100644 index 00000000..7f384311 --- /dev/null +++ b/doc/html/user-guide/ecos-licensing-previous.html @@ -0,0 +1,180 @@ + + + + + + + + +Previous License +
eCos User Guide
PrevChapter 3. eCos Licence OverviewNext

Previous License

Prior to May 2002, eCos was released under +the Red +Hat eCos Public License (RHEPL). The RHEPL required any +modifications to eCos code to be made +available under preferential terms to Red Hat and was therefore +incompatible with code licensed under the GPL. The use of +eCos source code which was licensed under +the RHEPL is not affected by the switch to the modified GPL for later +revisions.


PrevHomeNext
eCos Licence OverviewUpNotation and Conventions
\ No newline at end of file diff --git a/doc/html/user-guide/ecos-licensing.html b/doc/html/user-guide/ecos-licensing.html new file mode 100644 index 00000000..901d76fb --- /dev/null +++ b/doc/html/user-guide/ecos-licensing.html @@ -0,0 +1,481 @@ + + + + + + + + +eCos Licence Overview +
eCos User Guide
PrevNext

Chapter 3. eCos Licence Overview

As of May 2002, eCos is released +under a modified version of the well known GNU General Public License +(GPL), now making it an official +GPL-compatible Free Software License. An exception clause has +been added to the eCos license which limits +the circumstances in which the license applies to other code when used +in conjunction with eCos. The exception +clause is as follows:

 As a special exception, if other files instantiate templates or use macros
+ or inline functions from this file, or you compile this file and link it
+ with other works to produce a work based on this file, this file does not
+ by itself cause the resulting work to be covered by the GNU General Public
+ License. However the source code for this file must still be made
+ available in accordance with section (3) of the GNU General Public
+ License.
+
+ This exception does not invalidate any other reasons why a work based on
+ this file might be covered by the GNU General Public License.

The goal of the license is to serve the +eCos user community as a whole. It allows +all eCos users to develop products without +paying anybody anything, no matter how many developers are working on +the product or how many units will be shipped. The license also +guarantees that the eCos source code will +always be freely available. This applies not only to the core +eCos code itself but also to any changes +that anybody makes to the core. In particular, it should prevent any +company or individual contributing code to the system and then later +claiming that all eCos users are now guilty +of copyright or patent infringements and have to pay royalties. It +should also prevent any company from making some small improvements, +calling the result a completely new system, and releasing this under a +new and less generous license.

The license does not require users to +release the source code of any applications that +are developed with eCos. However, if +anybody makes any changes to code covered by the +eCos license, or writes new files derived +in any way from eCos code, then we believe +that the entire user community should have the opportunity to benefit +from this. The license stipulates that these changes must be made +available in source code form to all recipients of binaries based on +the modified code, either by including the sources along with the +binaries you deliver (or with any device containing such binaries) or +with a written offer to supply the source code to the general public +for three years. It is perhaps most practical for +eCos developers to make the source code +available online and inform those who are receiving binaries +containing eCos code, and probably also the +eCos maintainers, about the location of the +code. See the full +text of the GPL for the most authoritative definition of the +obligations.

Although it is not strictly necessary to contribute the modified +code back to the eCos open source project, +we are always pleased to receive code contributions and hope that +developers will also be keen to give back in return for what they +received from the eCos project completely +free of charge. The eCos maintainers are +responsible for deciding whether such contributions should be applied +to the public repository. In addition, a copyright +assignment is required for any significant changes to the core +eCos packages.

The result is a royalty-free system with minimal obligations on +the part of application developers. This has resulted in the rapid +uptake of eCos. At the same time, +eCos is fully open source with all the +benefits that implies in terms of quality and innovation. We believe +that this is a winning combination.

Questions and answers

The following queries provide some clarification as to the +implications of the eCos license. They do +not consititute part of the legal meaning of the license.

Q. What is the effect of the +eCos license?

A. In the simplest terms, when you +distribute anything containing eCos code, +you must make the source code to eCos +available under the terms of the GPL.

Q. What if I make changes to +eCos, or write new code based on +eCos code?

A. Then you must make those changes +available as well.

Q. Do I have to distribute the source +code to my application? Isn't the GPL "viral"?

A. You do not have to distribute any +code under the terms of the GPL other than +eCos code or code derived from +eCos. For example, if you write a HAL port +based on copying an existing eCos HAL in +any way, you must make the source code available with the +binary. However you would not need to make available any other code, +such as the code of a wholly separate application linked with +eCos.

Q. I would rather stick with the +RHEPL code, but I updated my anonymous CVS checkout.

A. You can check out the final +version of anonymous CVS before the license change using the CVS tag +last-rhepl. See the anonymous CVS +access page +for details.


PrevHomeNext
eCos OverviewUpPrevious License
\ No newline at end of file diff --git a/doc/html/user-guide/ecos-overview.html b/doc/html/user-guide/ecos-overview.html new file mode 100644 index 00000000..a0ab8662 --- /dev/null +++ b/doc/html/user-guide/ecos-overview.html @@ -0,0 +1,467 @@ + + + + + + + + +eCos Overview +
eCos User Guide
PrevNext

Chapter 2. eCos Overview

eCos is an open source, configurable, + portable, and royalty-free embedded real-time operating + system. The following text expands on these core aspects that + define eCos.

eCos is provided as an open source + runtime system supported by the GNU open source development + tools. Developers have full and unfettered access to all + aspects of the runtime system. No parts of it are proprietary + or hidden, and you are at liberty to examine, add to, and + modify the code as you deem necessary. These rights are + granted to you and protected by the GNU Public License (GPL). + An exception clause has been added to the eCos license which + limits the circumstances in which the license applies to other + code when used in conjunction with eCos. This exception grants + you the right to freely develop and distribute applications + based on eCos. You are not expected + or required to make your embedded applications or any + additional components that you develop freely available so + long as they are not derived from + eCos code. We of course welcome all + contributions back to eCos such as + board ports, device drivers and other components, as this + helps the growth and development of + eCos, and is of benefit to the + entire eCos community. See Chapter 3 for more details.

One of the key technological innovations in + eCos is the configuration + system. The configuration system allows the application writer + to impose their requirements on the run-time components, both + in terms of their functionality and implementation, whereas + traditionally the operating system has constrained the + application's own implementation. Essentially, this enables + eCos developers to create their own + application-specific operating system and makes + eCos suitable for a wide range of + embedded uses. Configuration also ensures that the resource + footprint of eCos is minimized as + all unnecessary functionality and features are removed. The + configuration system also presents + eCos as a component + architecture. This provides a standardized mechanism for + component suppliers to extend the functionality of + eCos and allows applications to be + built from a wide set of optional configurable run-time + components. Components can be provided from a variety of + sources including: the standard + eCos release; commercial third + party developers or open source contributors.

The royalty-free nature of eCos means that you can develop and +deploy your application using the standard eCos release without +incurring any royalty charges. In addition, there are no up-front +license charges for the eCos runtime source code and associated +tools. We provide, without charge, everything necessary for basic +embedded applications development.

eCos is designed to be portable to a +wide range of target architectures and target platforms including 16, +32, and 64 bit architectures, MPUs, MCUs and DSPs. The +eCos kernel, libraries and runtime +components are layered on the Hardware Abstraction Layer (HAL), and +thus will run on any target once the HAL and relevant device drivers +have been ported to the target's processor architecture and +board. Currently eCos supports a large +range of different target architectures: +

  • ARM, Intel StrongARM and XScale

  • Fujitsu FR-V

  • Hitachi SH2/3/4

  • Hitachi H8/300H

  • Intel x86

  • MIPS

  • Matsushita AM3x

  • Motorola PowerPC

  • Motorola 68k/Coldfire

  • NEC V850

  • Sun SPARC

including many of the popular variants of these architectures +and evaluation boards.

eCos has been designed to support +applications with real-time requirements, providing features such as +full preemptability, minimal interrupt latencies, and all the +necessary synchronization primitives, scheduling policies, and +interrupt handling mechanisms needed for these type of +applications. eCos also provides all the +functionality required for general embedded application support +including device drivers, memory management, exception handling, C, +math libraries, etc. In addition to runtime support, the +eCos system includes all the tools +necessary to develop embedded applications, including +eCos software configuration and build +tools, and GNU based compilers, assemblers, linkers, debuggers, and +simulators.

To get the most out of eCos you +should visit the eCos open source +developers site: http://sources.redhat.com/ecos/.

The site is dedicated to the eCos + developer community and contains a rich set of resources + including news, FAQ, online documentation, installation guide, + discussion and announcement mailing lists, and runtime and + development tools downloads. The site also supports anonymous + CVS and WEBCVS access to provide direct access to the latest + eCos source base.

eCos is released as open source + software because we believe that this is the most effective + software development model, and that it provides the greatest + benefit to the embedded developer community as a whole. As part + of this endeavor, we seek the input and participation of + eCos developers in its continuing + evolution. Participation can take many forms including:

  • providing us with feedback on how eCos might be made more +useful to you - by taking part in the ongoing mailing list discussions +and by submitting problem reports covering bugs, documentation issues, +and missing features

  • contributing bug fixes and enhancement patches

  • contributing new code including device drivers, board +ports, libraries, and other runtime components

Our long term aim is to make eCos a +rich and ubiquitous standard infrastructure for the development of +deeply embedded applications. This will be achieved with the +assistance of the eCos developer community +cooperating to improve eCos for all. We +would like to take this opportunity to extend our thanks to the many +eCos developers who have already +contributed feedback, ideas, patches, and code that have augmented and +improved this release.

The eCos Maintainers


PrevHomeNext
Key FeaturesUpeCos Licence Overview
\ No newline at end of file diff --git a/doc/html/user-guide/ecos-packages.html b/doc/html/user-guide/ecos-packages.html new file mode 100644 index 00000000..c2b8e8ab --- /dev/null +++ b/doc/html/user-guide/ecos-packages.html @@ -0,0 +1,201 @@ + + + + + + + + +Packages +
eCos User Guide
PrevChapter 28. Manual ConfigurationNext

Packages

eCos is a component architecture. The system comes as a + number of packages which can be + enabled or disabled as required, and new packages can be + added as they become available. Unfortunately, the packages + are not completely independent: for example the µITRON + compatibility package relies almost entirely on + functionality provided by the kernel package, and it would + not make sense to try to build µITRON if the kernel + was disabled. The C library has fewer dependencies: some + parts of the C library rely on kernel functionality, but it + is possible to disable these parts and thus build a system + that has the C library but no kernel. The + ecosconfig tool has the capability of + checking that all the dependencies are satisfied, but it + may still be possible to produce configurations that will + not build or (conceivably) that will build but not run. + Developers should be aware of this and take appropriate + care.

By default, ecosconfig will +include all packages that are appropriate for the specified hardware +in the configuration. The common HAL package and +the eCos infrastructure must be present in every configuration. In +addition, it is always necessary to have one architectural HAL package +and one platform HAL package. Other packages are optional, and can +be added or removed from a configuration as required.

The application may not require all of the packages; for example, +it might not need the µITRON compatibility +package, or the floating point support provided by the math library. +There is a slight overhead when eCos is built because the packages +will get compiled, and there is also a small disk space penalty. +However, any unused facilities will get stripped out at link-time, +so having redundant packages will not affect the final executable.


PrevHomeNext
Building the SystemUpCoarse-grained Configuration
\ No newline at end of file diff --git a/doc/html/user-guide/ecos-programming-concepts-and-techniques.html b/doc/html/user-guide/ecos-programming-concepts-and-techniques.html new file mode 100644 index 00000000..ea446ac1 --- /dev/null +++ b/doc/html/user-guide/ecos-programming-concepts-and-techniques.html @@ -0,0 +1,219 @@ + + + + + + + + +eCos Programming Concepts and Techniques +
eCos User Guide
PrevNext


PrevHomeNext
Creating a Shell CDL Concepts
\ No newline at end of file diff --git a/doc/html/user-guide/ecos-user-guide.html b/doc/html/user-guide/ecos-user-guide.html new file mode 100644 index 00000000..38349ece --- /dev/null +++ b/doc/html/user-guide/ecos-user-guide.html @@ -0,0 +1,1400 @@ + + + + + + + + +eCos User Guide +

eCos User Guide

Copyright © 2001, 2002 by Red Hat, Inc.

Copyright © 2003 by eCosCentric Ltd.

Documentation licensing terms

This material may be distributed only subject to the terms +and conditions set forth in the Open Publication License, v1.0 +or later (the latest version is presently available at +http://www.opencontent.org/openpub/).

Distribution of the work or derivative of the work in any +standard (paper) book form is prohibited unless prior +permission is obtained from the copyright holder.

Trademarks

Red Hat, the Red Hat Shadow Man logo®, eCos™, RedBoot™, +GNUPro®, and Insight™ are trademarks of Red Hat, Inc.

Sun Microsystems® and Solaris® are registered trademarks of +Sun Microsystems, Inc.

SPARC® is a registered trademark of SPARC International, Inc., and +is used under license by Sun Microsystems, Inc.

Intel® is a registered trademark of Intel Corporation.

Motorola™ is a trademark of Motorola, Inc.

ARM® is a registered trademark of Advanced RISC Machines, Ltd.

MIPS™ is a trademark of MIPS Technologies, Inc.

Toshiba® is a registered trademark of the Toshiba Corporation.

NEC® is a registered trademark if the NEC Corporation.

Cirrus Logic® is a registered trademark of Cirrus Logic, Inc.

Compaq® is a registered trademark of the Compaq Computer Corporation.

Matsushita™ is a trademark of the Matsushita Electric Corporation.

Samsung® and CalmRISC™ are trademarks or registered trademarks +of Samsung, Inc.

Linux® is a registered trademark of Linus Torvalds.

UNIX® is a registered trademark of The Open Group.

Microsoft®, Windows®, and Windows NT® are registered trademarks +of Microsoft Corporation, Inc.

All other brand and product names, trademarks, and copyrights are the +property of their respective owners.


Table of Contents
I. Introduction
1. Key Features
2. eCos Overview
3. eCos Licence Overview
Questions and answers
Previous License
4. Notation and Conventions
GDB and GCC Command Notation
Directory and File System Conventions
Version Conventions
5. Documentation Roadmap
II. Installing eCos
6. System Requirements
7. Installation on Linux
8. Installation on Windows
9. Target Setup
Connecting Via Serial Line
Connecting Via Ethernet
Using A Simulator Target
Using A Synthetic Target
III. Programming With eCos
10. Programming With eCos
The Development Process
11. Configuring and Building eCos from Source
eCos Start-up Configurations
Configuration Tool on Windows and Linux Quick Start
Ecosconfig on Windows and Linux Quick Start
12. Running an eCos Test Case
Using the Configuration Tool
Using the command line
Testing Filters
13. Building and Running Sample Applications
eCos Hello World
A Sample Program with Two Threads
14. More Features — Clocks and Alarm +Handlers
A Sample Program with Alarms
IV. The eCos Configuration Tool
15. Getting Started
Introduction
Invoking the eCos Configuration Tool
The Component Repository
eCos Configuration Tool Documents
16. Getting Help
Context-sensitive Help for Dialogs
Context-sensitive Help for Other Windows
Context-sensitive Help for Configuration Items
Methods of Displaying HTML Help
17. Customization
Window Placement
Settings
18. Screen Layout
Configuration Window
19. Updating the Configuration
Adding and Removing Packages
Platform Selection
Using Templates
20. Searching
21. Building
Selecting Build Tools
Selecting User Tools
22. Execution
Properties
23. Creating a Shell
Keyboard Accelerators
V. eCos Programming Concepts and Techniques
24. CDL Concepts
About this chapter
Component Repository
Component Definition Language
Packages
Configuration Items
Conflicts
Templates
25. The Component Repository and Working Directories
Component Repository
Build Tree
Install Tree
Application Build Tree
26. Compiler and Linker Options
Compiling a C Application
Compiling a C++ Application
27. Debugging Techniques
Tracing
Kernel Instrumentation
VI. Configuration and the Package Repository
28. Manual Configuration
Directory Tree Structure
Creating the Build Tree
Conflicts and constraints
Building the System
Packages
Coarse-grained Configuration
Fine-grained Configuration
Editing an eCos Savefile
Editing the Sources
Modifying the Memory Layout
29. Managing the Package Repository
Package Installation
Package Structure
VII. Appendixes
A. Target Setup
MN10300 stdeval1 Hardware Setup
MN10300 Architectural Simulator Setup
AM33 STB Hardware Setup
TX39 Hardware Setup
TX39 Architectural Simulator Setup
TX49 Hardware Setup
VR4300 Hardware Setup
VRC4375 Hardware Setup
Atlas/Malta Hardware Setup
PowerPC Cogent Hardware Setup
PowerPC MBX860 Hardware Setup
PowerPC Architectural Simulator Setup
SPARClite Hardware Setup
SPARClite Architectural Simulator Setup
ARM PID Hardware Setup
ARM AEB-1 Hardware Setup
ARM Cogent CMA230 Hardware Setup
Cirrus Logic ARM EP7211 Development +Board Hardware Setup
Cirrus Logic ARM EP7212 Development Board +Hardware Setup
Cirrus Logic ARM EP7312 Development Board +Hardware Setup
Cirrus Logic ARM EP7209 Development Board Hardware Setup
Cirrus Logic ARM CL-PS7111 Evaluation Board Hardware Setup
StrongARM EBSA-285 Hardware Setup
Compaq iPAQ PocketPC Hardware Setup
SH3/EDK7708 Hardware Setup
SH3/CQ7708 Hardware Setup
SH3/HS7729PCI Hardware Setup
SH3/SE77x9 Hardware Setup
SH4/CQ7750 Hardware Setup
SH4/SE7751 Hardware Setup
NEC CEB-V850/SA1 Hardware Setup
NEC CEB-V850/SB1 Hardware Setup
i386 PC Hardware Setup
i386/Linux Synthetic Target Setup
B. Real-time characterization
Board: ARM AEB-1 Revision B Evaluation Board
Board: Atmel AT91/EB40
Board: Intel StrongARM EBSA-285 Evaluation Board
Board: Cirrus Logic EDB7111-2 Development Board
Board: ARM PID Evaluation Board
Board: Intel IQ80310 XScale Development Kit
Board: Toshiba JMR3904 Evaluation Board
Board: Toshiba REF 4955
Board: Matsushita STDEVAL1 Board
Board: Fujitsu SPARClite Evaluation Board
Board: Cogent CMA MPC860 (PowerPC) Evaluation
Board: NEC VR4373
Board: Intel SA1110 (Assabet)
Board: Intel SA1100 (Brutus)
Board: Motorola MBX
Board: Hitachi EDK7708
Board: CQ CqREEK SH3 Evaluation Board (cq7708)
Board: Hitachi HS7729PCI HS7729 SH3
Board: Hitachi Solution Engine 7751 SH4 (se7751)
Board: PC
Board: NEC V850 Cosmo Evaluation Board
Board: NEC V850 Cosmo Evaluation Board
C. GNU General Public License
List of Figures
11-1. Configuration Tool
11-2. Template selection
11-3. Configuring +for the target
11-4. Selecting the Build Library menu item
11-5. Save file dialog
11-6. Build tools dialog
11-7. User tools dialog
11-8. Selecting the Build Tests menu item
12-1. Run tests
12-2. Properties dialog box
13-1. Two +threads with simple print statements after random delays
15-1. Configuration Tool
15-2. Repository relocation dialog box
15-3. Save As dialog box
15-4. Open dialog box
16-1. HTML Help viewer
17-1. Settings dialog, Display tab
17-2. Settings dialog, Viewers tab
19-1. Packages dialog box
19-2. Platforms dialog box
19-3. Platform Modify dialog box
19-4. Templates dialog box
19-5. Options
19-6. Resolve conflicts window
20-1. Find dialog box
21-1. Build tools
21-2. User tools
22-1. Properties dialog box
22-2. Run tests
22-3. Add files from folder
25-1. Component repository

  Next
  Introduction
\ No newline at end of file diff --git a/doc/html/user-guide/editing-an-ecos-savefile.html b/doc/html/user-guide/editing-an-ecos-savefile.html new file mode 100644 index 00000000..08debadb --- /dev/null +++ b/doc/html/user-guide/editing-an-ecos-savefile.html @@ -0,0 +1,2012 @@ + + + + + + + + +Editing an eCos Savefile +
eCos User Guide
PrevChapter 28. Manual ConfigurationNext

Editing an eCos Savefile

The eCos configuration information is held in a single + savefile, typically ecos.ecc, which can + be generated by either the GUI configuration tool or by the + command line ecosconfig tool. The file + normally exists at the top level of the build tree. It is a + text file, allowing the various configurations options to be + edited inside a suitable text editor or by other programs or + scripts, as well as in the GUI config tool.

An eCos savefile is actually a script in the Tcl programming +language, so any modifications to the file need to preserve Tcl +syntax. For most configuration options, any modifications will be +trivial and there is no need to worry about Tcl syntax. For example, +changing a 1 to a 0 to disable an option. For more complicated +options, for example CYGDAT_UITRON_TASK_EXTERNS, +which involves some lines of C code, more care has +to be taken. If an edited savefile is no longer a valid Tcl script +then the configuration tools will be unable to read back the data +for further processing, for example to generate a build tree. An +outline of Tcl syntax is given below. One point worth noting here +is that a line that begins with a “#” is +usually a comment, and the bulk of an eCos savefile actually consists +of such comments, to make it easier to edit.

Header

An eCos savefile begins with a header, which typically + looks something like this:

# eCos saved configuration
+# ---- commands -------------------------------------------------------- 
+# This section contains information about the savefile format. 
+# It should not be edited. Any modifications made to this section 
+# may make it impossible for the configuration tools to read 
+# the savefile.
+
+cdl_savefile_version 1; 
+cdl_savefile_command cdl_savefile_version {};
+cdl_savefile_command cdl_savefile_command {}; 
+cdl_savefile_command 
+cdl_configuration { description hardware template package }; 
+cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; 
+cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; 
+cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; 
+cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; 
+      

This section of the savefile is intended for use by the + configuration system, and should not be edited. If this + section is edited then the various configuration tools may no + longer be able to read in the modified savefile.

Toplevel Section

The header is followed by a section that defines the + configuration as a whole. A typical example would + be:

# ---- toplevel -------------------------------------------------------- 
+# This section defines the toplevel configuration object. The only 
+# values that can be changed are the name of the configuration and 
+# the description field. It is not possible to modify the target, 
+# the template or the set of packages simply by editing the lines 
+# below because these changes have wide-ranging effects. Instead 
+# the appropriate tools should be used to make such modifications.
+
+cdl_configuration eCos {     
+description ““ ;         
+
+# These fields should not be modified.     
+hardware    pid ;     
+template    uitron ;     
+package -hardware CYGPKG_HAL_ARM current ;     
+package -hardware CYGPKG_HAL_ARM_PID current ;     
+package -hardware CYGPKG_IO_SERIAL current ;     
+package -template CYGPKG_HAL current ;     
+package -template CYGPKG_IO current ;     
+package -template CYGPKG_INFRA current ;     
+package -template CYGPKG_KERNEL current ;     
+package -template CYGPKG_UITRON current ;     
+package -template CYGPKG_LIBC current ;     
+package -template CYGPKG_LIBM current ;     
+package -template CYGPKG_DEVICES_WALLCLOCK current ;     
+package -template CYGPKG_ERROR current ; 
+}; 
+      

This section allows the configuration tools to reload the +various packages that make up the configuration. Most of the information +should not be edited. If it is necessary to add a new package or +to remove an existing one then the appropriate tools should be used +for this, for example:

$ ecosconfig remove CYGPKG_LIBM

There are two fields which can be edited. Configurations have +a name; in this case eCos. They can also have a description, which +is some arbitrary text. The configuration tools do not make use +of these fields, they exist so that users can store additional information +about a configuration.

Conflicts Section

The toplevel section is followed by details of all the + conflicts (if any) in the configuration, for + example:

# ---- conflicts ------------------------------------------------------- 
+# There are 2 conflicts. 
+# 
+# option CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET 
+#   Property LegalValues 
+#   Illegal current value 100000 
+#   Legal values are: -90000 to 90000 
+# 
+# option CYGSEM_LIBC_TIME_CLOCK_WORKING 
+#   Property Requires 
+#   Requires constraint not satisfied: CYGFUN_KERNEL_THREADS_TIMER 
+	  

When editing a configuration you may end up with something +that is invalid. Any problems in the configuration will be reported +in the conflicts section. In this case there are two conflicts. +The option CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET has +been given an illegal value: typically this would be fixed by searching +for the definition of that option later on in the savefile and modifying +the value. The second conflict is more interesting, an unsatisfied requires constraint. +Configuration options are not independent: disabling some functionality +in, say, the kernel, can have an impact elsewhere; in this case +the C library. The various dependencies between the options are +specified by the component developers and checked by the configuration +system. In this case there are two obvious ways in which the conflict could +be resolved: re-enabling CYGFUN_KERNEL_THREADS_TIMER, +or disabling CYGSEM_LIBC_TIME_CLOCK_WORKING. +Both of these options will be listed later on in the file.

Some care has to be taken when modifying configuration options, +to avoid introducing new conflict. For instance it is possible that +there might be other options in the system which have a dependency +on CYGSEM_LIBC_TIME_CLOCK_WORKING, +so disabling that option may not be the best way to resolve the +conflict. Details of all such dependencies are provided in the appropriate +places in the savefile.

It is not absolutely required that a configuration be conflict-free +before generating a build tree and building eCos. It is up to the +developers of each component to decide what would happen if an attempt +is made to build eCos while there are still conflicts. In serious +cases there is likely to be a compile-time failure, or possibly +a link-time failure. In less serious cases the system may build +happily and the application can be linked with the resulting library, +but the component may not quite function as intended - although +it may still be good enough for the specific needs of the application. +It is also possible that everything builds and links, but once in +a while the system will unaccountably crash. Using a configuration +that still has conflicts is done entirely at the user’s +risk.

Data Section

The bulk of the savefile lists the various packages, + components, and options, including their values and the + various dependencies. A number of global options come + first, especially those related to the build process such + as compiler flags. These are followed by the various + packages, and the components and options within those + packages, in order.

Packages, components and options are organized in a + hierarchy. If a particular component is disabled then all + options and sub-components below it will be inactive: any + changes made to these will have no effect. The savefile + contains information about the hierarchy in the form of + comments, for example:

cdl_package CYGPKG_KERNEL ... 
+# > 
+cdl_component CYGPKG_KERNEL_EXCEPTIONS ... 
+# > 
+cdl_option CYGSEM_KERNEL_EXCEPTIONS_DECODE ... 
+cdl_option CYGSEM_KERNEL_EXCEPTIONS_GLOBAL ... 
+# < 
+cdl_component CYGPKG_KERNEL_SCHED ... 
+# > 
+cdl_option CYGSEM_KERNEL_SCHED_MLQUEUE ... 
+cdl_option CYGSEM_KERNEL_SCHED_BITMAP ... 
+# < 
+# < 
+	  

This corresponds to the following hierarchy:

 CYGPKG_KERNEL
+   CYGPKG_KERNEL_EXCEPTIONS
+     CYGSEM_KERNEL_EXCEPTIONS_DECODE
+     CYGSEM_KERNEL_EXCEPTIONS_GLOBAL
+   CYGPKG_KERNEL_SCHED
+     CYGSEM_KERNEL_SCHED_MLQUEUE
+     CYGSEM_KERNEL_SCHED_BITMAP 
+	  

Providing the hierarchy information in this way allows + programs or scripts to analyze the savefile and readily + determine the hierarchy. It could also be used by a + sufficiently powerful editor to support structured editing + of eCos savefiles. The information is not used by the + configuration tools themselves since they obtain the + hierarchy from the original CDL scripts.

Each configurable entity is preceded by a comment, of + the following form:

# Kernel schedulers 
+# doc: ref/ecos-ref/ecos-kernel-overview.html#THE-SCHEDULER 
+# The eCos kernel provides a choice of schedulers. In addition 
+# there are a number of configuration options to control the 
+# detailed behaviour of these schedulers. 
+cdl_component CYGPKG_KERNEL_SCHED {     
+... 
+}; 
+	  

This provides a short textual alias + Kernel schedulers for the + component. If online documentation is available for the + configurable entity then this will come next. Finally + there is a short description of the entity as a whole. All + this information is provided by the component + developers.

Each configurable entity takes the form:

<type> <name> {
+     <data>
+};

Configurable entities may not be active. This can be either +because the parent is disabled or inactive, or because there are +one or more active_if properties. Modifying +the value of an inactive entity has no effect on the configuration, +so this information is provided first:

cdl_option CYGSEM_KERNEL_EXCEPTIONS_DECODE {     
+# This option is not active     
+# The parent CYGPKG_KERNEL_EXCEPTIONS is disabled     
+... 
+};
+ 
+...
+
+cdl_option CYGIMP_IDLE_THREAD_YIELD {     
+# This option is not active     
+# ActiveIf constraint: (CYGNUM_KERNEL_SCHED_PRIORITIES == 1)     
+#     CYGNUM_KERNEL_SCHED_PRIORITIES == 32     
+#   --> 0     
+... 
+}; 

For CYGIMP_IDLE_THREAD_YIELD the +savefile lists the expression that must be satisfied if the option +is to be active, followed by the current value of all entities that +are referenced in the expression, and finally the result of evaluating +that expression.

Not all options are directly modifiable in the savefile. First, +the value of packages (which is the version of that package loaded +into the configuration) cannot be modified here.


cdl_package CYGPKG_KERNEL {     
+# Packages cannot be added or removed, nor can their version be changed,     
+# simply by editing their value. Instead the appropriate configuration     
+# should be used to perform these actions.
+...
+};

The version of a package can be changed using e.g.:

$ ecosconfig version 1.3 CYGPKG_KERNEL

Even though a package’s value cannot be modified +here, it is still important for the savefile to contain the details. +In particular packages may impose constraints on other configurable +entities and may be referenced by other configurable entities. Also +it would be difficult to understand or extract the configuration’s +hierarchy if the packages were not listed in the appropriate places +in the savefile.

Some components (or, conceivably, options) do not have any +associated data. Typically they serve only to introduce another +level in the hierarchy, which can be useful in the context of the +GUI configuration tool.


cdl_component CYGPKG_HAL_COMMON_INTERRUPTS {     
+# There is no associated value. 
+}; 

Other components or options have a calculated value. These +are not user-modifiable, but typically the value will depend on +other options which can be modified. Such calculated options can +be useful when controlling what gets built or what ends up in the +generated configuration header files. A calculated value may also +effect other parts of the configuration, for instance, via a requires constraint.


cdl_option BUFSIZ {     
+# Calculated value: CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO ? CYGNUM_LIBC_STDIO_BUFSIZE : 0     
+#     CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO == 1     
+#     CYGNUM_LIBC_STDIO_BUFSIZE == 256     
+# Current_value: 256 
+}; 

A special type of calculated value is the interface. +The value of an interface is the number of active and enabled options +which implement that interface. Again the value +of an interface cannot be modified directly; only by modifying the +options which implement the interface. However, an interface can +be referenced by other parts of the configuration.

cdl_interface CYGINT_KERNEL_SCHEDULER {     
+# Implemented by CYGSEM_KERNEL_SCHED_MLQUEUE, active, enabled     
+# Implemented by CYGSEM_KERNEL_SCHED_BITMAP, active, disabled     
+# This value cannot be modified here.     
+# Current_value: 1     
+# Requires: 1 == CYGINT_KERNEL_SCHEDULER     
+#     CYGINT_KERNEL_SCHEDULER == 1     
+#   --> 1
# The following properties are affected by this value     
+# interface CYGINT_KERNEL_SCHEDULER     
+#     Requires: 1 == CYGINT_KERNEL_SCHEDULER 
+}; 

If the configurable entity is modifiable then there will be +lines like the following:

 
+cdl_option CYGSEM_KERNEL_SCHED_MLQUEUE {     
+...     
+# Flavor: bool     
+# No user value, uncomment the following line to provide one.     
+# user_value 1     
+# value_source default     
+# Default value: 1     
+... 
+}; 

Configurable entities can have one of four different flavors: +none, bool, data and booldata. Flavor none indicates that there +is no data associated with the entity, typically it just acts as +a placeholder in the overall hierarchy. Flavor bool is the most +common, it is a simple yes-or-no choice. Flavor data is for more +complicated configuration choices, for instance the size of an array +or the name of a device. Flavor booldata is a combination of bool +and data: the option can be enabled or disabled, and there is some +additional data associated with the option as well.

In the above example the user has not modified this particular +option, as indicated by the comment and by the commented-out user_value line. +To disable this option the file should be edited to:


cdl_option CYGSEM_KERNEL_SCHED_MLQUEUE {     
+...     
+# Flavor: bool     
+# No user value, uncomment the following line to provide one.     
+user_value 0     
+# value_source default     
+# Default value: 1     
+... 
+} 

The comment preceding the user_value +0 line can be removed if desired, otherwise it +will be removed automatically the next time the file is read and +updated by the configuration tools.

Much the same process should be used for options with the +data flavor, for example:

 
+cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET {     
+# Flavor: data     
+# No user value, uncomment the following line to provide one.     
+# user_value 3600     
+# value_source default     
+# Default value: 3600     
+# Legal values: -90000 to 90000 
+}; 

can be changed to:


cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET {     
+# Flavor: data     
+user_value 7200     
+# value_source default     
+# Default value: 3600     
+# Legal values: -90000 to 90000 }; 

Note that the original text provides the default value in +the user_value comment, +on the assumption that the desired new value is likely to be similar +to the default value. The value_source comment +does not need to be updated, it will be fixed up if the savefile +is fed back into the configuration system and regenerated.

For options with the booldata flavor, the user_value line +needs take two arguments. The first argument is for the boolean +part, the second for the data part. For example:

 
+cdl_component CYGNUM_LIBM_COMPATIBILITY {     
+# Flavor: booldata     
+# No user value, uncomment the following line to provide one.    
+# user_value 1 POSIX     
+# value_source default     
+# Default value: 1 POSIX     
+# Legal values:  “POSIX” “IEEE” “XOPEN” “SVID”     
+... 
+}; 

could be changed to:

 
+cdl_component CYGNUM_LIBM_COMPATIBILITY {     
+# Flavor: booldata     
+user_value 1 IEEE     
+# value_source default     
+# Default value: 1 POSIX     
+# Legal values:  “POSIX” “IEEE” “XOPEN” “SVID”     
+... 
+}; 

or alternatively, if the whole component should be disabled, +to:

 
+cdl_component CYGNUM_LIBM_COMPATIBILITY {     
+# Flavor: booldata     
+user_value 0 POSIX     
+# value_source default     
+# Default value: 1 POSIX     
+# Legal values:  “POSIX” “IEEE” “XOPEN” “SVID”     
+... 
+}; 

Some options take values that span multiple lines. An example +would be:


cdl_option CYGDAT_UITRON_MEMPOOLVAR_INITIALIZERS {     
+# Flavor: data     
+# No user value, uncomment the following line to provide one.     
+# user_value \     
+# “CYG_UIT_MEMPOOLVAR( vpool1, 2000 ), \\     
+#  CYG_UIT_MEMPOOLVAR( vpool2, 2000 ), \\     
+#  CYG_UIT_MEMPOOLVAR( vpool3, 2000 ),”     
+# value_source default     
+# Default value: \     
+#     “CYG_UIT_MEMPOOLVAR( vpool1, 2000 ), \\     
+#      CYG_UIT_MEMPOOLVAR( vpool2, 2000 ), \\     
+#      CYG_UIT_MEMPOOLVAR( vpool3, 2000 ),” 
+}; 

Setting a user value for this option involves uncommenting +and modifying all relevant lines, for example:


cdl_option CYGDAT_UITRON_MEMPOOLVAR_INITIALIZERS {     
+# Flavor: data     
+user_value \     
+“CYG_UIT_MEMPOOLVAR( vpool1, 4000 ), \\      
+CYG_UIT_MEMPOOLVAR( vpool2, 4000 ),”     
+# value_source default     
+# Default value: \     
+#     “CYG_UIT_MEMPOOLVAR( vpool1, 2000 ), \\     
+#      CYG_UIT_MEMPOOLVAR( vpool2, 2000 ), \\     
+#      CYG_UIT_MEMPOOLVAR( vpool3, 2000 ),” 
+}; 

In such cases appropriate care has to be taken to preserve +Tcl syntax, as discussed below.

The configuration system has the ability to keep track of + several different values for any given option. All options + start off with a default value, in other words their value + source is set to default. If a + configuration involves conflicts and the configuration + system’s inference engine is allowed to resolve these + automatically then it may provide an + inferred value instead, for + example:


cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT {     
+# Flavor: bool     
+# No user value, uncomment the following line to provide one.     
+# user_value 1     
+# The inferred value should not be edited directly.     
+inferred_value 0     
+# value_source inferred     
+# Default value: 1     
+... 
+}; 

Inferred values are calculated by the configuration system +and should not be edited by the user. If the inferred value is not +correct then a user value should be substituted instead:


cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT {     
+# Flavor: bool     
+user_value 1     
+# The inferred value should not be edited directly.     
+inferred_value 0     
+# value_source inferred     
+# Default value: 1     
+... 
+}; 

The inference engine will not override a user value with an +inferred one. Making a change like this may well re-introduce a +conflict, since the inferred value was only calculated to resolve +a conflict. Another run of the inference engine may find a different +and more acceptable way of resolving the conflict, but this is not guaranteed +and it may be up to the user to examine the various dependencies +and work out an acceptable solution.

Inferred values are listed in the savefile because the exact +inferred value may depend on the order in which changes were made +and conflicts were resolved. If the inferred values were absent +then it is possible that reloading a savefile would not exactly +restore the configuration. Default values on the other hand are +entirely deterministic so there is no actual need for the values +to be listed in the savefile. However, the default value can be +very useful information so it is provided in a comment.

Occasionally the user will want to do some experimentation, +and temporarily switch an option from a user value back to a default +or inferred one to see what the effect would be. This could be achieved +by simply commenting out the user value. For instance, if the current +savefile contains:

 
+cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT {     
+# Flavor: bool     
+user_value 1     
+# The inferred value should not be edited directly.     
+inferred_value 0     
+# value_source user     
+# Default value: 1     
+... 
+}; 

then the inferred value could be restored by commenting out +or removing the user_value line:

 
+cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT {     
+# Flavor: bool     
+# user_value 1     
+# The inferred value should not be edited directly.     
+inferred_value 0     
+# value_source user     
+# Default value: 1     
+... 
+}; 

This is fine for simple values. However if the value is complicated +then there is a problem: commenting out the user_value line +or lines means that the user value becomes invisible to the configuration system, +so if the savefile is loaded and then regenerated the information +will be lost. An alternative approach is to keep the user_value but +explicitly set the value_source line, +for example:


cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT {     
+# Flavor: bool     
+user_value 1     
+# The inferred value should not be edited directly.     
+inferred_value 0     
+value_source inferred     
+# Default value: 1     
+... 
+}; 

In this case the configuration system will use the inferred +value for the purposes of dependency analysis etc., even though +a user value is present. To restore the user value the value_source line +can be commented out again. If there is no explicit value_source then +the configuration system will just use the highest priority one: +the user value if it exists; otherwise the inferred value if it +exists; otherwise the default value which always exists.

The default value for an option can be a simple constant, +or it can be an expression involving other options. In the latter +case the expression will be listed, together with the values for +all options referenced in the expression and the current result +of evaluating that expression. This is for informational purposes +only, the default value is always recalculated deterministically +when loading in a savefile.


cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX {     
+# Flavor: data     
+# No user value, uncomment the following line to provide one.     
+# user_value arm-elf     
+# value_source default     
+# Default value:  CYGHWR_THUMB ? “thumb-elf” : “arm-elf”     
+#     CYGHWR_THUMB == 0     
+#   --> arm-elf 
+}; 

For options with the data or booldata flavor, there are likely +to be constraints on the possible values. If the value is supposed +to be a number in a given range and a user value of “hello +world” is provided instead then there +are likely to be compile-time failures. Component developers can +specify constraints on the legal values, and these will be listed +in the savefile.

 
+cdl_option X_TLOSS {     
+# Flavor: data     
+# No user value, uncomment the following line to provide one.     
+# user_value 1.41484755040569E+16     
+# value_source default     
+# Default value: 1.41484755040569E+16     
+# Legal values: 1 to 1e308 
+};
cdl_component CYGNUM_LIBM_COMPATIBILITY {     
+# Flavor: booldata     
+# No user value, uncomment the following line to provide one.     
+# user_value 1 POSIX     
+# value_source default     
+# Default value: 1 POSIX     
+# Legal values:  “POSIX” “IEEE” “XOPEN” “SVID”     
+... 
+};

In some cases the legal values list may be an expression involving +other options. If so then the current values of the referenced options +will be listed, together with the result of evaluating the list +expression, just as for default value expressions.

If an illegal value is provided then this will result in a +conflict, listed in the conflicts section of the savefile. For more +complicated options a simple legal values list is not sufficient +to allow the current value to be validated, and the configuration +system will be unable to flag conflicts. This issue will be addressed in +future releases of the configuration system.

Following the value-related fields for a given option, any requires constraints belonging +to this option will be listed. These constraints are only effective +if the option is active and, for bool and booldata flavors, enabled. +If some aspect of eCos functionality is inactive or disabled then +it cannot impose any constraints on the rest of the system. As usual, +the full expression will be listed followed by the current values +of all options that are referenced and the result of evaluating +the expression:


cdl_option CYGSEM_LIBC_TIME_TIME_WORKING {     
+...     
+# Requires: CYGPKG_DEVICES_WALLCLOCK     
+#     CYGPKG_DEVICES_WALLCLOCK == current     
+#   --> 1 
+};

When modifying the value of an option it is useful to know +not only what constraints the option imposes on the rest of the +system but also what other options in the system depend in some +way on this one. The savefile provides this information:

cdl_option CYGFUN_KERNEL_THREADS_TIMER {     
+...     
+# The following properties are affected by this value     
+# option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT     
+#     Requires: CYGFUN_KERNEL_THREADS_TIMER     
+# option CYGIMP_UITRON_STRICT_CONFORMANCE     
+#     Requires: CYGFUN_KERNEL_THREADS_TIMER     
+# option CYGSEM_LIBC_TIME_CLOCK_WORKING     
+#     Requires: CYGFUN_KERNEL_THREADS_TIMER 
+}; 

Tcl Syntax

eCos savefiles are implemented as Tcl scripts, and are read +in by running the data through a standard Tcl interpreter that has +been extended with a small number of additional commands such as cdl_option and cdl_configuration. +In many cases this is an implementation detail that can be safely +ignored while editing a savefile: simply replacing a 1 with +a 0 to disable some functionality +is not going to affect whether or not the savefile is still a valid +Tcl script and can be processed by a Tcl interpreter. However, there +are more complicated cases where an understanding of Tcl syntax +is at least desirable, for example:


cdl_option CYGDAT_UITRON_MEMPOOLVAR_EXTERNS {
+     # Flavor: data
+     user_value \
+      “static char vpool1\[ 2000 \], \\
+      vpool2\[ 2000 \], \\
+       vpool3\[ 2000 \];”     
+# value_source default     
+# Default value: \
+     #     “static char vpool1\[ 2000 \], \\
+     #      vpool2\[ 2000 \], \\
+    #      vpool3\[ 2000 \];” 
+};

The backslash at the end of the user_value line +is processed by the Tcl interpreter as a line continuation character. +The quote marks around the user data are also interpreted by the +Tcl interpreter and serve to turn the entire data field into a single +argument. The backslashes preceding the opening and closing square +brackets prevent the Tcl interpreter from treating these characters +specially, otherwise there would be an attempt at command +substitution as described below. The double backslashes +at the end of each line of the data will be turned into a single +backslash by the Tcl interpreter, rather than escaping the newline +character, so that the actual data seen by the configuration system +is:


static char vpool1[ 2000 ], \
+      vpool2[ 2000 ], \
+      vpool3[ 2000 ];

This is of course the data that should end up in the µITRON +configuration header file. The opening and closing braces surrounding +the entire body of the option data are also significant and cause +this body to be passed as a single argument to the cdl_option command. +The closing semicolon is optional in this example, but provides +a small amount of additional robustness if the savefile is edited +such that it is no longer a valid Tcl script. If the data contained +any $ characters then +these would have to be treated specially as well, via a backslash escape.

In spite of what all the above might seem to suggest, Tcl +is actually a very simple yet powerful scripting language: the syntax +is defined by just eleven rules. On occasion this simplicity means +that Tcl’s behaviour is subtly different from other languages, +which can confuse newcomers.

When the Tcl interpreter is passed some data such as puts +Hello, it splits this data into a command and its +arguments. The command will be terminated by a newline or by a semicolon, +unless one of the quoting mechanisms is used. The command and each +of its arguments are separated by white space. So in the following +example:

puts Hello 
+set x 42 

will result in two separate commands being executed. The first +command is puts and is passed a +single argument, Hello. The second +command is set and is passed two +arguments, x and 42. +The intervening newline character serves to terminate the first +command, and a semi-colon separator could be used instead:

puts Hello;set x 42

Any white space surrounding the semicolon is just ignored +because it does not serve to separate arguments.

Now consider the following:

set x Hello world

This is not valid Tcl. It is an attempt to invoke the set command +with three arguments: x, Hello, +and world. The set only +takes two arguments, a variable name and a value, so it is necessary +to combine the data into a single argument by quoting:

set x “Hello world”

When the Tcl interpreter encounters the first quote character +it treats all subsequent data up to but not including the closing +quote as part of the current argument. The quote marks are removed +by the interpreter, so the second argument passed to the set command +is just Hello world without the +quote characters. This can be significant in the context of eCos savefiles. +For instance, consider the following configuration option:


cdl_option CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE {     
+# Flavor: data     
+# No user value, uncomment the following line to provide one.     
+# user_value “\”/dev/ttydiag\””     
+# value_source default     
+# Default value: “\”/dev/ttydiag\”” 
+}; 

The desired value of the configuration option should be a +valid C string, complete with quote characters. If the savefile +was edited to:


cdl_option CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE {     
+# Flavor: data     
+user_value “/dev/ttydiag”     
+# value_source default     
+# Default value: “\”/dev/ttydiag\”” 
+}; 

then the Tcl interpreter would remove the quote marks when +the savefile is read back in, so the option’s value would +not have any quote marks and would not be a valid C string. The +configuration system is not yet able to perform the required validation +so the following #define would +be generated in the configuration header file:

#define CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE /dev/ttydiag 

This is likely to cause a compile-time failure when building +eCos.

A quoted argument continues until the closing quote character +is encountered, which means that it can span multiple lines. This +can also be encountered in eCos savefiles, for instance, in the CYGDAT_UITRON_MEMPOOLVAR_EXTERNS example +mentioned earlier. Newline or semicolon characters do not terminate +the current command in such cases.

The Tcl interpreter supports much the same forms of backslash +substitution as other common programming languages. Some backslash +sequences such as \n will +be replaced by the appropriate character. The sequence \\ will +be replaced by a single backslash. A backslash at the very end of +a line will cause that backslash, the newline character, and any +white space at the start of the next line to be replaced by a single +space. Hence the following two Tcl commands are equivalent:

puts  “Hello\nworld\n” 
+puts \ 
+“Hello 
+world 
+“

In addition to quote and backslash characters, the Tcl interpreter +treats square brackets, the $ character, +and braces specially. Square brackets are used for command substitution, +for example:

puts “The answer is [expr 6 * 9]”

When the Tcl interpreter encounters the square brackets it +will treat the contents as another command that should be executed +first, and the result of executing that is used when continuing +to process the script. In this case the Tcl interpreter will execute +the command expr 6 * 9, +yielding a result of 54, and then the Tcl interpreter will execute +puts “The answer is 54”. It should be noted that +the interpreter contains only one level of substitution: if the +result of performing command substitution performs further special +characters such as square brackets then these will not be treated +specially.

Command line substitution is very unlikely to prove useful +in the context of an eCos savefile, but it is part of the Tcl language +and hence cannot be easily suppressed while reading in a savefile. +As a result care has to be taken when savefile data involves square +brackets. Consider the following:


cdl_option CYGDAT_UITRON_MEMPOOLFIXED_EXTERNS {
+     ...
+     user_value \ 
+“static char fpool1[ 2000 ], 
+fpool2[ 2000 ];”
+     ... 
+};

The Tcl interpreter will interpret the square brackets as +an attempt at command substitution and hence it will attempt to +execute the command 2000 with no +arguments. No such command is defined by the Tcl language or by +the savefile-related extensions provided by the configuration system, +so this will result in an error when an attempt is made to read +back the savefile. Instead it is necessary to backslash-escape the +square brackets and thus suppress command substitution:


cdl_option CYGDAT_UITRON_MEMPOOLFIXED_EXTERNS {
+     ...
+     user_value \ 
+“static char fpool1\[ 2000 \], 
+fpool2\[ 2000 \];”
+     ... 
+}; 

Similarly the $ character +is used in Tcl scripts to perform variable substitution:

set x [expr 6 * 9] 
+puts “The answer is $x” 

Variable substitution, like command substitution, is very +unlikely to prove useful in the context of an eCos savefile. Should +it be necessary to have a $ character +in configuration data then again a backslash escape needs to be +used.

cdl_option FOODAT_MONITOR_PROMPT {
+     ...
+     user_value “\$ “
+     ... 
+};

Braces are used to collect a sequence of characters into a +single argument, just like quotes. The difference is that variable, +command and backslash substitution do not occur inside braces (with +the sole exception of backslash substitution at the end of a line). +So, for example, the CYGDAT_UITRON_MEMPOOL_EXTERNFIXED_EXTERNS value +could be written as:

cdl_option CYGDAT_UITRON_MEMPOOLFIXED_EXTERNS {
+     ...
+     user_value \ 
+{static char fpool1[ 2000 ], 
+fpool2[ 2000 ];}
+     ... 
+};

The configuration system does not use this when generating +savefiles because for simple edits of a savefile by inexperienced +users the use of brace characters is likely to be a little bit more +confusing than the use of quotes.

At this stage it is worth noting that the basic format of +each configuration option in the savefile makes use of braces:

cdl_option <name> {
+     ... 
+};

The configuration system extends the Tcl language with a small +number of additional commands such as cdl_option. +These commands take two arguments, a name and a body, where the +body consists of all the text between the braces. First a check +is made that the specified option is actually present in the configuration. +Then the body is executed in a recursive invocation of the Tcl interpreter, +this time with additional commands such as user_value and value_source. +If, after editing, the braces are not correctly matched up then +the savefile will no longer be a valid Tcl script and errors will +be reported when the savefile is loaded again.

Comments in Tcl scripts are introduced by a hash character #. +However, a hash character only introduces a comment if it occurs +where a command is expected. Consider the following:

# This is a comment 
+puts “Hello” # world 

The first line is a valid comment, since the hash character +occurs right at the start where a command name is expected. The +second line does not contain a comment. Instead it is an attempt +to invoke the puts command with +three arguments: Hello, # and world. +These are not valid arguments for the puts command +so an error will be raised.

If the second line was rewritten as:

puts “Hello”; # world

then this is a valid Tcl script. The semicolon identifies +the end of the current command, so the hash character occurs at +a point where the next command would start and hence it is interpreted +as the start of a comment.

This handling of comments can lead to subtle behaviour. Consider +the following:

cdl_option WHATEVER {
+     # This is a comment }
+     user_value 42
+     ... 
+}

Consider the way the Tcl interpreter processes this. The command +name and the first argument do not pose any special difficulties. +The opening brace is interpreted as the start of the next argument, +which continues until a closing brace is encountered. In this case +the closing brace occurs on the second line, so the second argument +passed to cdl_option is \n # This is a comment . This second argument +is processed in a recursive invocation of the Tcl interpreter and +does not contain any commands, just a comment. Toplevel savefile +processing then resumes, and the next command that is encountered +is user_value. Since the +relevant savefile code is not currently processing a configuration +option this is an error. Later on the Tcl interpreter would encounter +a closing brace by itself, which is also an error. Fortunately this +sequence of events is very unlikely to occur when editing generated +savefiles.

This should be sufficient information about Tcl to allow for +safe editing of eCos savefiles. Further information is available +from a wide variety of sources, for example the book Tcl +and the Tk Toolkit by John K Ousterhout.


PrevHomeNext
Fine-grained ConfigurationUpEditing the Sources
\ No newline at end of file diff --git a/doc/html/user-guide/editing-the-sources.html b/doc/html/user-guide/editing-the-sources.html new file mode 100644 index 00000000..80e583a7 --- /dev/null +++ b/doc/html/user-guide/editing-the-sources.html @@ -0,0 +1,277 @@ + + + + + + + + +Editing the Sources +
eCos User Guide
PrevChapter 28. Manual ConfigurationNext

Editing the Sources

For many users, controlling the packages and + manipulating the available configuration options will be + sufficient to create an embedded operating system that meets + the application's requirements. However, since eCos is + shipped entirely in source form, it is possible to go + further when necessary: you can edit the eCos sources themselves. This requires some + understanding of the way the eCos build system works. +

The most obvious place to edit the source code is directly +in the component repository. For example, you could +edit the file kernel/<version>/src/sync/mutex.cxx +to change the way kernel mutexes work, or possibly just to add some +extra diagnostics or assertions. Once the file has been edited, +it is possible to invoke make at +the top level of the build tree and the target library will be rebuilt +as required. A small optimization is possible: the build tree is +largely a mirror of the component repository, so it too will contain +a subdirectory kernel/<version>; +if make is invoked in this directory +then it will only check for changes to the kernel sources, which +is a bit more efficient than checking for changes throughout the component +repository.

Editing a file in the component repository is fine if this +tree is used for only one eCos configuration. If the repository +is used for several different configurations, however, and especially +if it is shared by multiple users, then making what may be experimental +changes to the master sources would be a bad idea. The build system provides +an alternative. It is possible to make a copy of the file in the +build tree, in other words copy mutex.cxx from +the kernel/<version>/src/sync directory +in the component repository to kernel/<version>/src/sync in +the build tree, and edit the file in the build tree. When make is +invoked it will pick up local copies of any of the sources in preference +to the master versions in the component repository. Once you have +finished modifying the eCos sources you can install the final version +back in the component repository. If the changes were temporary +in nature and only served to aid the debugging process, then you +can discard the modified version of the sources.

The situation is slightly more complicated for the header +files that a package may export, such as the C library’s stdio.h header +file, which can be found in the directory language/c/libc/<version>/include. +If such a header file is changed, either directly in the component +repository or after copying it to the build tree, then make must +be invoked at the top level of the build tree. In cases like this +it is not safe to rebuild just the C library because other packages +may depend on the contents of stdio.h.


PrevHomeNext
Editing an eCos SavefileUpModifying the Memory Layout
\ No newline at end of file diff --git a/doc/html/user-guide/fine-grained-configuration.html b/doc/html/user-guide/fine-grained-configuration.html new file mode 100644 index 00000000..77f1b2b9 --- /dev/null +++ b/doc/html/user-guide/fine-grained-configuration.html @@ -0,0 +1,249 @@ + + + + + + + + +Fine-grained Configuration +
eCos User Guide
PrevChapter 28. Manual ConfigurationNext

Fine-grained Configuration

ecosconfig only provides + coarse-grained control over the configuration: the hardware, + the template and the packages that should be built. Unlike + the Configuration Tool, + ecosconfig does not provide + any facilities for manipulating finer-grained configuration options such as how many + priority levels the scheduler should support. There are + hundreds of these options, and manipulating them by means of + command line arguments would not be sensible.

In the current system fine-grained configuration options may +be manipulated by manual editing of the configuration file. When +a file has been edited in this way, the ecosconfig tool +should be used to check the configuration for any conflicts which +may have been introduced:

$ ecosconfig check

The check command will list +all conflicts and will also rewrite the configuration file, propagating +any changes which affect other options. The user may choose to resolve +the conflicts either by re-editing the configuration file manually +or by invoking the inference engine using the resolve command:

$ ecosconfig resolve

The resolve command will +list all conflicts which can be resolved and save the resulting changes +to the configuration.

It is necessary to regenerate the build tree and header files +following any changes to the configuration before rebuilding eCos:

$ ecosconfig tree

All the configuration options and their descriptions are listed +in the eCos Reference Manual.


PrevHomeNext
Coarse-grained ConfigurationUpEditing an eCos Savefile
\ No newline at end of file diff --git a/doc/html/user-guide/gnu-general-public-license.html b/doc/html/user-guide/gnu-general-public-license.html new file mode 100644 index 00000000..0cecafb2 --- /dev/null +++ b/doc/html/user-guide/gnu-general-public-license.html @@ -0,0 +1,478 @@ + + + + + + + + +GNU General Public License +
eCos User Guide
Prev 

Appendix C. GNU General Public License

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+     GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+     NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+      END OF TERMS AND CONDITIONS
+
+     How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.


PrevHome 
Board: NEC V850 Cosmo Evaluation BoardUp 
\ No newline at end of file diff --git a/doc/html/user-guide/install-tree.html b/doc/html/user-guide/install-tree.html new file mode 100644 index 00000000..e31791cf --- /dev/null +++ b/doc/html/user-guide/install-tree.html @@ -0,0 +1,316 @@ + + + + + + + + +Install Tree +
eCos User Guide
PrevChapter 25. The Component Repository and Working DirectoriesNext

Install Tree

The install tree is the location + for all files needed for application development. The + libtarget.a library, which contains the + custom-built eCos kernel and other components, is placed + in the install tree, along with all packages’ public + header files. If you build the tests, the test executable + programs will also be placed in the install + tree.

By default, the install tree is created by + ecosconfig in a subdirectory of the build + tree called install. This can be + modified with the --prefix option (see + Chapter 28). +


PrevHomeNext
Build TreeUpApplication Build Tree
\ No newline at end of file diff --git a/doc/html/user-guide/kernel-instrumentation.html b/doc/html/user-guide/kernel-instrumentation.html new file mode 100644 index 00000000..e2552129 --- /dev/null +++ b/doc/html/user-guide/kernel-instrumentation.html @@ -0,0 +1,513 @@ + + + + + + + + +Kernel Instrumentation +
eCos User Guide
PrevChapter 27. Debugging TechniquesNext

Kernel Instrumentation

Instrument buffers can be used to + find out how many events of a given type happened in the + kernel during execution of a program.

You can monitor a class of several types of events, or + you can just look at individual events.

Examples of events that can be + monitored are: +

Examples of fine-grained scheduler event types are:

Information about the events is stored in an + event record. The structure that + defines this record has type struct + Instrument_Record:

The list of records is stored in an array called instrument_buffer +which you can let the kernel provide or you can provide yourself +by setting the configuration option CYGVAR_KERNEL_INSTRUMENT_EXTERNAL_BUFFER.

To write a program that examines the instrumentation + buffers:

  1. Enable instrumentation buffers in the eCos kernel configuration. +The component macro is CYGPKG_KERNEL_INSTRUMENT.

  2. To allocate the buffers yourself, enable the configuration +option CYGVAR_KERNEL_INSTRUMENT_EXTERNAL_BUFFER.

  3. Include the header file +cyg/kernel/instrmnt.h +. +
    #include <cyg/kernel/instrmnt.h>

  4. The Instrumentation_Record structure +is not published in the kernel header file. In the future there +will be a cleaner mechanism to access it, but for now you should +paste into your code in the following lines: +

    struct Instrument_Record
    +{
    + CYG_WORD16 type; // record type
    + CYG_WORD16 thread; // current thread id
    + CYG_WORD timestamp; // 32 bit timestamp
    + CYG_WORD arg1; // first arg
    + CYG_WORD arg2; // second arg
    +};
  5. Enable the events you want to record using +cyg_instrument_enable() +, and disable them later. Look at +cyg/kernel/instrmnt.h + and the examples below to see what events can be enabled.

  6. Place the code you want to debug between the matching +functions +cyg_instrument_enable() + and +cyg_instrument_disable() +.

  7. Examine the buffer. For now you need to look at the data +in there (the example program below shows how to do that), and future +versions of eCos will include a host-side tool to help you understand +the data.

Example 27-2. Using instrument buffers

This program is also provided in the + examples directory. +

/* this is a program which uses eCos instrumentation buffers; it needs
+ to be linked with a kernel which was compiled with support for
+ instrumentation */
+
+#include <stdio.h>
+#include <pkgconf/kernel.h>
+#include <cyg/kernel/instrmnt.h>
+#include <cyg/kernel/kapi.h>
+
+#ifndef CYGVAR_KERNEL_INSTRUMENT_EXTERNAL_BUFFER
+# error You must configure eCos with CYGVAR_KERNEL_INSTRUMENT_EXTERNAL_BUFFER
+#endif
+
+struct Instrument_Record
+{
+ CYG_WORD16 type; // record type
+ CYG_WORD16 thread; // current thread id
+ CYG_WORD timestamp; // 32 bit timestamp
+ CYG_WORD arg1; // first arg
+ CYG_WORD arg2; // second arg
+};
+
+struct Instrument_Record instrument_buffer[20];
+cyg_uint32 instrument_buffer_size = 20;
+
+int main(void)
+{
+ int i;
+
+ cyg_instrument_enable(CYG_INSTRUMENT_CLASS_CLOCK, 0);
+ cyg_instrument_enable(CYG_INSTRUMENT_CLASS_THREAD, 0);
+ cyg_instrument_enable(CYG_INSTRUMENT_CLASS_ALARM, 0);
+
+ printf("Program to play with instrumentation buffer\n");
+
+ cyg_thread_delay(2);
+
+ cyg_instrument_disable(CYG_INSTRUMENT_CLASS_CLOCK, 0);
+ cyg_instrument_disable(CYG_INSTRUMENT_CLASS_THREAD, 0);
+ cyg_instrument_disable(CYG_INSTRUMENT_CLASS_ALARM, 0);
+
+ for (i = 0; i < instrument_buffer_size; ++i) {
+ printf("Record %02d: type 0x%04x, thread %d, ",
+	i, instrument_buffer[i].type, instrument_buffer[i].thread);
+ printf("time %5d, arg1 0x%08x, arg2 0x%08x\n",
+	instrument_buffer[i].timestamp, instrument_buffer[i].arg1,
+	instrument_buffer[i].arg2);
+ }
+ return 0;
+}

Here is how you could compile and run this program in the examples directory, +using (for example) the MN10300 simulator target:

$ make XCC=mn10300-elf-gcc INSTALL_DIR=/tmp/ecos-work-mn10300/install instrument-test
+mn10300-elf-gcc -c -o instrument-test.o -g -Wall -I/tmp/ecos-work-mn10300/install/include \
+        -ffunction-sections -fdata-sections instrument-test.c
+mn10300-elf-gcc -nostartfiles -L/tmp/ecos-work-mn10300/install/lib -W1,--gc-sections -o \
+        instrument-test instrument-test.o -Ttarget.ld -nostdlib
+$ mn10300-elf-run --board=stdeval1 instrument-test

Example 27-3. Instrument buffer output

Here is the output of the + instrument-test program. Notice that in + little over 2 seconds, and with very little activity, and + with few event types enabled, it gathered 17 records. In + larger programs it will be necessary to select very few + event types for debugging.

Program to play with instrumentation buffer
+Record 00: type 0x0207, thread 2, time  6057, arg1 0x48001cd8, arg2 0x00000002
+Record 01: type 0x0202, thread 2, time  6153, arg1 0x48001cd8, arg2 0x00000000
+Record 02: type 0x0904, thread 2, time  6358, arg1 0x48001d24, arg2 0x00000000
+Record 03: type 0x0905, thread 2, time  6424, arg1 0x00000002, arg2 0x00000000
+Record 04: type 0x0906, thread 2, time  6490, arg1 0x00000000, arg2 0x00000000
+Record 05: type 0x0901, thread 2, time  6608, arg1 0x48009d74, arg2 0x48001d24
+Record 06: type 0x0201, thread 2, time  6804, arg1 0x48001cd8, arg2 0x480013e0
+Record 07: type 0x0803, thread 1, time    94, arg1 0x00000000, arg2 0x00000000
+Record 08: type 0x0801, thread 1, time   361, arg1 0x00000000, arg2 0x00000000
+Record 09: type 0x0802, thread 1, time   548, arg1 0x00000001, arg2 0x00000000
+Record 10: type 0x0803, thread 1, time    94, arg1 0x00000000, arg2 0x00000000
+Record 11: type 0x0801, thread 1, time   361, arg1 0x00000001, arg2 0x00000000
+Record 12: type 0x0903, thread 1, time   513, arg1 0x48009d74, arg2 0x48001d24
+Record 13: type 0x0208, thread 1, time   588, arg1 0x00000000, arg2 0x00000000
+Record 14: type 0x0203, thread 1, time   697, arg1 0x48001cd8, arg2 0x480013e0
+Record 15: type 0x0802, thread 1, time   946, arg1 0x00000002, arg2 0x00000000
+Record 16: type 0x0201, thread 1, time  1083, arg1 0x480013e0, arg2 0x48001cd8
+Record 17: type 0x0000, thread 0, time     0, arg1 0x00000000, arg2 0x00000000
+Record 18: type 0x0000, thread 0, time     0, arg1 0x00000000, arg2 0x00000000
+Record 19: type 0x0000, thread 0, time     0, arg1 0x00000000, arg2 0x00000000

PrevHomeNext
Debugging TechniquesUpConfiguration and the Package Repository
\ No newline at end of file diff --git a/doc/html/user-guide/managing-package-repository.html b/doc/html/user-guide/managing-package-repository.html new file mode 100644 index 00000000..ee9351ff --- /dev/null +++ b/doc/html/user-guide/managing-package-repository.html @@ -0,0 +1,483 @@ + + + + + + + + +Managing the Package Repository +
eCos User Guide
PrevNext

Chapter 29. Managing the Package Repository

A source distribution of eCos consists of a number of + packages, such as the kernel, the C library, and the + µITRON subsystems. These are + individually versioned in the tree structure of the source + code, to support distribution on a per-package basis and to + support third party packages whose versioning systems might be + different. The eCos Package + Administration Tool is used to manage the + installation and removal of packages from a variety of sources + with potentially multiple versions.

The presence of the version information in the source tree + structure might be a hindrance to the use of a separate source + control system such as CVS or + SourceSafe. To work + in this way, you can rename all the version components to some + common name (such as “current”) thus unifying the + structure of source trees from distinct eCos releases.

The eCos build system will treat any such name as just another +version of the package(s), and support building in exactly the same +way. However, performing this rename invalidates any existing build +trees that referred to the versioned source tree, so do the rename +first, before any other work, and do a complete rebuild afterwards.

Package Installation

Package installation and removal is performed using the + eCos Package Administration Tool. This + tool is a Tcl script named + ecosadmin.tcl which allows + the user to add new eCos packages and new versions of + existing packages to an eCos repository. Such packages must + be distributed as a single file in the eCos package + distribution format. Unwanted packages may also be removed + from the repository using this tool. A graphical version of + the tool is provided as part of the + eCos Configuration Tool.

Using the Administration Tool

The graphical +version of the eCos Package +Administration Tool, provided as part of the +eCos Configuration +Tool, provides functions equivalent to the command-line +version for those who prefer a Windows-based interface.

It may be invoked in one of two ways:

The main window of the tool displays the packages which are +currently installed in the form of a tree. The installed versions +of each package may be examined by expanding the tree.

Packages may be added to the eCos repository by clicking on +the Add button. The eCos package distribution +file to be added is then selected via a File Open dialog +box.

Packages may be removed by selecting a package in the tree +and then clicking on the Remove button. If +a package node is selected, all versions of the selected package +will be removed. If a package version node is selected, only the +selected version of the package will be removed.

Using the command line

The ecosadmin.tcl + script is located in the base of the eCos repository. Use + a command of the following form under versions of + UNIX:

$ tclsh ecosadmin.tcl <command>

Under Windows, a command of the following form may be used +at the Cygwin command line prompt:

$ cygtclsh80 ecosadmin.tcl <command>

The following commands are available:

Note that is is possible to remove critical packages + such as the common HAL package using this tool. Users + should take care to avoid such errors since core eCos + packages may only be re-installed in the context of a + complete re-installation of eCos.


PrevHomeNext
Modifying the Memory LayoutUpPackage Structure
\ No newline at end of file diff --git a/doc/html/user-guide/manual-configuration.html b/doc/html/user-guide/manual-configuration.html new file mode 100644 index 00000000..208de8cc --- /dev/null +++ b/doc/html/user-guide/manual-configuration.html @@ -0,0 +1,279 @@ + + + + + + + + +Manual Configuration +
eCos User Guide
PrevNext

Chapter 28. Manual Configuration

eCos developers will generally use the graphical + Configuration Tool for configuring an eCos system and building + the target library. However, some user prefer to use command + line tools. These command line tools can also be used for batch + operations on all platforms, for example as part of a nightly + rebuild and testing procedure. +

In the current release of the system the command line tools + do not provide exactly the same functionality as the graphical + tool. Most importantly, there is no facility to resolve + configuration conflicts interactively.

The eCos configuration system, both graphical and command + line tools, are under constant development and enhancement. + Developers should note that the procedures described may change + considerably in future releases.

Directory Tree Structure

When building eCos there are three main directory trees to + consider: the source tree, the build tree, and the install + tree.

The source tree, also known as the component repository, + is read-only. It is possible to use a single component + repository for any number of different configurations, and + it is also possible to share a component repository between + multiple users by putting it on a network drive.

The build tree contains everything that is specific to a + particular configuration, including header and other files + that contain configuration data, and the object files that + result from compiling the system sources for this + configuration.

The install tree is usually located in the install subdirectory +of the build tree. Once an eCos system has been built, the install +tree contains all the files needed for application development including +the header files and the target library. By making copies of the +install tree after a build it is possible to separate application +development and system configuration, which may be desirable for +some organizations.


PrevHomeNext
Configuration and the Package RepositoryUpCreating the Build Tree
\ No newline at end of file diff --git a/doc/html/user-guide/methods-of-displaying-html-help.html b/doc/html/user-guide/methods-of-displaying-html-help.html new file mode 100644 index 00000000..0037afac --- /dev/null +++ b/doc/html/user-guide/methods-of-displaying-html-help.html @@ -0,0 +1,230 @@ + + + + + + + + +Methods of Displaying HTML Help +
eCos User Guide
PrevChapter 16. Getting HelpNext

Methods of Displaying HTML Help

  1. Using the internal help system. This will show an internal viewer similar to Microsoft HTML Help, with a contents +hierarchy on the left and HTML pages on the right; see Figure 16-1. The index is regenerated for each repository. If the documentation in +the repository has changed but the contents does not reflect this, please use the Tools Regenerate Help Index menu +item.

  2. Using the default HTML browser. On Unix, you will need a .mailcap entry similar to this:

    text/html; netscape -no-about-splash %s

  3. Using the specified browser.

If you wish, you may choose to have HTML Help displayed +in a browser of your choice. To do this, select View->Settings and +use the controls in the View Documentation group to select the replacement browser. +Note that the Navigation facilities of the built-in HTML +Help system will be unavailable if you choose this method +of displaying help.


PrevHomeNext
Context-sensitive Help for Configuration ItemsUpCustomization
\ No newline at end of file diff --git a/doc/html/user-guide/modifying-the-memory-layout.html b/doc/html/user-guide/modifying-the-memory-layout.html new file mode 100644 index 00000000..6b4d4e76 --- /dev/null +++ b/doc/html/user-guide/modifying-the-memory-layout.html @@ -0,0 +1,416 @@ + + + + + + + + +Modifying the Memory Layout +
eCos User Guide
PrevChapter 28. Manual ConfigurationNext

Modifying the Memory Layout

Each eCos platform package is supplied with linker script +fragments which describe the location of memory regions on the evaluation +board and the location of memory sections within these regions. +The correct linker script fragment is selected and included in the +eCos linker script target.ld when +eCos is built.

It is not necessary to modify the default memory +layouts in order to start development with eCos. However, it will +be necessary to edit a linker script fragment when the memory map +of the evaluation board is changed. For example, if additional memory +is added, the linker must be notified that the new memory is available +for use. As a minimum, this would involve modifying the length of +the corresponding memory region. Where the available memory is non-contiguous, +it may be necessary to declare a new memory region and reassign +certain linker output sections to the new region.

Linker script fragments and memory layout header files should +be edited within the eCos install tree. They are +located at include/pkgconf/mlt_*.*. +Where multiple start-up types are in use, it will be necessary to +edit multiple linker script fragments and header files. The information +provided in the header file and the corresponding linker script +fragment must always match. A typical linker script fragment is +shown below:

The file consists of two blocks, the MEMORY block +contains lines describing the address (ORIGIN) +and the size (LENGTH) of each memory +region. The MEMORY block is followed +by the SECTIONS block which contains +lines describing each of the linker output sections. Each section +is represented by a macro call. The arguments of these macros are +ordered as follows:

  1. The memory region in which the section will finally + reside.

  2. The final address ( +VMA +) of the section. This is expressed using one of the following forms:

  3. The initial address (LMA) + of the section. This is expressed using one of the + following forms:

In order to maintain compatibility with linker script + fragments and header files exported by the + eCos Configuration Tool, the use + of other expressions within these files is not + recommended.

Note that the names of the linker output sections will vary +between target architectures. A description of these sections can +be found in the specific GCC documentation for +your architecture.


PrevHomeNext
Editing the SourcesUpManaging the Package Repository
\ No newline at end of file diff --git a/doc/html/user-guide/notation-and-conventions.html b/doc/html/user-guide/notation-and-conventions.html new file mode 100644 index 00000000..219463dc --- /dev/null +++ b/doc/html/user-guide/notation-and-conventions.html @@ -0,0 +1,259 @@ + + + + + + + + +Notation and Conventions +
eCos User Guide
PrevNext

Chapter 4. Notation and Conventions

Since there are many supported target architectures, notation +conventions are used in this manual to avoid repeating instructions +that are very similar.

GDB and GCC Command Notation

Cross-development commands like gcc and +gdb will be shown with a +TARGET- prefix. You need to replace +TARGET- with the correct prefix before +using the command. Just using gcc or +gdb will use the tools for the host, which is not +(usually) what you want.

For example use arm-elf-gcc and +arm-elf-gdb for ARM, Thumb, and StrongARM targets. +Use xscale-elf-gcc and +xscale-elf-gdb for Intel Xscale targets. +Use i386-elf-gcc and +i386-elf-gdb for IA32 targets. And so on, the exact +prefix to use is shown in the documentation for each target.

Note that some versions of the GCC cross compiler generate +executable files with the .exe suffix on Windows, +but not on Linux. The suffix .exe will be omitted +from executable file names, so you will see hello +instead of hello.exe.


PrevHomeNext
Previous LicenseUpDirectory and File System Conventions
\ No newline at end of file diff --git a/doc/html/user-guide/package-structure.html b/doc/html/user-guide/package-structure.html new file mode 100644 index 00000000..0ffaa406 --- /dev/null +++ b/doc/html/user-guide/package-structure.html @@ -0,0 +1,492 @@ + + + + + + + + +Package Structure +
eCos User Guide
PrevChapter 29. Managing the Package RepositoryNext

Package Structure

The files in an installed eCos source tree are organized in +a natural tree structure, grouping together files which work together +into Packages. For example, the kernel files +are all together in:

BASE_DIR/kernel/<version>/include/
BASE_DIR/kernel/<version>/src/
BASE_DIR/kernel/<version>/tests/

and µITRON compatibility layer files are in: +

BASE_DIR/compat/uitron/<version>/include/
BASE_DIR/compat/uitron/<version>/src/
BASE_DIR/compat/uitron/<version>/tests/

The feature of these names which is of interest here is + the <version> near the end. It may seem odd to place a version number deep in the + path, rather than having something like + BASE_DIR/<version>/...everything... + or leaving it up to you to choose a different + install-place when a new release of the system arrives. +

There is a rationale for this organization: as + indicated, the kernel and the + µITRON compatibility subsystem + are examples of software packages. For the first few + releases of eCos, all the packages will move along + in step, i.e. Release 1.3.x will feature Version + 1.3.x of every package, and so forth. But in future, + especially when third party packages become available, it is + intended that the package be the unit of software + distribution, so it will be possible to build a system from + a selection of packages with different version numbers, and + even differing versioning schemes. A + Tcl script ecosadmin.tcl is + provided in the eCos repository to manage the installation + and removal of packages in this way.

Many users will have their own source code control system, +version control system or equivalent, and will want to use it with +eCos sources. In that case, since a new release of eCos comes with +different pathnames for all the source files, a bit of work is necessary +to import a new release into your source repository.

One way of handling the import is to rename all the version +parts to some common name, for example “current”, +and continue to work. “current” is suggested because ecosconfig recognizes +it and places it first in any list of versions. In the future, we +may provide a tool to help with this, or an option in the install +wizard. Alternatively, in a POSIX shell environment (Linux or Cygwin +on Windows) use the following command:

find . -name <version> -type d -printf 'mv %p %h/current\n' | sh

Having carried out such a renaming operation, your + source tree will now look like this:

BASE_DIR/kernel/current/include/
+BASE_DIR/kernel/current/src/
+BASE_DIR/kernel/current/tests/
+	...
+BASE_DIR/compat/uitron/current/include/
+BASE_DIR/compat/uitron/current/src/
+BASE_DIR/compat/uitron/current/tests/
+	

which is a suitable format for import into your own + source code control system. When you get a subsequent + release of eCos, do the same thing and use your own source + code control system to manage the new source base, by + importing the new version from

NEW_BASE_DIR/kernel/current/include/

and so on.

The eCos build tool will now offer only the + “current” version of each package; select this + for the packages you wish to use.

Making such a change has implications for any build + trees you already have in use. A configured build tree + contains information about the selected packages and their + selected versions. Changing the name of the + “versioning” folder in the source tree + invalidates this information, and in consequence it also + invalidates any local configuration options you have set up + in this build tree. So if you want to change the version + information in the source tree, do it first, before + investing any serious time in configuring and building your + system. When you create a new build tree to deal with the + new source layout, it will contain default settings for all + the configuration options, just like the old build tree did + before you configured it. You will need to redo that + configuration work in the new tree.

Moving source code around also invalidates debugging information +in any programs or libraries built from the old tree; these will +need to be rebuilt.


PrevHomeNext
Managing the Package RepositoryUpAppendixes
\ No newline at end of file diff --git a/doc/html/user-guide/pix/ARMStartup01.png b/doc/html/user-guide/pix/ARMStartup01.png new file mode 100644 index 00000000..3b7f13b2 Binary files /dev/null and b/doc/html/user-guide/pix/ARMStartup01.png differ diff --git a/doc/html/user-guide/pix/BuildPackages.png b/doc/html/user-guide/pix/BuildPackages.png new file mode 100644 index 00000000..859ffe41 Binary files /dev/null and b/doc/html/user-guide/pix/BuildPackages.png differ diff --git a/doc/html/user-guide/pix/Conflicts.png b/doc/html/user-guide/pix/Conflicts.png new file mode 100644 index 00000000..87e3e830 Binary files /dev/null and b/doc/html/user-guide/pix/Conflicts.png differ diff --git a/doc/html/user-guide/pix/ToolsOptions.png b/doc/html/user-guide/pix/ToolsOptions.png new file mode 100644 index 00000000..66b33c84 Binary files /dev/null and b/doc/html/user-guide/pix/ToolsOptions.png differ diff --git a/doc/html/user-guide/pix/addfromfolder.png b/doc/html/user-guide/pix/addfromfolder.png new file mode 100644 index 00000000..c3be0d8c Binary files /dev/null and b/doc/html/user-guide/pix/addfromfolder.png differ diff --git a/doc/html/user-guide/pix/addplatform.png b/doc/html/user-guide/pix/addplatform.png new file mode 100644 index 00000000..a0e15610 Binary files /dev/null and b/doc/html/user-guide/pix/addplatform.png differ diff --git a/doc/html/user-guide/pix/admin.png b/doc/html/user-guide/pix/admin.png new file mode 100644 index 00000000..1dbdb093 Binary files /dev/null and b/doc/html/user-guide/pix/admin.png differ diff --git a/doc/html/user-guide/pix/bash.png b/doc/html/user-guide/pix/bash.png new file mode 100644 index 00000000..8fee4dc9 Binary files /dev/null and b/doc/html/user-guide/pix/bash.png differ diff --git a/doc/html/user-guide/pix/build-lib01.png b/doc/html/user-guide/pix/build-lib01.png new file mode 100644 index 00000000..75f9b30b Binary files /dev/null and b/doc/html/user-guide/pix/build-lib01.png differ diff --git a/doc/html/user-guide/pix/build-processalt.png b/doc/html/user-guide/pix/build-processalt.png new file mode 100644 index 00000000..a7b7b4fb Binary files /dev/null and b/doc/html/user-guide/pix/build-processalt.png differ diff --git a/doc/html/user-guide/pix/build-tests01.png b/doc/html/user-guide/pix/build-tests01.png new file mode 100644 index 00000000..d10a2f77 Binary files /dev/null and b/doc/html/user-guide/pix/build-tests01.png differ diff --git a/doc/html/user-guide/pix/build-tools.png b/doc/html/user-guide/pix/build-tools.png new file mode 100644 index 00000000..e5b75362 Binary files /dev/null and b/doc/html/user-guide/pix/build-tools.png differ diff --git a/doc/html/user-guide/pix/build-tools2.png b/doc/html/user-guide/pix/build-tools2.png new file mode 100644 index 00000000..35a0fb20 Binary files /dev/null and b/doc/html/user-guide/pix/build-tools2.png differ diff --git a/doc/html/user-guide/pix/buildoptions.png b/doc/html/user-guide/pix/buildoptions.png new file mode 100644 index 00000000..cdbe9a77 Binary files /dev/null and b/doc/html/user-guide/pix/buildoptions.png differ diff --git a/doc/html/user-guide/pix/ch-properties-dialog.png b/doc/html/user-guide/pix/ch-properties-dialog.png new file mode 100644 index 00000000..887543c5 Binary files /dev/null and b/doc/html/user-guide/pix/ch-properties-dialog.png differ diff --git a/doc/html/user-guide/pix/comprepos.png b/doc/html/user-guide/pix/comprepos.png new file mode 100644 index 00000000..5fcd4602 Binary files /dev/null and b/doc/html/user-guide/pix/comprepos.png differ diff --git a/doc/html/user-guide/pix/config-f1.png b/doc/html/user-guide/pix/config-f1.png new file mode 100644 index 00000000..787f3133 Binary files /dev/null and b/doc/html/user-guide/pix/config-f1.png differ diff --git a/doc/html/user-guide/pix/configwin.png b/doc/html/user-guide/pix/configwin.png new file mode 100644 index 00000000..a5e2e337 Binary files /dev/null and b/doc/html/user-guide/pix/configwin.png differ diff --git a/doc/html/user-guide/pix/conflictwin.png b/doc/html/user-guide/pix/conflictwin.png new file mode 100644 index 00000000..62eea1a3 Binary files /dev/null and b/doc/html/user-guide/pix/conflictwin.png differ diff --git a/doc/html/user-guide/pix/connection.png b/doc/html/user-guide/pix/connection.png new file mode 100644 index 00000000..bbecb1fa Binary files /dev/null and b/doc/html/user-guide/pix/connection.png differ diff --git a/doc/html/user-guide/pix/find-dialog.png b/doc/html/user-guide/pix/find-dialog.png new file mode 100644 index 00000000..5994d85b Binary files /dev/null and b/doc/html/user-guide/pix/find-dialog.png differ diff --git a/doc/html/user-guide/pix/html-help.png b/doc/html/user-guide/pix/html-help.png new file mode 100644 index 00000000..bf752b53 Binary files /dev/null and b/doc/html/user-guide/pix/html-help.png differ diff --git a/doc/html/user-guide/pix/memorywin.png b/doc/html/user-guide/pix/memorywin.png new file mode 100644 index 00000000..d21a60be Binary files /dev/null and b/doc/html/user-guide/pix/memorywin.png differ diff --git a/doc/html/user-guide/pix/memregions.png b/doc/html/user-guide/pix/memregions.png new file mode 100644 index 00000000..c573ba5e Binary files /dev/null and b/doc/html/user-guide/pix/memregions.png differ diff --git a/doc/html/user-guide/pix/memreloc.png b/doc/html/user-guide/pix/memreloc.png new file mode 100644 index 00000000..7f951aab Binary files /dev/null and b/doc/html/user-guide/pix/memreloc.png differ diff --git a/doc/html/user-guide/pix/modifyplatform.png b/doc/html/user-guide/pix/modifyplatform.png new file mode 100644 index 00000000..f794789e Binary files /dev/null and b/doc/html/user-guide/pix/modifyplatform.png differ diff --git a/doc/html/user-guide/pix/open-dialog.png b/doc/html/user-guide/pix/open-dialog.png new file mode 100644 index 00000000..233e46c0 Binary files /dev/null and b/doc/html/user-guide/pix/open-dialog.png differ diff --git a/doc/html/user-guide/pix/propwin.png b/doc/html/user-guide/pix/propwin.png new file mode 100644 index 00000000..f8afa6cc Binary files /dev/null and b/doc/html/user-guide/pix/propwin.png differ diff --git a/doc/html/user-guide/pix/regprops.png b/doc/html/user-guide/pix/regprops.png new file mode 100644 index 00000000..7459d91c Binary files /dev/null and b/doc/html/user-guide/pix/regprops.png differ diff --git a/doc/html/user-guide/pix/repos-relocate.png b/doc/html/user-guide/pix/repos-relocate.png new file mode 100644 index 00000000..38d80fbb Binary files /dev/null and b/doc/html/user-guide/pix/repos-relocate.png differ diff --git a/doc/html/user-guide/pix/run-tests.png b/doc/html/user-guide/pix/run-tests.png new file mode 100644 index 00000000..0a36ab32 Binary files /dev/null and b/doc/html/user-guide/pix/run-tests.png differ diff --git a/doc/html/user-guide/pix/save-as-dialog.png b/doc/html/user-guide/pix/save-as-dialog.png new file mode 100644 index 00000000..29336ea9 Binary files /dev/null and b/doc/html/user-guide/pix/save-as-dialog.png differ diff --git a/doc/html/user-guide/pix/settings-conflict.png b/doc/html/user-guide/pix/settings-conflict.png new file mode 100644 index 00000000..0f4b59d6 Binary files /dev/null and b/doc/html/user-guide/pix/settings-conflict.png differ diff --git a/doc/html/user-guide/pix/settings-display.png b/doc/html/user-guide/pix/settings-display.png new file mode 100644 index 00000000..a9cb40be Binary files /dev/null and b/doc/html/user-guide/pix/settings-display.png differ diff --git a/doc/html/user-guide/pix/settings-runtests.png b/doc/html/user-guide/pix/settings-runtests.png new file mode 100644 index 00000000..cd5dde48 Binary files /dev/null and b/doc/html/user-guide/pix/settings-runtests.png differ diff --git a/doc/html/user-guide/pix/settings-viewers.png b/doc/html/user-guide/pix/settings-viewers.png new file mode 100644 index 00000000..7b7957b4 Binary files /dev/null and b/doc/html/user-guide/pix/settings-viewers.png differ diff --git a/doc/html/user-guide/pix/templates.png b/doc/html/user-guide/pix/templates.png new file mode 100644 index 00000000..7adb370a Binary files /dev/null and b/doc/html/user-guide/pix/templates.png differ diff --git a/doc/html/user-guide/pix/templates01.png b/doc/html/user-guide/pix/templates01.png new file mode 100644 index 00000000..a888aa35 Binary files /dev/null and b/doc/html/user-guide/pix/templates01.png differ diff --git a/doc/html/user-guide/pix/toolsplatforms.png b/doc/html/user-guide/pix/toolsplatforms.png new file mode 100644 index 00000000..bd2497f8 Binary files /dev/null and b/doc/html/user-guide/pix/toolsplatforms.png differ diff --git a/doc/html/user-guide/pix/twothreads2.png b/doc/html/user-guide/pix/twothreads2.png new file mode 100644 index 00000000..45593392 Binary files /dev/null and b/doc/html/user-guide/pix/twothreads2.png differ diff --git a/doc/html/user-guide/pix/user-tools-dialog.png b/doc/html/user-guide/pix/user-tools-dialog.png new file mode 100644 index 00000000..9738d516 Binary files /dev/null and b/doc/html/user-guide/pix/user-tools-dialog.png differ diff --git a/doc/html/user-guide/programming-with-ecos.html b/doc/html/user-guide/programming-with-ecos.html new file mode 100644 index 00000000..abde4be3 --- /dev/null +++ b/doc/html/user-guide/programming-with-ecos.html @@ -0,0 +1,370 @@ + + + + + + + + +Programming With eCos +
eCos User Guide
PrevNext

Chapter 10. Programming With eCos

The following chapters of this manual comprise a simple tutorial +for configuring and building eCos, building and running eCos tests, +and finally building three stand-alone example programs which use +the eCos API to perform some simple tasks.

You will need a properly installed eCos system, with the correct +versions of the GNU toolchain. On Windows +you will be using the bash command line interpreter that comes with +Cygwin, with the environment variables set as described in the +toolchain documentation.

The Development Process

Most development projects using eCos would contain some (or +most) of the following:

eCos Configuration

eCos is configured to provide the desired API (the inclusion +of libc, uitron, and the disabling of certain undesired funtions, +etc.), and semantics (selecting scheduler, mutex behavior, etc.). +See Chapter 11.

It would normally make sense to enable eCos assertion checking +at this time as well, to catch as many programming errors during +the development phase as possible.

Note that it should not be necessary to spend much time on +eCos configuration initially. It may be important to perform fine +tuning to reduce the memory footprint and to improve performance +later when the product reaches a testable state.

Application Development - Target Neutral Part

While your project is probably targeting a specific architecture +and platform, possibly custom hardware, it may be possible to perform +part of the application development using simulated or synthetic +targets.

There are three good reasons for doing this:

This approach is possible because all targets (including +simulators and synthetic ones) provide the same basic API: that +is, kernel, libc, libm, uitron, infra, and to some extent, HAL and +IO.

Synthetic targets are especially suitable as they allow you +to construct simulations of elaborate devices by interaction with +the host system, where an IO device API can hide the details from +the application. When switching to hardware later in the development +cycle, the IO driver is properly implemented.

Simulators can also do this, but it all depends on the +design and capabilities of the simulator you use. Some, like +SID or +Bochs provide +complete hardware emulation, while others just support enough of the +instruction set to run compiled code.

Therefore, select a simulator or synthetic target and use +it for as long as possible for application development. That is, +configure for the selected target, build eCos, build the application +and link with eCos, run and debug. Repeat the latter two steps until +you are happy with it.

Obviously, at some time you will have to switch to the intended +target hardware, for example when adding target specific feature +support, for memory footprint/performance characterization, +and for final tuning of eCos and the application.


PrevHomeNext
Programming With eCosUpConfiguring and Building eCos from Source
\ No newline at end of file diff --git a/doc/html/user-guide/real-time-characterization.html b/doc/html/user-guide/real-time-characterization.html new file mode 100644 index 00000000..4f4ba854 --- /dev/null +++ b/doc/html/user-guide/real-time-characterization.html @@ -0,0 +1,446 @@ + + + + + + + + +Real-time characterization +
eCos User Guide
PrevNext

Appendix B. Real-time characterization

For a discussion of real-time performance measurement for eCos, see the eCos +Users' Guide.

Caution

As with the target setup descriptions in the previous appendix, this +information will eventually be merged into per-target documents.

Sample numbers: +

Board: ARM AEB-1 Revision B Evaluation Board


Board: ARM AEB-1 Revision B Evaluation Board
+
+CPU : Sharp LH77790A 24MHz
+
+
+
+Startup, main stack             : stack used   404 size  2400
+Startup              :  Interrupt stack used   128 size  2048
+Startup              : Idlethread stack used    80 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 13 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took  193.49 microseconds (290 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                   7
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+  110.19  104.67  116.00    3.26   42%  28% Create thread
+   34.00   34.00   34.00    0.00  100% 100% Yield thread [all suspended]
+   24.67   24.67   24.67    0.00  100% 100% Suspend [suspended] thread
+   25.05   24.67   25.33    0.33   57%  42% Resume thread
+   37.14   36.67   37.33    0.27   71%  28% Set priority
+    3.81    3.33    4.00    0.27   71%  28% Get priority
+   80.00   80.00   80.00    0.00  100% 100% Kill [suspended] thread
+   33.90   33.33   34.00    0.16   85%  14% Yield [no other] thread
+   45.90   44.00   46.67    0.54   57%  14% Resume [suspended low prio] thread
+   24.57   24.00   24.67    0.16   85%  14% Resume [runnable low prio] thread
+   42.29   36.67   43.33    1.61   85%  14% Suspend [runnable] thread
+   33.90   33.33   34.00    0.16   85%  14% Yield [only low prio] thread
+   24.67   24.67   24.67    0.00  100% 100% Suspend [runnable->not runnable]
+   80.00   80.00   80.00    0.00  100% 100% Kill [runnable] thread
+   43.33   43.33   43.33    0.00  100% 100% Destroy [dead] thread
+  106.29  101.33  107.33    1.41   85%  14% Destroy [runnable] thread
+  144.95  141.33  166.00    6.01   85%  85% Resume [high priority] thread
+   78.31   76.67  254.67    2.75   99%  99% Thread switch
+
+    4.00    4.00    4.00    0.00  100% 100% Scheduler lock
+   16.37   16.00   16.67    0.33   56%  43% Scheduler unlock [0 threads]
+   16.37   16.00   16.67    0.33   56%  43% Scheduler unlock [1 suspended]
+   16.37   16.00   16.67    0.33   56%  43% Scheduler unlock [many suspended]
+   16.37   16.00   16.67    0.33   56%  43% Scheduler unlock [many low prio]
+
+   10.67   10.67   10.67    0.00  100% 100% Init mutex
+   28.67   28.67   28.67    0.00  100% 100% Lock [unlocked] mutex
+   30.44   30.00   31.33    0.33   59%  37% Unlock [locked] mutex
+   25.42   25.33   26.00    0.15   87%  87% Trylock [unlocked] mutex
+   22.50   22.00   22.67    0.25   75%  25% Trylock [locked] mutex
+    5.75    5.33    6.00    0.31   62%  37% Destroy mutex
+  185.33  185.33  185.33    0.00  100% 100% Unlock/Lock mutex
+
+   20.17   20.00   20.67    0.25   75%  75% Create mbox
+    2.92    2.67    3.33    0.31   62%  62% Peek [empty] mbox
+   32.42   32.00   32.67    0.31   62%  37% Put [first] mbox
+    3.00    2.67    3.33    0.33  100%  50% Peek [1 msg] mbox
+   32.50   32.00   32.67    0.25   75%  25% Put [second] mbox
+    2.92    2.67    3.33    0.31   62%  62% Peek [2 msgs] mbox
+   32.83   32.67   33.33    0.25   75%  75% Get [first] mbox
+   32.67   32.67   32.67    0.00  100% 100% Get [second] mbox
+   31.33   31.33   31.33    0.00  100% 100% Tryput [first] mbox
+   27.58   27.33   28.00    0.31   62%  62% Peek item [non-empty] mbox
+   32.83   32.67   33.33    0.25   75%  75% Tryget [non-empty] mbox
+   26.50   26.00   26.67    0.25   75%  25% Peek item [empty] mbox
+   28.00   28.00   28.00    0.00  100% 100% Tryget [empty] mbox
+    3.25    2.67    3.33    0.15   87%  12% Waiting to get mbox
+    3.25    2.67    3.33    0.15   87%  12% Waiting to put mbox
+   30.83   30.67   31.33    0.25   75%  75% Delete mbox
+  101.08  100.67  101.33    0.31   62%  37% Put/Get mbox
+
+   11.17   10.67   11.33    0.25   75%  25% Init semaphore
+   24.17   24.00   24.67    0.25   75%  75% Post [0] semaphore
+   27.08   26.67   27.33    0.31   62%  37% Wait [1] semaphore
+   22.75   22.67   23.33    0.15   87%  87% Trywait [0] semaphore
+   22.21   22.00   22.67    0.29   68%  68% Trywait [1] semaphore
+    7.33    7.33    7.33    0.00  100% 100% Peek semaphore
+    5.92    5.33    6.00    0.15   87%  12% Destroy semaphore
+  110.04  110.00  110.67    0.08   93%  93% Post/Wait semaphore
+
+    9.54    9.33   10.00    0.29   68%  68% Create counter
+    3.92    3.33    4.00    0.15   87%  12% Get counter value
+    4.00    4.00    4.00    0.00  100% 100% Set counter value
+   30.92   30.67   31.33    0.31   62%  62% Tick counter
+    5.75    5.33    6.00    0.31   62%  37% Delete counter
+
+   13.83   13.33   14.00    0.25   75%  25% Create alarm
+   46.67   46.67   46.67    0.00  100% 100% Initialize alarm
+    3.67    3.33    4.00    0.33  100%  50% Disable alarm
+   45.67   45.33   46.00    0.33  100%  50% Enable alarm
+    8.33    8.00    8.67    0.33  100%  50% Delete alarm
+   36.33   36.00   36.67    0.33  100%  50% Tick counter [1 alarm]
+  214.67  214.67  214.67    0.00  100% 100% Tick counter [many alarms]
+   62.67   62.67   62.67    0.00  100% 100% Tick & fire counter [1 alarm]
+ 1087.04 1075.33 1278.67   21.91   93%  93% Tick & fire counters [>1 together]
+  246.35  240.67  412.00   10.35   96%  96% Tick & fire counters [>1 separately]
+  168.01  167.33  237.33    1.08   99%  99% Alarm latency [0 threads]
+  187.36  168.00  234.67    3.60   86%   1% Alarm latency [2 threads]
+  187.37  167.33  235.33    3.59   85%   1% Alarm latency [many threads]
+  303.12  280.00  508.67    3.21   98%   0% Alarm -> thread resume latency
+
+   36.65   36.00   38.67    0.00            Clock/interrupt latency
+
+   65.79   52.00  152.67    0.00            Clock DSR latency
+
+  316     316     316  (main stack:   752)  Thread stack used (1120 total)
+All done, main stack            : stack used   752 size  2400
+All done             :  Interrupt stack used   280 size  2048
+All done             : Idlethread stack used   268 size  2048
+
+Timing complete - 30390 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
i386/Linux Synthetic Target SetupUpBoard: Atmel AT91/EB40
\ No newline at end of file diff --git a/doc/html/user-guide/repository-app-build-tree.html b/doc/html/user-guide/repository-app-build-tree.html new file mode 100644 index 00000000..acd899a6 --- /dev/null +++ b/doc/html/user-guide/repository-app-build-tree.html @@ -0,0 +1,192 @@ + + + + + + + + +Application Build Tree +
eCos User Guide
PrevChapter 25. The Component Repository and Working DirectoriesNext


PrevHomeNext
Install TreeUpCompiler and Linker Options
\ No newline at end of file diff --git a/doc/html/user-guide/rt-arm-assabet.html b/doc/html/user-guide/rt-arm-assabet.html new file mode 100644 index 00000000..5e44ae99 --- /dev/null +++ b/doc/html/user-guide/rt-arm-assabet.html @@ -0,0 +1,290 @@ + + + + + + + + +Board: Intel SA1110 (Assabet) +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Intel SA1110 (Assabet)

Board: Intel SA1110 (Assabet)
+
+CPU :  StrongARM 221.2 MHz
+
+
+
+Microseconds for one run through Dhrystone:     3.3 
+Dhrystones per Second:                        306748.5 
+VAX MIPS rating =    174.586 
+
+Startup, main stack             : stack used   420 size  2400
+Startup              :  Interrupt stack used   136 size  4096
+Startup              : Idlethread stack used    84 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 0 `ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took    3.20 microseconds (11 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+    5.98    4.88   14.38    0.70   57%  35% Create thread
+    0.86    0.81    1.90    0.08   87%  87% Yield thread [all suspended]
+    1.05    0.81    3.53    0.19   46%  39% Suspend [suspended] thread
+    1.07    0.81    3.80    0.18   48%  35% Resume thread
+    1.36    1.09    5.97    0.22   45%  39% Set priority
+    0.73    0.54    1.90    0.19   85%  50% Get priority
+    2.93    2.44   13.56    0.39   79%  70% Kill [suspended] thread
+    0.89    0.81    4.34    0.14   89%  89% Yield [no other] thread
+    1.63    1.36    4.61    0.17   57%  29% Resume [suspended low prio] thread
+    1.03    0.81    3.53    0.19   46%  42% Resume [runnable low prio] thread
+    1.74    1.36    6.51    0.22   87%   6% Suspend [runnable] thread
+    0.93    0.81    4.61    0.18   98%  78% Yield [only low prio] thread
+    1.06    0.81    3.26    0.19   42%  39% Suspend [runnable->not runnable]
+    2.56    1.90   13.02    0.41   87%  34% Kill [runnable] thread
+    2.02    1.63    7.05    0.22   92%   3% Destroy [dead] thread
+    3.09    2.44   15.19    0.51   78%  46% Destroy [runnable] thread
+    6.77    5.43   13.02    0.59   75%  17% Resume [high priority] thread
+    1.81    1.63    7.87    0.18   49%  49% Thread switch
+
+    0.25    0.00    1.36    0.05   89%  10% Scheduler lock
+    0.51    0.27    1.36    0.06   85%  13% Scheduler unlock [0 threads]
+    0.51    0.27    1.09    0.06   85%  13% Scheduler unlock [1 suspended]
+    0.51    0.27    1.09    0.07   85%  14% Scheduler unlock [many suspended]
+    0.51    0.27    1.09    0.06   85%  13% Scheduler unlock [many low prio]
+
+    0.52    0.27    2.17    0.15   62%  31% Init mutex
+    0.97    0.54    4.34    0.28   84%  65% Lock [unlocked] mutex
+    1.05    0.81    5.15    0.28   96%  96% Unlock [locked] mutex
+    0.86    0.54    3.26    0.24   65%  31% Trylock [unlocked] mutex
+    0.79    0.54    3.53    0.23   43%  46% Trylock [locked] mutex
+    0.33    0.27    1.63    0.11   90%  90% Destroy mutex
+    4.16    3.80    8.95    0.30   75%  96% Unlock/Lock mutex
+
+    0.70    0.54    2.98    0.21   96%  65% Create mbox
+    0.59    0.27    1.63    0.14   75%   9% Peek [empty] mbox
+    1.33    1.09    5.70    0.31   96%  93% Put [first] mbox
+    0.61    0.27    1.63    0.13   81%   3% Peek [1 msg] mbox
+    1.35    1.09    5.43    0.31   96%  87% Put [second] mbox
+    0.58    0.27    1.36    0.11   78%   6% Peek [2 msgs] mbox
+    1.38    1.09    4.88    0.25   59%  37% Get [first] mbox
+    1.40    1.09    5.15    0.26   62%  34% Get [second] mbox
+    1.27    0.81    4.88    0.28   90%  65% Tryput [first] mbox
+    1.34    0.81    4.61    0.22   59%   6% Peek item [non-empty] mbox
+    1.47    1.09    5.15    0.27   84%  12% Tryget [non-empty] mbox
+    1.12    0.81    4.34    0.23   59%  31% Peek item [empty] mbox
+    1.14    0.81    4.07    0.24   71%  25% Tryget [empty] mbox
+    0.59    0.27    1.36    0.12   78%   6% Waiting to get mbox
+    0.59    0.27    1.36    0.12   78%   6% Waiting to put mbox
+    1.28    0.81    5.43    0.32   87%  78% Delete mbox
+    2.64    2.17   10.31    0.48   96%  96% Put/Get mbox
+
+    0.47    0.27    2.17    0.19   46%  46% Init semaphore
+    0.77    0.54    3.80    0.26   90%  56% Post [0] semaphore
+    0.90    0.54    4.07    0.26   75%  21% Wait [1] semaphore
+    0.85    0.54    3.26    0.21   56%  28% Trywait [0] semaphore
+    0.69    0.54    2.17    0.18   96%  62% Trywait [1] semaphore
+    0.44    0.27    2.17    0.19   96%  56% Peek semaphore
+    0.38    0.27    1.90    0.17   96%  75% Destroy semaphore
+    2.74    2.44    9.49    0.42   96%  96% Post/Wait semaphore
+
+    0.43    0.27    1.90    0.18   96%  56% Create counter
+    0.49    0.00    2.17    0.18   56%   3% Get counter value
+    0.33    0.00    1.63    0.13   78%   6% Set counter value
+    1.03    0.81    2.44    0.22   84%  50% Tick counter
+    0.42    0.27    1.90    0.20   90%  65% Delete counter
+
+    0.70    0.54    2.44    0.20   93%  62% Create alarm
+    1.65    1.36    6.78    0.40   96%  81% Initialize alarm
+    0.75    0.54    1.63    0.18   43%  43% Disable alarm
+    1.75    1.36    7.05    0.38   65%  81% Enable alarm
+    0.81    0.54    2.44    0.15   62%  28% Delete alarm
+    1.01    0.81    2.17    0.16   56%  40% Tick counter [1 alarm]
+    4.19    4.07    5.43    0.16   96%  68% Tick counter [many alarms]
+    1.48    1.36    3.80    0.20   96%  78% Tick & fire counter [1 alarm]
+   20.23   20.07   22.52    0.21   96%  65% Tick & fire counters [>1 together]
+    4.70    4.61    6.78    0.16   87%  87% Tick & fire counters [>1 separately]
+    2.81    2.71   14.38    0.20   98%  98% Alarm latency [0 threads]
+    3.19    2.71   13.56    0.38   73%  59% Alarm latency [2 threads]
+    9.71    7.87   18.17    1.25   59%  53% Alarm latency [many threads]
+    5.77    5.43   45.57    0.68   97%  97% Alarm -> thread resume latency
+
+    2.38    0.81    9.49    0.00            Clock/interrupt latency
+
+    2.02    1.09    7.32    0.00            Clock DSR latency
+
+   11       0     316  (main stack:   764)  Thread stack used (1120 total)
+All done, main stack            : stack used   764 size  2400
+All done             :  Interrupt stack used   287 size  4096
+All done             : Idlethread stack used   272 size  2048
+
+Timing complete - 30220 ms total
+	

PrevHomeNext
Board: NEC VR4373UpBoard: Intel SA1100 (Brutus)
\ No newline at end of file diff --git a/doc/html/user-guide/rt-arm-brutus.html b/doc/html/user-guide/rt-arm-brutus.html new file mode 100644 index 00000000..f5d5b682 --- /dev/null +++ b/doc/html/user-guide/rt-arm-brutus.html @@ -0,0 +1,289 @@ + + + + + + + + +Board: Intel SA1100 (Brutus) +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Intel SA1100 (Brutus)

Board: Intel SA1100 (Brutus)
+
+CPU :  StrongARM 221.2 MHz
+
+Microseconds for one run through Dhrystone:     3.3 
+Dhrystones per Second:                        306748.5 
+VAX MIPS rating =    174.586 
+
+Startup, main stack             : stack used   404 size  2400
+Startup              :  Interrupt stack used   136 size  4096
+Startup              : Idlethread stack used    87 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 0 `ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took    3.09 microseconds (11 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+    6.63    5.43   18.99    0.77   70%  37% Create thread
+    0.83    0.81    2.17    0.04   98%  98% Yield thread [all suspended]
+    1.27    0.81    5.15    0.30   68%  73% Suspend [suspended] thread
+    1.25    0.81    5.15    0.25   82%   1% Resume thread
+    1.52    1.09    7.87    0.30   78%  75% Set priority
+    0.97    0.54    2.71    0.28   64%  51% Get priority
+    3.45    2.71   19.53    0.66   84%  76% Kill [suspended] thread
+    0.90    0.81    6.24    0.17   98%  98% Yield [no other] thread
+    1.86    1.36    6.24    0.33   68%  50% Resume [suspended low prio] thread
+    1.25    0.81    5.15    0.25   82%   1% Resume [runnable low prio] thread
+    2.01    1.63   10.04    0.32   70%  84% Suspend [runnable] thread
+    0.90    0.81    6.24    0.17   98%  98% Yield [only low prio] thread
+    1.25    0.81    5.15    0.24   84%   1% Suspend [runnable->not runnable]
+    2.92    1.90   18.72    0.57   85%  43% Kill [runnable] thread
+    2.45    1.90   10.31    0.33   95%  54% Destroy [dead] thread
+    3.95    2.71   23.60    0.89   68%  54% Destroy [runnable] thread
+    8.55    6.24   19.53    1.15   60%  23% Resume [high priority] thread
+    1.85    1.63   11.94    0.21   49%  49% Thread switch
+
+    0.25    0.00    1.63    0.05   89%  10% Scheduler lock
+    0.52    0.27    1.90    0.07   85%  13% Scheduler unlock [0 threads]
+    0.51    0.27    1.36    0.06   85%  13% Scheduler unlock [1 suspended]
+    0.51    0.27    1.36    0.06   85%  13% Scheduler unlock [many suspended]
+    0.51    0.27    1.63    0.06   85%  13% Scheduler unlock [many low prio]
+
+    0.58    0.27    3.53    0.20   71%  21% Init mutex
+    1.07    0.54    5.70    0.35   87%  59% Lock [unlocked] mutex
+    1.14    0.81    6.51    0.40   96%  81% Unlock [locked] mutex
+    0.96    0.54    5.15    0.34   68%  65% Trylock [unlocked] mutex
+    0.94    0.54    4.88    0.34   65%  65% Trylock [locked] mutex
+    0.33    0.27    2.17    0.11   96%  96% Destroy mutex
+    4.21    3.80   10.85    0.41   71%  96% Unlock/Lock mutex
+    0.76    0.54    4.07    0.25   96%  56% Create mbox
+    0.75    0.54    1.90    0.20   84%  50% Peek [empty] mbox
+    1.56    1.09    6.78    0.39   68%  59% Put [first] mbox
+    0.75    0.54    1.90    0.20   84%  50% Peek [1 msg] mbox
+    1.55    1.09    6.78    0.40   68%  62% Put [second] mbox
+    0.77    0.54    1.63    0.17   46%  37% Peek [2 msgs] mbox
+    1.67    1.09    6.24    0.31   87%  34% Get [first] mbox
+    1.63    1.09    6.24    0.31   75%  34% Get [second] mbox
+    1.50    1.09    6.51    0.40   56%  62% Tryput [first] mbox
+    1.58    1.09    5.43    0.37   68%  53% Peek item [non-empty] mbox
+    1.79    1.09    7.05    0.43   71%  25% Tryget [non-empty] mbox
+    1.29    1.09    5.15    0.32   87%  87% Peek item [empty] mbox
+    1.33    1.09    5.97    0.37   96%  84% Tryget [empty] mbox
+    0.73    0.54    1.90    0.21   84%  56% Waiting to get mbox
+    0.76    0.54    1.90    0.19   40%  43% Waiting to put mbox
+    1.47    1.09    6.78    0.39   59%  84% Delete mbox
+    2.70    2.17   12.75    0.63   96%  96% Put/Get mbox
+
+    0.47    0.27    2.71    0.20   96%  50% Init semaphore
+    0.89    0.54    4.88    0.33   56%  75% Post [0] semaphore
+    0.96    0.54    5.15    0.33   71%  75% Wait [1] semaphore
+    0.86    0.54    4.88    0.32   96%  81% Trywait [0] semaphore
+    0.69    0.54    3.26    0.22   96%  75% Trywait [1] semaphore
+    0.49    0.27    3.26    0.28   84%  84% Peek semaphore
+    0.39    0.27    2.44    0.19   96%  78% Destroy semaphore
+    2.83    2.44   11.66    0.55   96%  96% Post/Wait semaphore
+
+    0.52    0.27    3.26    0.20   56%  40% Create counter
+    0.59    0.00    2.71    0.34   81%  46% Get counter value
+    0.36    0.00    2.44    0.21   81%   9% Set counter value
+    1.13    0.81    2.98    0.26   59%  37% Tick counter
+    0.39    0.27    1.90    0.19   90%  78% Delete counter
+
+    0.86    0.54    4.07    0.24   65%  31% Create alarm
+    1.86    1.36    9.77    0.54   96%  90% Initialize alarm
+    0.77    0.54    2.71    0.23   84%  50% Disable alarm
+    1.86    1.36    9.22    0.51   96%  75% Enable alarm
+    0.89    0.54    3.26    0.25   65%  21% Delete alarm
+    0.99    0.81    3.26    0.21   96%  59% Tick counter [1 alarm]
+    4.22    4.07    6.78    0.22   96%  71% Tick counter [many alarms]
+    1.51    1.36    4.61    0.24   96%  78% Tick & fire counter [1 alarm]
+   20.29   20.07   23.33    0.23   96%  53% Tick & fire counters [>1 together]
+    4.71    4.61    7.87    0.20   96%  96% Tick & fire counters [>1 separately]
+    2.88    2.71   23.87    0.33   99%  99% Alarm latency [0 threads]
+    3.24    2.71   17.36    0.40   79%  58% Alarm latency [2 threads]
+   15.71   12.48   27.40    1.47   53%  17% Alarm latency [many threads]
+    5.95    5.43   64.56    1.02   97%  97% Alarm -> thread resume latency
+
+    3.25    0.81   14.11    0.00            Clock/interrupt latency
+
+    2.68    1.09   12.75    0.00            Clock DSR latency
+
+   29       0     316  (main stack:   764)  Thread stack used (1120 total)
+All done, main stack            : stack used   764 size  2400
+All done             :  Interrupt stack used   288 size  4096
+All done             : Idlethread stack used   260 size  2048
+
+
+Timing complete - 30280 ms total
+
+	

PrevHomeNext
Board: Intel SA1110 (Assabet)UpBoard: Motorola MBX
\ No newline at end of file diff --git a/doc/html/user-guide/rt-arm-ebsa285.html b/doc/html/user-guide/rt-arm-ebsa285.html new file mode 100644 index 00000000..81d5df0b --- /dev/null +++ b/doc/html/user-guide/rt-arm-ebsa285.html @@ -0,0 +1,288 @@ + + + + + + + + +Board: Intel StrongARM EBSA-285 Evaluation Board +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Intel StrongARM EBSA-285 Evaluation Board

Board: Intel StrongARM EBSA-285 Evaluation Board
+
+CPU   : Intel StrongARM SA-110 228MHz
+
+
+Startup, main stack             : stack used   404 size  2400
+Startup              :  Interrupt stack used   136 size  4096
+Startup              : Idlethread stack used    80 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 1 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took    4.61 microseconds (16 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+    4.97    3.26    7.34    0.60   50%   4% Create thread
+    0.73    0.54    2.17    0.14   60%  37% Yield thread [all suspended]
+    0.98    0.82    2.99    0.23   81%  68% Suspend [suspended] thread
+    0.54    0.27    1.63    0.03   92%   6% Resume thread
+    0.83    0.54    1.90    0.10   73%  14% Set priority
+    0.21    0.00    0.54    0.21   25%  48% Get priority
+    2.25    1.90   10.05    0.37   96%  67% Kill [suspended] thread
+    0.70    0.54    1.09    0.14   53%  45% Yield [no other] thread
+    0.96    0.82    1.36    0.14   50%  48% Resume [suspended low prio] thread
+    0.53    0.27    0.82    0.03   92%   6% Resume [runnable low prio] thread
+    0.90    0.82    1.63    0.13   70%  70% Suspend [runnable] thread
+    0.70    0.54    0.82    0.13   57%  42% Yield [only low prio] thread
+    0.55    0.54    0.82    0.01   98%  98% Suspend [runnable->not runnable]
+    1.64    1.63    2.17    0.02   98%  98% Kill [runnable] thread
+    0.97    0.82    4.62    0.20   98%  64% Destroy [dead] thread
+    2.17    1.90    2.17    0.01   98%   1% Destroy [runnable] thread
+    6.06    5.16   10.60    0.53   59%  31% Resume [high priority] thread
+    1.69    1.63    5.98    0.11   90%  90% Thread switch
+
+    0.14    0.00    1.36    0.14   99%  50% Scheduler lock
+    0.37    0.27    0.54    0.13   62%  62% Scheduler unlock [0 threads]
+    0.38    0.27    0.54    0.13   60%  60% Scheduler unlock [1 suspended]
+    0.37    0.27    0.54    0.13   63%  63% Scheduler unlock [many suspended]
+    0.37    0.27    0.54    0.13   63%  63% Scheduler unlock [many low prio]
+
+    0.34    0.00    1.90    0.15   78%   6% Init mutex
+    0.88    0.54    4.62    0.37   93%  71% Lock [unlocked] mutex
+    0.79    0.54    4.35    0.26   93%  53% Unlock [locked] mutex
+    0.59    0.27    2.17    0.10   93%   3% Trylock [unlocked] mutex
+    0.50    0.27    0.82    0.09   78%  18% Trylock [locked] mutex
+    0.18    0.00    0.54    0.13   59%  37% Destroy mutex
+    3.85    3.80    5.16    0.08   96%  96% Unlock/Lock mutex
+
+    0.64    0.27    3.53    0.24   81%  15% Create mbox
+    0.61    0.27    2.17    0.21   68%  18% Peek [empty] mbox
+    0.87    0.54    5.16    0.31   59%  87% Put [first] mbox
+    0.08    0.00    0.54    0.12   71%  71% Peek [1 msg] mbox
+    0.71    0.54    1.09    0.14   56%  40% Put [second] mbox
+    0.08    0.00    0.27    0.12   68%  68% Peek [2 msgs] mbox
+    0.89    0.54    4.89    0.31   62%  81% Get [first] mbox
+    0.76    0.54    1.09    0.17   43%  37% Get [second] mbox
+    0.76    0.54    3.26    0.21   96%  50% Tryput [first] mbox
+    0.65    0.54    2.45    0.17   81%  81% Peek item [non-empty] mbox
+    0.76    0.54    2.72    0.19   53%  43% Tryget [non-empty] mbox
+    0.58    0.54    0.82    0.06   87%  87% Peek item [empty] mbox
+    0.61    0.54    0.82    0.10   75%  75% Tryget [empty] mbox
+    0.10    0.00    0.54    0.13   65%  65% Waiting to get mbox
+    0.10    0.00    0.54    0.13   65%  65% Waiting to put mbox
+    0.77    0.54    3.26    0.20   53%  43% Delete mbox
+    2.10    1.90    6.25    0.30   93%  93% Put/Get mbox
+
+    0.34    0.27    1.09    0.11   81%  81% Init semaphore
+    0.60    0.27    1.09    0.12   68%   6% Post [0] semaphore
+    0.59    0.54    0.82    0.08   81%  81% Wait [1] semaphore
+    0.59    0.54    2.17    0.10   96%  96% Trywait [0] semaphore
+    0.48    0.27    0.82    0.11   71%  25% Trywait [1] semaphore
+    0.24    0.00    0.82    0.09   78%  18% Peek semaphore
+    0.19    0.00    0.54    0.13   62%  34% Destroy semaphore
+    2.28    2.17    4.08    0.18   93%  90% Post/Wait semaphore
+
+    0.43    0.00    2.72    0.23   90%   6% Create counter
+    0.40    0.00    1.63    0.25   68%  28% Get counter value
+    0.13    0.00    0.82    0.15   96%  59% Set counter value
+    0.71    0.54    1.63    0.16   50%  46% Tick counter
+    0.16    0.00    0.54    0.14   53%  43% Delete counter
+
+    0.47    0.27    1.36    0.15   59%  37% Create alarm
+    1.58    1.09    7.07    0.44   71%  68% Initialize alarm
+    0.12    0.00    1.09    0.16   96%  65% Disable alarm
+    1.01    0.82    2.45    0.17   53%  43% Enable alarm
+    0.21    0.00    0.27    0.09   78%  21% Delete alarm
+    0.78    0.54    1.90    0.12   71%  25% Tick counter [1 alarm]
+    3.90    3.80    4.35    0.13   68%  68% Tick counter [many alarms]
+    1.25    1.09    1.63    0.14   53%  43% Tick & fire counter [1 alarm]
+   19.88   19.84   20.11    0.07   84%  84% Tick & fire counters [>1 together]
+    4.37    4.35    4.62    0.05   90%  90% Tick & fire counters [>1 separately]
+    3.83    3.80    7.61    0.06   99%  99% Alarm latency [0 threads]
+    4.46    3.80    7.88    0.27   71%  24% Alarm latency [2 threads]
+   16.06   13.59   26.36    1.05   54%  10% Alarm latency [many threads]
+    6.67    6.52   22.83    0.29   98%  98% Alarm -> thread resume latency
+
+    1.89    0.82    9.78    0.00            Clock/interrupt latency
+
+    2.17    1.09    7.34    0.00            Clock DSR latency
+
+   11       0     316  (main stack:   744)  Thread stack used (1120 total)
+All done, main stack            : stack used   744 size  2400
+All done             :  Interrupt stack used   288 size  4096
+All done             : Idlethread stack used   268 size  2048
+
+Timing complete - 30210 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+	

PrevHomeNext
Board: Atmel AT91/EB40UpBoard: Cirrus Logic EDB7111-2 Development Board
\ No newline at end of file diff --git a/doc/html/user-guide/rt-arm-ep7211.html b/doc/html/user-guide/rt-arm-ep7211.html new file mode 100644 index 00000000..1d995f0b --- /dev/null +++ b/doc/html/user-guide/rt-arm-ep7211.html @@ -0,0 +1,443 @@ + + + + + + + + +Board: Cirrus Logic EDB7111-2 Development Board +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Cirrus Logic EDB7111-2 Development Board

CPU : Cirrus Logic EP7211 73MHz

Board: Cirrus Logic EDB7111-2 Development Board
+
+CPU  : Cirrus Logic EP7211 73MHz
+
+
+
+Startup, main stack             : stack used   404 size  2400
+Startup              :  Interrupt stack used   136 size  4096
+Startup              : Idlethread stack used    88 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 0 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took  356.69 microseconds (182 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   22.71   17.58   37.11    3.07   46%  34% Create thread
+    4.36    3.91    5.86    0.70   76%  76% Yield thread [all suspended]
+    4.24    3.91    7.81    0.56   84%  84% Suspend [suspended] thread
+    4.09    1.95    7.81    0.45   85%   3% Resume thread
+    5.31    3.91   11.72    0.92   65%  32% Set priority
+    2.11    1.95    3.91    0.28   92%  92% Get priority
+   11.54    9.77   25.39    0.99   62%  28% Kill [suspended] thread
+    4.46    3.91    9.77    0.82   75%  75% Yield [no other] thread
+    7.57    5.86   13.67    0.69   75%  20% Resume [suspended low prio] thread
+    3.94    1.95    5.86    0.18   92%   3% Resume [runnable low prio] thread
+    7.02    5.86   13.67    1.05   53%  45% Suspend [runnable] thread
+    4.42    3.91    9.77    0.79   76%  76% Yield [only low prio] thread
+    4.24    1.95    5.86    0.61   79%   1% Suspend [runnable->not runnable]
+   11.29    9.77   27.34    1.14   57%  37% Kill [runnable] thread
+    6.29    3.91   11.72    0.84   71%   4% Destroy [dead] thread
+   13.52   11.72   31.25    0.90   70%  25% Destroy [runnable] thread
+   24.50   21.48   42.97    1.69   79%  12% Resume [high priority] thread
+    8.79    7.81   19.53    1.05   99%  53% Thread switch
+
+    1.66    0.00    3.91    0.52   83%  15% Scheduler lock
+    2.59    1.95    3.91    0.86   67%  67% Scheduler unlock [0 threads]
+    2.62    1.95    3.91    0.88   65%  65% Scheduler unlock [1 suspended]
+    2.61    1.95    3.91    0.87   66%  66% Scheduler unlock [many suspended]
+    2.58    1.95    3.91    0.85   67%  67% Scheduler unlock [many low prio]
+
+    2.69    1.95    5.86    0.96   65%  65% Init mutex
+    4.88    3.91    9.77    1.10   96%  56% Lock [unlocked] mutex
+    4.64    3.91   11.72    1.05   71%  71% Unlock [locked] mutex
+    3.97    1.95    7.81    0.47   81%   9% Trylock [unlocked] mutex
+    3.48    1.95    3.91    0.67   78%  21% Trylock [locked] mutex
+    1.77    0.00    3.91    0.44   84%  12% Destroy mutex
+   31.92   29.30   42.97    1.65   71%  18% Unlock/Lock mutex
+
+    4.09    3.91    9.77    0.35   96%  96% Create mbox
+    1.83    0.00    3.91    0.34   87%   9% Peek [empty] mbox
+    5.31    3.91    9.77    0.96   62%  34% Put [first] mbox
+    1.59    0.00    1.95    0.60   81%  18% Peek [1 msg] mbox
+    5.19    3.91    9.77    1.04   56%  40% Put [second] mbox
+    1.65    0.00    3.91    0.62   78%  18% Peek [2 msgs] mbox
+    5.43    3.91    9.77    0.86   68%  28% Get [first] mbox
+    5.31    3.91    7.81    0.96   59%  34% Get [second] mbox
+    4.76    3.91    9.77    1.07   62%  62% Tryput [first] mbox
+    4.82    1.95    9.77    1.15   93%   3% Peek item [non-empty] mbox
+    5.55    3.91   11.72    0.82   71%  25% Tryget [non-empty] mbox
+    3.97    1.95    7.81    0.59   75%  12% Peek item [empty] mbox
+    4.33    3.91    7.81    0.69   81%  81% Tryget [empty] mbox
+    1.59    0.00    3.91    0.79   68%  25% Waiting to get mbox
+    1.71    0.00    3.91    0.53   81%  15% Waiting to put mbox
+    5.25    3.91    9.77    1.01   59%  37% Delete mbox
+   17.82   15.63   29.30    1.14   65%  18% Put/Get mbox
+
+    2.69    1.95    5.86    0.96   65%  65% Init semaphore
+    3.78    1.95    7.81    0.46   84%  12% Post [0] semaphore
+    4.27    3.91    7.81    0.62   84%  84% Wait [1] semaphore
+    3.72    1.95    7.81    0.66   75%  18% Trywait [0] semaphore
+    3.29    1.95    5.86    0.92   62%  34% Trywait [1] semaphore
+    2.32    1.95    3.91    0.59   81%  81% Peek semaphore
+    1.89    0.00    3.91    0.24   90%   6% Destroy semaphore
+   15.75   13.67   29.30    1.07   68%  21% Post/Wait semaphore
+
+    2.69    1.95    5.86    0.96   65%  65% Create counter
+    1.83    0.00    1.95    0.23   93%   6% Get counter value
+    1.53    0.00    3.91    0.76   71%  25% Set counter value
+    4.82    3.91    5.86    0.97   53%  53% Tick counter
+    1.89    0.00    1.95    0.12   96%   3% Delete counter
+
+    3.78    1.95    7.81    0.46   84%  12% Create alarm
+    7.99    5.86   15.63    0.70   81%   9% Initialize alarm
+    1.71    0.00    1.95    0.43   87%  12% Disable alarm
+    7.14    5.86   11.72    1.04   56%  40% Enable alarm
+    2.50    1.95    3.91    0.79   71%  71% Delete alarm
+    4.94    3.91    7.81    1.04   96%  50% Tick counter [1 alarm]
+   19.47   17.58   23.44    0.36   87%   9% Tick counter [many alarms]
+    7.63    5.86   11.72    0.55   81%  15% Tick & fire counter [1 alarm]
+   99.06   97.66  105.47    1.05   59%  37% Tick & fire counters [>1 together]
+   22.15   21.48   27.34    0.96   71%  71% Tick & fire counters [>1 separately]
+  359.16  357.42  378.91    0.87   71%  25% Alarm latency [0 threads]
+  364.03  357.42  402.34    3.03   58%  15% Alarm latency [2 threads]
+  408.25  402.34  416.02    2.89   53%  24% Alarm latency [many threads]
+  381.16  376.95  492.19    2.48   95%  46% Alarm -> thread resume latency
+
+    9.79    5.86   19.53    0.00            Clock/interrupt latency
+
+   12.13    5.86   31.25    0.00            Clock DSR latency
+
+   12       0     316  (main stack:   752)  Thread stack used (1120 total)
+All done, main stack            : stack used   752 size  2400
+All done             :  Interrupt stack used   288 size  4096
+All done             : Idlethread stack used   276 size  2048
+
+Timing complete - 30450 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	  

CPU : Cirrus Logic EP7212 73MHz

Board: Cirrus Logic EDB7111-2 Development Board
+
+CPU  : Cirrus Logic EP7212 73MHz
+
+
+
+Startup, main stack             : stack used   404 size  2400
+Startup              :  Interrupt stack used   136 size  4096
+Startup              : Idlethread stack used    88 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 0 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took  356.32 microseconds (182 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   22.43   15.63   33.20    3.02   68%  18% Create thread
+    4.48    3.91    5.86    0.81   70%  70% Yield thread [all suspended]
+    4.42    3.91    7.81    0.78   75%  75% Suspend [suspended] thread
+    4.12    1.95    5.86    0.49   82%   3% Resume thread
+    5.62    3.91   11.72    0.64   78%  18% Set priority
+    2.17    1.95    3.91    0.38   89%  89% Get priority
+   11.54    9.77   27.34    0.88   70%  25% Kill [suspended] thread
+    4.64    3.91    9.77    0.96   65%  65% Yield [no other] thread
+    7.51    5.86   15.63    0.72   76%  21% Resume [suspended low prio] thread
+    3.88    1.95    9.77    0.42   82%  10% Resume [runnable low prio] thread
+    7.14    5.86   13.67    1.00   59%  39% Suspend [runnable] thread
+    4.52    3.91    7.81    0.86   70%  70% Yield [only low prio] thread
+    4.15    1.95    7.81    0.49   85%   1% Suspend [runnable->not runnable]
+   11.26    9.77   27.34    1.17   56%  39% Kill [runnable] thread
+    6.22    3.91   13.67    0.88   70%   7% Destroy [dead] thread
+   13.64   11.72   33.20    1.02   64%  26% Destroy [runnable] thread
+   24.17   21.48   41.02    1.49   82%  12% Resume [high priority] thread
+    8.80    7.81   21.48    1.08   98%  54% Thread switch
+
+    1.60    0.00    1.95    0.58   82%  17% Scheduler lock
+    2.61    1.95    3.91    0.87   66%  66% Scheduler unlock [0 threads]
+    2.59    1.95    3.91    0.86   67%  67% Scheduler unlock [1 suspended]
+    2.61    1.95    3.91    0.87   66%  66% Scheduler unlock [many suspended]
+    2.59    1.95    3.91    0.86   67%  67% Scheduler unlock [many low prio]
+
+    2.62    1.95    3.91    0.88   65%  65% Init mutex
+    4.82    3.91    9.77    1.09   96%  59% Lock [unlocked] mutex
+    4.39    3.91    9.77    0.79   81%  81% Unlock [locked] mutex
+    3.84    1.95    7.81    0.36   87%   9% Trylock [unlocked] mutex
+    3.54    1.95    5.86    0.69   75%  21% Trylock [locked] mutex
+    1.83    0.00    3.91    0.34   87%   9% Destroy mutex
+   34.61   31.25   46.88    1.68   78%   9% Unlock/Lock mutex
+
+    3.97    1.95    7.81    0.24   93%   3% Create mbox
+    1.83    0.00    3.91    0.34   87%   9% Peek [empty] mbox
+    4.76    3.91    9.77    1.07   62%  62% Put [first] mbox
+    1.71    0.00    3.91    0.64   75%  18% Peek [1 msg] mbox
+    5.00    3.91    9.77    1.10   96%  50% Put [second] mbox
+    1.65    0.00    1.95    0.52   84%  15% Peek [2 msgs] mbox
+    5.31    3.91   11.72    1.05   59%  37% Get [first] mbox
+    5.13    3.91    7.81    0.99   56%  40% Get [second] mbox
+    4.76    3.91   11.72    1.12   96%  65% Tryput [first] mbox
+    4.46    3.91    7.81    0.82   75%  75% Peek item [non-empty] mbox
+    5.55    3.91    9.77    0.82   68%  25% Tryget [non-empty] mbox
+    4.03    1.95    7.81    0.58   78%   9% Peek item [empty] mbox
+    4.27    3.91    5.86    0.59   81%  81% Tryget [empty] mbox
+    1.77    0.00    3.91    0.44   84%  12% Waiting to get mbox
+    1.59    0.00    1.95    0.60   81%  18% Waiting to put mbox
+    5.37    3.91    9.77    0.91   65%  31% Delete mbox
+   16.66   13.67   27.34    1.42   90%   3% Put/Get mbox
+
+    2.62    1.95    5.86    0.92   68%  68% Init semaphore
+    3.84    1.95    7.81    0.47   81%  12% Post [0] semaphore
+    4.21    3.91    7.81    0.53   87%  87% Wait [1] semaphore
+    3.48    1.95    5.86    0.76   71%  25% Trywait [0] semaphore
+    3.60    1.95    5.86    0.62   78%  18% Trywait [1] semaphore
+    2.26    1.95    5.86    0.53   87%  87% Peek semaphore
+    1.89    0.00    1.95    0.12   96%   3% Destroy semaphore
+   16.05   13.67   29.30    1.40   59%  18% Post/Wait semaphore
+
+    2.38    1.95    3.91    0.67   78%  78% Create counter
+    2.01    0.00    3.91    0.35   84%   6% Get counter value
+    1.89    0.00    3.91    0.24   90%   6% Set counter value
+    4.58    3.91    5.86    0.88   65%  65% Tick counter
+    1.71    0.00    1.95    0.43   87%  12% Delete counter
+
+    3.84    1.95    7.81    0.36   87%   9% Create alarm
+    7.99    5.86   15.63    0.47   93%   3% Initialize alarm
+    2.01    0.00    3.91    0.35   84%   6% Disable alarm
+    6.53    5.86   13.67    1.01   75%  75% Enable alarm
+    2.32    1.95    3.91    0.59   81%  81% Delete alarm
+    4.76    3.91    7.81    1.01   59%  59% Tick counter [1 alarm]
+   19.53   17.58   23.44    0.24   90%   6% Tick counter [many alarms]
+    7.57    5.86   13.67    0.75   75%  21% Tick & fire counter [1 alarm]
+   98.57   97.66  105.47    1.14   96%  62% Tick & fire counters [>1 together]
+   22.15   21.48   27.34    0.96   71%  71% Tick & fire counters [>1 separately]
+  359.18  357.42  384.77    1.10   65%  31% Alarm latency [0 threads]
+  362.63  357.42  396.48    2.55   43%  27% Alarm latency [2 threads]
+  408.22  402.34  416.02    2.73   55%  21% Alarm latency [many threads]
+  378.63  375.00  494.14    2.56   93%  71% Alarm -> thread resume latency
+
+    9.78    5.86   19.53    0.00            Clock/interrupt latency
+
+   12.21    5.86   31.25    0.00            Clock DSR latency
+
+   12       0     316  (main stack:   752)  Thread stack used (1120 total)
+All done, main stack            : stack used   752 size  2400
+All done             :  Interrupt stack used   288 size  4096
+All done             : Idlethread stack used   276 size  2048
+
+Timing complete - 30550 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	  

PrevHomeNext
Board: Intel StrongARM EBSA-285 Evaluation BoardUpBoard: ARM PID Evaluation Board
\ No newline at end of file diff --git a/doc/html/user-guide/rt-arm-iq80310.html b/doc/html/user-guide/rt-arm-iq80310.html new file mode 100644 index 00000000..316783cb --- /dev/null +++ b/doc/html/user-guide/rt-arm-iq80310.html @@ -0,0 +1,289 @@ + + + + + + + + +Board: Intel IQ80310 XScale Development Kit +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Intel IQ80310 XScale Development Kit

Board: Intel IQ80310 XScale Development Kit
+
+CPU: Intel XScale 600MHz
+
+
+Startup, main stack             : stack used   388 size  2400
+Startup              :  Interrupt stack used   148 size  4096
+Startup              : Idlethread stack used    76 size  1120
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 73 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took   12.11 microseconds (399 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+    6.53    5.48    8.55    0.50   53%  23% Create thread
+    0.37    0.03    3.24    0.18   87%   1% Yield thread [all suspended]
+    0.24    0.00    2.06    0.12   87%   1% Suspend [suspended] thread
+    0.25    0.00    0.73    0.06   71%   1% Resume thread
+    0.36    0.09    0.82    0.10   89%   1% Set priority
+    0.03    0.00    0.42    0.05   90%  90% Get priority
+    1.07    0.52    6.39    0.18   92%   1% Kill [suspended] thread
+    0.33    0.06    0.91    0.08   78%   3% Yield [no other] thread
+    0.55    0.03    1.06    0.09   85%   1% Resume [suspended low prio] thread
+    0.28    0.00    1.79    0.11   84%   4% Resume [runnable low prio] thread
+    0.43    0.00    1.00    0.12   76%   1% Suspend [runnable] thread
+    0.31    0.00    1.24    0.09   82%   4% Yield [only low prio] thread
+    0.21    0.00    0.42    0.04   73%   1% Suspend [runnable->not runnable]
+    1.00    0.88    1.45    0.04   78%   4% Kill [runnable] thread
+    0.59    0.42    3.97    0.13   81%  87% Destroy [dead] thread
+    1.43    1.27    1.94    0.07   78%   7% Destroy [runnable] thread
+    3.12    2.58    5.09    0.33   56%  34% Resume [high priority] thread
+    0.87    0.36    1.39    0.07   86%   0% Thread switch
+
+    0.15    0.00    1.39    0.21   81%  81% Scheduler lock
+    0.16    0.00    0.64    0.08   85%   7% Scheduler unlock [0 threads]
+    0.16    0.00    0.64    0.08   75%   8% Scheduler unlock [1 suspended]
+    0.16    0.00    0.70    0.08   78%   6% Scheduler unlock [many suspended]
+    0.16    0.00    0.64    0.07   81%   4% Scheduler unlock [many low prio]
+
+    0.45    0.00    1.39    0.34   56%  46% Init mutex
+    0.43    0.18    3.27    0.23   87%  87% Lock [unlocked] mutex
+    0.48    0.09    3.88    0.26   84%  71% Unlock [locked] mutex
+    0.35    0.21    2.24    0.21   87%  84% Trylock [unlocked] mutex
+    0.26    0.00    0.67    0.13   78%   9% Trylock [locked] mutex
+    0.21    0.00    1.27    0.24   78%  75% Destroy mutex
+    2.58    2.09    3.09    0.13   75%   9% Unlock/Lock mutex
+
+    0.99    0.21    2.48    0.41   65%  28% Create mbox
+    0.04    0.00    0.39    0.07   90%  87% Peek [empty] mbox
+    0.47    0.27    3.48    0.29   90%  78% Put [first] mbox
+    0.02    0.00    0.39    0.03   90%  90% Peek [1 msg] mbox
+    0.29    0.15    0.58    0.04   68%   3% Put [second] mbox
+    0.02    0.00    0.45    0.04   93%  93% Peek [2 msgs] mbox
+    0.48    0.21    3.67    0.26   84%  87% Get [first] mbox
+    0.35    0.09    0.82    0.11   75%   3% Get [second] mbox
+    0.50    0.21    3.18    0.33   90%  68% Tryput [first] mbox
+    0.39    0.15    1.39    0.19   78%  68% Peek item [non-empty] mbox
+    0.43    0.18    3.33    0.23   87%  90% Tryget [non-empty] mbox
+    0.28    0.03    0.79    0.06   68%   3% Peek item [empty] mbox
+    0.28    0.21    0.58    0.05   71%  65% Tryget [empty] mbox
+    0.01    0.00    0.36    0.02   96%  90% Waiting to get mbox
+    0.05    0.00    0.45    0.09   87%  84% Waiting to put mbox
+    0.42    0.09    2.88    0.20   84%  12% Delete mbox
+    1.39    1.27    2.39    0.14   87%  87% Put/Get mbox
+
+    0.35    0.00    1.36    0.45   75%  68% Init semaphore
+    0.19    0.00    0.45    0.04   81%   3% Post [0] semaphore
+    0.25    0.21    0.88    0.06   84%  81% Wait [1] semaphore
+    0.32    0.06    1.79    0.21   78%  68% Trywait [0] semaphore
+    0.20    0.00    0.52    0.06   62%   3% Trywait [1] semaphore
+    0.07    0.00    0.45    0.10   84%  81% Peek semaphore
+    0.06    0.00    0.52    0.06   71%  78% Destroy semaphore
+    1.45    1.42    1.79    0.04   87%  87% Post/Wait semaphore
+
+    0.70    0.00    2.88    0.47   43%  34% Create counter
+    0.05    0.00    0.42    0.09   87%  84% Get counter value
+    0.02    0.00    0.45    0.04   93%  93% Set counter value
+    0.38    0.12    0.58    0.06   59%   3% Tick counter
+    0.03    0.00    0.48    0.05   93%  78% Delete counter
+
+    1.10    0.39    4.30    0.47   62%  53% Create alarm
+    0.58    0.03    3.12    0.18   87%   3% Initialize alarm
+    0.04    0.00    0.42    0.07   90%  90% Disable alarm
+    0.54    0.36    1.36    0.12   84%  43% Enable alarm
+    0.03    0.00    0.70    0.06   84%  84% Delete alarm
+    0.50    0.24    0.97    0.08   84%   6% Tick counter [1 alarm]
+    5.30    5.12    5.97    0.14   84%  75% Tick counter [many alarms]
+    0.82    0.64    1.36    0.11   78%  43% Tick & fire counter [1 alarm]
+   14.13   13.85   14.55    0.09   78%   3% Tick & fire counters [>1 together]
+    5.56    5.45    6.00    0.09   78%  71% Tick & fire counters [>1 separately]
+    9.69    9.45   12.52    0.22   64%  71% Alarm latency [0 threads]
+    9.98    9.48   12.76    0.23   69%  14% Alarm latency [2 threads]
+   10.38    9.48   24.67    0.59   74%  45% Alarm latency [many threads]
+   11.72   11.30   21.33    0.32   81%  58% Alarm -> thread resume latency
+
+    1.87    1.82   10.42    0.00            Clock/interrupt latency
+
+    3.02    2.58    7.67    0.00            Clock DSR latency
+
+    9       0     260  (main stack:   776)  Thread stack used (1120 total)
+All done, main stack            : stack used   776 size  2400
+All done             :  Interrupt stack used   268 size  4096
+All done             : Idlethread stack used   244 size  1120
+
+Timing complete - 30300 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
Board: ARM PID Evaluation BoardUpBoard: Toshiba JMR3904 Evaluation Board
\ No newline at end of file diff --git a/doc/html/user-guide/rt-arm-pid.html b/doc/html/user-guide/rt-arm-pid.html new file mode 100644 index 00000000..7506427c --- /dev/null +++ b/doc/html/user-guide/rt-arm-pid.html @@ -0,0 +1,441 @@ + + + + + + + + +Board: ARM PID Evaluation Board +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: ARM PID Evaluation Board

CPU : ARM 7TDMI 20 MHz

Board: ARM PID Evaluation Board
+
+CPU :  ARM 7TDMI 20 MHz
+
+
+
+Startup, main stack             : stack used   404 size  2400
+Startup              :  Interrupt stack used   136 size  4096
+Startup              : Idlethread stack used    84 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 6 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took  120.74 microseconds (150 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  50
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   99.01   68.00  129.60   15.62   50%  26% Create thread
+   21.60   21.60   21.60    0.00  100% 100% Yield thread [all suspended]
+   15.65   15.20   16.00    0.39   56%  44% Suspend [suspended] thread
+   15.79   15.20   16.00    0.31   74%  26% Resume thread
+   23.65   23.20   24.00    0.39   56%  44% Set priority
+    2.26    1.60    2.40    0.24   82%  18% Get priority
+   51.39   51.20   52.00    0.29   76%  76% Kill [suspended] thread
+   21.60   21.60   21.60    0.00  100% 100% Yield [no other] thread
+   29.47   28.00   29.60    0.22   86%   2% Resume [suspended low prio] thread
+   15.60   15.20   16.00    0.40  100%  50% Resume [runnable low prio] thread
+   27.73   24.00   28.00    0.40   74%   2% Suspend [runnable] thread
+   21.60   21.60   21.60    0.00  100% 100% Yield [only low prio] thread
+   15.65   15.20   16.00    0.39   56%  44% Suspend [runnable->not runnable]
+   51.39   51.20   52.00    0.29   76%  76% Kill [runnable] thread
+   27.66   27.20   28.80    0.41   54%  44% Destroy [dead] thread
+   68.93   64.80   69.60    0.35   72%   2% Destroy [runnable] thread
+   91.26   90.40  107.20    0.64   66%  32% Resume [high priority] thread
+   49.14   48.80   49.60    0.39   57%  57% Thread switch
+
+    2.20    1.60    2.40    0.30   75%  25% Scheduler lock
+   10.20    9.60   10.40    0.30   75%  25% Scheduler unlock [0 threads]
+   10.20    9.60   10.40    0.30   75%  25% Scheduler unlock [1 suspended]
+   10.20    9.60   10.40    0.30   75%  25% Scheduler unlock [many suspended]
+   10.20    9.60   10.40    0.30   75%  25% Scheduler unlock [many low prio]
+
+    6.85    6.40    7.20    0.39   56%  43% Init mutex
+   18.40   18.40   18.40    0.00  100% 100% Lock [unlocked] mutex
+   19.57   19.20   20.00    0.40   53%  53% Unlock [locked] mutex
+   16.55   16.00   16.80    0.34   68%  31% Trylock [unlocked] mutex
+   14.55   14.40   15.20    0.24   81%  81% Trylock [locked] mutex
+    3.55    3.20    4.00    0.39   56%  56% Destroy mutex
+  119.85  119.20  120.00    0.24   81%  18% Unlock/Lock mutex
+
+   12.85   12.80   13.60    0.09   93%  93% Create mbox
+    1.65    1.60    2.40    0.09   93%  93% Peek [empty] mbox
+   20.70   20.00   20.80    0.17   87%  12% Put [first] mbox
+    1.65    1.60    2.40    0.09   93%  93% Peek [1 msg] mbox
+   20.70   20.00   20.80    0.17   87%  12% Put [second] mbox
+    1.65    1.60    2.40    0.09   93%  93% Peek [2 msgs] mbox
+   20.85   20.80   21.60    0.09   93%  93% Get [first] mbox
+   20.85   20.80   21.60    0.09   93%  93% Get [second] mbox
+   19.90   19.20   20.00    0.17   87%  12% Tryput [first] mbox
+   17.60   17.60   17.60    0.00  100% 100% Peek item [non-empty] mbox
+   20.90   20.80   21.60    0.17   87%  87% Tryget [non-empty] mbox
+   16.80   16.80   16.80    0.00  100% 100% Peek item [empty] mbox
+   17.65   17.60   18.40    0.09   93%  93% Tryget [empty] mbox
+    1.85    1.60    2.40    0.34   68%  68% Waiting to get mbox
+    1.85    1.60    2.40    0.34   68%  68% Waiting to put mbox
+   19.40   19.20   20.00    0.30   75%  75% Delete mbox
+   65.05   64.80   65.60    0.34   68%  68% Put/Get mbox
+
+    7.05    6.40    7.20    0.24   81%  18% Init semaphore
+   15.55   15.20   16.00    0.39   56%  56% Post [0] semaphore
+   17.35   16.80   17.60    0.34   68%  31% Wait [1] semaphore
+   14.60   14.40   15.20    0.30   75%  75% Trywait [0] semaphore
+   14.20   13.60   14.40    0.30   75%  25% Trywait [1] semaphore
+    4.55    4.00    4.80    0.34   68%  31% Peek semaphore
+    3.75    3.20    4.00    0.34   68%  31% Destroy semaphore
+   70.85   70.40   71.20    0.39   56%  43% Post/Wait semaphore
+
+    6.05    5.60    6.40    0.39   56%  43% Create counter
+    2.25    1.60    2.40    0.24   81%  18% Get counter value
+    2.25    1.60    2.40    0.24   81%  18% Set counter value
+   19.70   19.20   20.00    0.37   62%  37% Tick counter
+    3.45    3.20    4.00    0.34   68%  68% Delete counter
+
+    9.05    8.80    9.60    0.34   68%  68% Create alarm
+   29.60   29.60   29.60    0.00  100% 100% Initialize alarm
+    2.15    1.60    2.40    0.34   68%  31% Disable alarm
+   29.35   28.80   29.60    0.34   68%  31% Enable alarm
+    5.10    4.80    5.60    0.37   62%  62% Delete alarm
+   23.20   23.20   23.20    0.00  100% 100% Tick counter [1 alarm]
+  138.00  137.60  138.40    0.40  100%  50% Tick counter [many alarms]
+   40.40   40.00   40.80    0.40  100%  50% Tick & fire counter [1 alarm]
+  704.25  697.60  804.00   12.47   93%  93% Tick & fire counters [>1 together]
+  155.20  155.20  155.20    0.00  100% 100% Tick & fire counters [>1 separately]
+  105.20  104.80  151.20    0.76   99%  94% Alarm latency [0 threads]
+  117.57  104.80  149.60    7.13   57%  25% Alarm latency [2 threads]
+  117.49  104.80  148.80    7.10   58%  26% Alarm latency [many threads]
+  192.59  177.60  316.00    1.93   98%   0% Alarm -> thread resume latency
+
+   22.10   21.60   24.00    0.00            Clock/interrupt latency
+
+   38.69   32.80   61.60    0.00            Clock DSR latency
+
+  297     276     316  (main stack:   752)  Thread stack used (1120 total)
+All done, main stack            : stack used   752 size  2400
+All done             :  Interrupt stack used   288 size  4096
+All done             : Idlethread stack used   272 size  2048
+
+Timing complete - 30350 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	  

CPU : ARM 920T 20 MHz


Board: ARM PID Evaluation Board
+
+CPU :  ARM 920T 20 MHz
+
+
+Startup, main stack             : stack used   404 size  2400
+Startup              :  Interrupt stack used   136 size  4096
+Startup              : Idlethread stack used    84 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 15 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took  291.41 microseconds (364 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  50
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+  257.78  168.00  568.00   48.70   56%  28% Create thread
+   50.21   49.60   50.40    0.29   76%  24% Yield thread [all suspended]
+   36.26   36.00   36.80    0.35   68%  68% Suspend [suspended] thread
+   37.20   36.80   37.60    0.40  100%  50% Resume thread
+   56.24   56.00   56.80    0.34   70%  70% Set priority
+    5.20    4.80    5.60    0.40  100%  50% Get priority
+  122.75  122.40  123.20    0.39   56%  56% Kill [suspended] thread
+   50.19   49.60   50.40    0.31   74%  26% Yield [no other] thread
+   69.49   66.40   69.60    0.21   92%   2% Resume [suspended low prio] thread
+   37.01   36.80   37.60    0.31   74%  74% Resume [runnable low prio] thread
+   64.75   55.20   65.60    0.38   80%   2% Suspend [runnable] thread
+   50.19   49.60   50.40    0.31   74%  26% Yield [only low prio] thread
+   36.24   36.00   36.80    0.34   70%  70% Suspend [runnable->not runnable]
+  122.75  122.40  123.20    0.39   56%  56% Kill [runnable] thread
+   67.76   67.20   68.00    0.34   70%  30% Destroy [dead] thread
+  167.07  158.40  168.00    0.35   92%   2% Destroy [runnable] thread
+  213.49  212.00  249.60    1.46   84%  90% Resume [high priority] thread
+  122.81  120.00  389.60    4.17   99%  99% Thread switch
+
+    4.70    4.00    4.80    0.17   87%  12% Scheduler lock
+   23.70   23.20   24.00    0.37   62%  37% Scheduler unlock [0 threads]
+   23.60   23.20   24.00    0.40  100%  50% Scheduler unlock [1 suspended]
+   23.70   23.20   24.00    0.37   62%  37% Scheduler unlock [many suspended]
+   23.60   23.20   24.00    0.40  100%  50% Scheduler unlock [many low prio]
+
+   15.65   15.20   16.00    0.39   56%  43% Init mutex
+   42.40   42.40   42.40    0.00  100% 100% Lock [unlocked] mutex
+   45.37   44.80   46.40    0.36   65%  31% Unlock [locked] mutex
+   39.20   39.20   39.20    0.00  100% 100% Trylock [unlocked] mutex
+   34.45   34.40   35.20    0.09   93%  93% Trylock [locked] mutex
+    8.00    8.00    8.00    0.00  100% 100% Destroy mutex
+  284.42  284.00  284.80    0.40   53%  46% Unlock/Lock mutex
+
+   29.40   28.80   29.60    0.30   75%  25% Create mbox
+    3.35    3.20    4.00    0.24   81%  81% Peek [empty] mbox
+   49.35   48.80   49.60    0.34   68%  31% Put [first] mbox
+    3.35    3.20    4.00    0.24   81%  81% Peek [1 msg] mbox
+   49.35   48.80   49.60    0.34   68%  31% Put [second] mbox
+    3.35    3.20    4.00    0.24   81%  81% Peek [2 msgs] mbox
+   49.15   48.80   49.60    0.39   56%  56% Get [first] mbox
+   49.15   48.80   49.60    0.39   56%  56% Get [second] mbox
+   47.80   47.20   48.00    0.30   75%  25% Tryput [first] mbox
+   41.40   40.80   41.60    0.30   75%  25% Peek item [non-empty] mbox
+   49.40   48.80   49.60    0.30   75%  25% Tryget [non-empty] mbox
+   40.15   40.00   40.80    0.24   81%  81% Peek item [empty] mbox
+   40.95   40.80   41.60    0.24   81%  81% Tryget [empty] mbox
+    4.05    4.00    4.80    0.09   93%  93% Waiting to get mbox
+    4.05    4.00    4.80    0.09   93%  93% Waiting to put mbox
+   45.60   45.60   45.60    0.00  100% 100% Delete mbox
+  153.27  152.80  153.60    0.39   59%  40% Put/Get mbox
+
+   16.80   16.80   16.80    0.00  100% 100% Init semaphore
+   36.60   36.00   36.80    0.30   75%  25% Post [0] semaphore
+   39.60   39.20   40.00    0.40  100%  50% Wait [1] semaphore
+   34.80   34.40   35.20    0.40  100%  50% Trywait [0] semaphore
+   33.35   32.80   33.60    0.34   68%  31% Trywait [1] semaphore
+   10.30    9.60   10.40    0.17   87%  12% Peek semaphore
+    8.80    8.80    8.80    0.00  100% 100% Destroy semaphore
+  166.92  166.40  167.20    0.36   65%  34% Post/Wait semaphore
+
+   13.60   13.60   13.60    0.00  100% 100% Create counter
+    4.85    4.80    5.60    0.09   93%  93% Get counter value
+    4.80    4.80    4.80    0.00  100% 100% Set counter value
+   45.25   44.80   45.60    0.39   56%  43% Tick counter
+    7.75    7.20    8.00    0.34   68%  31% Delete counter
+
+   20.80   20.80   20.80    0.00  100% 100% Create alarm
+   69.30   68.80   69.60    0.37   62%  37% Initialize alarm
+    4.80    4.80    4.80    0.00  100% 100% Disable alarm
+   67.35   67.20   68.00    0.24   81%  81% Enable alarm
+   11.80   11.20   12.00    0.30   75%  25% Delete alarm
+   54.80   54.40   55.20    0.40  100%  50% Tick counter [1 alarm]
+  372.35  363.20  652.80   17.53   96%  96% Tick counter [many alarms]
+   95.50   95.20   96.00    0.37   62%  62% Tick & fire counter [1 alarm]
+ 1757.92 1707.20 1996.80   81.43   81%  81% Tick & fire counters [>1 together]
+  404.37  404.00  404.80    0.40   53%  53% Tick & fire counters [>1 separately]
+  256.57  254.40  395.20    2.17   98%  97% Alarm latency [0 threads]
+  296.60  255.20  359.20   23.53   53%  31% Alarm latency [2 threads]
+  307.49  265.60  357.60   27.52   53%  53% Alarm latency [many threads]
+  467.04  432.00  788.80    5.03   97%   1% Alarm -> thread resume latency
+
+   55.63   54.40   60.80    0.00            Clock/interrupt latency
+
+  101.23   80.80 1433.60    0.00            Clock DSR latency
+
+  316     316     316  (main stack:   752)  Thread stack used (1120 total)
+All done, main stack            : stack used   752 size  2400
+All done             :  Interrupt stack used   288 size  4096
+All done             : Idlethread stack used   272 size  2048
+
+Timing complete - 30780 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+	  

PrevHomeNext
Board: Cirrus Logic EDB7111-2 Development BoardUpBoard: Intel IQ80310 XScale Development Kit
\ No newline at end of file diff --git a/doc/html/user-guide/rt-at91-eb40.html b/doc/html/user-guide/rt-at91-eb40.html new file mode 100644 index 00000000..eddf7eee --- /dev/null +++ b/doc/html/user-guide/rt-at91-eb40.html @@ -0,0 +1,287 @@ + + + + + + + + +Board: Atmel AT91/EB40 +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Atmel AT91/EB40

Board: Atmel AT91/EB40
+CPU : AT91R40807 (ARM7TDMI core), 32MHz
+512KB RAM, 64K Flash
+
+Startup, main stack             : stack used   420 size  2400
+Startup              :  Interrupt stack used   144 size  4096
+Startup              : Idlethread stack used    84 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 3 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took  127.53 microseconds (130 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  25
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   86.48   71.29  101.56    7.99   48%  28% Create thread
+   20.70   20.51   21.48    0.31   80%  80% Yield thread [all suspended]
+   17.15   16.60   17.58    0.48   56%  44% Suspend [suspended] thread
+   17.07   16.60   17.58    0.49   52%  52% Resume thread
+   25.51   25.39   26.37    0.21   88%  88% Set priority
+    3.16    2.93    3.91    0.36   76%  76% Get priority
+   52.34   51.76   52.73    0.47   60%  40% Kill [suspended] thread
+   20.70   20.51   21.48    0.31   80%  80% Yield [no other] thread
+   28.98   28.32   30.27    0.48   60%  36% Resume [suspended low prio] thread
+   17.11   16.60   17.58    0.49   52%  48% Resume [runnable low prio] thread
+   27.85   26.37   28.32    0.52   96%   4% Suspend [runnable] thread
+   20.70   20.51   21.48    0.31   80%  80% Yield [only low prio] thread
+   17.23   16.60   17.58    0.45   64%  36% Suspend [runnable->not runnable]
+   52.34   51.76   52.73    0.47   60%  40% Kill [runnable] thread
+   33.01   32.23   33.20    0.31   80%  20% Destroy [dead] thread
+   72.03   70.31   72.27    0.38   80%   4% Destroy [runnable] thread
+   96.99   95.70  112.30    1.22   64%  96% Resume [high priority] thread
+   51.48   49.80  164.06    1.76   99%  99% Thread switch
+
+    2.78    1.95    2.93    0.26   84%  15% Scheduler lock
+   11.81   11.72   12.70    0.17   90%  90% Scheduler unlock [0 threads]
+   11.81   11.72   12.70    0.17   90%  90% Scheduler unlock [1 suspended]
+   11.81   11.72   12.70    0.17   90%  90% Scheduler unlock [many suspended]
+   11.81   11.72   12.70    0.17   90%  90% Scheduler unlock [many low prio]
+
+    5.49    4.88    5.86    0.46   62%  37% Init mutex
+   20.20   19.53   20.51    0.42   68%  31% Lock [unlocked] mutex
+   24.44   24.41   25.39    0.06   96%  96% Unlock [locked] mutex
+   18.25   17.58   18.55    0.42   68%  31% Trylock [unlocked] mutex
+   16.11   15.63   16.60    0.49  100%  50% Trylock [locked] mutex
+    6.10    5.86    6.84    0.37   75%  75% Destroy mutex
+  124.21  124.02  125.00    0.30   81%  81% Unlock/Lock mutex
+
+    9.28    8.79    9.77    0.49  100%  50% Create mbox
+    2.93    2.93    2.93    0.00  100% 100% Peek [empty] mbox
+   22.58   22.46   23.44    0.21   87%  87% Put [first] mbox
+    2.44    1.95    2.93    0.49  100%  50% Peek [1 msg] mbox
+   22.58   22.46   23.44    0.21   87%  87% Put [second] mbox
+    2.44    1.95    2.93    0.49  100%  50% Peek [2 msgs] mbox
+   22.71   22.46   23.44    0.37   75%  75% Get [first] mbox
+   22.71   22.46   23.44    0.37   75%  75% Get [second] mbox
+   21.18   20.51   21.48    0.42   68%  31% Tryput [first] mbox
+   18.98   18.55   19.53    0.48   56%  56% Peek item [non-empty] mbox
+   22.46   22.46   22.46    0.00  100% 100% Tryget [non-empty] mbox
+   18.31   17.58   18.55    0.37   75%  25% Peek item [empty] mbox
+   19.53   19.53   19.53    0.00  100% 100% Tryget [empty] mbox
+    2.69    1.95    2.93    0.37   75%  25% Waiting to get mbox
+    2.93    2.93    2.93    0.00  100% 100% Waiting to put mbox
+   23.86   23.44   24.41    0.48   56%  56% Delete mbox
+   67.60   67.38   68.36    0.33   78%  78% Put/Get mbox
+
+    5.37    4.88    5.86    0.49  100%  50% Init semaphore
+   16.97   16.60   17.58    0.46   62%  62% Post [0] semaphore
+   18.98   18.55   19.53    0.48   56%  56% Wait [1] semaphore
+   15.81   15.63   16.60    0.30   81%  81% Trywait [0] semaphore
+   15.29   14.65   15.63    0.44   65%  34% Trywait [1] semaphore
+    5.62    4.88    5.86    0.37   75%  25% Peek semaphore
+    6.35    5.86    6.84    0.49  100%  50% Destroy semaphore
+   72.36   72.27   73.24    0.17   90%  90% Post/Wait semaphore
+
+    7.08    6.84    7.81    0.37   75%  75% Create counter
+    3.17    2.93    3.91    0.37   75%  75% Get counter value
+    3.05    2.93    3.91    0.21   87%  87% Set counter value
+   24.11   23.44   24.41    0.42   68%  31% Tick counter
+    5.49    4.88    5.86    0.46   62%  37% Delete counter
+
+   10.92   10.74   11.72    0.30   81%  81% Create alarm
+   31.46   31.25   32.23    0.33   78%  78% Initialize alarm
+    3.05    2.93    3.91    0.21   87%  87% Disable alarm
+   31.49   31.25   32.23    0.37   75%  75% Enable alarm
+    7.02    6.84    7.81    0.30   81%  81% Delete alarm
+   31.16   30.27   31.25    0.17   90%   9% Tick counter [1 alarm]
+  309.26  304.69  425.78    7.28   96%  96% Tick counter [many alarms]
+   44.83   43.95   44.92    0.17   90%   9% Tick & fire counter [1 alarm]
+  781.68  774.41  893.55   13.62   93%  93% Tick & fire counters [>1 together]
+  324.16  320.31  433.59    6.84   96%  96% Tick & fire counters [>1 separately]
+  114.26  113.28  167.97    0.84   57%  42% Alarm latency [0 threads]
+  126.91  113.28  159.18    8.20   50%  31% Alarm latency [2 threads]
+  127.11  113.28  158.20    8.09   51%  28% Alarm latency [many threads]
+  196.49  189.45  331.05    2.10   98%   0% Alarm -> thread resume latency
+
+   23.50   23.44   25.39    0.00            Clock/interrupt latency
+
+   40.31   33.20  514.65    0.00            Clock DSR latency
+
+  300     271     312  (main stack:   832)  Thread stack used (1120 total)
+All done, main stack            : stack used   832 size  2400
+All done             :  Interrupt stack used   288 size  4096
+All done             : Idlethread stack used   272 size  2048
+
+Timing complete - 30350 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+	

PrevHomeNext
Real-time characterizationUpBoard: Intel StrongARM EBSA-285 Evaluation Board
\ No newline at end of file diff --git a/doc/html/user-guide/rt-i386-pc.html b/doc/html/user-guide/rt-i386-pc.html new file mode 100644 index 00000000..c27f2a6a --- /dev/null +++ b/doc/html/user-guide/rt-i386-pc.html @@ -0,0 +1,282 @@ + + + + + + + + +Board: PC +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: PC

Board: PC
+
+CPU: 433MHz Celeron
+
+Startup, main stack             : stack used   124 size  2912
+Startup              :  Interrupt stack used   280 size  4108
+Startup              : Idlethread stack used    62 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 8 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took    6.75 microseconds (8 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+    3.93    1.68    8.38    0.93   68%   3% Create thread
+    0.71    0.00    3.35    0.84   59%  59% Yield thread [all suspended]
+    0.65    0.00    5.03    0.84   64%  64% Suspend [suspended] thread
+    0.63    0.00    1.68    0.79   62%  62% Resume thread
+    0.76    0.00    1.68    0.83   54%  54% Set priority
+    0.39    0.00    1.68    0.60   76%  76% Get priority
+    1.34    0.00    6.70    0.67   73%  25% Kill [suspended] thread
+    0.68    0.00    1.68    0.81   59%  59% Yield [no other] thread
+    0.92    0.00    1.68    0.83   54%  45% Resume [suspended low prio] thread
+    0.63    0.00    1.68    0.79   62%  62% Resume [runnable low prio] thread
+    0.84    0.00    1.68    0.84  100%  50% Suspend [runnable] thread
+    0.73    0.00    1.68    0.82   56%  56% Yield [only low prio] thread
+    0.58    0.00    1.68    0.76   65%  65% Suspend [runnable->not runnable]
+    1.26    0.00    3.35    0.67   71%  26% Kill [runnable] thread
+    0.86    0.00    3.35    0.86   98%  50% Destroy [dead] thread
+    1.44    0.00    1.68    0.40   85%  14% Destroy [runnable] thread
+    4.45    3.35    6.70    0.89   53%  40% Resume [high priority] thread
+    1.62    0.00    1.68    0.10   96%   3% Thread switch
+
+    0.41    0.00    1.68    0.61   75%  75% Scheduler lock
+    0.48    0.00    1.68    0.69   71%  71% Scheduler unlock [0 threads]
+    0.59    0.00    1.68    0.76   64%  64% Scheduler unlock [1 suspended]
+    0.45    0.00    1.68    0.65   73%  73% Scheduler unlock [many suspended]
+    0.45    0.00    1.68    0.65   73%  73% Scheduler unlock [many low prio]
+
+    0.52    0.00    1.68    0.72   68%  68% Init mutex
+    0.79    0.00    5.03    0.93   96%  59% Lock [unlocked] mutex
+    0.84    0.00    5.03    0.94   96%  56% Unlock [locked] mutex
+    0.63    0.00    1.68    0.79   62%  62% Trylock [unlocked] mutex
+    0.52    0.00    1.68    0.72   68%  68% Trylock [locked] mutex
+    0.58    0.00    1.68    0.76   65%  65% Destroy mutex
+    3.40    3.35    5.03    0.10   96%  96% Unlock/Lock mutex
+
+    0.99    0.00    1.68    0.81   59%  40% Create mbox
+    0.47    0.00    1.68    0.68   71%  71% Peek [empty] mbox
+    0.79    0.00    5.03    0.93   96%  59% Put [first] mbox
+    0.42    0.00    1.68    0.63   75%  75% Peek [1 msg] mbox
+    0.79    0.00    1.68    0.83   53%  53% Put [second] mbox
+    0.37    0.00    1.68    0.57   78%  78% Peek [2 msgs] mbox
+    0.73    0.00    3.35    0.87   59%  59% Get [first] mbox
+    0.73    0.00    1.68    0.82   56%  56% Get [second] mbox
+    0.79    0.00    3.35    0.88   56%  56% Tryput [first] mbox
+    0.68    0.00    3.35    0.85   62%  62% Peek item [non-empty] mbox
+    0.73    0.00    3.35    0.87   59%  59% Tryget [non-empty] mbox
+    0.63    0.00    1.68    0.79   62%  62% Peek item [empty] mbox
+    0.68    0.00    1.68    0.81   59%  59% Tryget [empty] mbox
+    0.26    0.00    1.68    0.44   84%  84% Waiting to get mbox
+    0.63    0.00    1.68    0.79   62%  62% Waiting to put mbox
+    0.73    0.00    3.35    0.87   59%  59% Delete mbox
+    3.25    1.68    3.35    0.20   93%   6% Put/Get mbox
+
+    0.63    0.00    1.68    0.79   62%  62% Init semaphore
+    0.63    0.00    1.68    0.79   62%  62% Post [0] semaphore
+    0.63    0.00    1.68    0.79   62%  62% Wait [1] semaphore
+    0.52    0.00    1.68    0.72   68%  68% Trywait [0] semaphore
+    0.52    0.00    1.68    0.72   68%  68% Trywait [1] semaphore
+    0.52    0.00    1.68    0.72   68%  68% Peek semaphore
+    0.21    0.00    1.68    0.37   87%  87% Destroy semaphore
+    3.30    1.68    3.35    0.10   96%   3% Post/Wait semaphore
+
+    0.79    0.00    3.35    0.88   56%  56% Create counter
+    0.42    0.00    1.68    0.63   75%  75% Get counter value
+    0.37    0.00    1.68    0.57   78%  78% Set counter value
+    0.73    0.00    1.68    0.82   56%  56% Tick counter
+    0.63    0.00    1.68    0.79   62%  62% Delete counter
+
+    0.89    0.00    3.35    0.89   96%  50% Create alarm
+    0.84    0.00    1.68    0.84  100%  50% Initialize alarm
+    0.52    0.00    1.68    0.72   68%  68% Disable alarm
+    0.89    0.00    3.35    0.89   96%  50% Enable alarm
+    0.58    0.00    1.68    0.76   65%  65% Delete alarm
+    0.63    0.00    1.68    0.79   62%  62% Tick counter [1 alarm]
+    5.03    3.35    6.70    0.10   93%   3% Tick counter [many alarms]
+    0.94    0.00    1.68    0.82   56%  43% Tick & fire counter [1 alarm]
+   11.16   10.06   11.73    0.76   65%  34% Tick & fire counters [>1 together]
+    5.19    5.03    6.70    0.28   90%  90% Tick & fire counters [>1 separately]
+    0.01    0.00    1.68    0.03   99%  99% Alarm latency [0 threads]
+    0.13    0.00    1.68    0.24   92%  92% Alarm latency [2 threads]
+    0.94    0.00    3.35    0.85   53%  45% Alarm latency [many threads]
+    1.75    1.68    6.70    0.15   96%  96% Alarm -> thread resume latency
+
+   41       0     368  (main stack:  1036)  Thread stack used (1712 total)
+All done, main stack            : stack used  1036 size  2912
+All done             :  Interrupt stack used   368 size  4108
+All done             : Idlethread stack used   288 size  2048
+
+Timing complete - 28520 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>

PrevHomeNext
Board: Hitachi Solution Engine 7751 SH4 (se7751)UpBoard: NEC V850 Cosmo Evaluation Board
\ No newline at end of file diff --git a/doc/html/user-guide/rt-mn10300-stdeval1.html b/doc/html/user-guide/rt-mn10300-stdeval1.html new file mode 100644 index 00000000..357d031c --- /dev/null +++ b/doc/html/user-guide/rt-mn10300-stdeval1.html @@ -0,0 +1,274 @@ + + + + + + + + +Board: Matsushita STDEVAL1 Board +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Matsushita STDEVAL1 Board


Board: Matsushita STDEVAL1 Board
+
+CPU  : MN103002A  60MHz
+
+eCOS Kernel Timings
+Note: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 18 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took   13.73 microseconds (205 raw clock ticks)
+
+Testing parameters:
+   Clock samples:          32
+   Threads:                24
+   Thread switches:       128
+   Mutexes:                32
+   Mailboxes:              32
+   Semaphores:             32
+   Scheduler operations:  128
+   Counters:               32
+   Alarms:                 32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   14.36   11.53   23.53    1.81   54%  33% Create thread
+    2.64    2.53    5.07    0.20   95%  95% Yield thread [all suspended]
+    2.25    1.93    4.80    0.31   45%  83% Suspend [suspended] thread
+    2.19    2.00    4.93    0.28   91%  91% Resume thread
+    3.42    3.00    8.40    0.47   95%  87% Set priority
+    0.31    0.13    1.20    0.19   79%  58% Get priority
+    8.26    7.40   18.80    0.93   95%  87% Kill [suspended] thread
+    2.58    2.47    5.13    0.21   95%  95% Yield [no other] thread
+    5.07    4.53    8.67    0.44   62%  50% Resume [suspended low prio] thread
+    2.27    2.07    4.53    0.23   87%  87% Resume [runnable low prio] thread
+    4.76    4.07    9.40    0.65   66%  75% Suspend [runnable] thread
+    2.63    2.53    4.73    0.18   95%  95% Yield [only low prio] thread
+    2.09    1.87    4.27    0.27   91%  79% Suspend [runnable->not runnable]
+   10.79   10.00   18.20    0.81   95%  79% Kill [runnable] thread
+   20.30   18.40   28.80    1.42   79%  54% Resume [high priority] thread
+    5.53    5.47   12.13    0.11   98%  97% Thread switch
+
+    0.28    0.27    2.20    0.03   97%  97% Scheduler lock
+    1.14    1.13    2.00    0.01   99%  99% Scheduler unlock [0 threads]
+    1.14    1.13    2.40    0.02   99%  99% Scheduler unlock [1 suspended]
+    1.16    1.13    3.33    0.06   95%  95% Scheduler unlock [many suspended]
+    1.23    1.20    3.13    0.05   95%  95% Scheduler unlock [many low prio]
+
+    1.29    1.00    4.20    0.25   65%  50% Init mutex
+    2.65    2.47    5.27    0.23   93%  87% Lock [unlocked] mutex
+    3.26    3.07    6.80    0.28   93%  87% Unlock [locked] mutex
+    2.48    2.33    5.07    0.21   90%  87% Trylock [unlocked] mutex
+    2.20    2.07    4.67    0.21   93%  87% Trylock [locked] mutex
+    0.23    0.20    1.00    0.05   96%  93% Destroy mutex
+   25.11   24.73   27.53    0.21   65%  31% Unlock/Lock mutex
+
+    2.49    2.00    5.73    0.32   81%  37% Create mbox
+    0.11    0.00    1.60    0.15   84%  81% Peek [empty] mbox
+    3.01    2.60    9.47    0.52   96%  78% Put [first] mbox
+    0.10    0.00    1.67    0.15   87%  81% Peek [1 msg] mbox
+    3.09    2.60    8.33    0.50   93%  75% Put [second] mbox
+    0.06    0.00    1.13    0.08   96%  87% Peek [2 msgs] mbox
+    3.10    2.80    7.93    0.40   93%  84% Get [first] mbox
+    3.13    2.80    7.53    0.43   90%  78% Get [second] mbox
+    2.99    2.60    8.53    0.52   93%  75% Tryput [first] mbox
+    2.65    2.33    6.80    0.42   90%  78% Peek item [non-empty] mbox
+    3.05    2.73    7.60    0.42   93%  78% Tryget [non-empty] mbox
+    3.16    2.93    6.27    0.31   84%  84% Peek item [empty] mbox
+    2.48    2.27    5.73    0.30   84%  84% Tryget [empty] mbox
+    0.23    0.13    2.07    0.14   96%  87% Waiting to get mbox
+    0.22    0.13    1.93    0.13   96%  75% Waiting to put mbox
+    3.08    2.80    7.93    0.42   84%  84% Delete mbox
+   16.01   15.53   19.00    0.52   78%  59% Put/Get mbox
+
+    0.85    0.67    3.27    0.19   96%  50% Init semaphore
+    2.00    1.93    3.87    0.12   96%  90% Post [0] semaphore
+    2.05    2.00    3.47    0.09   96%  96% Wait [1] semaphore
+    1.85    1.80    3.47    0.10   96%  96% Trywait [0] semaphore
+    1.82    1.80    2.53    0.04   96%  96% Trywait [1] semaphore
+    0.36    0.33    1.33    0.06   96%  96% Peek semaphore
+    0.38    0.33    1.87    0.09   96%  96% Destroy semaphore
+   12.38   12.20   16.27    0.30   93%  87% Post/Wait semaphore
+
+    1.18    0.73    4.07    0.24   78%  18% Create counter
+    0.20    0.13    1.40    0.11   87%  87% Get counter value
+    0.24    0.20    1.40    0.08   93%  93% Set counter value
+    3.17    3.13    4.20    0.07   93%  93% Tick counter
+    0.44    0.40    1.73    0.08   96%  96% Delete counter
+
+    2.24    1.67    5.13    0.47   68%  65% Create alarm
+    3.86    3.40    9.67    0.51   90%  78% Initialize alarm
+    0.15    0.07    1.60    0.12   96%  68% Disable alarm
+    3.76    3.47    7.67    0.35   93%  75% Enable alarm
+    0.57    0.47    2.73    0.16   96%  84% Delete alarm
+    3.64    3.60    4.73    0.07   96%  96% Tick counter [1 alarm]
+   21.72   21.67   23.27    0.10   96%  96% Tick counter [many alarms]
+    6.13    6.07    8.07    0.12   96%  96% Tick & fire counter [1 alarm]
+  101.40   99.53  132.73    2.75   93%  93% Tick & fire counters [>1 together]
+   24.21   24.13   26.40    0.14   96%  96% Tick & fire counters [>1 separately]
+   11.74   11.60   22.67    0.26   98%  98% Alarm latency [0 threads]
+   14.58   11.73   24.93    1.59   54%  28% Alarm latency [2 threads]
+   18.18   15.20   41.07    1.96   60%  43% Alarm latency [many threads]
+
+    3.06    2.13   10.33    0.00            Clock/interrupt latency
+
+Timing complete - 23480 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
Board: Toshiba REF 4955UpBoard: Fujitsu SPARClite Evaluation Board
\ No newline at end of file diff --git a/doc/html/user-guide/rt-ppc-cogent.html b/doc/html/user-guide/rt-ppc-cogent.html new file mode 100644 index 00000000..b19a968a --- /dev/null +++ b/doc/html/user-guide/rt-ppc-cogent.html @@ -0,0 +1,277 @@ + + + + + + + + +Board: Cogent CMA MPC860 (PowerPC) Evaluation +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Cogent CMA MPC860 (PowerPC) Evaluation

Board: Cogent CMA MPC860 (PowerPC) Evaluation 
+CPU  : MPC860, revision A3 33MHz
+
+
+eCOS Kernel Timings
+Note: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 0 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took   14.46 microseconds (30 raw clock ticks)
+
+Testing parameters:
+   Clock samples:          32
+   Threads:                24
+   Thread switches:       128
+   Mutexes:                32
+   Mailboxes:              32
+   Semaphores:             32
+   Scheduler operations:  128
+   Counters:               32
+   Alarms:                 32
+
+
+
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   26.78   23.52   41.76    1.97   66%  37% Create thread
+    4.00    3.84    4.80    0.23   70%  70% Yield thread [all suspended]
+    3.78    3.36    7.68    0.38   50%  45% Suspend [suspended] thread
+    3.56    3.36    7.68    0.37   95%  91% Resume thread
+    5.28    4.32   12.96    0.76   83%  66% Set priority
+    0.84    0.48    3.84    0.39   91%  54% Get priority
+   11.76   10.08   32.16    1.70   95%  95% Kill [suspended] thread
+    4.14    3.84    8.64    0.45   95%  75% Yield [no other] thread
+    7.14    5.76   17.76    1.07   79%  70% Resume [suspended low prio] thread
+    3.60    3.36    8.16    0.42   95%  87% Resume [runnable low prio] thread
+    6.10    5.28   14.88    0.80   62%  70% Suspend [runnable] thread
+    4.00    3.84    5.76    0.25   79%  79% Yield [only low prio] thread
+    3.66    3.36    8.64    0.47   95%  79% Suspend [runnable->not runnable]
+   11.66   10.08   30.24    1.58   79%  91% Kill [runnable] thread
+   31.12   27.84   53.28    2.35   87%  50% Resume [high priority] thread
+    7.52    7.20   15.84    0.30   50%  48% Thread switch
+
+    1.00    0.48    2.88    0.21   63%  14% Scheduler lock
+    2.57    2.40    3.84    0.23   65%  65% Scheduler unlock [0 threads]
+    2.58    2.40    4.32    0.23   64%  64% Scheduler unlock [1 suspended]
+    2.59    2.40    4.32    0.24   62%  62% Scheduler unlock [many suspended]
+    2.59    2.40    4.32    0.24   61%  61% Scheduler unlock [many low prio]
+
+    1.69    1.44    5.76    0.37   96%  71% Init mutex
+    4.15    3.84   10.56    0.47   96%  75% Lock [unlocked] mutex
+    5.82    5.28   10.56    0.38   62%  28% Unlock [locked] mutex
+    3.70    3.36    8.64    0.41   96%  59% Trylock [unlocked] mutex
+    3.42    2.88    6.72    0.26   75%  15% Trylock [locked] mutex
+    0.36    0.00    1.92    0.25   62%  34% Destroy mutex
+   43.41   42.72   45.12    0.34   81%   3% Unlock/Lock mutex
+
+    3.27    2.88    8.16    0.39   96%  50% Create mbox
+    0.57    0.00    2.40    0.34   50%  21% Peek [empty] mbox
+    6.16    5.76   11.04    0.48   87%  87% Put [first] mbox
+    0.48    0.00    1.92    0.27   50%  28% Peek [1 msg] mbox
+    5.92    5.28   10.56    0.35   90%   6% Put [second] mbox
+    0.60    0.00    2.40    0.30   62%  12% Peek [2 msgs] mbox
+    4.69    4.32   12.00    0.54   93%  93% Get [first] mbox
+    4.68    4.32   11.52    0.52   93%  93% Get [second] mbox
+    5.86    5.28   11.04    0.47   62%  31% Tryput [first] mbox
+    4.00    3.36    9.12    0.38   87%   9% Peek item [non-empty] mbox
+    4.59    3.84   12.48    0.61   71%  75% Tryget [non-empty] mbox
+    3.75    3.36    7.68    0.34   53%  43% Peek item [empty] mbox
+    3.93    3.36    9.60    0.45   65%  31% Tryget [empty] mbox
+    0.63    0.00    2.40    0.28   68%   6% Waiting to get mbox
+    0.54    0.00    1.92    0.19   75%   9% Waiting to put mbox
+    4.84    4.32   12.00    0.47   56%  40% Delete mbox
+   24.18   23.52   29.76    0.66   81%  75% Put/Get mbox
+
+    1.72    0.96    3.84    0.33   90%   6% Init semaphore
+    3.15    2.88    6.24    0.34   96%  62% Post [0] semaphore
+    3.85    3.36    8.64    0.30   68%  28% Wait [1] semaphore
+    3.24    2.88    6.24    0.34   46%  46% Trywait [0] semaphore
+    3.22    2.88    6.24    0.32   50%  46% Trywait [1] semaphore
+    0.96    0.48    2.88    0.12   84%  12% Peek semaphore
+    0.99    0.96    1.92    0.06   96%  96% Destroy semaphore
+   24.71   24.00   28.80    0.40   87%   6% Post/Wait semaphore
+
+    2.31    1.44    6.24    0.77   46%  56% Create counter
+    0.45    0.00    0.96    0.08   87%   9% Get counter value
+    0.42    0.00    0.96    0.16   75%  18% Set counter value
+    4.14    3.84    4.80    0.26   50%  43% Tick counter
+    0.91    0.48    2.40    0.19   71%  21% Delete counter
+
+    5.23    4.32    7.68    0.61   65%  53% Create alarm
+    5.58    4.80   12.96    0.72   68%  84% Initialize alarm
+    0.75    0.48    1.92    0.30   90%  56% Disable alarm
+    8.02    7.20   14.40    0.53   84%  68% Enable alarm
+    1.32    0.96    3.84    0.29   56%  40% Delete alarm
+    4.63    4.32    6.24    0.28   53%  43% Tick counter [1 alarm]
+   23.67   23.52   25.44    0.23   78%  78% Tick counter [many alarms]
+    7.24    6.72   10.56    0.21   84%  12% Tick & fire counter [1 alarm]
+  106.83  106.56  110.40    0.35   96%  65% Tick & fire counters [>1 together]
+   26.18   25.44   29.76    0.46   81%   9% Tick & fire counters [>1 separately]
+   10.79   10.08   29.28    0.66   53%  55% Alarm latency [0 threads]
+   17.20   13.92   35.52    1.48   67%  21% Alarm latency [2 threads]
+   29.69   22.56   47.04    3.58   57%  17% Alarm latency [many threads]
+
+    7.66    3.84   19.20    0.00            Clock/interrupt latency
+
+Timing complete - 23530 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
Board: Fujitsu SPARClite Evaluation BoardUpBoard: NEC VR4373
\ No newline at end of file diff --git a/doc/html/user-guide/rt-ppc-mbx860.html b/doc/html/user-guide/rt-ppc-mbx860.html new file mode 100644 index 00000000..80fe528a --- /dev/null +++ b/doc/html/user-guide/rt-ppc-mbx860.html @@ -0,0 +1,286 @@ + + + + + + + + +Board: Motorola MBX +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Motorola MBX


Board: Motorola MBX
+
+CPU  : Motorola MPC860 66MHZ
+
+
+Startup, main stack             : stack used   643 size  5664
+Startup              :  Interrupt stack used   427 size  4096
+Startup              : Idlethread stack used   236 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 0 `ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took   25.36 microseconds (79 raw clock ticks)
+
+Testing parameters:
+   Clock samples:          32
+   Threads:                16
+   Thread switches:       128
+   Mutexes:                32
+   Mailboxes:              32
+   Semaphores:             32
+   Scheduler operations:  128
+   Counters:               32
+   Alarms:                 32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   27.58   25.60   44.16    2.07   93%  93% Create thread
+    5.94    5.76    7.04    0.22   93%  62% Yield thread [all suspended]
+    6.06    5.44   10.56    0.57   75%  75% Suspend [suspended] thread
+    5.42    4.80    9.60    0.53   87%  81% Resume thread
+    7.10    6.40   14.08    0.90   93%  87% Set priority
+    0.86    0.64    1.92    0.22   93%  50% Get priority
+   16.74   15.04   36.48    2.47   93%  93% Kill [suspended] thread
+    6.14    5.76   10.56    0.55   93%  93% Yield [no other] thread
+    9.74    8.96   18.56    1.10   93%  93% Resume [suspended low prio] thread
+    5.28    4.80    9.28    0.54   93%  81% Resume [runnable low prio] thread
+    9.40    8.32   18.56    1.14   93%  93% Suspend [runnable] thread
+    6.04    5.76    8.96    0.38   93%  93% Yield [only low prio] thread
+    5.68    5.12    9.60    0.52   68%  75% Suspend [runnable->not runnable]
+   16.10   14.40   35.20    2.39   93%  93% Kill [runnable] thread
+    8.54    7.68   16.00    0.94   93%  87% Destroy [dead] thread
+   20.20   18.56   40.64    2.55   93%  93% Destroy [runnable] thread
+   39.02   36.48   57.28    3.28   87%  87% Resume [high priority] thread
+   13.13   12.80   22.08    0.15   78%  20% Thread switch
+
+    0.59    0.32    1.60    0.09   82%  16% Scheduler lock
+    3.67    3.52    5.12    0.17   99%  54% Scheduler unlock [0 threads]
+    3.67    3.52    4.80    0.17   99%  53% Scheduler unlock [1 suspended]
+    3.67    3.52    4.80    0.17   54%  54% Scheduler unlock [many suspended]
+    3.69    3.52    5.12    0.17   99%  50% Scheduler unlock [many low prio]
+
+    2.41    2.24    5.44    0.25   96%  75% Init mutex
+    6.83    6.40   11.84    0.34   75%  90% Lock [unlocked] mutex
+    6.74    6.40   13.12    0.40   96%  96% Unlock [locked] mutex
+    5.53    5.12    9.60    0.25   84%  12% Trylock [unlocked] mutex
+    4.84    4.48    7.36    0.17   78%  15% Trylock [locked] mutex
+    0.34    0.00    0.96    0.06   90%   3% Destroy mutex
+   56.10   55.68   59.52    0.21   93%   3% Unlock/Lock mutex
+
+    4.72    4.48   10.24    0.37   96%  96% Create mbox
+    0.75    0.64    1.92    0.16   75%  75% Peek [empty] mbox
+    6.79    6.40   12.80    0.41   96%  90% Put [first] mbox
+    0.46    0.32    1.60    0.19   93%  68% Peek [1 msg] mbox
+    6.68    6.40   12.16    0.37   96%  96% Put [second] mbox
+    0.50    0.32    1.60    0.20   93%  56% Peek [2 msgs] mbox
+    7.13    6.40   14.08    0.49   90%  46% Get [first] mbox
+    6.97    6.40   13.44    0.47   84%  78% Get [second] mbox
+    6.24    5.76   11.52    0.38   78%  81% Tryput [first] mbox
+    5.98    5.44   11.20    0.39   78%  62% Peek item [non-empty] mbox
+    6.52    6.08   13.12    0.49   93%  81% Tryget [non-empty] mbox
+    5.50    5.12   10.24    0.30   68%  28% Peek item [empty] mbox
+    5.76    5.44   10.88    0.32   96%  96% Tryget [empty] mbox
+    0.50    0.32    1.60    0.19   96%  53% Waiting to get mbox
+    0.50    0.32    1.60    0.19   96%  53% Waiting to put mbox
+    7.45    7.04   15.04    0.49   96%  93% Delete mbox
+   37.47   36.80   48.64    0.70   96%  96% Put/Get mbox
+
+    2.49    2.24    6.08    0.28   96%  56% Init semaphore
+    5.09    4.80    8.64    0.27   46%  46% Post [0] semaphore
+    6.25    5.76   10.88    0.32   93%   3% Wait [1] semaphore
+    4.84    4.48    8.32    0.23   68%  25% Trywait [0] semaphore
+    4.98    4.80    8.00    0.26   96%  71% Trywait [1] semaphore
+    1.66    1.28    3.84    0.20   68%  15% Peek semaphore
+    1.24    0.96    3.20    0.17   65%  31% Destroy semaphore
+   40.74   40.32   49.28    0.53   96%  96% Post/Wait semaphore
+
+    2.65    2.24    6.08    0.23   84%   9% Create counter
+    0.85    0.64    2.24    0.22   90%  53% Get counter value
+    0.68    0.64    1.92    0.08   96%  96% Set counter value
+    7.13    6.72    8.64    0.24   78%  18% Tick counter
+    1.30    0.96    3.20    0.12   84%  12% Delete counter
+
+    3.69    3.52    7.68    0.29   96%  84% Create alarm
+    8.98    8.32   17.60    0.61   68%  62% Initialize alarm
+    0.96    0.64    2.88    0.14   71%  21% Disable alarm
+    8.76    8.32   17.60    0.59   96%  87% Enable alarm
+    1.99    1.60    5.12    0.21   81%  12% Delete alarm
+    7.44    7.36    9.92    0.15   96%  96% Tick counter [1 alarm]
+   21.68   21.44   24.64    0.25   96%  53% Tick counter [many alarms]
+   10.95   10.56   15.04    0.26   78%  18% Tick & fire counter [1 alarm]
+  132.79  132.48  136.32    0.23   59%  37% Tick & fire counters [>1 together]
+   25.18   24.96   28.80    0.29   96%  65% Tick & fire counters [>1 separately]
+   23.06   22.72   47.36    0.40   98%  98% Alarm latency [0 threads]
+   31.53   27.20   56.00    0.63   96%   0% Alarm latency [2 threads]
+   36.86   30.40   58.88    4.15   50%  28% Alarm latency [many threads]
+
+   11.41    8.96   16.32    0.00            Clock/interrupt latency
+
+  609     603     651  (main stack:  1059)  Thread stack used (1704 total)
+All done, main stack            : stack used  1059 size  5664
+All done             :  Interrupt stack used   251 size  4096
+All done             : Idlethread stack used   587 size  2048
+
+Timing complete - 23690 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
Board: Intel SA1100 (Brutus)UpBoard: Hitachi EDK7708
\ No newline at end of file diff --git a/doc/html/user-guide/rt-sh-cq7708.html b/doc/html/user-guide/rt-sh-cq7708.html new file mode 100644 index 00000000..c6cc9f3b --- /dev/null +++ b/doc/html/user-guide/rt-sh-cq7708.html @@ -0,0 +1,288 @@ + + + + + + + + +Board: CQ CqREEK SH3 Evaluation Board (cq7708) +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: CQ CqREEK SH3 Evaluation Board (cq7708)


Board: CQ CqREEK SH3 Evaluation Board (cq7708)
+
+CPU: Hitachi SH3/7708 60MHz
+
+Startup, main stack             : stack used   448 size  4112
+Startup              :  Interrupt stack used    80 size  4096
+Startup              : Idlethread stack used    96 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 2 `ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took   19.17 microseconds (71 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   20.62   14.40   26.93    3.23   48%  26% Create thread
+    3.16    2.93    4.27    0.09   78%  20% Yield thread [all suspended]
+    2.91    2.40    5.87    0.17   57%   1% Suspend [suspended] thread
+    2.73    2.40    6.40    0.19   64%  15% Resume thread
+    4.05    3.73   11.47    0.27   62%  90% Set priority
+    0.82    0.27    2.67    0.17   56%   3% Get priority
+    9.07    8.53   24.27    0.51   78%  71% Kill [suspended] thread
+    3.19    2.93    7.20    0.14   70%  28% Yield [no other] thread
+    5.45    4.53   17.87    0.49   78%  17% Resume [suspended low prio] thread
+    2.67    2.40    5.07    0.15   56%  28% Resume [runnable low prio] thread
+    4.95    4.27   11.47    0.28   82%  14% Suspend [runnable] thread
+    3.15    2.93    4.53    0.11   73%  25% Yield [only low prio] thread
+    2.82    2.40    5.60    0.21   84%  10% Suspend [runnable->not runnable]
+    8.92    8.00   24.27    0.51   84%  14% Kill [runnable] thread
+    5.10    4.53   12.00    0.27   59%  39% Destroy [dead] thread
+   11.81   10.93   37.33    0.81   87%  95% Destroy [runnable] thread
+   22.15   20.80   54.67    1.27   92%  92% Resume [high priority] thread
+    6.85    6.67   13.60    0.19   99%  50% Thread switch
+
+    0.27    0.27    1.07    0.01   99%  99% Scheduler lock
+    1.74    1.60    2.67    0.14   99%  50% Scheduler unlock [0 threads]
+    1.74    1.60    2.93    0.14   99%  50% Scheduler unlock [1 suspended]
+    1.81    1.60    4.27    0.11   72%  26% Scheduler unlock [many suspended]
+    1.75    1.60    4.00    0.15   50%  49% Scheduler unlock [many low prio]
+
+    1.22    1.07    4.27    0.23   96%  78% Init mutex
+    3.18    2.93    7.20    0.27   96%  53% Lock [unlocked] mutex
+    3.40    3.20    8.00    0.31   96%  96% Unlock [locked] mutex
+    2.77    2.40    5.87    0.22   87%   9% Trylock [unlocked] mutex
+    2.35    2.13    3.47    0.14   65%  31% Trylock [locked] mutex
+    0.78    0.53    2.67    0.14   68%  28% Destroy mutex
+   22.80   22.40   28.80    0.51   96%  71% Unlock/Lock mutex
+
+    2.61    2.40    6.13    0.26   96%  62% Create mbox
+    0.52    0.27    1.60    0.19   40%  37% Peek [empty] mbox
+    3.54    3.20    7.73    0.35   93%  78% Put [first] mbox
+    0.50    0.27    1.60    0.17   46%  37% Peek [1 msg] mbox
+    3.62    3.20    6.93    0.34   59%  65% Put [second] mbox
+    0.52    0.27    2.13    0.23   31%  43% Peek [2 msgs] mbox
+    3.93    3.47   10.13    0.43   65%  65% Get [first] mbox
+    3.92    3.47    7.47    0.40   56%  56% Get [second] mbox
+    3.37    2.93    6.93    0.36   59%  68% Tryput [first] mbox
+    3.30    2.67    6.93    0.38   84%  40% Peek item [non-empty] mbox
+    3.93    3.47    9.33    0.44   65%  71% Tryget [non-empty] mbox
+    2.94    2.67    6.13    0.25   43%  43% Peek item [empty] mbox
+    3.23    2.93    6.67    0.27   56%  84% Tryget [empty] mbox
+    0.58    0.27    2.67    0.20   62%  21% Waiting to get mbox
+    0.55    0.27    1.87    0.14   62%  21% Waiting to put mbox
+    3.82    3.47    9.87    0.39   96%  93% Delete mbox
+   13.35   12.80   21.33    0.50   87%  78% Put/Get mbox
+
+    1.22    1.07    2.93    0.19   96%  59% Init semaphore
+    2.42    2.13    4.27    0.12   81%  15% Post [0] semaphore
+    2.96    2.67    5.07    0.16   68%  21% Wait [1] semaphore
+    2.37    2.13    4.53    0.17   62%  34% Trywait [0] semaphore
+    2.29    2.13    3.47    0.17   96%  53% Trywait [1] semaphore
+    0.66    0.53    2.13    0.17   96%  68% Peek semaphore
+    0.81    0.53    2.93    0.13   75%  21% Destroy semaphore
+   14.47   14.13   21.33    0.43   96%  96% Post/Wait semaphore
+
+    1.44    1.07    3.47    0.29   56%  71% Create counter
+    0.62    0.27    1.07    0.14   62%   3% Get counter value
+    0.56    0.27    1.60    0.17   50%  25% Set counter value
+    3.39    3.20    4.27    0.16   53%  40% Tick counter
+    0.83    0.53    1.87    0.14   68%  15% Delete counter
+
+    2.02    1.87    4.00    0.21   93%  68% Create alarm
+    5.06    4.27   11.73    0.46   78%  18% Initialize alarm
+    0.73    0.27    2.40    0.22   84%   3% Disable alarm
+    4.82    4.27   11.47    0.48   81%  65% Enable alarm
+    1.19    0.80    3.47    0.22   87%   9% Delete alarm
+    3.63    3.47    5.60    0.20   96%  59% Tick counter [1 alarm]
+   15.01   14.93   16.53    0.13   87%  87% Tick counter [many alarms]
+    5.50    5.33    8.00    0.22   96%  65% Tick & fire counter [1 alarm]
+   74.27   74.13   76.80    0.21   96%  78% Tick & fire counters [>1 together]
+   16.90   16.53   19.47    0.23   81%  15% Tick & fire counters [>1 separately]
+   16.70   16.53   36.27    0.33   98%  98% Alarm latency [0 threads]
+   17.85   16.53   34.40    0.47   73%   0% Alarm latency [2 threads]
+   63.26   58.40   80.00    2.64   52%  32% Alarm latency [many threads]
+   30.37   29.33  124.80    1.68   98%  97% Alarm -> thread resume latency
+
+    7.37    5.07   17.87    0.00            Clock/interrupt latency
+
+    9.00    4.53   26.93    0.00            Clock DSR latency
+
+  106       0     376  (main stack:   764)  Thread stack used (992 total)
+All done, main stack            : stack used   764 size  4112
+All done             :  Interrupt stack used   176 size  4096
+All done             : Idlethread stack used   352 size  2048
+
+Timing complete - 30310 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
Board: Hitachi EDK7708UpBoard: Hitachi HS7729PCI HS7729 SH3
\ No newline at end of file diff --git a/doc/html/user-guide/rt-sh-edk7708.html b/doc/html/user-guide/rt-sh-edk7708.html new file mode 100644 index 00000000..da2f152d --- /dev/null +++ b/doc/html/user-guide/rt-sh-edk7708.html @@ -0,0 +1,288 @@ + + + + + + + + +Board: Hitachi EDK7708 +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Hitachi EDK7708


+Board: Hitachi EDK7708
+
+CPU: Hitachi SH3/7708 60MHz
+
+
+
+Startup, main stack             : stack used   444 size  4112
+Startup              :  Interrupt stack used    76 size  4096
+Startup              : Idlethread stack used    96 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 2 `ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took   14.75 microseconds (55 raw clock ticks)
+
+Testing parameters:
+   Clock samples:          32
+   Threads:                16
+   Thread switches:       128
+   Mutexes:                32
+   Mailboxes:              32
+   Semaphores:             32
+   Scheduler operations:  128
+   Counters:               32
+   Alarms:                 32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   15.43   13.60   24.00    1.29   62%  50% Create thread
+    3.33    3.20    4.27    0.18   93%  68% Yield thread [all suspended]
+    2.90    2.40    5.33    0.36   81%  62% Suspend [suspended] thread
+    2.93    2.67    4.80    0.27   93%  87% Resume thread
+    4.30    3.73   10.13    0.73   93%  93% Set priority
+    0.65    0.27    2.13    0.28   68%  62% Get priority
+    9.72    8.53   21.33    1.45   93%  93% Kill [suspended] thread
+    3.33    3.20    4.53    0.20   93%  75% Yield [no other] thread
+    5.30    4.80   10.13    0.65   93%  87% Resume [suspended low prio] thread
+    2.80    2.40    4.53    0.27   81%  75% Resume [runnable low prio] thread
+    4.82    4.00    8.27    0.49   68%  25% Suspend [runnable] thread
+    3.32    3.20    4.00    0.16   93%  68% Yield [only low prio] thread
+    2.82    2.40    4.27    0.25   81%  12% Suspend [runnable->not runnable]
+    9.45    8.53   19.47    1.25   93%  93% Kill [runnable] thread
+    5.30    4.53   11.20    0.74   87%  93% Destroy [dead] thread
+   11.83   10.67   25.07    1.65   93%  93% Destroy [runnable] thread
+   19.53   17.33   31.20    1.88   75%  75% Resume [high priority] thread
+    6.70    6.67   11.47    0.07   99%  99% Thread switch
+
+    0.33    0.27    0.80    0.10   75%  75% Scheduler lock
+    1.74    1.60    2.67    0.14   99%  50% Scheduler unlock [0 threads]
+    1.72    1.60    3.20    0.14   99%  57% Scheduler unlock [1 suspended]
+    1.81    1.60    3.20    0.10   75%  23% Scheduler unlock [many suspended]
+    1.86    1.60    3.20    0.02   94%   4% Scheduler unlock [many low prio]
+
+    1.22    1.07    3.20    0.20   96%  65% Init mutex
+    3.21    2.93    5.87    0.17   68%  28% Lock [unlocked] mutex
+    3.36    2.93    7.47    0.30   84%  75% Unlock [locked] mutex
+    2.83    2.67    5.33    0.22   96%  65% Trylock [unlocked] mutex
+    2.53    2.40    2.93    0.14   96%  53% Trylock [locked] mutex
+    0.28    0.27    0.80    0.03   96%  96% Destroy mutex
+   20.09   19.73   23.20    0.23   84%  12% Unlock/Lock mutex
+
+    2.38    2.13    4.53    0.17   59%  34% Create mbox
+    0.45    0.27    1.33    0.15   56%  40% Peek [empty] mbox
+    3.70    3.20    7.20    0.29   84%  59% Put [first] mbox
+    0.45    0.27    0.80    0.13   62%  34% Peek [1 msg] mbox
+    3.67    3.20    5.60    0.23   81%   6% Put [second] mbox
+    0.42    0.27    0.53    0.13   59%  40% Peek [2 msgs] mbox
+    3.98    3.47    7.47    0.24   59%   9% Get [first] mbox
+    3.97    3.47    4.80    0.24   59%  12% Get [second] mbox
+    3.51    3.20    6.67    0.28   56%  78% Tryput [first] mbox
+    3.29    2.93    5.60    0.29   59%  65% Peek item [non-empty] mbox
+    4.06    3.47    7.20    0.26   68%   3% Tryget [non-empty] mbox
+    3.03    2.67    5.33    0.19   93%   3% Peek item [empty] mbox
+    3.36    3.20    4.80    0.18   96%  56% Tryget [empty] mbox
+    0.57    0.27    1.33    0.09   84%   3% Waiting to get mbox
+    0.52    0.27    1.07    0.11   62%  21% Waiting to put mbox
+    3.88    3.47    7.47    0.30   78%  65% Delete mbox
+   12.04   11.73   17.33    0.33   96%  96% Put/Get mbox
+
+    1.17    1.07    2.40    0.16   71%  71% Init semaphore
+    2.67    2.40    4.27    0.15   62%  25% Post [0] semaphore
+    3.00    2.67    4.53    0.17   65%  12% Wait [1] semaphore
+    2.54    2.40    4.80    0.20   96%  71% Trywait [0] semaphore
+    2.42    2.40    2.93    0.03   96%  96% Trywait [1] semaphore
+    0.79    0.53    2.13    0.15   59%  28% Peek semaphore
+    0.77    0.53    1.87    0.12   71%  25% Destroy semaphore
+   12.64   12.27   17.07    0.28   84%  96% Post/Wait semaphore
+
+    1.27    1.07    2.93    0.17   53%  43% Create counter
+    0.54    0.27    1.33    0.13   59%  21% Get counter value
+    0.47    0.27    1.60    0.17   46%  43% Set counter value
+    3.47    3.20    4.80    0.16   53%  28% Tick counter
+    0.80    0.53    2.13    0.13   62%  25% Delete counter
+
+    1.86    1.60    4.00    0.21   43%  40% Create alarm
+    5.12    4.80    9.07    0.36   93%  75% Initialize alarm
+    0.44    0.27    1.33    0.19   87%  53% Disable alarm
+    4.77    4.27    9.60    0.35   87%  62% Enable alarm
+    1.02    0.80    2.67    0.18   53%  40% Delete alarm
+    3.56    3.47    5.33    0.15   84%  84% Tick counter [1 alarm]
+   15.04   14.93   16.27    0.16   71%  71% Tick counter [many alarms]
+    5.75    5.60    8.00    0.21   96%  68% Tick & fire counter [1 alarm]
+   79.60   79.47   81.07    0.17   96%  65% Tick & fire counters [>1 together]
+   17.04   16.80   18.93    0.15   65%  31% Tick & fire counters [>1 separately]
+   12.44   12.27   29.60    0.31   96%  96% Alarm latency [0 threads]
+   14.06   12.27   27.20    0.53   82%   4% Alarm latency [2 threads]
+   19.62   17.07   38.40    1.44   57%  34% Alarm latency [many threads]
+
+    2.79    2.40    6.13    0.00            Clock/interrupt latency
+
+  376     376     376  (main stack:   764)  Thread stack used (992 total)
+All done, main stack            : stack used   764 size  4112
+All done             :  Interrupt stack used   176 size  4096
+All done             : Idlethread stack used   352 size  2048
+
+Timing complete - 23860 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
Board: Motorola MBXUpBoard: CQ CqREEK SH3 Evaluation Board (cq7708)
\ No newline at end of file diff --git a/doc/html/user-guide/rt-sh-hs7729pci.html b/doc/html/user-guide/rt-sh-hs7729pci.html new file mode 100644 index 00000000..f36dd038 --- /dev/null +++ b/doc/html/user-guide/rt-sh-hs7729pci.html @@ -0,0 +1,284 @@ + + + + + + + + +Board: Hitachi HS7729PCI HS7729 SH3 +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Hitachi HS7729PCI HS7729 SH3


Board: Hitachi HS7729PCI HS7729 SH3
+
+CPU: Hitachi SH3/7729 132MHz
+
+
+Startup, main stack             : stack used   464 size  4112
+Startup              :  Interrupt stack used    92 size  4096
+Startup              : Idlethread stack used    94 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 3 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took   18.10 microseconds (149 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   18.33   15.52   28.24    1.47   53%  28% Create thread
+    3.08    2.91    6.79    0.13   78%  89% Yield thread [all suspended]
+    3.23    3.03    6.18    0.16   59%  70% Suspend [suspended] thread
+    2.70    2.55    6.18    0.15   54%  82% Resume thread
+    4.12    4.00    7.52    0.16   96%  81% Set priority
+    0.61    0.48    1.33    0.07   57%  28% Get priority
+    9.14    8.61   18.91    0.42   85%  57% Kill [suspended] thread
+    3.04    2.91    4.48    0.07   68%  20% Yield [no other] thread
+    5.12    4.73    7.88    0.29   60%  53% Resume [suspended low prio] thread
+    2.54    2.42    3.03    0.09   39%  40% Resume [runnable low prio] thread
+    5.00    4.36    9.45    0.21   75%   1% Suspend [runnable] thread
+    3.04    2.91    4.61    0.07   65%  21% Yield [only low prio] thread
+    2.91    2.79    3.27    0.08   43%  31% Suspend [runnable->not runnable]
+    8.82    8.12   15.39    0.36   68%  29% Kill [runnable] thread
+    5.07    4.48   12.73    0.37   76%  50% Destroy [dead] thread
+   11.17   10.55   22.91    0.52   78%  67% Destroy [runnable] thread
+   22.43   21.45   32.73    0.61   81%  50% Resume [high priority] thread
+    7.99    7.88   13.58    0.14   98%  86% Thread switch
+
+    0.37    0.36    1.33    0.02   97%  97% Scheduler lock
+    1.74    1.70    2.06    0.06   70%  70% Scheduler unlock [0 threads]
+   1.75    1.70    2.06    0.07   92%  64% Scheduler unlock [1 suspended]
+    1.71    1.70    2.42    0.03   89%  89% Scheduler unlock [many suspended]
+    1.76    1.70    3.64    0.08   96%  64% Scheduler unlock [many low prio]
+
+    4.23    3.88   10.67    0.41   96%  93% Unlock [locked] mutex
+    3.12    2.91    6.91    0.29   96%  87% Trylock [unlocked] mutex
+    2.54    2.42    2.91    0.11   18%  46% Trylock [locked] mutex
+    0.88    0.73    3.15    0.14   65%  96% Destroy mutex
+   22.33   22.06   25.94    0.23   81%  62% Unlock/Lock mutex
+
+    1.92    1.82    4.73    0.19   96%  93% Create mbox
+    0.61    0.48    1.70    0.15   84%  75% Peek [empty] mbox
+    4.00    3.64    9.45    0.36   96%  87% Put [first] mbox
+    0.30    0.24    0.73    0.09   84%  75% Peek [1 msg] mbox
+    3.82    3.64    6.67    0.22   90%  84% Put [second] mbox
+    0.32    0.24    1.33    0.12   81%  81% Peek [2 msgs] mbox
+    4.19    3.76    9.21    0.34   84%  50% Get [first] mbox
+    3.91    3.76    5.21    0.16   84%  75% Get [second] mbox
+    3.51    3.27    8.12    0.34   93%  87% Tryput [first] mbox
+    3.25    2.91    7.15    0.30   62%  56% Peek item [non-empty] mbox
+    3.86    3.52    8.73    0.37   93%  84% Tryget [non-empty] mbox
+    2.87    2.79    3.76    0.12   84%  71% Peek item [empty] mbox
+    3.15    3.03    4.24    0.10   46%  40% Tryget [empty] mbox
+    0.34    0.24    1.33    0.10   43%  46% Waiting to get mbox
+    0.36    0.24    1.45    0.09   53%  37% Waiting to put mbox
+    4.49    4.24   10.91    0.41   96%  96% Delete mbox
+   12.67   12.36   19.52    0.43   96%  96% Put/Get mbox
+
+    0.87    0.85    1.45    0.05   93%  93% Init semaphore
+    2.74    2.55    4.48    0.18   50%  50% Post [0] semaphore
+    3.39    3.15    4.24    0.14   78%  50% Wait [1] semaphore
+    2.62    2.42    5.33    0.21   96%  65% Trywait [0] semaphore
+    2.76    2.67    3.27    0.08   46%  43% Trywait [1] semaphore
+    1.09    0.85    2.91    0.19   68%  56% Peek semaphore
+    0.97    0.73    3.39    0.17   90%  65% Destroy semaphore
+   13.09   12.85   16.12    0.19   84%  65% Post/Wait semaphore
+
+    1.57    1.45    3.88    0.15   96%  93% Create counter
+    0.91    0.73    2.18    0.16   46%  68% Get counter value
+    0.55    0.48    0.97    0.09   90%  62% Set counter value
+    4.19    4.00    5.82    0.13   84%  75% Tick counter
+    0.87    0.73    3.15    0.16   93%  93% Delete counter
+
+    2.50    2.30    5.21    0.18   81%  90% Create alarm
+    6.16    5.70   12.97    0.47   96%  71% Initialize alarm
+    0.50    0.36    1.70    0.11   62%  34% Disable alarm
+    5.16    4.85    8.73    0.29   78%  78% Enable alarm
+    1.18    1.09    2.30    0.12   84%  65% Delete alarm
+    5.22    5.09    7.39    0.14   96%  93% Tick counter [1 alarm]
+   52.37   52.12   52.73    0.20   37%  56% Tick counter [many alarms]
+    6.73    6.55    8.24    0.13   78%  68% Tick & fire counter [1 alarm]
+  108.65  108.61  109.21    0.07   87%  87% Tick & fire counters [>1 together]
+   54.25   54.06   54.79    0.11   65%  18% Tick & fire counters [>1 separately]
+   17.36   17.09   29.82    0.23   82%  57% Alarm latency [0 threads]
+   19.75   17.09   28.00    1.65   46%  40% Alarm latency [2 threads]
+   39.02   34.06   50.67    2.00   53%  15% Alarm latency [many threads]
+   29.31   28.36  105.09    1.27   98%  97% Alarm -> thread resume latency
+
+    5.08    3.88   11.15    0.00            Clock/interrupt latency
+
+    7.32    5.09   16.73    0.00            Clock DSR latency
+
+    6       0     380  (main stack:   820)  Thread stack used (992 total)
+All done, main stack            : stack used   820 size  4112
+All done             :  Interrupt stack used   196 size  4096
+All done             : Idlethread stack used   360 size  2048
+
+Timing complete - 29960 ms total
+PASS:<Basic timing OK>
+EXIT:<done> 

PrevHomeNext
Board: CQ CqREEK SH3 Evaluation Board (cq7708)UpBoard: Hitachi Solution Engine 7751 SH4 (se7751)
\ No newline at end of file diff --git a/doc/html/user-guide/rt-sh-se7751.html b/doc/html/user-guide/rt-sh-se7751.html new file mode 100644 index 00000000..ca96356f --- /dev/null +++ b/doc/html/user-guide/rt-sh-se7751.html @@ -0,0 +1,289 @@ + + + + + + + + +Board: Hitachi Solution Engine 7751 SH4 (se7751) +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Hitachi Solution Engine 7751 SH4 (se7751)

Board: Hitachi Solution Engine 7751 SH4 (se7751)
+
+CPU: Hitachi SH4/7751 162MHz
+
+
+Startup, main stack             : stack used   464 size  4112
+Startup              :  Interrupt stack used    92 size  4096
+Startup              : Idlethread stack used    94 size  2048
+
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+
+Reading the hardware clock takes 1 `ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took    14.27 microseconds (96 raw clock ticks)
+
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+                               Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+    8.06    5.63   12.15    1.37   46%  29% Create thread
+    1.15    1.04    5.19    0.15   98%  98% Yield thread [all suspended]
+    1.13    0.89    5.04    0.27   89%  62% Suspend [suspended] thread
+    1.11    0.89    5.19    0.26   89%  71% Resume thread
+    1.45    1.19    3.56    0.23   53%  53% Set priority
+    0.21    0.15    1.19    0.10   90%  79% Get priority
+    4.15    3.56   13.04    0.53   68%  64% Kill [suspended] thread
+    1.12    1.04    3.70    0.12   98%  70% Yield [no other] thread
+    1.75    1.33    8.00    0.38   59%  65% Resume [suspended low prio] thread
+    1.10    0.89    4.59    0.25   87%  73% Resume [runnable low prio] thread
+    1.59    1.33    5.93    0.33   81%  79% Suspend [runnable] thread
+    1.13    1.04    4.30    0.13   98%  71% Yield [only low prio] thread
+    1.09    0.89    3.56    0.21   89%  70% Suspend [runnable->not runnable]
+    4.96    4.30   11.70    0.44   68%  39% Kill [runnable] thread
+    1.95    1.48    8.00    0.34   75%  57% Destroy [dead] thread
+    4.41    3.85   10.37    0.47   53%  57% Destroy [runnable] thread
+   13.15   11.41   23.85    1.11   73%  39% Resume [high priority] thread
+    3.10    2.96    6.22    0.11   41%  39% Thread switch
+
+    0.13    0.00    1.33    0.06   74%  21% Scheduler lock
+    0.76    0.74    1.78    0.03   96%  96% Scheduler unlock [0 threads]
+    0.76    0.74    1.78    0.03   96%  96% Scheduler unlock [1 suspended]
+    0.77    0.74    2.67    0.05   95%  95% Scheduler unlock [many suspended]
+    0.76    0.74    2.37    0.04   95%  95% Scheduler unlock [many low prio]
+
+    0.52    0.15    2.67    0.26   65%  34% Init mutex
+    1.23    1.04    5.63    0.32   93%  93% Lock [unlocked] mutex
+    1.45    1.19    5.33    0.31   90%  87% Unlock [locked] mutex
+    1.13    0.89    4.15    0.28   90%  84% Trylock [unlocked] mutex
+    1.00    0.89    2.96    0.17   87%  87% Trylock [locked] mutex
+    0.37    0.30    1.78    0.13   90%  84% Destroy mutex
+    9.09    8.59   12.59    0.43   71%  71% Unlock/Lock mutex
+    0.93    0.59    4.30    0.40   84%  71% Create mbox
+    0.26    0.00    1.19    0.17   71%  59% Peek [empty] mbox
+    3.03    2.52    6.37    0.47   50%  59% Put [first] mbox
+    0.23    0.00    0.74    0.14   68%  15% Peek [1 msg] mbox
+    2.93    2.52    4.74    0.46   71%  59% Put [second] mbox
+    0.22    0.00    0.59    0.13   68%  15% Peek [2 msgs] mbox
+    2.07    1.63    5.93    0.37   84%  59% Get [first] mbox
+    2.06    1.63    4.74    0.34   78%  59% Get [second] mbox
+    1.48    1.04    5.48    0.37   62%  53% Tryput [first] mbox
+    1.31    1.04    4.89    0.32   96%  75% Peek item [non-empty] mbox
+    1.47    1.04    5.78    0.38   84%  65% Tryget [non-empty] mbox
+    1.15    0.89    3.11    0.18   71%  56% Peek item [empty] mbox
+    1.20    1.04    3.85    0.21   93%  84% Tryget [empty] mbox
+    0.21    0.00    0.74    0.14   68%  18% Waiting to get mbox
+    0.19    0.00    0.44    0.10   43%  15% Waiting to put mbox
+    2.19    1.93    5.78    0.27   93%  71% Delete mbox
+   10.23    9.93   11.56    0.15   53%  37% Put/Get mbox
+
+    0.37    0.15    1.33    0.26   71%  71% Init semaphore
+    0.98    0.89    2.52    0.13   96%  68% Post [0] semaphore
+    1.08    0.89    3.26    0.15   68%  93% Wait [1] semaphore
+    0.98    0.89    3.41    0.16   93%  93% Trywait [0] semaphore
+    0.73    0.59    1.63    0.07   71%  25% Trywait [1] semaphore
+    0.33    0.30    1.33    0.07   93%  93% Peek semaphore
+    0.34    0.30    1.78    0.09   96%  96% Destroy semaphore
+    9.36    8.74   10.37    0.33   56%  31% Post/Wait semaphore
+
+    0.54    0.15    3.26    0.23   59%  37% Create counter
+    0.13    0.00    0.59    0.07   68%  25% Get counter value
+    0.14    0.00    0.59    0.07   68%  25% Set counter value
+    3.74    3.56    5.33    0.17   53%  75% Tick counter
+    0.32    0.15    2.07    0.12   71%  21% Delete counter
+
+    1.59    1.19    3.11    0.29   71%  43% Create alarm
+    1.89    1.48    6.37    0.44   87%  78% Initialize alarm
+    0.20    0.15    0.74    0.09   87%  84% Disable alarm
+    1.62    1.33    5.63    0.41   87%  84% Enable alarm
+    0.40    0.30    1.33    0.13   87%  62% Delete alarm
+
+   4.03    3.70    5.78    0.27   68%  56% Tick counter [1 alarm]
+   14.18   13.93   15.70    0.27   81%  75% Tick counter [many alarms]
+    4.81    4.59    5.93    0.13   81%  15% Tick & fire counter [1 alarm]
+   30.77   30.52   33.63    0.20   75%  65% Tick & fire counters [>1 together]
+   15.10   14.52   17.04    0.23   71%   3% Tick & fire counters [>1 separately]
+    8.78    8.59   18.22    0.20   97%  89% Alarm latency [0 threads]
+   11.29    9.33   17.48    1.02   56%  22% Alarm latency [2 threads]
+   18.70   15.70   26.37    1.45   54%  22% Alarm latency [many threads]
+   19.40   18.81   57.48    0.65   97%  97% Alarm -> thread resume latency
+
+    4.18    2.81    8.89    0.00            Clock/interrupt latency
+
+    3.98    2.52   11.56    0.00            Clock DSR latency
+
+    6       0     380  (main stack:   728)  Thread stack used (992 total)
+All done, main stack            : stack used   728 size  4112
+All done             :  Interrupt stack used   196 size  4096
+All done             : Idlethread stack used   360 size  2048
+
+Timing complete - 29790 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done> 

PrevHomeNext
Board: Hitachi HS7729PCI HS7729 SH3UpBoard: PC
\ No newline at end of file diff --git a/doc/html/user-guide/rt-sparclite-sleb.html b/doc/html/user-guide/rt-sparclite-sleb.html new file mode 100644 index 00000000..1e647f4a --- /dev/null +++ b/doc/html/user-guide/rt-sparclite-sleb.html @@ -0,0 +1,275 @@ + + + + + + + + +Board: Fujitsu SPARClite Evaluation Board +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Fujitsu SPARClite Evaluation Board


Board: Fujitsu SPARClite Evaluation Board
+
+CPU  : Fujitsu SPARClite MB8683X 100MHz
+
+
+eCOS Kernel Timings
+Note: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 0 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took   17.19 microseconds (17 raw clock ticks)
+
+Testing parameters:
+   Clock samples:          32
+   Threads:                24
+   Thread switches:       128
+   Mutexes:                32
+   Mailboxes:              32
+   Semaphores:             32
+   Scheduler operations:  128
+   Counters:               32
+   Alarms:                 32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   48.59   47.00   63.01    1.41   66%  70% Create thread
+    2.13    2.00    5.00    0.24   95%  95% Yield thread [all suspended]
+    2.92    2.00   10.00    0.69   58%  37% Suspend [suspended] thread
+    2.13    1.00   10.00    0.66   75%  20% Resume thread
+    2.79    2.00   11.00    0.86   95%  54% Set priority
+    1.00    0.00    5.00    0.33   79%  16% Get priority
+    7.17    5.00   34.00    2.24   95%  95% Kill [suspended] thread
+    2.42    2.00   12.00    0.80   95%  95% Yield [no other] thread
+    3.46    2.00   14.00    1.10   75%  83% Resume [suspended low prio] thread
+    2.00    1.00    9.00    0.58   66%  29% Resume [runnable low prio] thread
+    4.21    3.00   20.00    1.38   95%  91% Suspend [runnable] thread
+    2.33    2.00   10.00    0.64   95%  95% Yield [only low prio] thread
+    2.00    1.00    9.00    0.67   58%  33% Suspend [runnable->not runnable]
+    5.79    4.00   30.00    2.07   95%  95% Kill [runnable] thread
+   39.34   37.00   75.01    3.36   91%  91% Resume [high priority] thread
+   15.20   15.00   31.00    0.40   97%  97% Thread switch
+
+    1.04    1.00    4.00    0.08   97%  97% Scheduler lock
+    1.42    1.00    5.00    0.51   60%  60% Scheduler unlock [0 threads]
+    1.41    1.00    5.00    0.50   61%  61% Scheduler unlock [1 suspended]
+    1.41    1.00    5.00    0.50   60%  60% Scheduler unlock [many suspended]
+    1.40    1.00    5.00    0.50   62%  62% Scheduler unlock [many low prio]
+
+    1.19    1.00    6.00    0.35   93%  93% Init mutex
+    2.34    2.00   12.00    0.64   93%  93% Lock [unlocked] mutex
+    3.41    3.00   13.00    0.71   96%  87% Unlock [locked] mutex
+    2.16    1.00   10.00    0.49   87%   9% Trylock [unlocked] mutex
+    1.78    1.00    7.00    0.59   59%  37% Trylock [locked] mutex
+    0.72    0.00    2.00    0.45   65%  31% Destroy mutex
+   25.25   24.00   41.00    0.98   71%  25% Unlock/Lock mutex
+
+    1.44    1.00    9.00    0.68   96%  78% Create mbox
+    0.94    0.00    3.00    0.23   84%  12% Peek [empty] mbox
+    3.06    2.00   13.00    0.62   71%  25% Put [first] mbox
+    0.69    0.00    3.00    0.52   59%  37% Peek [1 msg] mbox
+    2.44    2.00   10.00    0.68   96%  78% Put [second] mbox
+    0.78    0.00    3.00    0.44   68%  28% Peek [2 msgs] mbox
+    3.78    3.00   14.00    0.83   96%  53% Get [first] mbox
+    2.97    2.00    9.00    0.61   56%  31% Get [second] mbox
+    2.53    2.00   12.00    0.80   96%  75% Tryput [first] mbox
+    2.72    2.00   12.00    0.81   96%  56% Peek item [non-empty] mbox
+    2.63    2.00   13.00    0.94   90%  75% Tryget [non-empty] mbox
+    1.97    1.00    6.00    0.42   68%  21% Peek item [empty] mbox
+    2.09    1.00    9.00    0.49   78%  15% Tryget [empty] mbox
+    0.84    0.00    4.00    0.42   71%  25% Waiting to get mbox
+    0.81    0.00    4.00    0.46   68%  28% Waiting to put mbox
+    2.38    2.00   11.00    0.66   96%  87% Delete mbox
+   23.41   22.00   47.00    1.47   96%  96% Put/Get mbox
+
+    1.03    0.00    6.00    0.31   84%  12% Init semaphore
+    2.66    2.00    8.00    0.66   96%  50% Post [0] semaphore
+    1.97    1.00   10.00    0.55   68%  28% Wait [1] semaphore
+    1.78    1.00    8.00    0.63   56%  40% Trywait [0] semaphore
+    1.84    1.00    8.00    0.58   62%  34% Trywait [1] semaphore
+    1.00    0.00    5.00    0.25   84%  12% Peek semaphore
+    0.81    0.00    4.00    0.46   68%  28% Destroy semaphore
+   19.03   18.00   41.00    1.37   96%  96% Post/Wait semaphore
+
+    1.38    1.00    6.00    0.56   75%  75% Create counter
+    1.09    1.00    3.00    0.18   93%  93% Get counter value
+    1.00    0.00    5.00    0.31   78%  15% Set counter value
+    3.09    2.00    6.00    0.35   78%   9% Tick counter
+    0.91    0.00    5.00    0.40   75%  21% Delete counter
+
+    2.53    2.00    9.00    0.70   96%  65% Create alarm
+    6.03    5.00   22.00    1.00   50%  46% Initialize alarm
+    0.78    0.00    4.00    0.49   65%  31% Disable alarm
+    2.91    2.00   13.00    0.91   87%  50% Enable alarm
+    0.97    0.00    5.00    0.30   81%  15% Delete alarm
+    2.69    2.00    9.00    0.69   96%  50% Tick counter [1 alarm]
+   12.00   11.00   23.00    0.69   62%  34% Tick counter [many alarms]
+    4.16    3.00   13.00    0.55   84%  12% Tick & fire counter [1 alarm]
+   72.69   72.01   87.01    1.03   96%  96% Tick & fire counters [>1 together]
+   13.66   13.00   23.00    0.82   96%  62% Tick & fire counters [>1 separately]
+   13.26   13.00   42.00    0.51   98%  98% Alarm latency [0 threads]
+   16.75   11.00   53.01    2.78   64%  16% Alarm latency [2 threads]
+   24.06   18.00   58.01    3.55   67%  25% Alarm latency [many threads]
+
+    3.61    2.00   13.00    0.00            Clock/interrupt latency
+
+Timing complete - 23590 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
Board: Matsushita STDEVAL1 BoardUpBoard: Cogent CMA MPC860 (PowerPC) Evaluation
\ No newline at end of file diff --git a/doc/html/user-guide/rt-tx39-jmr3904.html b/doc/html/user-guide/rt-tx39-jmr3904.html new file mode 100644 index 00000000..62db901c --- /dev/null +++ b/doc/html/user-guide/rt-tx39-jmr3904.html @@ -0,0 +1,275 @@ + + + + + + + + +Board: Toshiba JMR3904 Evaluation Board +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Toshiba JMR3904 Evaluation Board


Board: Toshiba JMR3904 Evaluation Board
+
+CPU  : TMPR3904F 50MHz
+
+
+eCOS Kernel Timings
+Note: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 0 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took   29.68 microseconds (45 raw clock ticks)
+
+Testing parameters:
+   Clock samples:          32
+   Threads:                24
+   Thread switches:       128
+   Mutexes:                32
+   Mailboxes:              32
+   Semaphores:             32
+   Scheduler operations:  128
+   Counters:               32
+   Alarms:                 32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   13.62   11.72   27.99    1.51   79%  54% Create thread
+    2.77    2.60    3.91    0.26   79%  79% Yield thread [all suspended]
+    3.31    2.60    6.51    0.27   83%  12% Suspend [suspended] thread
+    2.58    1.95    7.81    0.47   58%  37% Resume thread
+    4.94    4.56   11.07    0.60   95%  79% Set priority
+    0.71    0.65    1.95    0.10   95%  95% Get priority
+   14.97   14.32   25.39    0.87   95%  95% Kill [suspended] thread
+    2.25    1.95    9.11    0.57   95%  95% Yield [no other] thread
+    7.27    6.51   12.37    0.42   79%  16% Resume [suspended low prio] thread
+    2.28    1.95    7.16    0.51   95%  79% Resume [runnable low prio] thread
+    4.31    3.26   12.37    0.75   87%  79% Suspend [runnable] thread
+    2.17    1.95    7.16    0.42   95%  95% Yield [only low prio] thread
+    2.39    1.95    6.51    0.51   95%  58% Suspend [runnable->not runnable]
+   13.43   12.37   22.79    0.80   91%  91% Kill [runnable] thread
+   22.30   20.83   37.76    1.76   91%  91% Resume [high priority] thread
+    4.62    4.56   11.07    0.13   98%  98% Thread switch
+
+    1.51    1.30    2.60    0.29   68%  68% Scheduler lock
+    2.36    1.95    3.26    0.31   61%  37% Scheduler unlock [0 threads]
+    2.39    1.95    5.21    0.32   62%  36% Scheduler unlock [1 suspended]
+    2.38    1.95    4.56    0.32   61%  37% Scheduler unlock [many suspended]
+    2.38    1.95    5.21    0.32   61%  37% Scheduler unlock [many low prio]
+
+    0.90    0.65    3.26    0.35   71%  71% Init mutex
+    2.48    1.95    8.46    0.50   50%  46% Lock [unlocked] mutex
+    2.83    2.60    9.11    0.42   93%  93% Unlock [locked] mutex
+    2.30    1.95    6.51    0.45   96%  65% Trylock [unlocked] mutex
+    1.99    1.30    5.86    0.24   84%  12% Trylock [locked] mutex
+    0.04    0.00    1.30    0.08   96%  96% Destroy mutex
+   42.40   42.32   44.92    0.16   96%  96% Unlock/Lock mutex
+
+    1.44    1.30    5.86    0.28   96%  96% Create mbox
+    0.51    0.00    1.30    0.25   71%  25% Peek [empty] mbox
+    2.93    2.60    9.11    0.51   96%  78% Put [first] mbox
+    0.51    0.00    1.30    0.25   71%  25% Peek [1 msg] mbox
+    4.19    3.91    5.21    0.34   59%  59% Put [second] mbox
+    0.45    0.00    0.65    0.28   68%  31% Peek [2 msgs] mbox
+    3.28    2.60   10.42    0.45   65%  31% Get [first] mbox
+    3.34    2.60    9.77    0.40   78%  18% Get [second] mbox
+    2.69    1.95    9.11    0.40   78%  18% Tryput [first] mbox
+    2.75    1.95    7.81    0.32   93%   3% Peek item [non-empty] mbox
+    3.15    2.60    9.11    0.48   53%  43% Tryget [non-empty] mbox
+    2.22    1.95    6.51    0.41   96%  78% Peek item [empty] mbox
+    2.40    1.95    5.86    0.42   50%  46% Tryget [empty] mbox
+    0.47    0.00    0.65    0.26   71%  28% Waiting to get mbox
+    0.59    0.00    1.30    0.15   84%  12% Waiting to put mbox
+    4.01    3.26   10.42    0.40   81%  15% Delete mbox
+   26.18   26.04   30.60    0.28   96%  96% Put/Get mbox
+
+    0.92    0.65    3.91    0.38   71%  71% Init semaphore
+    2.24    1.95    6.51    0.43   96%  75% Post [0] semaphore
+    2.32    1.95    7.16    0.48   96%  65% Wait [1] semaphore
+    2.03    1.30    5.86    0.24   90%   6% Trywait [0] semaphore
+    1.91    1.30    4.56    0.23   78%  18% Trywait [1] semaphore
+    0.77    0.00    1.95    0.30   65%   9% Peek semaphore
+    0.61    0.00    1.95    0.15   84%  12% Destroy semaphore
+   22.62   22.14   30.60    0.61   96%  62% Post/Wait semaphore
+
+    0.92    0.65    3.91    0.38   71%  71% Create counter
+    0.69    0.65    1.95    0.08   96%  96% Get counter value
+    0.41    0.00    1.30    0.33   56%  40% Set counter value
+    3.21    2.60    5.86    0.27   71%  21% Tick counter
+    0.65    0.00    3.26    0.16   84%  12% Delete counter
+
+    1.57    1.30    4.56    0.38   71%  71% Create alarm
+    4.52    3.91   13.02    0.57   50%  46% Initialize alarm
+    0.61    0.00    1.95    0.15   84%  12% Disable alarm
+    4.43    3.91    9.11    0.43   56%  40% Enable alarm
+    0.87    0.65    2.60    0.32   71%  71% Delete alarm
+    2.93    2.60    6.51    0.43   96%  65% Tick counter [1 alarm]
+   14.83   14.32   22.79    0.60   96%  59% Tick counter [many alarms]
+    4.88    4.56   11.07    0.51   96%  78% Tick & fire counter [1 alarm]
+   83.25   82.03  102.86    1.23   96%  93% Tick & fire counters [>1 together]
+   17.58   16.93   27.34    0.61   50%  46% Tick & fire counters [>1 separately]
+   26.18   24.74   40.36    0.30   97%   0% Alarm latency [0 threads]
+   33.88   29.30   56.64    1.70   85%   6% Alarm latency [2 threads]
+   36.37   29.30   61.20    3.25   53%  24% Alarm latency [many threads]
+
+    7.85    6.51   14.97    0.00            Clock/interrupt latency
+
+Timing complete - 23540 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
Board: Intel IQ80310 XScale Development KitUpBoard: Toshiba REF 4955
\ No newline at end of file diff --git a/doc/html/user-guide/rt-tx49-ref4955.html b/doc/html/user-guide/rt-tx49-ref4955.html new file mode 100644 index 00000000..06a460f8 --- /dev/null +++ b/doc/html/user-guide/rt-tx49-ref4955.html @@ -0,0 +1,288 @@ + + + + + + + + +Board: Toshiba REF 4955 +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: Toshiba REF 4955


Board: Toshiba REF 4955
+
+CPU  : Toshiba TX4955 66MHz
+
+Startup, main stack             : stack used   960 size  2936
+Startup              :  Interrupt stack used   168 size  4096
+Startup              : Idlethread stack used   372 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 3 `ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took    4.00 microseconds (264 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                  64
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   11.21    9.58   14.11    0.95   48%  34% Create thread
+    0.66    0.65    1.29    0.02   98%  98% Yield thread [all suspended]
+    0.63    0.53    3.06    0.17   82%  82% Suspend [suspended] thread
+    0.54    0.53    1.06    0.02   98%  98% Resume thread
+    0.78    0.74    1.39    0.05   93%  93% Set priority
+    0.05    0.05    0.36    0.01   98%  98% Get priority
+    2.06    1.89    6.65    0.25   95%  79% Kill [suspended] thread
+    0.65    0.65    0.68    0.00   98%  98% Yield [no other] thread
+    1.15    1.02    3.03    0.20   81%  81% Resume [suspended low prio] thread
+    0.54    0.52    1.18    0.03   96%  96% Resume [runnable low prio] thread
+    0.94    0.88    1.27    0.01   95%   1% Suspend [runnable] thread
+    0.65    0.65    0.68    0.00   98%  98% Yield [only low prio] thread
+    0.54    0.53    0.86    0.01   98%  96% Suspend [runnable->not runnable]
+    1.97    1.89    2.98    0.12   84%  84% Kill [runnable] thread
+    1.03    0.92    4.94    0.17   89%  89% Destroy [dead] thread
+    2.55    2.33    4.38    0.24   89%  70% Destroy [runnable] thread
+    5.62    4.11   13.23    0.99   65%  40% Resume [high priority] thread
+    1.84    1.83    2.79    0.02   98%  98% Thread switch
+
+    0.12    0.02    0.65    0.15   74%  74% Scheduler lock
+    0.35    0.35    0.35    0.00  100% 100% Scheduler unlock [0 threads]
+    0.35    0.35    0.35    0.00  100% 100% Scheduler unlock [1 suspended]
+    0.43    0.35    1.17    0.13   78%  78% Scheduler unlock [many suspended]
+    0.45    0.35    1.17    0.15   75%  75% Scheduler unlock [many low prio]
+
+    0.46    0.15    3.38    0.30   62%  50% Init mutex
+    0.73    0.64    3.27    0.16   96%  96% Lock [unlocked] mutex
+    0.77    0.65    4.50    0.23   96%  96% Unlock [locked] mutex
+    0.58    0.55    1.42    0.05   96%  96% Trylock [unlocked] mutex
+    0.51    0.50    0.83    0.02   96%  96% Trylock [locked] mutex
+    0.12    0.11    0.41    0.02   96%  96% Destroy mutex
+    4.72    4.70    5.58    0.05   96%  96% Unlock/Lock mutex
+
+    1.01    0.67    3.48    0.40   71%  71% Create mbox
+    0.02    0.00    0.53    0.03   96%  96% Peek [empty] mbox
+    0.89    0.68    4.20    0.29   96%  71% Put [first] mbox
+    0.02    0.00    0.33    0.02   96%  96% Peek [1 msg] mbox
+    0.69    0.68    0.76    0.01   50%  46% Put [second] mbox
+    0.02    0.00    0.30    0.02   96%  96% Peek [2 msgs] mbox
+    0.81    0.71    3.83    0.19   96%  96% Get [first] mbox
+    0.72    0.71    1.02    0.02   96%  96% Get [second] mbox
+    0.81    0.65    2.74    0.22   96%  71% Tryput [first] mbox
+    0.67    0.62    2.27    0.10   96%  96% Peek item [non-empty] mbox
+    0.77    0.71    2.41    0.10   96%  96% Tryget [non-empty] mbox
+    0.59    0.58    0.88    0.02   96%  96% Peek item [empty] mbox
+    0.62    0.62    0.67    0.00   96%  96% Tryget [empty] mbox
+    0.03    0.02    0.32    0.02   96%  96% Waiting to get mbox
+    0.02    0.02    0.06    0.01   50%  46% Waiting to put mbox
+    0.75    0.65    3.59    0.18   96%  96% Delete mbox
+    2.80    2.77    3.59    0.05   96%  96% Put/Get mbox
+
+    0.37    0.18    0.88    0.28   71%  71% Init semaphore
+    0.48    0.47    0.80    0.02   96%  96% Post [0] semaphore
+    0.60    0.59    0.67    0.01   50%  46% Wait [1] semaphore
+    0.53    0.50    1.41    0.06   96%  96% Trywait [0] semaphore
+    0.51    0.50    0.71    0.01   96%  50% Trywait [1] semaphore
+    0.09    0.09    0.15    0.00   96%  96% Peek semaphore
+    0.12    0.11    0.41    0.02   96%  96% Destroy semaphore
+    3.05    3.05    3.05    0.00  100% 100% Post/Wait semaphore
+
+    0.57    0.17    2.76    0.24   59%  25% Create counter
+    0.06    0.05    0.58    0.03   96%  96% Get counter value
+    0.06    0.03    0.64    0.04   96%  96% Set counter value
+    0.73    0.71    1.02    0.02   96%  96% Tick counter
+    0.12    0.11    0.15    0.01   50%  46% Delete counter
+
+    0.89    0.64    3.15    0.34   84%  71% Create alarm
+    1.00    0.95    2.41    0.09   96%  96% Initialize alarm
+    0.09    0.06    0.68    0.04   96%  96% Disable alarm
+    1.05    1.00    2.48    0.09   96%  96% Enable alarm
+    0.18    0.17    0.50    0.02   96%  96% Delete alarm
+    0.90    0.89    1.11    0.01   96%  96% Tick counter [1 alarm]
+    5.60    5.59    5.88    0.02   96%  96% Tick counter [many alarms]
+    1.53    1.52    2.11    0.04   96%  96% Tick & fire counter [1 alarm]
+   25.48   25.47   25.76    0.02   96%  96% Tick & fire counters [>1 together]
+    6.22    6.21    6.44    0.01   96%  96% Tick & fire counters [>1 separately]
+    2.59    2.56    6.17    0.07   98%  98% Alarm latency [0 threads]
+    4.06    3.95    6.24    0.08   78%  57% Alarm latency [2 threads]
+    5.03    2.56    9.03    0.89   59%  10% Alarm latency [many threads]
+    5.68    5.59   15.45    0.15   99%  99% Alarm -> thread resume latency
+
+    2.52    1.41    8.12    0.00            Clock/interrupt latency
+
+    2.05    1.17    6.00    0.00            Clock DSR latency
+
+   34       0    1072  (main stack:  1320)  Thread stack used (1912 total)
+All done, main stack            : stack used  1320 size  2936
+All done             :  Interrupt stack used   136 size  4096
+All done             : Idlethread stack used   996 size  2048
+
+Timing complete - 30360 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+
+	

PrevHomeNext
Board: Toshiba JMR3904 Evaluation BoardUpBoard: Matsushita STDEVAL1 Board
\ No newline at end of file diff --git a/doc/html/user-guide/rt-v850-cebsa1.html b/doc/html/user-guide/rt-v850-cebsa1.html new file mode 100644 index 00000000..b5e87c96 --- /dev/null +++ b/doc/html/user-guide/rt-v850-cebsa1.html @@ -0,0 +1,284 @@ + + + + + + + + +Board: NEC V850 Cosmo Evaluation Board +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: NEC V850 Cosmo Evaluation Board

Board: NEC V850 Cosmo Evaluation Board
+
+CPU: NEC CEB-V850/SA1 17MHz
+
+Startup, main stack  : stack used   552 size  2936
+Startup              : Interrupt stack used   120 size  4096
+Startup              : Idlethread stack used   206 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 27 `ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took  280.04 microseconds (1190 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                   7
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+  288.71  280.24  297.18    4.84   42%  28% Create thread
+   70.76   70.59   70.82    0.10   71%  28% Yield thread [all suspended]
+   59.06   59.06   59.06    0.00  100% 100% Suspend [suspended] thread
+   60.00   60.00   60.00    0.00  100% 100% Resume thread
+   77.38   77.18   77.41    0.06   85%  14% Set priority
+    3.13    3.06    3.29    0.10   71%  71% Get priority
+  187.46  187.29  187.53    0.10   71%  28% Kill [suspended] thread
+   70.76   70.59   70.82    0.10   71%  28% Yield [no other] thread
+  104.40  103.29  104.71    0.32   85%  14% Resume [suspended low prio] thread
+   59.06   59.06   59.06    0.00  100% 100% Resume [runnable low prio] thread
+   97.11   91.06   98.12    1.73   85%  14% Suspend [runnable] thread
+   70.76   70.59   70.82    0.10   71%  28% Yield [only low prio] thread
+   59.06   59.06   59.06    0.00  100% 100% Suspend [runnable->not runnable]
+  187.46  187.29  187.53    0.10   71%  28% Kill [runnable] thread
+   95.63   95.29   97.18    0.44   85%  85% Destroy [dead] thread
+  241.28  236.94  242.12    1.24   85%  14% Destroy [runnable] thread
+  378.55  370.35  427.06   13.86   85%  85% Resume [high priority] thread
+  198.77  183.76  452.94   18.77   96%  96% Thread switch
+
+    2.59    2.59    2.59    0.00  100% 100% Scheduler lock
+   41.29   41.18   41.41    0.12  100%  50% Scheduler unlock [0 threads]
+   40.82   40.71   40.94    0.12  100%  50% Scheduler unlock [1 suspended]
+   41.29   41.18   41.41    0.12  100%  50% Scheduler unlock [many suspended]
+   41.29   41.18   41.41    0.12  100%  50% Scheduler unlock [many low prio]
+
+   17.94   17.88   18.12    0.09   75%  75% Init mutex
+   68.71   68.71   68.71    0.00  100% 100% Lock [unlocked] mutex
+   72.10   72.00   73.41    0.15   96%  71% Unlock [locked] mutex
+   57.88   57.88   57.88    0.00  100% 100% Trylock [unlocked] mutex
+   52.24   52.24   52.24    0.00  100% 100% Trylock [locked] mutex
+   12.41   12.24   12.47    0.09   75%  25% Destroy mutex
+  427.06  427.06  427.06    0.00  100% 100% Unlock/Lock mutex
+
+
+   34.94   34.82   35.06    0.12  100%  50% Create mbox
+    0.76    0.71    0.94    0.09   75%  75% Peek [empty] mbox
+   75.29   75.29   75.29    0.00  100% 100% Put [first] mbox
+    1.24    1.18    1.41    0.09   75%  75% Peek [1 msg] mbox
+   75.76   75.76   75.76    0.00  100% 100% Put [second] mbox
+    0.76    0.71    0.94    0.09   75%  75% Peek [2 msgs] mbox
+   80.12   80.00   80.24    0.12  100%  50% Get [first] mbox
+   79.65   79.53   79.76    0.12  100%  50% Get [second] mbox
+   70.12   70.12   70.12    0.00  100% 100% Tryput [first] mbox
+   65.76   65.65   65.88    0.12  100%  50% Peek item [non-empty] mbox
+   78.00   77.88   78.12    0.12  100%  50% Tryget [non-empty] mbox
+   63.12   63.06   63.29    0.09   75%  75% Peek item [empty] mbox
+   67.82   67.76   68.00    0.09   75%  75% Tryget [empty] mbox
+    1.94    1.88    2.12    0.09   75%  75% Waiting to get mbox
+    1.47    1.41    1.65    0.09   75%  75% Waiting to put mbox
+   75.59   75.53   75.76    0.09   75%  75% Delete mbox
+  252.76  252.71  252.94    0.09   75%  75% Put/Get mbox
+
+   20.24   20.24   20.24    0.00  100% 100% Init semaphore
+   54.35   54.35   54.35    0.00  100% 100% Post [0] semaphore
+   66.59   66.59   66.59    0.00  100% 100% Wait [1] semaphore
+   52.24   52.24   52.24    0.00  100% 100% Trywait [0] semaphore
+   53.41   53.41   53.41    0.00  100% 100% Trywait [1] semaphore
+   10.65   10.59   10.82    0.09   75%  75% Peek semaphore
+   12.65   12.47   12.71    0.09   75%  25% Destroy semaphore
+  276.94  276.94  276.94    0.00  100% 100% Post/Wait semaphore
+
+   14.94   14.82   15.06    0.12  100%  50% Create counter
+    2.18    2.12    2.35    0.09   75%  75% Get counter value
+    3.06    3.06    3.06    0.00  100% 100% Set counter value
+   78.12   78.12   78.12    0.00  100% 100% Tick counter
+   13.82   13.65   13.88    0.09   75%  25% Delete counter
+
+   26.94   26.82   27.06    0.12  100%  50% Create alarm
+  104.18  104.00  104.24    0.09   75%  25% Initialize alarm
+    7.65    7.53    7.76    0.12  100%  50% Disable alarm
+  104.94  104.94  104.94    0.00  100% 100% Enable alarm
+   19.47   19.29   19.53    0.09   75%  25% Delete alarm
+   88.53   88.47   88.71    0.09   75%  75% Tick counter [1 alarm]
+  418.61  411.29  645.41   14.17   96%  96% Tick counter [many alarms]
+  139.59  139.53  139.76    0.09   75%  75% Tick & fire counter [1 alarm]
+ 2150.21 2096.71 2367.53   83.59   78%  78% Tick & fire counters [>1 together]
+  478.15  462.35  733.41   29.61   93%  93% Tick & fire counters [>1 separately]
+  219.89  218.59  369.88    2.34   99%  99% Alarm latency [0 threads]
+  292.11  218.59  371.53   37.85   50%  25% Alarm latency [2 threads]
+  292.96  218.59  370.59   38.12   49%  25% Alarm latency [many threads]
+  540.90  495.76 1677.41   17.76   98%   0% Alarm -> thread resume latency
+
+   79.01   78.59  104.71    0.00            Clock/interrupt latency
+
+  123.41   85.88 1982.82    0.00            Clock DSR latency
+
+  522     516     536  (main stack:  1124)  Thread stack used (1912 total)
+All done, main stack : stack used  1124 size  2936
+All done             :  Interrupt stack used   288 size  4096
+All done             : Idlethread stack used   488 size  2048
+
+Timing complete - 32540 ms total

PrevHomeNext
Board: PCUpBoard: NEC V850 Cosmo Evaluation Board
\ No newline at end of file diff --git a/doc/html/user-guide/rt-v850-cebsb1.html b/doc/html/user-guide/rt-v850-cebsb1.html new file mode 100644 index 00000000..1b5d0ec3 --- /dev/null +++ b/doc/html/user-guide/rt-v850-cebsb1.html @@ -0,0 +1,287 @@ + + + + + + + + +Board: NEC V850 Cosmo Evaluation Board +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: NEC V850 Cosmo Evaluation Board

Board: NEC V850 Cosmo Evaluation Board
+
+CPU: NEC CEB-V850/SB1 16MHz (in internal Flash)
+
+
+Startup, main stack             : stack used   572 size  2936
+Startup              :  Interrupt stack used   132 size  4096
+Startup              : Idlethread stack used   210 size  2048
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 8 'ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took  118.15 microseconds (472 raw clock ticks)
+
+Testing parameters:
+   Clock samples:            32
+   Threads:                   7
+   Thread switches:         128
+   Mutexes:                  32
+   Mailboxes:                32
+   Semaphores:               32
+   Scheduler operations:    128
+   Counters:                 32
+   Alarms:                   32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+  113.68  111.00  116.50    1.63   42%  28% Create thread
+   30.00   30.00   30.00    0.00  100% 100% Yield thread [all suspended]
+   29.57   29.50   29.75    0.10   71%  71% Suspend [suspended] thread
+   27.43   27.25   27.50    0.10   71%  28% Resume thread
+   34.11   34.00   34.25    0.12   57%  57% Set priority
+    1.57    1.50    1.75    0.10   71%  71% Get priority
+   72.96   72.75   73.00    0.06   85%  14% Kill [suspended] thread
+   30.00   30.00   30.00    0.00  100% 100% Yield [no other] thread
+   42.75   42.75   42.75    0.00  100% 100% Resume [suspended low prio] thread
+   27.00   27.00   27.00    0.00  100% 100% Resume [runnable low prio] thread
+   43.64   41.25   44.25    0.68   85%  14% Suspend [runnable] thread
+   30.00   30.00   30.00    0.00  100% 100% Yield [only low prio] thread
+   29.57   29.50   29.75    0.10   71%  71% Suspend [runnable->not runnable]
+   72.93   72.75   73.00    0.10   71%  28% Kill [runnable] thread
+   44.89   44.75   45.75    0.24   85%  85% Destroy [dead] thread
+  103.00  101.50  103.25    0.43   85%  14% Destroy [runnable] thread
+  175.21  171.50  197.50    6.37   85%  85% Resume [high priority] thread
+   84.11   79.50  197.25    1.77   98%   0% Thread switch
+
+    1.00    1.00    1.00    0.00  100% 100% Scheduler lock
+   20.06   20.00   20.25    0.09   75%  75% Scheduler unlock [0 threads]
+   20.00   20.00   20.00    0.00  100% 100% Scheduler unlock [1 suspended]
+   20.06   20.00   20.25    0.09   75%  75% Scheduler unlock [many suspended]
+   20.06   20.00   20.25    0.09   75%  75% Scheduler unlock [many low prio]
+
+    4.00    4.00    4.00    0.00  100% 100% Init mutex
+   33.00   33.00   33.00    0.00  100% 100% Lock [unlocked] mutex
+   36.77   36.75   37.25    0.03   96%  96% Unlock [locked] mutex
+   28.13   28.00   28.25    0.13  100%  50% Trylock [unlocked] mutex
+   25.13   25.00   25.25    0.13  100%  50% Trylock [locked] mutex
+    4.88    4.75    5.00    0.13  100%  50% Destroy mutex
+  187.00  187.00  187.00    0.00  100% 100% Unlock/Lock mutex
+
+   10.00   10.00   10.00    0.00  100% 100% Create mbox
+    0.69    0.50    0.75    0.09   75%  25% Peek [empty] mbox
+   34.75   34.75   34.75    0.00  100% 100% Put [first] mbox
+    0.69    0.50    0.75    0.09   75%  25% Peek [1 msg] mbox
+   35.00   35.00   35.00    0.00  100% 100% Put [second] mbox
+    0.69    0.50    0.75    0.09   75%  25% Peek [2 msgs] mbox
+   36.00   36.00   36.00    0.00  100% 100% Get [first] mbox
+   36.00   36.00   36.00    0.00  100% 100% Get [second] mbox
+   31.00   31.00   31.00    0.00  100% 100% Tryput [first] mbox
+   29.50   29.50   29.50    0.00  100% 100% Peek item [non-empty] mbox
+   35.25   35.25   35.25    0.00  100% 100% Tryget [non-empty] mbox
+   27.69   27.50   27.75    0.09   75%  25% Peek item [empty] mbox
+   31.06   31.00   31.25    0.09   75%  75% Tryget [empty] mbox
+    0.94    0.75    1.00    0.09   75%  25% Waiting to get mbox
+    0.94    0.75    1.00    0.09   75%  25% Waiting to put mbox
+   37.81   37.75   38.00    0.09   75%  75% Delete mbox
+  112.00  112.00  112.00    0.00  100% 100% Put/Get mbox
+
+    3.19    3.00    3.25    0.09   75%  25% Init semaphore
+   25.38   25.25   25.50    0.13  100%  50% Post [0] semaphore
+   32.63   32.50   32.75    0.13  100%  50% Wait [1] semaphore
+   24.25   24.25   24.25    0.00  100% 100% Trywait [0] semaphore
+   25.00   25.00   25.00    0.00  100% 100% Trywait [1] semaphore
+    4.00    4.00    4.00    0.00  100% 100% Peek semaphore
+    4.88    4.75    5.00    0.13  100%  50% Destroy semaphore
+  124.50  124.50  124.50    0.00  100% 100% Post/Wait semaphore
+
+    6.50    6.50    6.50    0.00  100% 100% Create counter
+    1.25    1.25    1.25    0.00  100% 100% Get counter value
+    1.44    1.25    1.50    0.09   75%  25% Set counter value
+   36.25   36.25   36.25    0.00  100% 100% Tick counter
+    5.25    5.25    5.25    0.00  100% 100% Delete counter
+
+   12.25   12.25   12.25    0.00  100% 100% Create alarm
+   49.13   49.00   49.25    0.13  100%  50% Initialize alarm
+    2.81    2.75    3.00    0.09   75%  75% Disable alarm
+   48.50   48.50   48.50    0.00  100% 100% Enable alarm
+    8.25    8.25    8.25    0.00  100% 100% Delete alarm
+   46.50   46.50   46.50    0.00  100% 100% Tick counter [1 alarm]
+  485.42  482.25  580.00    5.91   96%  96% Tick counter [many alarms]
+   64.00   64.00   64.00    0.00  100% 100% Tick & fire counter [1 alarm]
+ 1109.76 1100.50 1198.00   16.53   90%  90% Tick & fire counters [>1 together]
+  505.85  502.00  621.00    7.20   96%  96% Tick & fire counters [>1 separately]
+   96.26   95.75  161.25    1.02   99%  99% Alarm latency [0 threads]
+  159.20   95.75  160.75    2.52   97%   0% Alarm latency [2 threads]
+  159.73  110.50  161.75    1.53   97%   0% Alarm latency [many threads]
+  218.45  211.25  445.75    3.55   97%   1% Alarm -> thread resume latency
+
+   28.24   25.25   43.25    0.00            Clock/interrupt latency
+
+   60.15   40.50  221.50    0.00            Clock DSR latency
+
+  472     424     572  (main stack:  1052)  Thread stack used (1912 total)
+All done, main stack            : stack used  1052 size  2936
+All done             :  Interrupt stack used   280 size  4096
+All done             : Idlethread stack used   516 size  2048
+
+Timing complete - 30590 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>

PrevHomeNext
Board: NEC V850 Cosmo Evaluation BoardUpGNU General Public License
\ No newline at end of file diff --git a/doc/html/user-guide/rt-vr4300-vrc4373.html b/doc/html/user-guide/rt-vr4300-vrc4373.html new file mode 100644 index 00000000..f4b3079f --- /dev/null +++ b/doc/html/user-guide/rt-vr4300-vrc4373.html @@ -0,0 +1,285 @@ + + + + + + + + +Board: NEC VR4373 +
eCos User Guide
PrevAppendix B. Real-time characterizationNext

Board: NEC VR4373


Board: NEC VR4373
+
+CPU  : NEC VR4300 133MHz
+
+
+Startup, main stack             : stack used  1304 size  3576
+Startup              :  Interrupt stack used   980 size  4096
+Startup              : Idlethread stack used   494 size  2552
+
+eCos Kernel Timings
+Notes: all times are in microseconds (.000001) unless otherwise stated
+
+Reading the hardware clock takes 3 `ticks' overhead
+... this value will be factored out of all other measurements
+Clock interrupt took    6.49 microseconds (431 raw clock ticks)
+
+Testing parameters:
+   Clock samples:          32
+   Threads:                16
+   Thread switches:       128
+   Mutexes:                32
+   Mailboxes:              32
+   Semaphores:             32
+   Scheduler operations:  128
+   Counters:               32
+   Alarms:                 32
+
+
+                                 Confidence
+     Ave     Min     Max     Var  Ave  Min  Function
+  ======  ======  ======  ====== ========== ========
+   17.21   16.18   22.14    0.88   75%  68% Create thread
+    0.84    0.78    1.29    0.10   81%  81% Yield thread [all suspended]
+    0.90    0.62    3.20    0.35   87%  87% Suspend [suspended] thread
+    0.74    0.65    1.16    0.12   81%  68% Resume thread
+    1.11    0.90    1.70    0.25   75%  68% Set priority
+    0.11    0.05    0.35    0.09   75%  75% Get priority
+    2.93    2.24    8.27    0.78   93%  75% Kill [suspended] thread
+    0.88    0.78    1.92    0.16   93%  81% Yield [no other] thread
+    1.82    1.20    4.71    0.62   87%  62% Resume [suspended low prio] thread
+    0.70    0.63    0.86    0.09   68%  68% Resume [runnable low prio] thread
+    1.21    1.07    1.61    0.13   81%  68% Suspend [runnable] thread
+    0.86    0.78    1.58    0.13   81%  81% Yield [only low prio] thread
+    0.69    0.62    0.84    0.09   68%  68% Suspend [runnable->not runnable]
+    2.64    2.24    4.35    0.43   81%  62% Kill [runnable] thread
+    1.50    1.07    5.82    0.56   93%  87% Destroy [dead] thread
+    3.66    2.75    7.74    0.82   50%  56% Destroy [runnable] thread
+   13.65    8.33   27.88    3.70   50%  43% Resume [high priority] thread
+    2.04    1.89    3.32    0.15   46%  49% Thread switch
+
+    0.19    0.05    0.83    0.13   48%  44% Scheduler lock
+    0.50    0.41    1.59    0.13   89%  73% Scheduler unlock [0 threads]
+    0.52    0.41    1.29    0.14   89%  64% Scheduler unlock [1 suspended]
+    0.56    0.41    1.49    0.15   42%  47% Scheduler unlock [many suspended]
+    0.56    0.41    1.41    0.15   43%  47% Scheduler unlock [many low prio]
+
+    0.57    0.20    2.33    0.27   65%  50% Init mutex
+    0.89    0.75    3.35    0.20   96%  75% Lock [unlocked] mutex
+    0.90    0.74    4.38    0.25   96%  93% Unlock [locked] mutex
+    0.77    0.65    2.63    0.17   96%  75% Trylock [unlocked] mutex
+    0.66    0.59    1.16    0.10   75%  75% Trylock [locked] mutex
+    0.07    0.00    0.45    0.09   75%  75% Destroy mutex
+    7.95    7.71    9.49    0.19   50%  46% Unlock/Lock mutex
+
+    1.04    0.81    3.44    0.27   93%  68% Create mbox
+    0.10    0.02    0.57    0.11   71%  68% Peek [empty] mbox
+    1.15    0.83    4.71    0.31   53%  71% Put [first] mbox
+    0.10    0.02    0.57    0.12   68%  68% Peek [1 msg] mbox
+    1.01    0.83    3.83    0.22   93%  75% Put [second] mbox
+    0.09    0.02    0.57    0.10   71%  71% Peek [2 msgs] mbox
+    1.03    0.81    5.02    0.27   96%  87% Get [first] mbox
+    0.93    0.81    1.61    0.14   84%  62% Get [second] mbox
+    1.07    0.77    4.18    0.23   68%  50% Tryput [first] mbox
+    0.89    0.72    3.49    0.21   93%  71% Peek item [non-empty] mbox
+    1.04    0.83    4.09    0.26   90%  81% Tryget [non-empty] mbox
+    0.79    0.68    1.97    0.15   87%  68% Peek item [empty] mbox
+    0.84    0.72    2.36    0.17   93%  68% Tryget [empty] mbox
+    0.13    0.02    0.59    0.13   87%  62% Waiting to get mbox
+    0.13    0.02    0.90    0.13   90%  62% Waiting to put mbox
+    0.93    0.77    3.23    0.21   90%  71% Delete mbox
+    4.74    4.51    8.80    0.32   93%  78% Put/Get mbox
+
+    0.50    0.21    1.95    0.29   90%  50% Init semaphore
+    0.86    0.57    2.87    0.29   93%  56% Post [0] semaphore
+    1.01    0.74    3.62    0.28   93%  56% Wait [1] semaphore
+    0.87    0.60    3.17    0.28   90%  59% Trywait [0] semaphore
+    0.74    0.62    1.70    0.14   93%  56% Trywait [1] semaphore
+    0.36    0.11    1.11    0.26   65%  56% Peek semaphore
+    0.25    0.12    1.19    0.14   93%  56% Destroy semaphore
+    7.85    7.52    8.93    0.21   62%  43% Post/Wait semaphore
+
+    0.90    0.44    3.08    0.29   65%  28% Create counter
+    0.07    0.05    0.89    0.05   96%  96% Get counter value
+    0.06    0.05    0.33    0.02   96%  96% Set counter value
+    0.88    0.86    1.62    0.05   96%  96% Tick counter
+    0.13    0.12    0.41    0.02   96%  96% Delete counter
+
+    1.37    0.81    2.95    0.27   62%  25% Create alarm
+    1.35    1.17    6.03    0.31   96%  93% Initialize alarm
+    0.11    0.08    0.65    0.05   90%  90% Disable alarm
+    1.23    1.14    3.05    0.15   93%  87% Enable alarm
+    0.21    0.18    0.47    0.04   90%  90% Delete alarm
+    1.03    0.99    2.11    0.07   96%  96% Tick counter [1 alarm]
+    4.96    4.96    4.96    0.00  100% 100% Tick counter [many alarms]
+    1.70    1.67    2.51    0.05   96%  96% Tick & fire counter [1 alarm]
+   26.39   26.38   26.71    0.02   96%  96% Tick & fire counters [>1 together]
+    5.65    5.64    5.91    0.02   96%  96% Tick & fire counters [>1 separately]
+    2.55    2.38    9.86    0.19   96%  54% Alarm latency [0 threads]
+    5.37    3.80    9.73    0.95   50%  34% Alarm latency [2 threads]
+    8.79    5.83   16.12    1.29   57%  14% Alarm latency [many threads]
+
+    5.85    2.26   16.24    0.00            Clock/interrupt latency
+
+ 1540    1536    1544  (main stack:  1664)  Thread stack used (2552 total)
+All done, main stack            : stack used  1664 size  3576
+All done             :  Interrupt stack used   312 size  4096
+All done             : Idlethread stack used  1440 size  2552
+
+Timing complete - 23810 ms total
+
+PASS:<Basic timing OK>
+EXIT:<done>
+	

PrevHomeNext
Board: Cogent CMA MPC860 (PowerPC) EvaluationUpBoard: Intel SA1110 (Assabet)
\ No newline at end of file diff --git a/doc/html/user-guide/running-an-ecos-test-case.html b/doc/html/user-guide/running-an-ecos-test-case.html new file mode 100644 index 00000000..7f248e3d --- /dev/null +++ b/doc/html/user-guide/running-an-ecos-test-case.html @@ -0,0 +1,345 @@ + + + + + + + + +Running an eCos Test Case +
eCos User Guide
PrevNext

Chapter 12. Running an eCos Test Case

In the Section called Configuration Tool on Windows and Linux Quick Start in Chapter 11 or the Section called Ecosconfig on Windows and Linux Quick Start in Chapter 11 you created the eCos test cases +as part of the build process. Now it is time to try and run one.

Using the Configuration Tool

Test executables that have been linked using the +Build->Tests operation against the current +configuration can be executed by selecting Tools->Run +Tests.

When a test run is invoked, a property sheet is displayed, see +Figure 12-1. Press the Uncheck +All button and then find and check just one test, +bin_sem0 for example.

Now press the Properties button to set up +communications with the target. This will bring up a properties dialog +shown in Figure 12-2. If you have +connected the target board via a serial cable, check the +Serial radio button, and select the serial port +and baud rate for the board. If the target is connected via the +network select the TCP/IP button and enter the IP +address that the board has been given, and the port number (usually +9000).

Click OK on this dialog and go back to the Run +Tests dialog. Press the Run button and +the selected test will be downloaded and run. The +Output tab will show you how this is +progressing. If it seems to stop for a long time, check that the +target board is correctly connected, and that eCos has been correctly +configured -- especially the start-up type.

When the program runs you should see a couple of line similar to this appear:

PASS:<Binary Semaphore 0 OK>
+EXIT:<done>

This indicates that the test has run successfully.

See Chapter 22 for +further details.


PrevHomeNext
Ecosconfig on Windows and Linux Quick StartUpUsing the command line
\ No newline at end of file diff --git a/doc/html/user-guide/sample-twothreads.html b/doc/html/user-guide/sample-twothreads.html new file mode 100644 index 00000000..e85223de --- /dev/null +++ b/doc/html/user-guide/sample-twothreads.html @@ -0,0 +1,365 @@ + + + + + + + + +A Sample Program with Two Threads +
eCos User Guide
PrevChapter 13. Building and Running Sample ApplicationsNext

A Sample Program with Two Threads

Below is a program that uses some of eCos' system calls. It +creates two threads, each of which goes into an infinite loop in which +it sleeps for a while (using cyg_thread_delay()). This code is found +in the file twothreads.c +in the examples directory.

eCos two-threaded program listing

#include <cyg/kernel/kapi.h>
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+
+/* now declare (and allocate space for) some kernel objects,
+  like the two threads we will use */
+cyg_thread thread_s[2];	/* space for two thread objects */
+
+char stack[2][4096];	/* space for two 4K stacks */
+
+/* now the handles for the threads */
+cyg_handle_t simple_threadA, simple_threadB;
+
+/* and now variables for the procedure which is the thread */
+cyg_thread_entry_t simple_program;
+
+/* and now a mutex to protect calls to the C library */
+cyg_mutex_t cliblock;
+
+/* we install our own startup routine which sets up threads */
+void cyg_user_start(void)
+{
+ printf("Entering twothreads' cyg_user_start() function\n");
+
+ cyg_mutex_init(&cliblock);
+
+ cyg_thread_create(4, simple_program, (cyg_addrword_t) 0,
+	"Thread A", (void *) stack[0], 4096,
+	&simple_threadA, &thread_s[0]);
+ cyg_thread_create(4, simple_program, (cyg_addrword_t) 1,
+	"Thread B", (void *) stack[1], 4096,
+	&simple_threadB, &thread_s[1]);
+
+ cyg_thread_resume(simple_threadA);
+ cyg_thread_resume(simple_threadB);
+}
+
+/* this is a simple program which runs in a thread */
+void simple_program(cyg_addrword_t data)
+{
+ int message = (int) data;
+ int delay;
+
+ printf("Beginning execution; thread data is %d\n", message);
+
+ cyg_thread_delay(200);
+
+ for (;;) {
+ delay = 200 + (rand() % 50);
+
+ /* note: printf() must be protected by a
+ call to cyg_mutex_lock() */
+ cyg_mutex_lock(&cliblock); {
+ printf("Thread %d: and now a delay of %d clock ticks\n",
+	message, delay);
+ }
+ cyg_mutex_unlock(&cliblock);
+ cyg_thread_delay(delay);
+ }
+}

When you run the program (by typing continue at +the (gdb) prompt) the output should look like +this:

Starting program: BASE_DIR/examples/twothreads.exe
+Entering twothreads' cyg_user_start()
+function
+Beginning execution; thread data is 0
+Beginning execution; thread data is 1
+Thread 0: and now a delay of 240 clock ticks
+Thread 1: and now a delay of 225 clock ticks
+Thread 1: and now a delay of 234 clock ticks
+Thread 0: and now a delay of 231 clock ticks
+Thread 1: and now a delay of 224 clock ticks
+Thread 0: and now a delay of 249 clock ticks
+Thread 1: and now a delay of 202 clock ticks
+Thread 0: and now a delay of 235 clock ticks

Figure 13-1 shows how this +multitasking program executes. Note that apart from the thread +creation system calls, this program also creates and uses a +mutex for synchronization +between the printf() calls in the two +threads. This is because the C library standard I/O (by default) is +configured not to be thread-safe, which means that if more than one +thread is using standard I/O they might corrupt each other. This is +fixed by a mutual exclusion (or mutex) lockout +mechanism: the threads do not call printf() until +cyg_mutex_lock() has returned, which only happens +when the other thread calls +cyg_mutex_unlock().

You could avoid using the mutex by configuring the C library to +be thread-safe (by selecting the component +CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS).


PrevHomeNext
Building and Running Sample ApplicationsUpMore Features — Clocks and Alarm +Handlers
\ No newline at end of file diff --git a/doc/html/user-guide/setup-am33-stb.html b/doc/html/user-guide/setup-am33-stb.html new file mode 100644 index 00000000..ca1b56e4 --- /dev/null +++ b/doc/html/user-guide/setup-am33-stb.html @@ -0,0 +1,409 @@ + + + + + + + + +AM33 STB Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

AM33 STB Hardware Setup

The Matsushita AM33 STB System Reference Board may be used +in two modes: via a JTAG debugger, or by means of a GDB stub ROM.

Use with GDB Stub ROM

The eCos Developer’s Kit package comes with a ROM +image which provides GDB support for +the Matsushita(R) AM33 STB System Reference Board. To install the +GDB stub ROM requires the use of the JTAG debugger and the Flash ROM +programming code available from Matsushita. An image of this ROM +is also provided at loaders/am33-stb/gdbload.bin under +the root of your eCos installation.

Ensure that there is a Flash ROM card in MAIN MEMORY SLOT <0>. +Follow the directions for programming a Flash ROM supplied with +the programming software.

The final programming of the ROM will need to be done with +a command similar to the following:

fdown "gdbload.bin",0x80000000,16,1

Once the ROM has been programmed, close down the JTAG debugger, +turn the STB off, and disconnect the JTAG cable. Ensure that the +hardware switches are in the following configuration:

U U D D D U D D
+
+D = lower part of rocker switch pushed in
+U = upper part of rocker switch pushed in

This is also the configuration required by the Flash programming +code, so it should not be necessary to change these.

Restart the STB and the stub ROM will now be able to communicate +with GDB. eCos programs should be built +with RAM startup.

Programs can then be downloaded via a standard RS232 null +modem serial cable connected to the SERIAL1 connector on the STB +front panel (the AM33"s serial port 0). This line is programmed +to run at 38400 baud, 8 data bits, no parity and 1 stop bit (8-N-1) +with no flow control. A gender changer may also be required. Diagnostic +output will be output to GDB using the same connection.

This procedure also applies for programming ROM startup eCos +programs into ROM, given a binary format image of the program from
 mn10300-elf-objcopy.

Use with the JTAG debugger

To use eCos from the JTAG debugger, executables must be built +with ROM startup and then downloaded via the JTAG debugger. For +this to work there must be an SDRAM memory card in SUB MEMORY SLOT <0> and +the hardware switches on the front panel set to the following:

D U D D D U D D
+
+D = lower part of rocker switch pushed in
+U = upper part of rocker switch pushed in

Connect the JTAG unit and run the debugger as described in +the documentation that comes with it.

eCos executables should be renamed to have a “.out” extension +and may then be loaded using the debugger"s “l” or “lp” commands.

Diagnostic output generated by the program will be sent out +of the AM33"s serial port 0 which is connected to the SERIAL1 +connector on the STB front panel. This line is programmed to run +at 38400 baud, 8 data bits, no parity, and one stop bit (8-N-1) +with no flow control. Connection to the host computer should be +using a standard RS232 null modem serial cable. A gender changer +may also be required.

Building the GDB stub ROM image

eCos comes with a pre-built GDB stub ROM image for the AM33-STB +platform. This can be found at loaders/am33-stb/gdbload.bin relative +to the eCos installation directory.

If necessary, the ROM image can be re-built as follows:

  1. On Windows hosts, open a Bash session using +Start->Programs->Red Hat eCos->eCos +Development Environment

  2. Create a build directory and cd into it

  3. Run (all as one line): + +
    cygtclsh80 BASE_DIR/packages/pkgconf.tcl                          \
    +  --target=mn10300_am33 --platform stb --startup rom              \
    +  --disable-kernel --disable-uitron --disable-libc --disable-libm \
    +  --disable-io --disable-io_serial --disable-wallclock
    +--disable-watchdog
    +

    where BASE_DIR is the path to the eCos installation +directory.

  4. Edit the configuration file +pkgconf/hal.h + in the build directory tree by ensuring the following configuration +options are set as follows: + +
    #define CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
    +#define CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
    +#undef  CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT
    +#define CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
    +#define CYG_HAL_ROM_MONITOR
    +

  5. Run: make

  6. Run: make -C hal/common/current/current/src/stubrom

  7. The file +hal/common/current/src/stubrom + will be an ELF format executable of the ROM image. Use mn10300-elf-objcopy to +convert this to the appropriate format for loading into the Matsushita +FLASH ROM programmer, mode “binary” in this case: + +
    $ mn10300-elf-objcopy -O binary hal/common/current/src/stubrom/ \
    +  stubrom stubrom.img


PrevHomeNext
MN10300 Architectural Simulator SetupUpTX39 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-aeb1.html b/doc/html/user-guide/setup-arm-aeb1.html new file mode 100644 index 00000000..e37a1e44 --- /dev/null +++ b/doc/html/user-guide/setup-arm-aeb1.html @@ -0,0 +1,614 @@ + + + + + + + + +ARM AEB-1 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

ARM AEB-1 Hardware Setup

Overview

The ARM AEB-1 comes with tools in ROM. These include a simple +FLASH management tool and the Angel® monitor. eCos for +the ARM AEB-1 comes with GDB stubs suitable for programming into +the onboard FLASH. GDB is the preferred debug environment for GDB, +and while Angel provides a subset of the features in the eCos GDB +stub, Angel is unsupported.

Both eCos and the stubs support both Revision B and Revision +C of the AEB-1 board. Stub ROM images for both types of board can +be found in the loaders/arm-aeb directory under the root +of your eCos installation. You can select which board you are using +by selecting either the aeb or aebC platform by selecting the appropriate +platform HAL in the eCos Configuration Tool.

The GDB stub can be downloaded to the board for programming +in the FLASH using the board's on-board ROM monitor:

  1. talk to the AEB-1 board with a terminal emulator (or +a real terminal!)

  2. use the board's rom menu to download a UU-encoded +version of the GDB stubs which will act as a ROM monitor

  3. tell the board to use this new monitor, and then hook +GDB up to it for real debugging

Downloading the Stubs via the Rom Menu

Using the AEB-1 rom menu to download the GDB stubs from the +provided ".UU" file.

+Boot: help
+Module is BootStrap       1.00 (14 Aug 1998)
Help is available on:
Help          Modules       ROMModules    UnPlug        PlugIn
+Kill          SetEnv        UnSetEnv      PrintEnv      DownLoad
+Go            GoS           Boot          PC            FlashWrite
+FlashLoad     FlashErase
Boot: download c000
+Ready to download. Use 'transmit' option on terminal
+emulator to download file.
... at this point, download the ASCII file "loaders/arm-aeb/
+    gdb_module.img.UU". The details of this operation differ
+    depending on which terminal emulator is used. It may be
+    necessary to enter "^D" (control+D) when the download completes
+   to get the monitor to return to command mode. 
Loaded file gdb_module.img.bin at address
+0000c000, size = 19392 

Activating the GDB Stubs

Commit the GDB stubs module to FLASH:

	Boot: flashwrite 4018000 C000 8000
+    

Verify that the eCos/"GDB stubs" module is now added +in the list of modules in the board:

	Boot: rommodules
+    

You should see output similar to the following:

	Header   Base     Limit
+	04000004 04000000 040034a8 BootStrap       1.00 (14 Aug 1998) 
+	04003a74 04003800 04003bc0 Production Test 1.00 (13 Aug 1998) 
+	0400e4f4 04004000 0400e60f Angel           1.02 (12 MAY 1998) 
+	0401c810 04018000 0401cbc0 eCos              1.3  (27 Jan 2000)
+GDB stubs
+    

Now make the eCos/"GDB stubs" module be the default +monitor:

	Boot: plugin eCos
+    

PrevHomeNext
ARM PID Hardware SetupUpARM Cogent CMA230 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-clps7111.html b/doc/html/user-guide/setup-arm-clps7111.html new file mode 100644 index 00000000..bd2c81e2 --- /dev/null +++ b/doc/html/user-guide/setup-arm-clps7111.html @@ -0,0 +1,220 @@ + + + + + + + + +Cirrus Logic ARM CL-PS7111 Evaluation Board Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

Cirrus Logic ARM CL-PS7111 Evaluation Board Hardware Setup

The implementation of the port of eCos to the Cirrus Logic +ARM CL-PS7111 Evaluation Board (also known as EB7111) is based on +the EP7211 Development Board port.

For that reason, the setup required is identical to the EP7211 +Development Board as described above, with the following exceptions:

All remote serial communication is done with the serial I/O +connector

/misc   
+% slow_cat.tcl < [path]/gdb_module.srec > /dev/ttyS0

Power off the board, and change it to boot the GDB stubs in +big-endian mode by setting the switches like this:

SW1: 00000000 (all levers down) +SW2: 10001010

The GDB stubs allow communication with GDB using the serial +port at connector PJ7A (lower connector). The communication parameters +are fixed at 38400 baud, 8 data bits, no parity bit and 1 stop +bit (8-N-1). No flow control is employed. Connection to the host +computer should be made using a straight through serial cable.


PrevHomeNext
Cirrus Logic ARM EP7209 Development Board Hardware SetupUpStrongARM EBSA-285 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-cma230.html b/doc/html/user-guide/setup-arm-cma230.html new file mode 100644 index 00000000..69d2a74a --- /dev/null +++ b/doc/html/user-guide/setup-arm-cma230.html @@ -0,0 +1,341 @@ + + + + + + + + +ARM Cogent CMA230 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

ARM Cogent CMA230 Hardware Setup

The eCos Developer's Kit package comes with an EPROM +which provides GDB support for the Cogent evaluation board. An image +of this EPROM is also provided at loaders/arm-cma230/gdbload.bin +under the root of your eCos installation.

The EPROM is installed to socket U3 on the board. Attention +should be paid to the correct orientation of the EPROM during installation.

If you are going to burn a new EPROM using the binary image, +be careful to get the byte order correct. It needs to be little-endian, +which is usually the default in PC based programmer software.

If the GDB stub EPROM you burn does not work, try reversing +the byte-order, even if you think you have it the right way around. +At least one DOS-based EPROM burner program is known to have the +byte-order upside down.

The GDB stub in the EPROM allows communication with GDB using +the serial port at connector P12 (CMA101) or P3 (CMA102). The communication parameters +are fixed at 38400 baud, 8 data bits, no parity bit and 1 stop bit +(8-N-1). No flow control is employed. Connection to the host computer +should be made using a dedicated serial cable as specified in the +Cogent CMA manual.


PrevHomeNext
ARM AEB-1 Hardware SetupUpCirrus Logic ARM EP7211 Development +Board Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-ebsa285.html b/doc/html/user-guide/setup-arm-ebsa285.html new file mode 100644 index 00000000..61bfc30c --- /dev/null +++ b/doc/html/user-guide/setup-arm-ebsa285.html @@ -0,0 +1,574 @@ + + + + + + + + +StrongARM EBSA-285 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

StrongARM EBSA-285 Hardware Setup

The eCos Developer’s Kit package comes with a ROM +image which provides GDB support for +the Intel® StrongARM® Evaluation Board EBSA-285. + Both eCos and the Stub ROM image assume the clocks are: 3.6864 +MHz PLL input for generating the core clock, and 50MHz osc input +for external clocks. An image of this ROM is also provided at loaders/arm-ebsa285/gdbload.bin under +the root of your eCos installation.

The ROM monitor image (an eCos GDB +stub) provided for the EBSA-285 board must be programmed into the +flash, replacing the Angel monitor on the board. Please refer to +the section titled "Loading the ROM Image into On-Board flash" on how +to program the ROM onto the board.

The Stub ROM allows communication with GDB via the serial +connector on the bulkhead mounting bracket COM0. The communication +parameters are fixed at 38400 baud, 8 data bits, no parity bit and +1 stop bit (8-N-1). No flow control is employed.

Loading the ROM Image into On-board Flash

There are several ways to install the eCos gdb stub ROM image +in the EBSA board’s flash memory. Once installed, the gdb +stub ROM provides standard eCos download and debug via the EBSA +board"s serial port. The options available include the +Linux based EBSA flash upgrade utility provided by Red Hat, direct writing +of the flash via MultiICE (JTAG) hardware debugger, and other flash management +utilities from Intel (these only support DOS, and proprietary ARM tools +and image formats). Only the Red Hat flash upgrade tool is supported +and tested in this release.

The flash upgrade tool requires the EBSA board to be configured +as a PCI slave (rather than a master, its normal operating mode) +and plugged into a Linux host computer"s PCI bus.

Configuring the board for flash loading: Follow the instructions +in the EBSA-285 Reference Manual, pages A-2 and A-3 to configure +the board as an add-in card, and enable flash blank programming. + Briefly: assuming the board was in the default setting to execute +as a bus master ("Host Bridge") make jumper 9 (J9), move jumper +10 (J10) to external reset (PCI_RST), and move jumper 15 +(J15) link 4-6-5 to connect 5-6 instead of 4-6.

Configuring the board for execution of eCos programs: Follow +the instructions in the EBSA-285 Reference Manual, pages A-2 and +A-3 to configure the board as a "Host Bridge" with "Central Function". + Briefly: unset J9, move J10 to on-board reset (BRD_RST), +and set J15 to make 4-6 instead of 5-6 (see page A-8 also). Plug +the card into its own PCI bus, not the Linux PC used for the flash-programming +process.

Building the Linux software: the Linux software sources are +in directory

      <BASE_DIR>/packages/hal/arm/ebsa285/v1_3/support/linux/safl_util

in the eCos source repository. There are two parts to the +system: a loadable kernel module and the flash utility. The loadable +kernel module is safl.o and the utility is sa_flash. To +build:

cd to this directory, or a copy of it.

make

This builds safl.o and sa_flash. The kernel module +must be installed, and a device file created for it. Both of these +operations require root permissions. Create the device file by:

      % mknod /dev/safl c 10 178

Programming the flash: switch off the EBSA-285, and remove +the EBSA-285 board from its PCI bus. Take appropriate anti-static +precautions. Configure it for flash loading as above, halt your +Linux system and turn it off. Install the EBSA-285 board in the +PCI bus of the Linux system and boot it up. (Single user is good enough, +assuming your image and safl_util build dir are on a local +disc partition.) Change directory to the safl_util directory, +then, to load the kernel module and flash an image onto the eval +board (as root):

       % insmod safl.o
+       % sa_flash <image_file>

Halt and turn off the Linux machine and remove the EBSA-285 +card. Take appropriate anti-static precautions. Configure it for +execution of eCos programs as above, and plug it into its own PCI +bus. Restart the Linux machine however you wish.

This information is replicated in the README file within the +safl_util directory and its parents, and in the EBSA-285 +Reference Manual from Intel, appendix A "Configuration Guide". +If in doubt, please refer to those documents also.

This procedure also applies for loading ROM-startup eCos programs +into the on-board flash memory, given a binary format image of the +program from arm-elf-objcopy. Loading a ROM-startup eCos program +into flash will overwrite the StubROM in flash, so you would have +to reload the StubROM to return to normal RAM-startup program development.

Running your eCos Program Using GDB and the StubROM

Connect to the StubROM in the board and run your eCos program <PROGRAM> as

follows:

      $ arm-elf-gdb -nw <PROGRAM>
+      (gdb) set remotebaud 38400
+      (gdb) target remote <DEVICE>

Where <DEVICE> is /dev/ttyS0 +or COM1: or similar, depending on your environment and how you connected +your serial line to the host computer. Expect some output here, +for example:

      Remote debugging using /dev/ttyS0
+      0x410026a4 in ?? ()

then, to load the program

        (gdb) load
+    

which will report locations and sizes of sections as they +load, then begin execution using

      (gdb) continue

If you have no eCos program yet, but you want to connect to +the board just to verify serial communications, tell gdb "set endian +little" before anything else, so that it understands the board (GDB +normally infers this from information within the eCos program).


PrevHomeNext
Cirrus Logic ARM CL-PS7111 Evaluation Board Hardware SetupUpCompaq iPAQ PocketPC Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-ep7209.html b/doc/html/user-guide/setup-arm-ep7209.html new file mode 100644 index 00000000..ad2cf417 --- /dev/null +++ b/doc/html/user-guide/setup-arm-ep7209.html @@ -0,0 +1,165 @@ + + + + + + + + +Cirrus Logic ARM EP7209 Development Board Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext


PrevHomeNext
Cirrus Logic ARM EP7312 Development Board +Hardware SetupUpCirrus Logic ARM CL-PS7111 Evaluation Board Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-ep7211.html b/doc/html/user-guide/setup-arm-ep7211.html new file mode 100644 index 00000000..2fdc14e5 --- /dev/null +++ b/doc/html/user-guide/setup-arm-ep7211.html @@ -0,0 +1,681 @@ + + + + + + + + +Cirrus Logic ARM EP7211 Development +Board Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

Cirrus Logic ARM EP7211 Development +Board Hardware Setup

eCos comes with two Flash ROM images that provide GDB support +for the Cirrus Logic EP7211 Development Board (also known as the +EDB7211).. Note that on some board revisions, the board is silk-screened +as EDB7111-2. The first Flash ROM image provides a port of the CygMon +ROM monitor, which includes a command-line interface and a GDB remote +stub. The second Flash ROM image provides a remote GDB stub only.

Both ROM images are provided in the directory loaders/arm-edb7211 +under the root of your eCos installation. CygMon images are prefixed +with the name 'edb7211_cygmon' and are +provided in a number of formats including binary (.bin extension) +and SREC (.srec) extension. GDB stub ROM images are given the prefix 'edb7211_gdb_module'.

The ROM images provided for the EP7211 Development Board must +be programmed into the FLASH. Please refer to the section titled +"Loading the ROM image into On-Board flash" on how to program the +ROM onto the board.

Both Cygmon and GDB Stub ROMS allow communication with GDB +via the serial connector labelled 'UART 1'. The +communication parameters are fixed at 38400 baud, 8 data bits, no +parity bit and 1 stop bit (8-N-1). No flow control is employed. +Connection to the host computer should be made using a null modem cable. +A gender changer may also be required. Note that the GDB Configuration tool +uses the serial port identifiers 0 and 1 to identify the EB7211 +serial ports UART1 and UART2 respectively.

Both eCos and the ROM images assume the core clock is generated +with a 3.6864 MHz PLL input. The CPU will be configured to run at +73.728MHz.

Note: The EP7211 CPU needs a two step RESET process. After +pressing the `URESET' pushbutton, the `WAKEUP' pushbutton +must be pressed to complete the process.

Loading the ROM Image into On-board Flash

Program images can be written into Flash memory by means of +a bootstrap program which is built into the EDB7211. This program +communicates with a support program on your host to download and +program an image into the Flash memory.

Cirrus Logic provides such a program for use with Windows/DOS. + eCos comes with a similar program which will run under Linux. The +basic operation of both programs is the same.

  1. Connect a serial line to 'UART 1'.

  2. Power off the EDB7211.

  3. Install jumper 'PROGRAM ENABLE' which +enables this special mode for downloading Flash images. Note that +some board revisions have this jumper labelled “BOOT ENABLE”.

  4. Power on the EDB7211.

  5. Execute the Flash writing program on your host. On Linux, +this would be:

         # dl_edb7xxx <PATH>/gdb_module.bin

    where '<PATH>' is the path to +the binary format version of the ROM image you wish to load, either +as built in the previous section or the "loaders/arm-edb7211/" subdirectory +of your eCos installation. The download tool defaults to 38400 baud and +device /dev/ttyS1 for communication. To change +these, specify them as parameters, e.g. +

    # dl_edb7xxx <PATH>/gdb_module.bin 9600 /dev/ttyS0
  6. The download program will indicate that it is waiting +for the board to come alive. At this point, press 'RESET' and +then 'WAKEUP' switches in order. There should be +some indication of progress, first of the code being downloaded, +then of the programming process.

  7. Upon completion of the programming, power off the EDB7211.

  8. Remove the 'PROGRAM ENABLE/BOOT ENABLE' jumper.

  9. Power on the EDB7211, press 'RESET' and 'WAKEUP'. + The new ROM image should now be running on the board.

  10. The GDB debugger will now be able to communicate with +the board to download and debug RAM based programs. + +This procedure also applies for loading ROM-startup eCos programs +into the on-board FLASH memory, given a binary format image of the +program from arm-elf-objcopy. Loading a ROM-startup eCos program +into Flash will overwrite the GDB Stub ROM/CygMon in Flash, +so you would have to reload the GDB Stub ROM/CygMon to +return to normal RAM-startup program development.

Developing eCos Programs with the ARM Multi-ICE

The EP7211 Development Board supports use of the ARM + Multi-processor EmbeddedICE(tm), also known as the + Multi-ICE. Full instructions on how to install and use the + Multi-ICE in conjunction with GDB are provided in the + "GNUPro Toolkit Reference for eCos + ARM/Thumb" manual. However, the following + platform-specific details should be noted.

You will need an ARM Multi-ICE Server configuration + file for the EP7211 Development Board. Here is a suggested + configuration file to use:

======== File "720T.cfg" ======== 
+;Total IR length = 4 
+[TITLE] 
+Multi-ICE configuration for EP7211 
+ 
+[TAP 0] 
+ARM720T 
+ 
+[TAPINFO] 
+YES 
+ 
+[Timing] 
+Low=0 
+High=0 
+Adaptive=OFF 
+==================================

You must ensure that the board has the appropriate soldered +connections. For the EP7211 this involves connecting TEST0 and TEST1 +of the EP7211 to ground. To do this you must solder a wire from +ground at JP33 to TP8 and TP9.

With respect to using multiple devices simultaneously, note +that the EP7211 is not ID sensitive.

If you wish to view diagnostic output from your program that +was downloaded via the Multi-ICE, you will note that by default +the output on the serial line (as viewed by a terminal such as Hyperterm +in Windows, or cu in Unix) is in the form of GDB packets.

To get legible output, the solution is to set the "GDB Serial +port" to a different device from the "Diagnostic serial port", and +you should use the Diagnostic serial port to view the diagnostic +output.

Warning: The multi-ice-gdb-server will fail on startup if +the board has not been both reset and awakened before running the +server.

To resolve this, it is necessary to free up the connection +from within the ARM Multi-ICE server itself. However when this happens, +the next time you use GDB to load the program into the board, you +will see lots of "Readback did not match original data" messages +in the output of the multi-ice-gdb-server program. This indicates +your program did not load correctly, and you should restart the +multi-ice-gdb-server program, taking care to reset the board correctly +before reconnecting.

As a reminder, you must specify --config-dialog to the + multi-ice-gdb-server program to connect to the board + correctly. If you do not, the multi-ice-gdb-server program + will not be able to connect.


PrevHomeNext
ARM Cogent CMA230 Hardware SetupUpCirrus Logic ARM EP7212 Development Board +Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-ep7212.html b/doc/html/user-guide/setup-arm-ep7212.html new file mode 100644 index 00000000..4697898c --- /dev/null +++ b/doc/html/user-guide/setup-arm-ep7212.html @@ -0,0 +1,214 @@ + + + + + + + + +Cirrus Logic ARM EP7212 Development Board +Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

Cirrus Logic ARM EP7212 Development Board +Hardware Setup

The Cirrus Logic EP7212 Development Board is almost identical +to the EP7211 Development Board from a hardware setup viewpoint, +and is based on the same port of eCos. Therefore the earlier documentation +for the EP7211 Development Board can be considered equivalent, but +with the following changes:


PrevHomeNext
Cirrus Logic ARM EP7211 Development +Board Hardware SetupUpCirrus Logic ARM EP7312 Development Board +Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-ep7312.html b/doc/html/user-guide/setup-arm-ep7312.html new file mode 100644 index 00000000..10a29143 --- /dev/null +++ b/doc/html/user-guide/setup-arm-ep7312.html @@ -0,0 +1,209 @@ + + + + + + + + +Cirrus Logic ARM EP7312 Development Board +Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

Cirrus Logic ARM EP7312 Development Board +Hardware Setup

The Cirrus Logic EP7312 Development Board is similar +to the EP7212 Development Board from a hardware setup viewpoint, +and is based on the same port of eCos.

When rebuilding the RedBoot ROM image or an eCos application, +change the "Cirrus Logic processor variant" option +(CYGHWR_HAL_ARM_EDB7XXX_VARIANT) +from the EP7211 to the EP7312. This can be selected in the +eCos Configuration Tool +, or if using ecosconfig, can be set by uncommenting the user_value +property of this option in ecos.ecc and setting it to "EP7312".

See the RedBoot documentation for building and installing RedBoot for this +target. Only RedBoot is supported as a boot image; ROMRAM startup is +recommended.

90MHz Operation

The EP7xxx targets offer a choice of clock speeds, from 18MHz to a maximum, +normally, of 72MHz. These are described as kHz values 18432 36864 49152 +and 73728 within the configuration tool. If you have a release which +supports it, you will also see 90317 as an available option here, for 90MHz +operation.

This option only applies to certain EP7312 hardware, not all EP7312 boards +support it. Do not select 90MHz when building RedBoot or your eCos +application unless you are absolutely sure that your board supports it.

If you do have a 90MHz board and wish to execute at 90MHz, it is in fact +not necessary to build RedBoot specially, if you build your eCos +application configured for 90MHz. RedBoot will run at 72MHz and your +application will run at 90MHz. If you do install a 90MHz RedBoot, then you +must build eCos for 90MHz or timing and baud rates on serial I/O will be +wrong.

In other words, code (either eCos app or RedBoot) built for 90MHz will +“change up a gear” when it starts up; but code built for 72MHz, +because it needs to run correctly on boards without the +“gearbox” does not change back down, so if you mix the two, +unexpected timing can result. To run a non-eCos application without any +hardware initialization code at 90MHz, you must install a specially-built +RedBoot.


PrevHomeNext
Cirrus Logic ARM EP7212 Development Board +Hardware SetupUpCirrus Logic ARM EP7209 Development Board Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-ipaq.html b/doc/html/user-guide/setup-arm-ipaq.html new file mode 100644 index 00000000..071be180 --- /dev/null +++ b/doc/html/user-guide/setup-arm-ipaq.html @@ -0,0 +1,164 @@ + + + + + + + + + Compaq iPAQ PocketPC Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext


PrevHomeNext
StrongARM EBSA-285 Hardware SetupUpSH3/EDK7708 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-arm-pid.html b/doc/html/user-guide/setup-arm-pid.html new file mode 100644 index 00000000..f1283fe4 --- /dev/null +++ b/doc/html/user-guide/setup-arm-pid.html @@ -0,0 +1,862 @@ + + + + + + + + +ARM PID Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

ARM PID Hardware Setup

eCos comes with two ROM images that provide GDB support for +the ARM PID board. The first ROM image provides a port of the CygMon +ROM monitor, which includes a command-line interface and a GDB remote +stub. The second ROM image provides a remote GDB stub only, which +is a minimal environment for downloading and debugging eCos programs +solely using GDB.

eCos, CygMon and the GDB stubs all support the PID fitted +with both ARM7T and ARM9 daughterboards. CygMon and the stubs can +be programmed into either the programmable ROM (U12) or the FLASH +(U13). Pre-built forms of both ROM images are provided in the directory +loaders/arm-pid under the root of your eCos installation, +along with a tool that will program the stubs into the FLASH memory on +the board. CygMon images are prefixed with the name 'cygmon' and +GDB stub ROM images are given the prefix 'gdb_module'. +Images may be provided in a number of formats including ELF (.img +extension), binary (.bin extension) and SREC (.srec extension). +Note that some unreliability has been experienced in downloading +files using Angel 1.00. Angel 1.02 appears to be more robust in +this application.

Installing the Stubs into FLASH

Program the FLASH

  1. Download the FLASH ROM image onto the PID board. For +example. for the GDB stubs image: + +
    bash$ arm-elf-gdb -nw gdb_module.img
    +GNU gdb 4.18-DEVTOOLSVERSION
    +Copyright 1998 Free Software Foundation, Inc.
    +GDB is free software, covered by the GNU General Public License,
    +and you are welcome to change it and/or distribute copies
    +of it under certain conditions. Type "show copying" to see the conditions.
    +There is absolutely no warranty for GDB. Type "show warranty" for details.
    +This GDB was configured as "--host=i586-pc-cygwin32 --target=arm-elf".
    +(no debugging symbols found)...
    +(gdb) target rdi s=com1
    +Angel Debug Monitor for PID (Built with Serial(x1), Parallel, DCC) 1.00
    +(Advanced RISC Machines SDT 2.10)
    +Angel Debug Monitor rebuilt on Jan 20 1997 at 02:33:43
    +Connected to ARM RDI target.
    +(gdb) load
    +Loading section .rom_vectors, size 0x44 lma 0x60000
    +Loading section .text, size 0x1f3c lma 0x60044
    +Loading section .rodata, size 0x2c lma 0x61f80
    +Loading section .data, size 0x124 lma 0x61fac
    +Start address 0x60044 , load size 8400
    +Transfer rate: 5169 bits/sec.
    +(gdb) q 
    +The program is running.  Exit anyway? (y or n) y 
    + +

  2. Now download the FLASH programmer tool

    bash$ arm-elf-gdb prog_flash.img 
    +GNU gdb 4.18-DEVTOOLSVERSION
    +Copyright 1998 Free Software Foundation, Inc.
    +GDB is free software, covered by the GNU General Public License,
    +and you are welcome to change it and/or distribute
    +copies of it under certain conditions. Type "show copying" to see
    +the conditions. There is absolutely no warranty for GDB.  Type "show
    +warranty" for details.
    +This GDB was configured as "--host=i586-pc-cygwin32 --target=arm-elf".
    +(gdb) target rdi s=com1
    +Angel Debug Monitor for PID (Built with Serial(x1), Parallel, DCC) 1.00
    +(Advanced RISC Machines SDT 2.10)
    +Angel Debug Monitor rebuilt on Jan 20 1997 at 02:33:43
    +Connected to ARM RDI target.
    +(gdb) load
    +Loading section .rom_vectors, size 0x44 lma 0x40000
    +Loading section .text, size 0x44a4 lma 0x40044
    +Loading section .rodata, size 0x318 lma 0x444e8
    +Loading section .data, size 0x1c8 lma 0x44800
    +Start address 0x40044 , load size 18888
    +Transfer rate: 5596 bits/sec.
    +(gdb) c
  3. The FLASH tool will output some text on the board serial +port B at 38400 baud:

    ARM
    +eCos
    +
    +FLASH here!
    +manuf: 8, device: 40
    +Error: Wrong Manufaturer: 08
    +... Please change FLASH jumper
  4. This text is repeated until you remove the jumper 7-8 +on LK6. Then the output will be:

    manuf: 1F, device: A4
    +AT29C040A recognised
    +About to program FLASH using data at 60000..64000
    +*** Press RESET now to abort!
  5. You have about 10 seconds to abort the operation by pressing +reset. After this timeout, the FLASH programming happens:

    ...Programming FLASH 
    +All done!
  6. Quit/kill the GDB process, which will hang.

  7. Next time you reset the board, the stub will be in control, +communicating on Serial A at 38400 baud.

Programming the FLASH for big-endian mode

The process is almost identical to the previous instructions +which apply to a PID board running in little-endian mode only.

The only adjustments to make are that if programming a GDB stub +ROM image (or CygMon ROM monitor image), you must enable the option "Use +Big-endian mode" in the eCos Configuration Tool (CYGHWR_HAL_ARM_BIGENDIAN +if using ecosconfig and editing ecos.ecc).

When programming the FLASH there are two options:

  1. Program FLASH using the little-endian FLASH tool. After +powering off, replace the ROM controller with the special big-endian +version which can be acquired from ARM. (This has not been tested +by Red Hat).

  2. Use a special big-endian version of the FLASH tool which +byte-swaps all the words as they are written to the FLASH.

Build this tool by enabling the "Build flash programming tool +for BE images on LE boards" option (CYGBLD_BUILD_FLASH_TOOL_BE), +resulting in a utility with the prefix "prog_flash_BE_image_LE_system" +which should be used instead of "prog_flash".

Note that there is a limitation to this method: no sub-word +data can be read from the ROM. To work around this, the .rodata +section is folded into the .data section and thus copied to RAM +before the system starts.

Given that Thumb instructions are 16 bit, it is not possible +to run ROM-startup Thumb binaries on the PID board using this method.

When the image has been programmed, power off the board, and +set jumper LK4 to enable big-endian operation.


PrevHomeNext
SPARClite Architectural Simulator SetupUpARM AEB-1 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-i386-pc.html b/doc/html/user-guide/setup-i386-pc.html new file mode 100644 index 00000000..916e682a --- /dev/null +++ b/doc/html/user-guide/setup-i386-pc.html @@ -0,0 +1,467 @@ + + + + + + + + +i386 PC Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

i386 PC Hardware Setup

eCos application on the PC can be run in three ways: via RedBoot, +loaded directly from a floppy disk, or loaded by the GRUB bootloader.

Floppy Disk Support

If an application is built with a startup type of FLOPPY, then it is +configured to be a self-booting image that must be written onto a +formatted floppy disk. This will erase any existing file system or +data that is already on the disk, so proceed +with caution.

To write an application to floppy disk, it must first be converted to +a pure binary format. This is done with the following command:

$ i386-elf-objcopy -O binary app.elf app.bin

Here app.elf is the final linked application +executable, in ELF format (it may not have a .elf +extension). The file app.bin is the resulting +pure binary file. This must be written to the floppy disk with the +following command: +
$ dd conv=sync if=app.bin of=/dev/fd0

For NT Cygwin users, this can be done by first ensuring that the raw +floppy device is mounted as /dev/fd0. To check if this +is the case, type the command mount at the Cygwin bash +prompt. If the floppy drive is already mounted, it will be listed as something +similar to the following line:

  \\.\a: /dev/fd0 user binmode

If this line is not listed, then mount the floppy drive using the command:

$ mount -f -b //./a: /dev/fd0

To actually install the boot image on the floppy, use the command:

$ dd conv=sync if=app.bin of=/dev/fd0

Insert this floppy in the A: drive of the PC to be used as a target +and ensure that the BIOS is configured to boot from A: by default. On reset, +the PC will boot from the floppy and the eCos application will load +itself and execute immediately.

GRUB Bootloader Support

If an application is built with the GRUB startup type, it is +configured to be loaded by the GRUB bootloader.

GRUB is an open source boot loader that supports many different +operating systems. It is available from +http://www.gnu.org/software/grub. +The latest version of GRUB should be downloaded from there and installed. +In Red Hat Linux version 7.2 and later it is the default bootloader +for Linux and therefore is already installed.

To install GRUB on a floppy disk from Linux you need to execute the +following commands:

$ mformat a:
+$ mount /mnt/floppy
+$ grub-install --root-directory=/mnt/floppy '(fd0)'
+Probing devices to guess BIOS drives. This may take a long time.
+Installation finished. No error reported.
+This is the contents of the device map /mnt/floppy/boot/grub/device.map.
+Check if this is correct or not. If any of the lines is incorrect,
+fix it and re-run the script `grub-install'.
+
+(fd0)	/dev/fd0
+$ cp $ECOS_REPOSITORY/packages/hal/i386/pc/current/misc/menu.lst /mnt/floppy/boot/grub
+$ umount /mnt/floppy

The file menu.lst is an example GRUB menu +configuration file. It contains menu items to load some of the +standard eCos tests from floppy or from partition zero of the first +hard disk. You should, of course, customize this file to load your own +application. Alternatively you can use the command-line interface of +GRUB to input commands yourself.

Applications can be installed, or updated simply by copying them to +the floppy disk at the location expected by the +menu.lst file. For booting from floppy disks it +is recommended that the executable be stripped of all debug and symbol +table information before copying. This reduces the size of the file +and can make booting faster.

To install GRUB on a hard disk, refer to the GRUB documentation. Be +warned, however, that if you get this wrong it may compromise any +existing bootloader that exists on the hard disk and may make any +other operating systems unbootable. Practice on floppy disks or +sacrificial hard disks first. On machines running Red Hat Linux +version 7.2 and later, you can just add your own menu items to the +/boot/grub/menu.lst file that already exists.

Debugging FLOPPY and GRUB Applications

When RedBoot loads an application it also provides debugging services +in the form of GDB remote protocol stubs. When an application is +loaded stand-alone from a floppy disk, or by GRUB, these services are +not present. To allow these application to be debugged, it is possible +to include GDB stubs into the application.

To do this, set the "Support for GDB stubs" +(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) configuration +option. Following this any application built will allow GDB to connect +to the debug serial port (by default serial device 0, also known as +COM1) whenever the application takes an exception, or if a Control-C +is typed to the debug port. Ethernet debugging is not supported.

The option "Enable initial breakpoint" +(CYGDBG_HAL_DEBUG_GDB_INITIAL_BREAK) causes the HAL +to take a breakpoint immediately before calling cyg_start(). This +gives the developer a chance to set any breakpoints or inspect the +system state before it proceeds. The configuration sets this option by +default if GDB stubs are included, and this is not a RedBoot build. To +make the application execute immediately either disable this option, +or disable CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS.


PrevHomeNext
NEC CEB-V850/SB1 Hardware SetupUpi386/Linux Synthetic Target Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-mips-atlasmalta.html b/doc/html/user-guide/setup-mips-atlasmalta.html new file mode 100644 index 00000000..26f737e2 --- /dev/null +++ b/doc/html/user-guide/setup-mips-atlasmalta.html @@ -0,0 +1,154 @@ + + + + + + + + +Atlas/Malta Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext


PrevHomeNext
VRC4375 Hardware SetupUpPowerPC Cogent Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-mn10300-sim.html b/doc/html/user-guide/setup-mn10300-sim.html new file mode 100644 index 00000000..b2c805ea --- /dev/null +++ b/doc/html/user-guide/setup-mn10300-sim.html @@ -0,0 +1,217 @@ + + + + + + + + +MN10300 Architectural Simulator Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

MN10300 Architectural Simulator Setup

The MN10300 simulator is an architectural simulator for the +Matsushita MN10300 that implements all features of the microprocessor + necessary to run eCos. The current implementation provides accurate +simulation of the instruction set, interrupt controller, timers, +and serial I/O.

In this release, you can run the same eCos binaries in the +simulator that can run on target hardware, if built for ROM start-up, +with the exception of those that use the watchdog timer.

However, note that AM33 devices required to run eCos are not +simulated; therefore you cannot run eCos binaries built for the +AM33 under the simulator. For the AM33, the simulator is effectively +an instruction-set only simulator.

To simplify connection to the simulator, you are advised to +create a GDB macro by putting the following code in your personal +GDB start-up file (gdb.ini on Windows and .gdbinit on UNIX).

define msim   
+ target sim --board=stdeval1 --memory-region 0x34004000,0x8
+  
+ rbreak cyg_test_exit   
+ rbreak cyg_assert_fail  
+end

You can then connect to the simulator by invoking the command
msim
on +the command line:

(gdb) msim

You can achieve the same effect by typing out the macro’s +content on the command line if necessary.


PrevHomeNext
Target SetupUpAM33 STB Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-ppc-cogent.html b/doc/html/user-guide/setup-ppc-cogent.html new file mode 100644 index 00000000..c2a378a4 --- /dev/null +++ b/doc/html/user-guide/setup-ppc-cogent.html @@ -0,0 +1,382 @@ + + + + + + + + +PowerPC Cogent Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

PowerPC Cogent Hardware Setup

The eCos Developer’s Kit package comes with an EPROM +which provides GDB support for the Cogent +evaluation board. An image of this EPROM is also provided at + loaders/powerpc-cogent/gdbload.bin under +the root of your eCos installation. The same EPROM and image can +be used on all three supported daughterboards: CMA287-23 (MPC823), +CMA287-50 (MPC850), and CMA286-60 (MPC860).

The EPROM is installed to socket U4 on the board. Attention +should be paid to the correct orientation of the EPROM during installation.

If you are going to burn a new EPROM using the binary image, +be careful to get the byte order correct. It needs to be big-endian. +If the EPROM burner software has a hex-editor, check that the first +few bytes of the image look like:

00000000: 3c60 fff0 6063 2000 7c68 03a6 4e80 0020 <`..`c.|h..N.. 

If the byte order is wrong you will see 603c instead of 3c60 +etc. Use the EPROM burner software to make a byte-swap before you +burn to image to the EPROM.

If the GDB stub EPROM you burn does not work, try reversing +the byte-order, even if you think you have it the right way around. +At least one DOS-based EPROM burner program is known to have the +byte-order upside down.

The GDB stub in the EPROM allows communication with GDB using +the serial port at connector P12 (CMA101) or P3 (CMA102). The communication parameters +are fixed at 38400 baud, 8 data bits, no parity bit and 1 stop bit +(8-N-1). No flow control is employed. Connection to the host computer +should be made using a dedicated serial cable as specified in the +Cogent CMA manual.

Installing the Stubs into ROM

Preparing the Binaries

These two binary preparation steps are not strictly necessary +as the eCos distribution ships with pre-compiled binaries in the +directory loaders/powerpc-cogent relative to the installation +root.


PrevHomeNext
Atlas/Malta Hardware SetupUpPowerPC MBX860 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-ppc-mbx860.html b/doc/html/user-guide/setup-ppc-mbx860.html new file mode 100644 index 00000000..0b76a7c0 --- /dev/null +++ b/doc/html/user-guide/setup-ppc-mbx860.html @@ -0,0 +1,455 @@ + + + + + + + + +PowerPC MBX860 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

PowerPC MBX860 Hardware Setup

The eCos Developer’s Kit package comes with an EPROM +which provides GDB support for the Motorola +PowerPC MBX860 evaluation board. An image of this EPROM is also +provided at loaders/powerpc-mbx/gdbload.bin under +the root of your eCos installation.

The EPROM is installed to socket XU1 on the board. Attention +should be paid to the correct orientation of the EPROM during installation. +Only replace the board"s existing ROM using a proper PLCC +extraction tool, as the socket would otherwise risk getting damaged.

The GDB stub in the EPROM allows communication with GDB using +the serial port at connector SMC1/COM1. The communication +parameters are fixed at 38400 baud, 8 data bits, no parity bit and +1 stop bit (8-N-1). No flow control is employed. Connection to the +host computer should be made using a suitable serial cable.

In order to make the board execute the EPROM that you just +installed (rather than the on-board FLASH memory), it may be necessary +move some links on the board. Specifically, ensure that link J4 +is in position 1-2. If in doubt, refer to the MBX documentation +from Motorola, ensuring that Boot Port Size=8 Bits/ROM +for BOOT (CS#7), in their terminology.

Installing the Stubs into FLASH

Preparing the Binaries

These two binary preparation steps are not strictly necessary +as the eCos distribution ships with pre-compiled binaries in the +directory loaders/powerpc-mbx relative to the installation +root.

Installing the Stubs into FLASH

This assumes you have EPPC-Bug in the on-board FLASH. This +can be determined by setting up the board according to the below +instructions and powering up the board. The EPPC-Bug prompt should +appear on the SMC1 connector at 9600 baud, 8N1.

  1. Set jumper 3 to 2-3 [allow XU2 FLASH to +be programmed]

  2. Set jumper 4 to 2-3 [boot EPPC-Bug]


PrevHomeNext
PowerPC Cogent Hardware SetupUpPowerPC Architectural Simulator Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-ppc-sim.html b/doc/html/user-guide/setup-ppc-sim.html new file mode 100644 index 00000000..13156cce --- /dev/null +++ b/doc/html/user-guide/setup-ppc-sim.html @@ -0,0 +1,228 @@ + + + + + + + + +PowerPC Architectural Simulator Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

PowerPC Architectural Simulator Setup

The PowerPC simulator is an architectural simulator which +implements all the features of the PowerPC needed to run eCos. The +current implementation provides accurate simulation of the instruction +set and timers, as well as having generic support for diagnostic +output and exceptions.

The simulator also allows devices to be simulated, but no +device simulation support has been defined for the serial device +drivers in this release.

To simplify connection to the simulator, you are advised to +create a GDB macro by putting the following code in your personal +GDB start-up file (gdb.ini on Windows and .gdbinit on UNIX).

define psim   
+ target sim -o ’/iobus/pal@0xf0001000/reg 0xf0001000 32’   
+ rbreak cyg_test_exit   
+ rbreak cyg_assert_fail  
+end

You can then connect to the simulator by invoking the command psim on +the command line:

(gdb) psim

You can achieve the same effect by typing out the macro’s +content on the command line if necessary.


PrevHomeNext
PowerPC MBX860 Hardware SetupUpSPARClite Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-sh-cq7708.html b/doc/html/user-guide/setup-sh-cq7708.html new file mode 100644 index 00000000..1221321b --- /dev/null +++ b/doc/html/user-guide/setup-sh-cq7708.html @@ -0,0 +1,472 @@ + + + + + + + + +SH3/CQ7708 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

SH3/CQ7708 Hardware Setup

eCos GDB Stubs

The eCos installation CD contains a copy of the eCos GDB stubs +in binary format which must be programmed into an EPROM or FLASH +and installed on the board.

Programming the stubs in EPROM/FLASH

The board can use different sizes of ROMs. Use this table +to adjust the board’s jumpers to the ROM sizes you are +using.

size(kbit)    JP7   JP9   JP10   JP11     
+256           2-3   2-3   open   open     
+512           1-2   2-3   open   open     
+1000          1-2   open  open   2-3     
+2000          1-2   1-2   open   2-3     
+4000          1-2   1-2   short  2-3     
+8000          1-2   1-2   short  1-2

There are two ways to program the stubs. We advise you to +use method 1, since it is simpler. Method 2 is unsupported and requires +a bit of fiddling.

Method 1:

Program the binary stub image into two EPROMs, E and O. EPROM +E should contain the even bytes, and O the odd bytes (your EPROM +programmer should have the ability to split the image).

EPROM E should be installed in socket IC8, and EPROM O should +be installed in socket IC4.

Set JP6 to 16 bit mode (1-2 soldered, 2-3 cut) Set SW1-4 +to ON and SW2-1 to OFF.

Method2:

Assuming that the stub binary is smaller than 32 KB, you can +install it in a single EPROM.

Compile the mkcqrom.c program +found in the misc directory.

Use it to convert the binary image to the required format. +See the mkcqrom.c source for a +description of what is done, and why it is necessary.

 % mkcqrom gdb_module.bin gdb_mangled.bin

Program the gdb_mangled.bin file +into an EPROM and install it in socket IC4

Set JP6 to 8 bit mode (cut 1-2, solder 2-3)

The GDB stubs allow communication with GDB using the serial +port at connector CN7. The communication parameters are fixed at +38400 baud, 8 data bits, no parity bit and 1 stop bit (8-N-1). No +flow control is employed. Connection to the host computer should +be made using a straight through serial cable.


PrevHomeNext
SH3/EDK7708 Hardware SetupUpSH3/HS7729PCI Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-sh-cq7750.html b/doc/html/user-guide/setup-sh-cq7750.html new file mode 100644 index 00000000..a65adab9 --- /dev/null +++ b/doc/html/user-guide/setup-sh-cq7750.html @@ -0,0 +1,472 @@ + + + + + + + + +SH4/CQ7750 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

SH4/CQ7750 Hardware Setup

eCos GDB Stubs

The eCos installation CD contains a copy of the eCos GDB stubs +in binary format which must be programmed into an EPROM or FLASH +and installed on the board.

Programming the stubs in EPROM/FLASH

The board can use different sizes of ROMs. Use this table +to adjust the board’s jumpers to the ROM sizes you are +using.

size(kbit)    JP7   JP9   JP10   JP11     
+256           2-3   2-3   open   open     
+512           1-2   2-3   open   open     
+1000          1-2   open  open   2-3     
+2000          1-2   1-2   open   2-3     
+4000          1-2   1-2   short  2-3     
+8000          1-2   1-2   short  1-2

There are two ways to program the stubs. We advise you to +use method 1, since it is simpler. Method 2 is unsupported and requires +a bit of fiddling.

Method 1:

Program the binary stub image into two EPROMs, E and O. EPROM +E should contain the even bytes, and O the odd bytes (your EPROM +programmer should have the ability to split the image).

EPROM E should be installed in socket IC8, and EPROM O should +be installed in socket IC4.

Set JP6 to 16 bit mode (1-2 soldered, 2-3 cut) Set SW1-4 +to ON and SW2-1 to OFF.

Method2:

Assuming that the stub binary is smaller than 32 KB, you can +install it in a single EPROM.

Compile the mkcqrom.c program +found in the misc directory.

Use it to convert the binary image to the required format. +See the mkcqrom.c source for a +description of what is done, and why it is necessary.

 % mkcqrom gdb_module.bin gdb_mangled.bin

Program the gdb_mangled.bin file +into an EPROM and install it in socket IC4

Set JP6 to 8 bit mode (cut 1-2, solder 2-3)

The GDB stubs allow communication with GDB using the serial +port at connector CN7. The communication parameters are fixed at +38400 baud, 8 data bits, no parity bit and 1 stop bit (8-N-1). No +flow control is employed. Connection to the host computer should +be made using a straight through serial cable.


PrevHomeNext
SH3/SE77x9 Hardware SetupUpSH4/SE7751 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-sh-edk7708.html b/doc/html/user-guide/setup-sh-edk7708.html new file mode 100644 index 00000000..5e6d135b --- /dev/null +++ b/doc/html/user-guide/setup-sh-edk7708.html @@ -0,0 +1,370 @@ + + + + + + + + +SH3/EDK7708 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

SH3/EDK7708 Hardware Setup

The eCos Developer’s Kit package comes with a ROM +which provides GDB support for the Hitachi EDK7708 board (a big-endian +and a little-endian version). Images of these ROMs are also provided +at loaders/sh-edk7708/gdbload.bin and + loaders/sh-edk7708le/gdbload.bin under +the root of your eCos installation.

The ROM is installed to socket U6 on the board. When using +the big-endian ROM, jumper 9 must be set to 2-3. When using the +little-endian ROM, jumper 9 must be set to 1-2. Attention should +be paid to the correct orientation of the ROM during installation. +Only replace the board"s existing ROM using a proper PLCC extraction +tool, as the socket would otherwise risk being damaged.

If you are going to program a new ROM or FLASH using the binary +image, you may have to experiment to get the right byte-order in +the device. Depending on the programming software you use, it might +be necessary to enable byte-swapping. If the GDB stub ROM/FLASH +you program does not work, try reversing the byte-order.

The GDB stub in the EPROM allows communication with GDB using +the serial port at connector J1. The communication parameters are +fixed at 38400 baud, 8 data bits, no parity bit and 1 stop bit (8-N-1). +No flow control is employed. Connection to the host computer should +be made using the dedicated serial cable included in the EDK package.

Installing the Stubs into FLASH

Preparing the Binaries

These two binary preparation steps are not strictly necessary +as the eCos distribution ships with pre-compiled binaries in the +directory loaders/sh-edk7708 and loaders/sh-edk7708le +relative to the installation root.


PrevHomeNext
Compaq iPAQ PocketPC Hardware SetupUpSH3/CQ7708 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-sh-hs7729pci.html b/doc/html/user-guide/setup-sh-hs7729pci.html new file mode 100644 index 00000000..6ef499fc --- /dev/null +++ b/doc/html/user-guide/setup-sh-hs7729pci.html @@ -0,0 +1,154 @@ + + + + + + + + +SH3/HS7729PCI Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext


PrevHomeNext
SH3/CQ7708 Hardware SetupUpSH3/SE77x9 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-sh-se7751.html b/doc/html/user-guide/setup-sh-se7751.html new file mode 100644 index 00000000..60db21cf --- /dev/null +++ b/doc/html/user-guide/setup-sh-se7751.html @@ -0,0 +1,154 @@ + + + + + + + + +SH4/SE7751 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext


PrevHomeNext
SH4/CQ7750 Hardware SetupUpNEC CEB-V850/SA1 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-sh-se77x9.html b/doc/html/user-guide/setup-sh-se77x9.html new file mode 100644 index 00000000..fceedbb1 --- /dev/null +++ b/doc/html/user-guide/setup-sh-se77x9.html @@ -0,0 +1,154 @@ + + + + + + + + +SH3/SE77x9 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext


PrevHomeNext
SH3/HS7729PCI Hardware SetupUpSH4/CQ7750 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-sparclite-sim.html b/doc/html/user-guide/setup-sparclite-sim.html new file mode 100644 index 00000000..2d81548c --- /dev/null +++ b/doc/html/user-guide/setup-sparclite-sim.html @@ -0,0 +1,201 @@ + + + + + + + + +SPARClite Architectural Simulator Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

SPARClite Architectural Simulator Setup

The ESA SPARClite simulator is an architectural simulator +which implements all the features of the SPARClite needed to run +eCos. The current implementation provides accurate simulation of +the instruction set, interrupt controller, and timers, as well as +having generic support for diagnostic output and exceptions.

Note that the ESA SPARClite simulator is unsupported, but +is included in the release as a convenience.

To simplify connection to the simulator, you are advised to +create a GDB macro by putting the following code in your personal +GDB start-up file (gdb.ini on Windows and .gdbinit on UNIX).

define ssim   
+ target sim -nfp -sparclite -dumbio   
+ rbreak cyg_test_exit   
+ rbreak cyg_assert_fail  
+end

You can then connect to the simulator by invoking the command ssim on +the command line:

(gdb) ssim

You can achieve the same effect by typing out the macro’s +content on the command line if necessary.


PrevHomeNext
SPARClite Hardware SetupUpARM PID Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-sparclite-sleb.html b/doc/html/user-guide/setup-sparclite-sleb.html new file mode 100644 index 00000000..938609f1 --- /dev/null +++ b/doc/html/user-guide/setup-sparclite-sleb.html @@ -0,0 +1,306 @@ + + + + + + + + +SPARClite Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

SPARClite Hardware Setup

The eCos Developer’s Kit package comes with a ROM +which provides GDB support for the Fujitsu SPARClite Evaluation +Board by way of CygMon.

An image of this ROM is also provided at + BASE_DIR/loaders/sparclite-sleb/cygmon.bin. The +ROM is installed in socket IC9 on the evaluation board. Attention +should be paid to the correct orientation of the ROM during installation.

The GDB stub allows communication with GDB using a TCP channel +via the ethernet port at connector J5.

Ethernet Setup

The ethernet setup is described in the board’s manual, +but here is a recapitulation.

Set the board’s ethernet address using SW1 on the +motherboard:

	    SW1-4 SW1-3 SW1-2 SW1-1    Ethernet Address
+	    ----- ----- ----- -----    ----------------
+	    OFF   OFF   OFF   OFF     No ethernet, use serial
+	    OFF   OFF   OFF    ON     00:00:0E:31:00:01
+	    OFF   OFF    ON   OFF     00:00:0E:31:00:02
+	    OFF   OFF    ON    ON     00:00:0E:31:00:03
+	    OFF    ON   OFF   OFF     00:00:0E:31:00:04
+	    OFF    ON   OFF    ON     00:00:0E:31:00:05
+	    OFF    ON    ON   OFF     00:00:0E:31:00:06
+	    OFF    ON    ON    ON     00:00:0E:31:00:07
+	    ON    OFF   OFF   OFF     00:00:0E:31:00:08
+	    ON    OFF   OFF    ON     00:00:0E:31:00:09
+	    ON    OFF    ON   OFF     00:00:0E:31:00:0A
+	    ON    OFF    ON    ON     00:00:0E:31:00:0B
+	    ON     ON   OFF   OFF     00:00:0E:31:00:0C
+	    ON     ON   OFF    ON     00:00:0E:31:00:0D
+	    ON     ON    ON   OFF     00:00:0E:31:00:0E
+	    ON     ON    ON    ON     00:00:0E:31:00:0F

BOOTP/DHCP service on Linux

Configure the BOOTP or DHCP server on the network to recognize +the evaluation board’s ethernet address so it can assign +the board an IP address. Below is a sample DHCP server configuration +from a Linux system (/etc/dhcpd.conf). +It shows a setup for three evaluation boards.

#
+# DHCP server configuration.
+#
+allow bootp;
+
+subnet 192.168.1.0 netmask 255.255.255.0 {
+  host mb831evb {
+    hardware ethernet 00:00:0e:31:00:01;
+    fixed-address mb831evb;
+  }
+  host mb832evb {
+    hardware ethernet 00:00:0e:31:00:02;
+    fixed-address mb832evb;
+  }
+  host mb833evb {
+    hardware ethernet 00:00:0e:31:00:03;
+    fixed-address mb833evb;
+  }
+} 

PrevHomeNext
PowerPC Architectural Simulator SetupUpSPARClite Architectural Simulator Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-synth-i386linux.html b/doc/html/user-guide/setup-synth-i386linux.html new file mode 100644 index 00000000..88e6b884 --- /dev/null +++ b/doc/html/user-guide/setup-synth-i386linux.html @@ -0,0 +1,221 @@ + + + + + + + + +i386/Linux Synthetic Target Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

i386/Linux Synthetic Target Setup

When building for the synthetic Linux target, the resulting +binaries are native Linux applications with the HAL providing suitable +bindings between the eCos kernel and the Linux kernel.

These Linux applications cannot be run on a Windows system. +However, it is possible to write a similar HAL emulation for the +Windows kernel if such a testing target is desired.

Tools

For the synthetic target, eCos relies on features not available +in native compilers earlier than gcc-2.95.1. It also requires version +2.9.5 or later of the GNU linker. If you have gcc-2.95.1 or later +and ld version 2.9.5 or later, then you do not need to build new +tools. eCos does not support earlier versions. You can check the compiler +version using gcc -v +and the linker version using ld +-v.

If you have native tools that are sufficiently recent for +use with eCos, you should be aware that by default eCos assumes +that the tools i686-pc-linux-gnu-gcc, i686-pc-linux-gnu-ar, + i686-pc-linux-gnu-ld, and i686-pc-linux-gnu-objcopy are +on your system and are the correct versions for use with eCos. But +instead, you can tell eCos to use your native tools by editing the +configuration value "Global command prefix" (CYGBLD_GLOBAL_COMMAND_PREFIX) +in your eCos configuration. If left empty (i.e. set to the empty +string) eCos will use your native tools when building.

If you have any difficulties, it is almost certainly easiest +overall to rebuild the tools as described on: http://sources.redhat.com/ecos/getstart.html


PrevHomeNext
i386 PC Hardware SetupUpReal-time characterization
\ No newline at end of file diff --git a/doc/html/user-guide/setup-tx39-jmr3904.html b/doc/html/user-guide/setup-tx39-jmr3904.html new file mode 100644 index 00000000..87e3f2d5 --- /dev/null +++ b/doc/html/user-guide/setup-tx39-jmr3904.html @@ -0,0 +1,193 @@ + + + + + + + + +TX39 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

TX39 Hardware Setup

The eCos Developer’s Kit package comes with a pair +of ROMs that provide GDB support for +the Toshiba JMR-TX3904 RISC processor reference board by way of CygMon.

Images of these ROMs are also provided at BASE_DIR/loaders/tx39-jmr3904/cygmon50.bin and BASE_DIR/loaders/tx39-jmr3904/cygmon66.bin for +50 MHz and 66 MHz boards respectively. The ROMs are installed to +sockets IC6 and IC7 on the memory daughterboard according to their +labels. Attention should be paid to the correct orientation of these +ROMs during installation.

The GDB stub allows communication with GDB using the serial +port (channel C) at connector PJ1. The communication parameters +are fixed at 38400 baud, 8 data bits, no parity bit, and 1 stop +bit (8-N-1). No handshaking is employed. Connection to the host +computer should be made using an RS232C null modem cable.

CygMon and eCos currently provide support for a 16Mbyte 60ns +72pin DRAM SIMM fitted to the PJ21 connector. Different size DRAMs +may require changes in the value stored in the DCCR0 register. This +value may be found near line 211 in hal/mips/arch/<version>/src/vectors.S +in eCos, and near line 99 in + libstub/mips/tx39jmr/tx39jmr-power.S in +CygMon. eCos does not currently use the DRAM for any purpose itself, +so it is entirely available for application use.


PrevHomeNext
AM33 STB Hardware SetupUpTX39 Architectural Simulator Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-tx39-sim.html b/doc/html/user-guide/setup-tx39-sim.html new file mode 100644 index 00000000..7995a1ca --- /dev/null +++ b/doc/html/user-guide/setup-tx39-sim.html @@ -0,0 +1,204 @@ + + + + + + + + +TX39 Architectural Simulator Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

TX39 Architectural Simulator Setup

The TX39 simulator is an architectural simulator which implements +all the features of the Toshiba TX39 needed to run eCos. The current +implementation provides accurate simulation of the instruction set, + interrupt controller, and timers, as well as having generic support +for diagnostic output, serial I/O, and exceptions.

In this release, you can run the same eCos binaries in the +simulator that can run on target hardware, if it is built for ROM +start-up.

To simplify connection to the simulator, you are advised to +create a GDB macro by putting the following code in your personal +GDB start-up file (gdb.ini on Windows and .gdbinit on UNIX).

define tsim   
+ target sim --board=jmr3904pal --memory-region 0xffff8000,0x900 \ 
+            --memory-region 0xffffe000,0x4 \          
+            --memory-region 0xb2100000,0x4   
+ rbreak cyg_test_exit
+ rbreak cyg_assert_fail
+end

You can then connect to the simulator by invoking the command tsim on +the command line:

(gdb) tsim

You can achieve the same effect by typing out the macro’s +content on the command line if necessary.


PrevHomeNext
TX39 Hardware SetupUpTX49 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-tx49-ref4955.html b/doc/html/user-guide/setup-tx49-ref4955.html new file mode 100644 index 00000000..08361504 --- /dev/null +++ b/doc/html/user-guide/setup-tx49-ref4955.html @@ -0,0 +1,393 @@ + + + + + + + + +TX49 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

TX49 Hardware Setup

The eCos installation CD contains a copy of the eCos GDB stubs +in SREC format which must be programmed into the board’s +FLASH memory.

Preparing the GDB stubs

These stub preparation steps are not strictly necessary as +the eCos distribution ships with pre-compiled stubs in the directory loaders/tx49-ref4955 relative +to the installation root.

Installing GDB stubs into FLASH

Boot into the board’s firmware in little-endian mode:

Set the switches like this:

SW1: 10000000 (first lever up, the rest down) +SW2: 10000010

Connect serial cable on the lower connector, configure terminal +emulator for 38400, 8-N-1.

When booting the board, you should get this prompt:

HCP5 rev 0.9B .    
+HCP5?

Select o (option), a (FLASH) and b (boot write). You should +see this:

Boot ROM Write   
+ROM address-ffffffffbd000000, Boot Bus-[32bit]  
+ID2 0 4 ffffffffa002ad40  
+zzz SS-40000 IV-1 CS-20000 CC-2   
+Flash ROM-[28F640J5], [16bit chip] * 2 * 1
+Block size-00040000  count-64  
+ROM adr ffffffffbd000000-ffffffffbe000000  mask-00fc0000
+Send Srecord file sa=00000000 size=ffffffffffffffff
+ra=fffffffffe000000
+	  

Now send the stub SREC data down to the board using the terminal + emulator’s ‘send ASCII’ (or similar) +functionality.

Red Hat has experienced some sensitivity to how fast the data +is written to the board. Under Windows you should configure Minicom +to use a line delay of 100 milliseconds. Under Linux, use the slow_cat.tcl + script:

% cd BASE_DIR/packages/hal/mips/ref4955/<version>/misc
+% slow_cat.tcl < [path]/gdb_module.srec > /dev/ttyS0

Power off the board, and change it to boot the GDB stubs in +big-endian mode by setting the switches like this:

SW1: 00000000 (all levers down) +SW2: 10001010

The GDB stubs allow communication with GDB using the serial +port at connector PJ7A (lower connector). The communication parameters +are fixed at 38400 baud, 8 data bits, no parity bit and 1 stop +bit (8-N-1). No flow control is employed. Connection to the host +computer should be made using a straight through serial cable.


PrevHomeNext
TX39 Architectural Simulator SetupUpVR4300 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-v850-cebsa1.html b/doc/html/user-guide/setup-v850-cebsa1.html new file mode 100644 index 00000000..58abfb66 --- /dev/null +++ b/doc/html/user-guide/setup-v850-cebsa1.html @@ -0,0 +1,773 @@ + + + + + + + + +NEC CEB-V850/SA1 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

NEC CEB-V850/SA1 Hardware Setup

The CEB-V850 board is fitted with a socketed EPROM. The internal +Flash of the V850 supplied with the CEB-V850 boards defaults to +vectoring into this EPROM. A GDB stub image should be programmed +into an EPROM fitted to this board, and a pre-built image is provided +at loaders/v850-ceb_v850/v850sa1/gdb_module.bin under +the root of your eCos installation.

The EPROM is installed to the socket labelled U7 on the board. +Attention should be paid to the correct orientation of the EPROM +during installation.

When programming an EPROM using the binary image, be careful +to get the byte order correct. It needs to be little-endian. If +the EPROM burner software has a hex-editor, check that the first +few bytes of the image look similar to:

00000000: 0018 8007 5e02 0000 0000 0000 0000 0000

If the byte order is wrong you will see 1800 instead of 0018 +etc. Use the EPROM burner software to make a byte-swap before you +burn to image to the EPROM.

If the GDB stub EPROM you burn does not work, try reversing +the byte-order, even if you think you have it the right way around. +At least one DOS-based EPROM burner program is known to have the +byte-order upside down.

The GDB stub in the EPROM allows communication with GDB using +the serial port. The communication parameters are fixed at 38400 +baud, 8 data bits, no parity bit and 1 stop bit (8-N-1). No flow +control is employed. Connection to the host computer should be made +using a dedicated serial cable as specified in the CEB-V850/SA1 +manual.

Installing the Stubs into ROM

Preparing the Binaries

These two binary preparation steps are not strictly necessary +as the eCos distribution ships with pre-compiled binaries in the +directory loaders/v850-ceb_v850 relative to the +installation root.

Debugging with the NEC V850 I.C.E.

eCos applications may be debugged using the NEC V850 In Circuit +Emulator (I.C.E.) A PC running Microsoft Windows is required in +order to run the NEC ICE software and drivers. In addition Red Hat +have developed a “libremote” server application +named v850ice.exe which is used on the PC connected to the I.C.E. +in order to allow connections from GDB.

The I.C.E. must be physically connected to a Windows NT system +through NEC"s PCI or PC Card interface. A driver, DLLs, +and application are provided by NEC to control the I.C.E.

v850ice is a Cygwin based server that runs on the NT system +and provides an interface between the gdb client and the I.C.E. +software. v850-elf-gdb may be run on the Windows NT system or on +a remote system. v850-elf-gdb communicates with the libremote server +using the gdb remote protocol over a TCP/IP socket. v850ice +communicates with the I.C.E. by calling functions in the NECMSG.DLL provided +by NEC.

INITIAL SETUP

  1. Configure the hardware including the I.C.E., SA1 or +SB1 Option Module, and target board. Install the interface card +in the Windows NT system. Reference NEC"s documentation +for interface installation, jumper settings, etc.

  2. Install the Windows NT device driver provided by NEC.

  3. Copy the NEC DLLs, MDI application, and other support +files to a directory on the Windows NT system. The standard location +is C:\NecTools32. This directory will be referred to as +the "libremote server directory" in this document. v850ice.exe must +also be copied to this directory after being built. The required +files are: cpu.cfg, Nec.cfg, MDI.EXE, NECMSG.DLL, EX85032.DLL, +V850E.DLL, IE850.MON, IE850E.MON, and D3037A.800.

  4. Make certain the file cpu.cfg contains the line:

    CpuOption=SA1

    if using a V850/SA1 module, or:

    CpuOption=SB1

    if using a V850/SB1 module.

  5. Set the environment variable IEPATH to point to the libremote +server

    directory.

BUILD PROCEDURES

A pre-built v850ice.exe executable is supplied in the loaders/v850-ceb_v850 directory +relative to the root of the eCos installation. However the following process +will allow the rebuilding of this executable if required:

For this example assume the v850ice libremote tree has been +copied to a directory named "server". The directory structure will +be similar to the following diagram:

                server
+                   |
+                 devo
+                 /  \
+           config    libremote
+                      /     \
+                   lib       v850ice

Build the v850ice source as follows. Be sure to use the native +Cygwin compiler tools that were supplied alongside eCos.

cd server +mkdir build +cd build +../devo/configure --target=v850-elf --host=i686-pc-cygwin +make

The resultant libremote server image (v850ice.exe) can be +found in build/libremote/v850ice. Copy v850ice.exe +to the lib remote server directory.

V850-ELF-GDB EXECUTION

Run the v850-elf-gdb client to debug the V850 target. It +is necessary to issue certain configuration commands to the I.C.E. +software. These commands may be issued directly in the MDI window +or they may be issued from the gdb client through the "monitor" +command.

On the Cosmo CEB-V850 board, on-chip Flash is mapped at address +0x0, the on-board EPROM at 0x100000 and the on-board RAM at 0xfc0000. +Since a stand alone V850 will start executing from address 0x0 on +reset, it is normal to load either an application or a bootstrap +loader for Flash at this address. eCos programs may be built to +boot from Flash or the on-board EPROM. If building for the on-board +EPROM, it would be expected that the Flash will contain the default +CEB-V850 flash contents. An ELF format version of the default contents +may be found in the eCos distribution with the name v850flash.img.

In stand alone operation, normally the code in this flash image +would have been programmed into the V850 on the Cosmo board, and +this would cause it to vector into the on-board EPROM to run the +application located there. In the case of eCos, this application +may be a GDB stub ROM application, allowing the further download +to RAM over serial of actual applications to debug.

As an example, we shall demonstrate how to use the I.C.E. +to download the v850flash.img and GDB stub EPROM image using I.C.E. +emulator memory only, and not requiring any actual programming of +devices.

v850-elf-gdb -nw +(gdb) file v850flash.img +(gdb) target remote localhost:2345 +(gdb) monitor reset +(gdb) monitor cpu r=256 a=16 +(gdb) monitor map r=0x100000-L 0x80000 +(gdb) monitor map u=0xfc0000-L 0x40000 +(gdb) monitor pinmask k +(gdb) monitor step +(gdb) monitor step +(gdb) monitor step +(gdb) monitor step +(gdb) load +(gdb) detach +(gdb) file gdb_module.img +(gdb) target remote localhost:2345 +(gdb) load +(gdb) continue

NOTE: The four "monitor step" commands are only required the +first time the board is connected to the I.C.E., otherwise the program +will fail.

This is because of a limitation of the I.C.E. hardware that +means that the first time it is used, the "map" commands are not +acted on and the addresses "0x100000" and "0xfc0000" are not mapped. +This can be observed using the command "td e-20" in the MDI application"s +console to display the trace buffer, which will show that the contents +of address 0x100000 are not valid. Subsequent runs do not require +the "monitor step" commands.

It is unusual to load two executable images to a target through +gdb. From the example above notice that this is accomplished by +attaching to the libremote server, loading the flash image, detaching, +reattaching, and loading the ROM/RAM image. It is more +normal to build an executable image that can be executed directly. +In eCos this is achieved by selecting either the ROM or ROMRAM startup +type, and optionally enable building for the internal FLASH. The +I.C.E. emulator memory can emulate both the internal FLASH and the +EPROM, so real hardware programming is not required.

Upon running this example you will notice that the libremote +server does not exit upon detecting a detach request, but simply +begins listening for the next attach request. To cause v850ice +to terminate, issue the "monitor quit" or "monitor exit" command +from the gdb client. v850ice will then terminate with the next +detach request. (You can also enter control-c in the Cygwin/DOS +window where v850ice is running.)

MDI INTERFACE VS. GDB INTERFACE

If a filename is referenced in an MDI command, whether the +command is entered in the MDI window or issued from the gdb client +with the monitor command, the file must reside on the Windows NT +libremote server system. When specifying a filename when entering +a command in the MDI window it is obvious that a server local file +is being referenced. When issuing an MDI command from the gdb client, the +user must remember that the command line is simply passed to the +I.C.E. software on the server system. The command is executed by +the I.C.E. software as though it were entered locally.

Executable images may be loaded into the V850 target by entering +the "load" command in the MDI window or with the gdb "load" command. + If the MDI load command is used, the executable image must be located +on the server system and must be in S Record format. If the gdb +load command is used, the executable image must be located on the +client system and must be in ELF format.

Be aware that the gdb client is not aware of debugger commands +issued from the MDI window. It is possible to cause the gdb client +and the I.C.E. software to get out of sync by issuing commands from +both interfaces during the same debugging session.

eCos THREAD DEBUGGING

eCos and the V850 I.C.E. libremote server have been written +to work together to allow debugging of eCos threads. This is an +optional feature, disabled by default because of the overheads trying +to detect a threaded program involves.

Obviously thread debugging is not possible for programs with +"RAM" startup type, as they are expected to operate underneath a +separate ROM monitor (such as a GDB stub ROM), that itself would +provide its own thread debugging capabilities over the serial line. +Thread debugging is relevant only for programs built for Flash, ROM, +or ROMRAM startup.

To configure the libremote server to support thread debugging, +use the command:

(gdb) monitor syscallinfo ADDRESS

at the GDB console prompt, where ADDRESS is the address of +the syscall information structure included in the applications. +In eCos this has been designed to be located at a consistent address +for each CPU model (V850/SA1 or V850/SB1). It +may be determined from an eCos executable using the following command +at a cygwin bash prompt:

v850-elf-nm EXECUTABLE | grep hal_v85x_ice_syscall_info

At the current time, this address is 0xfc0400 for a Cosmo +board fitted with a V850/SA1, or 0xfc0540 for a Cosmo board +fitted with a V850/SB1.

So for example, the GDB command for the SB1 would be:

(gdb) monitor syscallinfo 0xfc0540

Given that the syscallinfo address is fixed over all eCos +executables for a given target, it is possible to define it on the +libremote command line as well using the "-t" option, for example:

bash$ v850ice -t 0xfc0400
+v850ice: listening on port 2345


PrevHomeNext
SH4/SE7751 Hardware SetupUpNEC CEB-V850/SB1 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-v850-cebsb1.html b/doc/html/user-guide/setup-v850-cebsb1.html new file mode 100644 index 00000000..0d8aff53 --- /dev/null +++ b/doc/html/user-guide/setup-v850-cebsb1.html @@ -0,0 +1,160 @@ + + + + + + + + +NEC CEB-V850/SB1 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext


PrevHomeNext
NEC CEB-V850/SA1 Hardware SetupUpi386 PC Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-vr4300-vrc4373.html b/doc/html/user-guide/setup-vr4300-vrc4373.html new file mode 100644 index 00000000..b225a331 --- /dev/null +++ b/doc/html/user-guide/setup-vr4300-vrc4373.html @@ -0,0 +1,171 @@ + + + + + + + + +VR4300 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext

VR4300 Hardware Setup

The eCos Developer’s Kit package comes with an EPROM +which provides GDB support for the NEC +VRC4373 evaluation board. An image of this EPROM is also provided +at loaders/vr4300-vrc4373/gdbload.bin under +the root of your eCos installation.

The EPROM is installed to socket U12 on the board. Attention +should be paid to the correct orientation of the EPROM during installation. +Only replace the board"s existing ROM using a proper PLCC +extraction tool, as the socket would otherwise risk getting damaged.

The GDB stub in the EPROM allows communication with GDB using +the serial port at connector J1. The communication parameters are +fixed at 38400 baud, 8 data bits, no parity bit and 1 stop bit (8-N-1). +No flow control is employed. Connection to the host computer should +be made using a straight-through serial cable.


PrevHomeNext
TX49 Hardware SetupUpVRC4375 Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/setup-vr4300-vrc4375.html b/doc/html/user-guide/setup-vr4300-vrc4375.html new file mode 100644 index 00000000..02fed603 --- /dev/null +++ b/doc/html/user-guide/setup-vr4300-vrc4375.html @@ -0,0 +1,156 @@ + + + + + + + + +VRC4375 Hardware Setup +
eCos User Guide
PrevAppendix A. Target SetupNext


PrevHomeNext
VR4300 Hardware SetupUpAtlas/Malta Hardware Setup
\ No newline at end of file diff --git a/doc/html/user-guide/testing-filters.html b/doc/html/user-guide/testing-filters.html new file mode 100644 index 00000000..523c78b5 --- /dev/null +++ b/doc/html/user-guide/testing-filters.html @@ -0,0 +1,205 @@ + + + + + + + + +Testing Filters +
eCos User Guide
PrevChapter 12. Running an eCos Test CaseNext

Testing Filters

While most test cases today run solely in the target environment, +some packages may require external testing infrastructure and/or +feedback from the external environment to do complete testing.

The serial package is an example of this. The network package +also contains some tests that require programs to be run on a +host. See the network Tests and Demonstrations +section in the network documentation in the eCos Reference +Guide. Here we will concentrate on the serial tests since +these are applicable to more targets.

Since the serial line is also used for communication with +GDB, a filter is inserted in the communication pathway between +GDB and the serial device which is connected to the hardware target. +The filter forwards all communication between the two, but also +listens for special commands embedded in the data stream from the +target.

When such a command is seen, the filter stops forwarding data +to GDB from the target and enters a special mode. In this mode +the test case running on the target is able to control the filter, +commanding it to run various tests. While these tests run, GDB is +isolated from the target.

As the test completes (or if the filter detects a target crash) +the communication path between GDB and the hardware target is re-established, +allowing GDB to resume control.

In theory, it is possible to extend the filter to provide +a generic framework for other target-external testing components, +thus decoupling the testing infrastructure from the (possibly limited) +communication means provided by the target (serial, JTAG, Ethernet, +etc).

Another advantage is that the host tools do not need to +know about the various testing environments required by the eCos +packages, since all contact with the target continues to happen +via GDB.


PrevHomeNext
Using the command lineUpBuilding and Running Sample Applications
\ No newline at end of file diff --git a/doc/html/user-guide/the-ecos-configuration-tool.html b/doc/html/user-guide/the-ecos-configuration-tool.html new file mode 100644 index 00000000..8dcc5d09 --- /dev/null +++ b/doc/html/user-guide/the-ecos-configuration-tool.html @@ -0,0 +1,203 @@ + + + + + + + + +The eCos Configuration Tool +
eCos User Guide
PrevNext


PrevHomeNext
More Features — Clocks and Alarm +Handlers Getting Started
\ No newline at end of file diff --git a/doc/html/user-guide/user-guide-installation-linux.html b/doc/html/user-guide/user-guide-installation-linux.html new file mode 100644 index 00000000..ab828d9b --- /dev/null +++ b/doc/html/user-guide/user-guide-installation-linux.html @@ -0,0 +1,158 @@ + + + + + + + + +Installation on Linux +
eCos User Guide
PrevNext


PrevHomeNext
System RequirementsUpInstallation on Windows
\ No newline at end of file diff --git a/doc/html/user-guide/user-guide-installation-requirements.html b/doc/html/user-guide/user-guide-installation-requirements.html new file mode 100644 index 00000000..d4964ff6 --- /dev/null +++ b/doc/html/user-guide/user-guide-installation-requirements.html @@ -0,0 +1,198 @@ + + + + + + + + +System Requirements +
eCos User Guide
PrevNext


PrevHomeNext
Installing eCosUpInstallation on Linux
\ No newline at end of file diff --git a/doc/html/user-guide/user-guide-installation-target.html b/doc/html/user-guide/user-guide-installation-target.html new file mode 100644 index 00000000..79fb74c2 --- /dev/null +++ b/doc/html/user-guide/user-guide-installation-target.html @@ -0,0 +1,264 @@ + + + + + + + + +Target Setup +
eCos User Guide
PrevNext

Chapter 9. Target Setup

While eCos supports a variety of +targets, communication with all the targets happens in one of four +ways. These are described in general below. Any details or variations +from these descriptions will be found in the +eCos documentation for a specific target, +in the appendix.

Connecting Via Serial Line

Most targets will have RedBoot or GDB Stubs installed. +These normally waits for GDB to connect at 38400 baud, using 8 data +bit, no parity bit and 1 stop-bit and no hardware flow control. Check +the documentation for your target to ensure it uses this speed. If not, +adjust the following instructions accordingly.

The following instructions depend on your having selected +the appropriate serial port on the host. That is, the serial port +which connects to the target's (primary) serial port. On +Linux this could be /dev/ttyS0, +while the same port on Windows would be named COM1. +Substitute the proper serial port name in the below.

Connect to the target by issuing the following commands in +GDB console mode:

(gdb) set remotebaud 38400    
+(gdb) target remote /dev/ttyS0

In Insight, connect by opening the File->Target +Settings window and enter:

Target: Remote/Serial     
+Baud Rate: 38400     
+Port: /dev/ttyS0

Set other options according to preference, close the window +and select +Run->Connect to target.


PrevHomeNext
Installation on WindowsUpConnecting Via Ethernet
\ No newline at end of file diff --git a/doc/html/user-guide/user-guide-installation-windows.html b/doc/html/user-guide/user-guide-installation-windows.html new file mode 100644 index 00000000..ecca3168 --- /dev/null +++ b/doc/html/user-guide/user-guide-installation-windows.html @@ -0,0 +1,158 @@ + + + + + + + + +Installation on Windows +
eCos User Guide
PrevNext


PrevHomeNext
Installation on LinuxUpTarget Setup
\ No newline at end of file diff --git a/doc/html/user-guide/user-guide-installation.html b/doc/html/user-guide/user-guide-installation.html new file mode 100644 index 00000000..20f8a45d --- /dev/null +++ b/doc/html/user-guide/user-guide-installation.html @@ -0,0 +1,179 @@ + + + + + + + + +Installing eCos +
eCos User Guide
PrevNext


PrevHomeNext
Documentation Roadmap System Requirements
\ No newline at end of file diff --git a/doc/html/user-guide/user-guide-introduction.html b/doc/html/user-guide/user-guide-introduction.html new file mode 100644 index 00000000..a8eb774a --- /dev/null +++ b/doc/html/user-guide/user-guide-introduction.html @@ -0,0 +1,187 @@ + + + + + + + + +Introduction +
eCos User Guide
PrevNext


PrevHomeNext
eCos User Guide Key Features
\ No newline at end of file diff --git a/doc/html/user-guide/user-guide-programming.html b/doc/html/user-guide/user-guide-programming.html new file mode 100644 index 00000000..1057b28c --- /dev/null +++ b/doc/html/user-guide/user-guide-programming.html @@ -0,0 +1,197 @@ + + + + + + + + +Programming With eCos +
eCos User Guide
PrevNext


PrevHomeNext
Using A Synthetic Target Programming With eCos
\ No newline at end of file diff --git a/doc/html/user-guide/using-commandline-testcase.html b/doc/html/user-guide/using-commandline-testcase.html new file mode 100644 index 00000000..ab5dd473 --- /dev/null +++ b/doc/html/user-guide/using-commandline-testcase.html @@ -0,0 +1,397 @@ + + + + + + + + +Using the command line +
eCos User Guide
PrevChapter 12. Running an eCos Test CaseNext

Using the command line

Start a command shell (such as a Cygwin shell window in Windows) +with the environment variables set as described in the toolchain +documentation. Change to the directory in which you set up your build +tree, and invoke GDB on the test +program.

To run the bin_sem0 test (which will +test the kernel for the correct creation and destruction of binary +semaphores) type:

$ TARGET-gdb -nw install/tests/kernel/<version>/tests/bin_sem0

You should see output similar to the following in the command +window:

GNU gdb THIS-GDB-VERSION
+Copyright 2001 Free Software Foundation, Inc.
+GDB is free software, covered by the GNU General Public License, and you are
+welcome to change it and/or distribute copies of it under certain conditions.
+Type "show copying" to see the conditions.
+There is absolutely no warranty for GDB.  Type "show warranty" for details.
+This GDB was configured as "--host=THIS-HOST --target=THIS-TARGET".
+(gdb)

If you are trying to run a synthetic target test on Linux, skip the following connection and download +steps. Otherwise, connect to the target by typing:

(gdb) set remotebaud 38400
+(gdb) target remote /dev/ttyS0

on Linux or

(gdb) set remotebaud 38400
+(gdb) target remote com1

on Windows or

(gdb) target sim

to use a simulator in either host O/S.

Check the documentation for the target board for the actual baud rate +to use when connecting to real targets.

You will see output similar to the following:

Remote debugging using /dev/ttyS1
+0x0000d50c in ?? ()
+    at BASE_DIR/kernel/<version>/src/common/kapi.cxx:345
+
+Current language:  auto; currently c++
+(gdb) 

Or if you are using the simulator:

Connected to the simulator.
+(gdb)

Now download the program to the target with

(gdb) load

You should see output similar to the following on your screen:

Loading section .text, size 0x4b04 lma 0x108000
+Loading section .rodata, size 0x738 lma 0x10cb08
+Loading section .data, size 0x1c0 lma 0x10d240
+Start address 0x108000, load size 21500
+Transfer rate: 24571 bits/sec, 311 bytes/write.
+(gdb)

You are now ready to run your program. If you type:

(gdb) continue

you will see output similar to the following:

Continuing.
+PASS:<Binary Semaphore 0 OK>
+EXIT:<done>

You can terminate your GDB session with +Control+C, otherwise it will sit in the +“idle” thread and use up CPU time. This is not a problem +with real targets, but may have undesirable effects in simulated or +synthetic targets. Type quit and you are +done.


PrevHomeNext
Running an eCos Test CaseUpTesting Filters
\ No newline at end of file diff --git a/doc/html/user-guide/using-configtool-windows-linux.html b/doc/html/user-guide/using-configtool-windows-linux.html new file mode 100644 index 00000000..ba6ba08c --- /dev/null +++ b/doc/html/user-guide/using-configtool-windows-linux.html @@ -0,0 +1,512 @@ + + + + + + + + +Configuration Tool on Windows and Linux Quick Start +
eCos User Guide
PrevChapter 11. Configuring and Building eCos from SourceNext

Configuration Tool on Windows and Linux Quick Start

+ +Note that the use of the Configuration Tool +is described in detail in Part IV in eCos User Guide.

The Configuration Tool (see Figure 11-1) +has five main elements: the configuration window, +the conflicts window, +the properties window, the short +description window, +and the output window.

Start by opening the templates window via Build->Templates. +Select the desired target (see Figure 11-2).

Make sure that the configuration is correct for the target +in terms of endianness, CPU model, Startup type, etc. (see Figure 11-3).

Next, select the Build->Library menu +item to start building eCos (see Figure 11-4). The +application will configure the sources, prepare a build tree, and +build the libtarget.a library, which contains the +eCos kernel and other packages.

The Save As dialog box will appear, asking +you to specify a directory in which to place your save file. You +can use the default, but it is a good idea to make a subdirectory, +called ecos-work for example.

The first time you build an eCos library for a specific +architecture, the Configuration Tool may prompt +you for the location of the appropriate build tools (including +make and +TARGET-gcc) using a +Build Tools dialog box (as shown in Figure 11-6). You can select a location from +the drop down list, browse to the directory using the +Browse button, or type in the location of the +build tools manually.

The Configuration Tool may also prompt you +for the location of the user tools (such as cat and +ls) using a User Tools dialog +box (as shown in Figure 11-7). As with +the Build Tools dialog, you can select a location +from the drop down list, browse to the directory using the +Browse button, or type in the location of the +user tools manually. Note that on Linux, this will often be +unnecessary as the tools will already be on your PATH.

When the tool locations have been entered, the Configuration +Tool will configure the sources, prepare a build tree, +and build the libtarget.a library, which contains +the eCos kernel and other packages.

The output from the configuration process and the building +of libtarget.a will be shown in the output +window.

Once the build process has finished you will have a kernel +with other packages in libtarget.a. You should +now build the eCos tests for your particular configuration.

You can do this by selecting Build -> Tests. +Notice that you could have selected Tests instead +of Library in the earlier step and it would +have built both the library and the tests, +but this would increase the build time substantially, and if you +do not need to build the tests it is unnecessary.

Chapter 12 will guide you through running one + of the test cases you just built on the selected target, + using GDB.


PrevHomeNext
Configuring and Building eCos from SourceUpEcosconfig on Windows and Linux Quick Start
\ No newline at end of file diff --git a/doc/html/user-guide/using-ecosconfig-on-linux.html b/doc/html/user-guide/using-ecosconfig-on-linux.html new file mode 100644 index 00000000..714114b3 --- /dev/null +++ b/doc/html/user-guide/using-ecosconfig-on-linux.html @@ -0,0 +1,547 @@ + + + + + + + + +Ecosconfig on Windows and Linux Quick Start +
eCos User Guide
PrevChapter 11. Configuring and Building eCos from SourceNext

Ecosconfig on Windows and Linux Quick Start

As an alternative to using the graphical +Configuration Tool, it is still possible to +configure and build a kernel by editing a configuration file manually +and using the ecosconfig command.

Manual configuration and the ecosconfig command are +described in detail in Chapter 28.

To use the ecosconfig command you need to start a +shell. In Windows you need to start a +CygWin bash shell, not a +DOS command line.

The following instructions assume that the +PATH and ECOS_REPOSITORY +environment variables have been setup correctly as described in Chapter 7. They also assume Linux +usage but equally well apply to Windows running Cygwin.

Before invoking ecosconfig you need to +choose a directory in which to work. For the purposes of this tutorial, +the default path will be BASE_DIR/ecos-work. +Create this directory and change to it by typing:

$ mkdir BASE_DIR/ecos-work
+$ cd BASE_DIR/ecos-work

To see what options can be used with ecosconfig, +type:

$ ecosconfig --help

The available packages, targets and templates may be listed +as follows:

$ ecosconfig list

Here is sample output from ecosconfig showing +the usage message.

Example 11-1. Getting help from ecosconfig

$ ecosconfig --help
+Usage: ecosconfig [ qualifier ... ] [ command ]
+  commands are:
+    list                                       : list repository contents
+    new TARGET [ TEMPLATE [ VERSION ] ]        : create a configuration
+    target TARGET                              : change the target hardware
+    template TEMPLATE [ VERSION ]              : change the template
+    add PACKAGE [ PACKAGE ... ]                : add package(s)
+    remove PACKAGE [ PACKAGE ... ]             : remove package(s)
+    version VERSION PACKAGE [ PACKAGE ... ]    : change version of package(s)
+    export FILE                                : export minimal config info
+    import FILE                                : import additional config info
+    check                                      : check the configuration
+    resolve                                    : resolve conflicts
+    tree                                       : create a build tree
+  qualifiers are:
+    --config=FILE                              : the configuration file
+    --prefix=DIRECTORY                         : the install prefix
+    --srcdir=DIRECTORY                         : the source repository
+    --no-resolve                               : disable conflict
+resolution
+    --version                                  : show version and copyright
+$

Example 11-2. ecosconfig output — +list of available packages, targets and templates

$ ecosconfig list
+Package CYGPKG_CYGMON (CygMon support via eCos): 
+aliases: cygmon 
+versions: <version> 
+Package CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1742 (Wallclock driver for Dallas 1742): 
+aliases: devices_wallclock_ds1742 device_wallclock_ds1742 
+versions: <version> 
+Package CYGPKG_DEVICES_WALLCLOCK_SH3 (Wallclock driver for SH3 RTC module): 
+aliases: devices_wallclock_sh3 device_wallclock_sh3 
+versions: <version> 
+Package CYGPKG_DEVICES_WATCHDOG_ARM_AEB (Watchdog driver for ARM/AEB board): 
+aliases: devices_watchdog_aeb device_watchdog_aeb 
+versions: <version> 
+Package CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285 (Watchdog driver for ARM/EBSA285 board): 
+aliases: devices_watchdog_ebsa285 device_watchdog_ebsa285 
+versions: <version> 
+…

Selecting a Target

To configure for a listed target, type:

$ ecosconfig new <target>

For example, to configure for the ARM PID development board, +type:

$ ecosconfig new pid

You can then edit the generated file, +ecos.ecc, setting the options as required for the +target (endianess, CPU model, Startup type, etc.). For detailed +information about how to edit the ecos.ecc file, +see the CDL Writer's Guide and the Section called Editing an eCos Savefile in Chapter 28.

Create a build tree for the configured target by typing:

$ ecosconfig tree

If there are any problem with the configuration, +ecosconfig will tell you. The most likely cause of +this is mistakes when editing the ecos.ecc file. +You can check whether the configuration you have made is correct, +without building the tree with the following command:

$ ecosconfig check

If this reports any conflicts you can get +ecosconfig to try and resolve them itself by typing:

$ ecosconfig resolve

See the Section called Conflicts and constraints in Chapter 28 for more details.

You can now run the command make or make +tests, after which you will be at the same point you +would be after running the Configuration Tool +— you can start developing your own applications, +following the steps in Chapter 13.

The procedure shown above allows you to do very coarse-grained +configuration of the eCos kernel: you can select which packages +to include in your kernel, and give target and start-up options. +But you cannot select components within a package, or set the very +fine-grained options.

To select fine-grained configuration options you will need to +edit the configuration file ecos.ecc in the +current directory and regenerate the build tree.

Caution

You should follow the manual configuration process described +above very carefully, and you should read the comments in each file +to see when one option depends on other options or packages being +enabled or disabled. If you do not, you might end up with an inconsistently +configured kernel which could fail to build or might execute +incorrectly.


PrevHomeNext
Configuration Tool on Windows and Linux Quick StartUpRunning an eCos Test Case
\ No newline at end of file diff --git a/doc/html/user-guide/version-conventions.html b/doc/html/user-guide/version-conventions.html new file mode 100644 index 00000000..131b7a2e --- /dev/null +++ b/doc/html/user-guide/version-conventions.html @@ -0,0 +1,184 @@ + + + + + + + + +Version Conventions +
eCos User Guide
PrevChapter 4. Notation and ConventionsNext


PrevHomeNext
Directory and File System ConventionsUpDocumentation Roadmap
\ No newline at end of file diff --git a/packages/devs/eth/arm/innovator/v2_0/src/if_innovator.c b/packages/devs/eth/arm/innovator/v2_0/src/if_innovator.c new file mode 100644 index 00000000..1f7ddd94 --- /dev/null +++ b/packages/devs/eth/arm/innovator/v2_0/src/if_innovator.c @@ -0,0 +1,73 @@ +//========================================================================== +// +// devs/eth/arm/innovator/if_innovator.c +// +// Ethernet device driver for Innovator using SMSC LAN91C96 +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//####BSDCOPYRIGHTBEGIN#### +// +// ------------------------------------------- +// +// Portions of this software may have been derived from OpenBSD or other sources, +// and are covered by the appropriate copyright disclaimers included herein. +// +// ------------------------------------------- +// +//####BSDCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Jordi Colomer , Patrick Doyle +// Contributors: Patrick Doyle +// Date: 2001-07-01 +// Purpose: +// Description: hardware driver for Innovator/SMSC LAN91CXX ethernet +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include + +#if defined(CYGPKG_REDBOOT) +#include +#endif + +#include +#include diff --git a/packages/devs/eth/arm/triton/v2_0/cdl/triton_eth_cs8900_drivers.cdl b/packages/devs/eth/arm/triton/v2_0/cdl/triton_eth_cs8900_drivers.cdl new file mode 100755 index 00000000..1be19e1f --- /dev/null +++ b/packages/devs/eth/arm/triton/v2_0/cdl/triton_eth_cs8900_drivers.cdl @@ -0,0 +1,122 @@ +# ==================================================================== +# +# triton_eth_drivers.cdl +# +# Ethernet drivers - support for CS8900A ethernet controller +# on the Ka-RO TRITON board. +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +cdl_package CYGPKG_DEVS_ETH_CL_CS8900_ARM_XSCALE_TRITON { + + display "TRITON CS8900A ethernet driver" + + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS +# active_if CYGPKG_HAL_ARM_XSCALE_TRITON_STK + + + # chip wired in 16-bit mode, no EEPROM + implements CYGHWR_NET_DRIVERS + implements CYGHWR_NET_DRIVER_ETH0 + implements CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED + implements CYGINT_DEVS_ETH_CL_CS8900A_STATIC_ESA + + requires CYGPKG_DEVS_ETH_CL_CS8900A + description "Ethernet driver for TRITON boards." + + include_dir cyg/io + + define_proc { + puts $::cdl_system_header "/***** ethernet driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_CL_CS8900A_INL " + puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_CL_CS8900A_CFG " + puts $::cdl_system_header "/***** ethernet driver proc output end *****/" + } + + # Arguably this should do in the generic package + # but then there is a logic loop so you can never enable it. + + cdl_interface CYGINT_DEVS_ETH_CL_CS8900A_REQUIRED { + display "CL CS8900A driver required" + } + + cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + display "Device name for the ethernet driver" + flavor data + default_value {"\"eth0\""} + description " + This option sets the name of the ethernet device for the + ethernet port." + } + + cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + display "The ethernet station address (MAC)" + flavor data + default_value {"{0x00, 0x0C, 0xC6, 0x70, 0x00, 0x00}"} + description "A static ethernet station address. + Caution: Booting two systems with the same MAC on the same + network, will cause severe conflicts." + active_if !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + } + + + + + cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + display "Use the 1-WIRE device ESA (MAC address)" + default_value 1 + flavor bool + description " + Use the ESA that is stored in the 1wire device instead of + a static ESA." + } + + + + + + cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + display "Use the RedBoot ESA (MAC address)" + default_value 0 + flavor bool + description " + Use the ESA that is stored as a RedBoot variable instead of + a static ESA." + } + +} + +# EOF triton_eth_drivers.cdl diff --git a/packages/devs/eth/arm/triton/v2_0/cdl/triton_eth_drivers.cdl b/packages/devs/eth/arm/triton/v2_0/cdl/triton_eth_drivers.cdl new file mode 100755 index 00000000..36a5461c --- /dev/null +++ b/packages/devs/eth/arm/triton/v2_0/cdl/triton_eth_drivers.cdl @@ -0,0 +1,126 @@ +# ==================================================================== +# +# triton_eth_drivers.cdl +# +# Ethernet drivers - support for LAN91C111 ethernet controller +# on the Ka-RO TRITON board. +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Jordi Colomer , usteinkohl +# Contributors: Jordi Colomer, usteinkohl +# Date: 14th January 2003 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON { + + display "TRITON SMC91C111 ethernet driver" + + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS +# active_if CYGPKG_HAL_ARM_XSCALE_TRITON_STK + + + # chip wired in 16-bit mode, no EEPROM + implements CYGHWR_NET_DRIVERS + implements CYGHWR_NET_DRIVER_ETH0 + implements CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + implements CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA + + requires CYGPKG_DEVS_ETH_SMSC_LAN91C111 + description "Ethernet driver for TRITON boards." + + include_dir cyg/io + + define_proc { + puts $::cdl_system_header "/***** ethernet driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_SMSC_LAN91C111_INL " + puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_SMSC_LAN91C111_CFG " + puts $::cdl_system_header "/***** ethernet driver proc output end *****/" + } + + # Arguably this should do in the generic package + # but then there is a logic loop so you can never enable it. + + cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + display "SMSC LAN91C111 driver required" + } + + cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + display "Device name for the ethernet driver" + flavor data + default_value {"\"eth0\""} + description " + This option sets the name of the ethernet device for the + ethernet port." + } + + cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + display "The ethernet station address (MAC)" + flavor data + default_value {"{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}"} + description "A static ethernet station address. + Caution: Booting two systems with the same MAC on the same + network, will cause severe conflicts." + active_if !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + } + + cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + display "Use the 1-WIRE device ESA (MAC address)" + default_value 1 + flavor bool + description " + Use the ESA that is stored in the 1wire device instead of + a static ESA." + } + + + cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + display "Use the RedBoot ESA (MAC address)" + default_value 0 + flavor bool + description " + Use the ESA that is stored as a RedBoot variable instead of + a static ESA." + } + +} + +# EOF triton_eth_drivers.cdl diff --git a/packages/devs/eth/arm/triton/v2_0/include/devs_eth_cs8900a_triton.inl b/packages/devs/eth/arm/triton/v2_0/include/devs_eth_cs8900a_triton.inl new file mode 100755 index 00000000..c083d0bb --- /dev/null +++ b/packages/devs/eth/arm/triton/v2_0/include/devs_eth_cs8900a_triton.inl @@ -0,0 +1,219 @@ +//========================================================================== +// +// devs/eth/arm/triton/..../include/devs_eth_triton.inl +// +// Triton ethernet I/O definitions. +// +//========================================================================== +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Jordi Colomer , usteinkohl +// Contributors: Jordi Colomer, usteinkohl +// Date: 14th January 2003 +// Purpose: Triton ethernet definitions +//####DESCRIPTIONEND#### +//========================================================================== + +#ifdef __WANT_DEVS + + + +#include +#include +#include +#include + +// MAC address is stored as a Redboot config option +#ifdef CYGPKG_REDBOOT +#include +#ifdef CYGSEM_REDBOOT_FLASH_CONFIG +#include +#include +#include + + + + + + + + +static __inline__ void +post_reset(cyg_addrword_t base) +{ + cyg_uint8 value; + // Toggle SBHE (connected to DQM1) line on the Crystal chip. + HAL_WRITE_UINT8(base-0x100, 0); + HAL_WRITE_UINT8(base-0x101, 0); + HAL_WRITE_UINT8(base-0x102, 0); + HAL_WRITE_UINT8(base-0x103, 0); + HAL_READ_UINT8(base-0x100, value); // dummy read + +} + +#undef CYGHWR_CL_CS8900A_PLF_POST_RESET +#define CYGHWR_CL_CS8900A_PLF_POST_RESET(base) post_reset(base) + + + + + + + + + + + +// ESA (Ethernet Station Address), when constant +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA + static unsigned char static_esa[] = CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA; +#endif +#endif + + +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA +RedBoot_config_option("Network hardware address [MAC]", + triton_esa, + ALWAYS_ENABLED, true, + CONFIG_ESA, (unsigned long long)0x000000c60c00 + ); +#endif + + + + + + +#endif +#endif + + + + + + + + + +// ESA address fetch function +cyg_bool triton_get_ESA(struct cs8900a_priv_data *cpd) +{ +#if defined(CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA) + // fetch hardware address from 1-wire device + cpd->hardwired_esa = false; + return get_esa_1w(cpd->esa); + + + + // Fetch hardware address from RedBoot config +#elif defined(CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA) + #if defined(CYGPKG_REDBOOT) && defined(CYGSEM_REDBOOT_FLASH_CONFIG) + flash_get_config("triton_esa", cpd->esa, CONFIG_ESA); + return 1; + #else + #error "No RedBoot flash configuration to store ESA" + #endif +#else + memcpy(cpd->esa, static_esa, 6); +#endif +} + + + + + + + + +static cs8900a_priv_data_t cs8900a_eth0_priv_data = { + + provide_esa : &triton_get_ESA, +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + esa: CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA, + hardwired_esa : true, +#else + hardwired_esa : false, +#endif + base : (cyg_addrword_t) CS8900A_ETH_IOBASE, + interrupt : IRQ_GPIO_CS8900A +}; + + + + + + + + + + + + + + + + + +ETH_DRV_SC(cs8900a_sc, + &cs8900a_eth0_priv_data, // Driver specific data + CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME, // Name for device + cs8900a_start, + cs8900a_stop, + cs8900a_control, + cs8900a_can_send, + cs8900a_send, + cs8900a_recv, + cs8900a_deliver, + cs8900a_poll, + cs8900a_int_vector +); + +NETDEVTAB_ENTRY(cs8900a_netdev, + "cs8900a_" CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME, + cs8900a_init, + &cs8900a_sc); + + + + +#endif // __WANT_DEVS + + + +//EOF devs_eth_triton.inl + + diff --git a/packages/devs/eth/arm/triton/v2_0/include/devs_eth_triton.inl b/packages/devs/eth/arm/triton/v2_0/include/devs_eth_triton.inl new file mode 100755 index 00000000..a649b0c6 --- /dev/null +++ b/packages/devs/eth/arm/triton/v2_0/include/devs_eth_triton.inl @@ -0,0 +1,157 @@ +//========================================================================== +// +// devs/eth/arm/triton/..../include/devs_eth_triton.inl +// +// Triton ethernet I/O definitions. +// +//========================================================================== +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Jordi Colomer , usteinkohl +// Contributors: Jordi Colomer, usteinkohl +// Date: 14th January 2003 +// Purpose: Triton ethernet definitions +//####DESCRIPTIONEND#### +//========================================================================== + +#include +#include +#include +#include + +#define CYGNUM_DEVS_ETH_SMSC_LAN91C111_SHIFT_ADDR 0 + +// MAC address is stored as a Redboot config option +#ifdef CYGPKG_REDBOOT +#include +#ifdef CYGSEM_REDBOOT_FLASH_CONFIG +#include +#include +#include + + + + + +// ESA (Ethernet Station Address), when constant +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA + static unsigned char static_esa[] = CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA; +#endif +#endif + + + + + +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA +RedBoot_config_option("Network hardware address [MAC]", + triton_esa, + ALWAYS_ENABLED, true, + CONFIG_ESA, (unsigned long long)0x000000c60c00 + ); +#endif + + + + +#endif +#endif + + + + + + +// ESA address fetch function +cyg_bool triton_get_ESA(struct lan91c111_priv_data *cpd) +{ +#if defined(CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA) + // fetch hardware address from 1-wire device + return get_esa_1w(cpd->enaddr); + + + + // Fetch hardware address from RedBoot config +#elif defined(CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA) + #if defined(CYGPKG_REDBOOT) && defined(CYGSEM_REDBOOT_FLASH_CONFIG) + flash_get_config("triton_esa", cpd->enaddr, CONFIG_ESA); + return 1; + #else + #error "No RedBoot flash configuration to store ESA" + #endif +#else + memcpy(cpd->enaddr, static_esa, 6); +#endif +} + + + + + + +static lan91c111_priv_data lan91c111_eth0_priv_data = { + + config_enaddr : triton_get_ESA, +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + enaddr: CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA, +#endif + base : (unsigned short *) SMC91C111_ETH_IOBASE, + interrupt : IRQ_GPIO_ETH +}; + +ETH_DRV_SC(lan91c111_sc, + &lan91c111_eth0_priv_data, // Driver specific data + CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME, // Name for device + lan91c111_start, + lan91c111_stop, + lan91c111_control, + lan91c111_can_send, + lan91c111_send, + lan91c111_recv, + lan91c111_deliver, + lan91c111_poll, + lan91c111_int_vector +); + +NETDEVTAB_ENTRY(lan91c111_netdev, + "lan91c111_" CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME, + smsc_lan91c111_init, + &lan91c111_sc); + +//EOF devs_eth_triton.inl + + diff --git a/packages/devs/eth/arm/triton270/v2_0/cdl/triton270_91c111_drivers.cdl b/packages/devs/eth/arm/triton270/v2_0/cdl/triton270_91c111_drivers.cdl new file mode 100755 index 00000000..5055c378 --- /dev/null +++ b/packages/devs/eth/arm/triton270/v2_0/cdl/triton270_91c111_drivers.cdl @@ -0,0 +1,126 @@ +# ==================================================================== +# +# triton270_91c111_drivers.cdl +# +# Ethernet drivers - support for LAN91C111 ethernet controller +# on the Ka-RO TRITON board. +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Jordi Colomer , usteinkohl +# Contributors: Jordi Colomer, usteinkohl +# Date: 14th January 2003 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_ETH_ARM_XSCALE_TRITON270_91C111 { + + display "TRITON SMC91C111 ethernet driver" + + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS +# active_if CYGPKG_HAL_ARM_XSCALE_TRITON_STK + + + # chip wired in 16-bit mode, no EEPROM + implements CYGHWR_NET_DRIVERS + implements CYGHWR_NET_DRIVER_ETH0 + implements CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + implements CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA + + requires CYGPKG_DEVS_ETH_SMSC_LAN91C111 + description "Ethernet driver for TRITON boards." + + include_dir cyg/io + + define_proc { + puts $::cdl_system_header "/***** ethernet driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_SMSC_LAN91C111_INL " + puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_SMSC_LAN91C111_CFG " + puts $::cdl_system_header "/***** ethernet driver proc output end *****/" + } + + # Arguably this should do in the generic package + # but then there is a logic loop so you can never enable it. + + cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED { + display "SMSC LAN91C111 driver required" + } + + cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME { + display "Device name for the ethernet driver" + flavor data + default_value {"\"eth0\""} + description " + This option sets the name of the ethernet device for the + ethernet port." + } + + cdl_option CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA { + display "The ethernet station address (MAC)" + flavor data + default_value {"{0x00, 0x0c, 0xc6, 0x69, 0x00, 0x00}"} + description "A static ethernet station address. + Caution: Booting two systems with the same MAC on the same + network, will cause severe conflicts." + active_if !CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + } + + cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA { + display "Use the 1-WIRE device ESA (MAC address)" + default_value 1 + flavor bool + description " + Use the ESA that is stored in the 1wire device instead of + a static ESA." + } + + + cdl_option CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA { + display "Use the RedBoot ESA (MAC address)" + default_value 0 + flavor bool + description " + Use the ESA that is stored as a RedBoot variable instead of + a static ESA." + } + +} + +# EOF triton_eth_drivers.cdl diff --git a/packages/devs/eth/arm/triton270/v2_0/include/devs_triton270_91c111.inl b/packages/devs/eth/arm/triton270/v2_0/include/devs_triton270_91c111.inl new file mode 100755 index 00000000..30b607db --- /dev/null +++ b/packages/devs/eth/arm/triton270/v2_0/include/devs_triton270_91c111.inl @@ -0,0 +1,157 @@ +//========================================================================== +// +// devs/eth/arm/triton/..../include/devs_eth_triton.inl +// +// Triton ethernet I/O definitions. +// +//========================================================================== +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Jordi Colomer , usteinkohl +// Contributors: Jordi Colomer, usteinkohl +// Date: 14th January 2003 +// Purpose: Triton ethernet definitions +//####DESCRIPTIONEND#### +//========================================================================== + +#include +#include +#include +#include + +#define CYGNUM_DEVS_ETH_SMSC_LAN91C111_SHIFT_ADDR 0 + +// MAC address is stored as a Redboot config option +#ifdef CYGPKG_REDBOOT +#include +#ifdef CYGSEM_REDBOOT_FLASH_CONFIG +#include +#include +#include + + + + + + + + + + +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA +RedBoot_config_option("Network hardware address [MAC]", + triton_esa, + ALWAYS_ENABLED, true, + CONFIG_ESA, (unsigned long long)0x000000c60c00 + ); +#endif + + + + +#endif +#endif + + + +// ESA (Ethernet Station Address), when constant +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA + static unsigned char static_esa[] = CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA; +#endif +#endif + + + +// ESA address fetch function +cyg_bool triton_get_ESA(struct lan91c111_priv_data *cpd) { + +#if defined(CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_1WIRE_ESA) + // fetch hardware address from 1-wire device + return get_esa_1w(cpd->enaddr); + + + + // Fetch hardware address from RedBoot config +#elif defined(CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA) + #if defined(CYGPKG_REDBOOT) && defined(CYGSEM_REDBOOT_FLASH_CONFIG) + flash_get_config("triton_esa", cpd->enaddr, CONFIG_ESA); + return 1; + #else + #error "No RedBoot flash configuration to store ESA" + #endif +#else + memcpy(cpd->enaddr, static_esa, 6); +#endif +} + + + + + + +static lan91c111_priv_data lan91c111_eth0_priv_data = { + + config_enaddr : triton_get_ESA, +#ifndef CYGSEM_DEVS_ETH_ARM_XSCALE_TRITON_REDBOOT_ESA + enaddr: CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_ESA, +#endif + base : (unsigned short *) SMC91C111_ETH_IOBASE, + interrupt : IRQ_GPIO_ETH +}; + +ETH_DRV_SC(lan91c111_sc, + &lan91c111_eth0_priv_data, // Driver specific data + CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME, // Name for device + lan91c111_start, + lan91c111_stop, + lan91c111_control, + lan91c111_can_send, + lan91c111_send, + lan91c111_recv, + lan91c111_deliver, + lan91c111_poll, + lan91c111_int_vector +); + +NETDEVTAB_ENTRY(lan91c111_netdev, + "lan91c111_" CYGDAT_DEVS_ETH_ARM_XSCALE_TRITON_NAME, + smsc_lan91c111_init, + &lan91c111_sc); + +//EOF devs_eth_triton.inl + + diff --git a/packages/devs/eth/smsc/lan91c111/v2_0/cdl/smsc_lan91c111_eth_drivers.cdl b/packages/devs/eth/smsc/lan91c111/v2_0/cdl/smsc_lan91c111_eth_drivers.cdl new file mode 100755 index 00000000..7f04b0da --- /dev/null +++ b/packages/devs/eth/smsc/lan91c111/v2_0/cdl/smsc_lan91c111_eth_drivers.cdl @@ -0,0 +1,119 @@ +# ==================================================================== +# +# smsc_lan91c111_eth_drivers.cdl +# +# Ethernet drivers - support for LAN91C111 compatible ethernet controllers +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): gthomas, usteinkohl +# Contributors: gthomas, jskov, usteinkohl +# Date: 14th January 2003 (last modification) +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_ETH_SMSC_LAN91C111 { + display "SMSC LAN91C111 compatible ethernet driver" + description "Ethernet driver for SMSC LAN91C111 compatible controllers." + + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + + active_if CYGINT_DEVS_ETH_SMSC_LAN91C111_REQUIRED + + include_dir . + include_files ; # none _exported_ whatsoever + compile -library=libextras.a if_lan91c111.c + + define_proc { + puts $::cdl_header "#include "; + puts $::cdl_header "#include CYGDAT_DEVS_ETH_SMSC_LAN91C111_CFG"; + } + + + + cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT { + display "use 32 bit data access" + default_value 0 + description " + The device driver uses 32 bit data access if + this option is enabled, otherwise 16 bit data access is + used." + } + + + cdl_option CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM { + display "SIOCSIFHWADDR records ESA (MAC address) in EEPROM" + default_value 0 + description " + The ioctl() socket call with operand SIOCSIFHWADDR sets the + interface hardware address - the MAC address or Ethernet Station + Address (ESA). This option causes the new MAC address to be written + into the EEPROM associated with the interface, so that the new + MAC address is permanently recorded. Doing this should be a + carefully chosen decision, hence this option." + } + + cdl_interface CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA { + display "ESA is statically configured" + description " + If this is nonzero, then the ESA (MAC address) is statically + configured in the platform-specific package which instantiates + this driver with all its details." + } + + + cdl_component CYGPKG_DEVS_ETH_SMSC_LAN91C111_OPTIONS { + display "LAN91C111 ethernet driver build options" + flavor none + no_define + + cdl_option CYGPKG_DEVS_ETH_SMSC_LAN91C111_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-O2 -D_KERNEL -D__ECOS" } + description " + This option modifies the set of compiler flags for + building the LAN91C111 ethernet driver package. + These flags are used in addition + to the set of global flags." + } + } +} diff --git a/packages/devs/eth/smsc/lan91c111/v2_0/src/if_lan91c111.c b/packages/devs/eth/smsc/lan91c111/v2_0/src/if_lan91c111.c new file mode 100755 index 00000000..c7ecd37e --- /dev/null +++ b/packages/devs/eth/smsc/lan91c111/v2_0/src/if_lan91c111.c @@ -0,0 +1,1472 @@ +//========================================================================== +// +// dev/if_lan91c111.c +// +// Ethernet device driver for SMSC LAN91C111 compatible controllers +// +//========================================================================== +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// +// Original: lan91cxyz.c +// +// + +// Author(s): hmt, based on lan900 (for LAN91C110) driver by jskov +// jskov, based on CS8900 driver by Gary Thomas +// Contributors: gthomas, jskov, hmt, jco@ict.es + +// modified by usteinkohl, KaRo electronics GmbH, Germany + +// last modification: 2002-05-14 +// Purpose: +// Description: hardware driver for LAN91C111 "LAN9000" ethernet +// Notes: Pointer register is not saved/restored on receive interrupts. +// The pointer is shared by both receive/transmit code. +// But the net stack manages atomicity for you here. +// +// The controller has an autorelease mode that allows TX packets +// to be freed automatically on successful transmission - but +// that is not used since we're only sending one packet at a +// time anyway. +// We may want to pingpong in future for throughput reasons. +// +// Added support for PCMCIA mode and shifted +// address buses. +// +// added support for LAN91C111 (reading writing phy-registers) + +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +// Based on LAN91C110 and LAN91C96 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef CYGPKG_NET +#include +#include +#include /* Needed for struct ifnet */ +#endif + +#include "smsc_lan91c111.h" +#include CYGDAT_DEVS_ETH_SMSC_LAN91C111_INL + +#ifdef CYGPKG_INFRA_DEBUG +// Then we log, OOI, the number of times we get a bad packet number +// from the tx done fifo. +int lan91c111_txfifo_good = 0; +int lan91c111_txfifo_bad = 0; +#endif + +#if DEBUG_SMSC +#define DEBUG_FUNCTION() do { diag_printf("%s\n", __FUNCTION__); } while (0) +#else +#define DEBUG_FUNCTION() CYG_EMPTY_STATEMENT +#endif + +#if defined(ETH_DRV_GET_IF_STATS) || defined (ETH_DRV_GET_IF_STATS_UD) +#define KEEP_STATISTICS +#endif + +#ifdef KEEP_STATISTICS +#define INCR_STAT(_x_) (cpd->stats._x_++) +#else +#define INCR_STAT(_x_) CYG_EMPTY_STATEMENT +#endif + +static void lan91c111_poll(struct eth_drv_sc *sc); +static cyg_interrupt lan91c111_interrupt; +static cyg_handle_t lan91c111_interrupt_handle; + +// This ISR is called when the ethernet interrupt occurs +static int +lan91c111_isr(cyg_vector_t vector, cyg_addrword_t data + /* , HAL_SavedRegisters *regs */ ) +{ + struct eth_drv_sc *sc = (struct eth_drv_sc *)data; + struct lan91c111_priv_data *cpd = (struct lan91c111_priv_data *)sc->driver_private; + + DEBUG_FUNCTION(); + + INCR_STAT(interrupts); + + cyg_drv_interrupt_mask(cpd->interrupt); + cyg_drv_interrupt_acknowledge(cpd->interrupt); + return CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; // Run the DSR +} + +// The deliver function (ex-DSR) handles the ethernet [logical] processing +static void +lan91c111_deliver(struct eth_drv_sc *sc) +{ + struct lan91c111_priv_data *cpd = (struct lan91c111_priv_data *)sc->driver_private; + + DEBUG_FUNCTION(); + + // Service the interrupt: + lan91c111_poll(sc); + // Allow interrupts to happen again + cyg_drv_interrupt_unmask(cpd->interrupt); +} + +static int +lan91c111_int_vector(struct eth_drv_sc *sc) +{ + struct lan91c111_priv_data *cpd = + (struct lan91c111_priv_data *)sc->driver_private; + + return cpd->interrupt; +} + +/* + . Function: smc_enable + . Purpose: let the chip talk to the outside work + . Method: + . 1. Enable the transmitter + . 2. Enable the receiver + . 3. Enable interrupts +*/ +static void smc_enable( struct eth_drv_sc *sc ) +{ + /* see the header file for options in TCR/RCR DEFAULT*/ + put_reg(sc, LAN91C111_TCR, LAN91C111_TCR_TXENA | LAN91C111_TCR_PAD_EN); + put_reg(sc, LAN91C111_RCR, LAN91C111_RCR_RXEN); + + /* now, enable interrupts */ +// SMC_SELECT_BANK( 2 ); +// outb( SMC_INTERRUPT_MASK, ioaddr + IM_REG ); +} + +static void smc_reset(struct eth_drv_sc *sc ) +{ + /* This resets the registers mostly to defaults, but doesn't + affect EEPROM. That seems unnecessary */ + put_reg(sc, LAN91C111_RCR , LAN91C111_RCR_SOFT_RST); + + /* Setup the Configuration Register */ + /* This is necessary because the CONFIG_REG is not affected */ + /* by a soft reset */ + + put_reg(sc, LAN91C111_CONFIG, 0xb0b1); + + /* this should pause enough for the chip to be happy */ + //mdelay(10); + CYGACC_CALL_IF_DELAY_US((cyg_int32)10000); + + /* Disable transmit and receive functionality */ + put_reg(sc, LAN91C111_RCR, 0); + put_reg(sc, LAN91C111_TCR, 0); + + /* set the control register to automatically + release successfully transmitted packets, to make the best + use out of our limited memory */ +// put_reg(sc, LAN91C111_CONTROL, get_reg(sc, LAN91C111_CONTROL) | LAN91C111_CONTROL_AUTO_RELEASE); + + /* Reset the MMU */ + put_reg(sc, LAN91C111_MMU_COMMAND, LAN91C111_MMU_reset_mmu); + + /* Note: It doesn't seem that waiting for the MMU busy is needed here, + but this is a place where future chipsets _COULD_ break. Be wary + of issuing another MMU command right after this */ + + /* Disable all interrupts */ + put_reg(sc, LAN91C111_INTERRUPT, 0); +} + +/*------------------------------------------------------------ + . Reads a register from the MII Management serial interface + .-------------------------------------------------------------*/ +static unsigned short +smc_read_phy_register(struct eth_drv_sc *sc, unsigned char phyaddr, unsigned char phyreg) +{ + int i; + unsigned char mask; + unsigned short mii_reg; + unsigned short bits[64]; + int clk_idx = 0; + int input_idx; + unsigned short phydata; + + // 32 consecutive ones on MDO to establish sync + for (i = 0; i < 32; ++i) + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + + // Start code <01> + bits[clk_idx++] = LAN91C111_MGMT__MDOE; + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + + // Read command <10> + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + bits[clk_idx++] = LAN91C111_MGMT__MDOE; + + // Output the PHY address, msb first + mask = (unsigned char)0x10; + for (i = 0; i < 5; ++i) { + if (phyaddr & mask) + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + else + bits[clk_idx++] = LAN91C111_MGMT__MDOE; + + // Shift to next lowest bit + mask >>= 1; + } + + // Output the phy register number, msb first + mask = (unsigned char)0x10; + for (i = 0; i < 5; ++i) { + if (phyreg & mask) + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + else + bits[clk_idx++] = LAN91C111_MGMT__MDOE; + + // Shift to next lowest bit + mask >>= 1; + } + + // Tristate and turnaround (2 bit times) + bits[clk_idx++] = 0; + //bits[clk_idx++] = 0; + + // Input starts at this bit time + input_idx = clk_idx; + + // Will input 16 bits + for (i = 0; i < 16; ++i) + bits[clk_idx++] = 0; + + // Final clock bit + bits[clk_idx++] = 0; + + // Save the current bank +// oldBank = inw( ioaddr+BANK_SELECT ); + + // Select bank 3 +// SMC_SELECT_BANK( 3 ); + + // Get the current MII register value + mii_reg = get_reg(sc, LAN91C111_MGMT); + //diag_printf("\n\nMIIREG: %04X\n\n", mii_reg); + + // Turn off all MII Interface bits + mii_reg &= ~(LAN91C111_MGMT__MDOE|LAN91C111_MGMT__MCLK|LAN91C111_MGMT__MDI|LAN91C111_MGMT__MDO); + + // Clock all 64 cycles + for (i = 0; i < 64; ++i) { + // Clock Low - output data + put_reg(sc, LAN91C111_MGMT, mii_reg | bits[i]); + CYGACC_CALL_IF_DELAY_US((cyg_int32)50); + + // Clock Hi - input data + put_reg(sc, LAN91C111_MGMT, mii_reg | bits[i] | LAN91C111_MGMT__MCLK); + CYGACC_CALL_IF_DELAY_US((cyg_int32)50); + bits[i] |= get_reg(sc, LAN91C111_MGMT) & LAN91C111_MGMT__MDI; + } + + // Return to idle state + // Set clock to low, data to low, and output tristated + put_reg(sc, LAN91C111_MGMT, mii_reg); + CYGACC_CALL_IF_DELAY_US((cyg_int32)50); + + // Restore original bank select + //SMC_SELECT_BANK( oldBank ); + + // Recover input data + phydata = 0; + for (i = 0; i < 16; ++i) { + phydata <<= 1; + + if (bits[input_idx++] & LAN91C111_MGMT__MDI) + phydata |= 0x0001; + } + return phydata; +} + +/*------------------------------------------------------------ + . Finds and reports the PHY address + .-------------------------------------------------------------*/ +static int smc_detect_phy(struct eth_drv_sc *sc) +{ + struct lan91c111_priv_data *cpd = (struct lan91c111_priv_data *)sc->driver_private; + unsigned short phy_id1; + unsigned short phy_id2; + int phyaddr; + int found = 0; + + // Scan all 32 PHY addresses if necessary + for (phyaddr = 0; phyaddr < 32; ++phyaddr) { + // Read the PHY identifiers + phy_id1 = smc_read_phy_register(sc, phyaddr, PHY_ID1_REG); + phy_id2 = smc_read_phy_register(sc, phyaddr, PHY_ID2_REG); + +#if DEBUG_SMSC + diag_printf("Phy_address %02X: phy_id1=%04x, phy_id2=%04x\n", + phyaddr, phy_id1, phy_id2); +#endif + // Make sure it is a valid identifier + if ((phy_id2 > 0x0000) && (phy_id2 < 0xffff) && + (phy_id1 > 0x0000) && (phy_id1 < 0xffff)) { + if ((phy_id1 != 0x8000) && (phy_id2 != 0x8000)) { + // Save the PHY's address + cpd->phyaddr = phyaddr; + found = 1; + break; + } + } + } + + if (!found) { + diag_printf("No PHY found\n"); + return 0; + } + + // Set the PHY type + if ((phy_id1 == 0x0016) && ((phy_id2 & 0xFFF0) == 0xF840)) { + cpd->phytype = PHY_LAN83C183; +#if DEBUG_SMSC + diag_printf("PHY=LAN83C183 (LAN91C111 Internal)\n"); +#endif + } + + if ((phy_id1 == 0x0282) && ((phy_id2 & 0xFFF0) == 0x1C50)) { + cpd->phytype = PHY_LAN83C180; +#if DEBUG_SMSC + diag_printf("PHY=LAN83C180\n"); +#endif + } + return 1; +} + +/*------------------------------------------------------------ + . Writes a register to the MII Management serial interface + .-------------------------------------------------------------*/ +static void +smc_write_phy_register(struct eth_drv_sc *sc, unsigned char phyaddr, unsigned char phyreg, unsigned short phydata) +{ + //int oldBank; + int i; + unsigned short mask; + unsigned short mii_reg; + unsigned char bits[65]; + int clk_idx = 0; + + // 32 consecutive ones on MDO to establish sync + for (i = 0; i < 32; ++i) + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + + // Start code <01> + bits[clk_idx++] = LAN91C111_MGMT__MDOE; + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + + // Write command <01> + bits[clk_idx++] = LAN91C111_MGMT__MDOE; + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + + // Output the PHY address, msb first + mask = (unsigned short)0x10; + for (i = 0; i < 5; ++i) { + if (phyaddr & mask) + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + else + bits[clk_idx++] = LAN91C111_MGMT__MDOE; + + // Shift to next lowest bit + mask >>= 1; + } + + // Output the phy register number, msb first + mask = (unsigned short)0x10; + for (i = 0; i < 5; ++i) { + if (phyreg & mask) + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + else + bits[clk_idx++] = LAN91C111_MGMT__MDOE; + + // Shift to next lowest bit + mask >>= 1; + } + + // Tristate and turnaround (2 bit times) + bits[clk_idx++] = 0; + bits[clk_idx++] = 0; + + // Write out 16 bits of data, msb first + mask = 0x8000; + for (i = 0; i < 16; ++i) { + if (phydata & mask) + bits[clk_idx++] = LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MDO; + else + bits[clk_idx++] = LAN91C111_MGMT__MDOE; + + // Shift to next lowest bit + mask >>= 1; + } + + // Final clock bit (tristate) + bits[clk_idx++] = 0; + + // Save the current bank +// oldBank = inw( ioaddr+BANK_SELECT ); + + // Select bank 3 +// SMC_SELECT_BANK( 3 ); + + // Get the current MII register value + mii_reg = get_reg(sc, LAN91C111_MGMT); + + // Turn off all MII Interface bits + mii_reg &= ~(LAN91C111_MGMT__MDOE | LAN91C111_MGMT__MCLK | LAN91C111_MGMT__MDI | LAN91C111_MGMT__MDO); + + // Clock all cycles + for (i = 0; i < sizeof bits; ++i) { + // Clock Low - output data + put_reg(sc, LAN91C111_MGMT, mii_reg | bits[i]); + CYGACC_CALL_IF_DELAY_US((cyg_int32)50); + + // Clock Hi - input data + put_reg(sc, LAN91C111_MGMT, mii_reg | bits[i] | LAN91C111_MGMT__MCLK ); + CYGACC_CALL_IF_DELAY_US((cyg_int32)50); + bits[i] |= get_reg(sc, LAN91C111_MGMT) & LAN91C111_MGMT__MDI; + } + + // Return to idle state + // Set clock to low, data to low, and output tristated + put_reg(sc, LAN91C111_MGMT, mii_reg); + CYGACC_CALL_IF_DELAY_US((cyg_int32)50); + + // Restore original bank select + //SMC_SELECT_BANK(oldBank); +} + +static bool +smsc_lan91c111_init(struct cyg_netdevtab_entry *tab) +{ + struct eth_drv_sc *sc = (struct eth_drv_sc *)tab->device_instance; + struct lan91c111_priv_data *cpd = (struct lan91c111_priv_data *)sc->driver_private; + unsigned short val; + int i, time_out; + + DEBUG_FUNCTION(); + + cpd->txbusy = cpd->within_send = 0; + +#ifdef CYGNUM_DEVS_ETH_SMSC_LAN91C111_SHIFT_ADDR + cpd->addrsh = CYGNUM_DEVS_ETH_SMSC_LAN91C111_SHIFT_ADDR; +#else + cpd->addrsh = 0; +#endif + // Initialize environment, setup interrupt handler + cyg_drv_interrupt_create(cpd->interrupt, + 99, // Priority - what goes here? + (cyg_addrword_t)sc, // Data item passed to interrupt handler + (cyg_ISR_t *)lan91c111_isr, + (cyg_DSR_t *)eth_drv_dsr, // The logical driver DSR + &lan91c111_interrupt_handle, + &lan91c111_interrupt); + cyg_drv_interrupt_attach(lan91c111_interrupt_handle); + cyg_drv_interrupt_acknowledge(cpd->interrupt); + cyg_drv_interrupt_unmask(cpd->interrupt); + + // probe chip by reading the signature in BS register + val = get_banksel(sc); +#if DEBUG_SMSC + diag_printf("LAN91C111 base address is %08X\n", cpd->base); + diag_printf("%04X\n", LAN91C111_BS); + diag_printf("LAN91C111 - supposed BankReg at address %x = %04x\n", + cpd->base + LAN91C111_BS, val ); +#endif + if (0x3300 != (0xff00 & val)) { + diag_printf("no LAN91C111 chip found ...\n"); + return false; + } + CYG_ASSERT(0x3300 == (0xff00 & val), "No 91C111 signature"); + + val = get_reg(sc, LAN91C111_REVISION); +#if DEBUG_SMSC & 9 + diag_printf("LAN91C111 - type: %01x, rev: %01x\n", + (val >> 4) & 0xf, val & 0xf); +#endif + // The controller may provide a function used to set up the ESA + if (cpd->config_enaddr) { + if (!cpd->config_enaddr(cpd)) { + diag_printf("\nLAN91C111 - failed to get valid ESA!\n"); + return false; + } + } + // Reset chip + put_reg(sc, LAN91C111_RCR, LAN91C111_RCR_SOFT_RST); + put_reg(sc, LAN91C111_RCR, 0); + + val = get_reg(sc, LAN91C111_EPH_STATUS); +#if DEBUG_SMSC & 9 + diag_printf("LAN91C111 - status: %04x\n", val); +#endif +#if 0 < CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA + // Use statically configured ESA from the private data +#if DEBUG_SMSC & 9 + diag_printf("LAN91C111 - static ESA: %02x:%02x:%02x:%02x:%02x:%02x\n", + cpd->enaddr[0], + cpd->enaddr[1], + cpd->enaddr[2], + cpd->enaddr[3], + cpd->enaddr[4], + cpd->enaddr[5] ); +#endif // DEBUG_SMSC + // Set up hardware address + for (i = 0; i < sizeof(cpd->enaddr); i += 2) + put_reg(sc, LAN91C111_IA01+i/2, + cpd->enaddr[i] | (cpd->enaddr[i+1] << 8)); +#else // not CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA + // Use the address from the serial EEPROM + + // Read out hardware address + for (i = 0; i < sizeof(cpd->enaddr); i += 2) { + unsigned short z = get_reg(sc, LAN91C111_IA01+i/2 ); + cpd->enaddr[i] = (unsigned char)(0xff & z); + cpd->enaddr[i+1] = (unsigned char)(0xff & (z >> 8)); + } +#if DEBUG_SMSC & 9 + diag_printf("LAN91C111 - eeprom ESA: %02x:%02x:%02x:%02x:%02x:%02x\n", + cpd->enaddr[0], + cpd->enaddr[1], + cpd->enaddr[2], + cpd->enaddr[3], + cpd->enaddr[4], + cpd->enaddr[5] ); +#endif // DEBUG_SMSC +#endif // !CYGINT_DEVS_ETH_SMSC_LAN91C111_STATIC_ESA + smc_reset(sc); + smc_enable(sc); + // diag_printf("select external PHY .......\n"); + // put_reg(sc, LAN91C111_CONFIG, get_reg(sc, LAN91C111_CONFIG) | LAN91C111_CONFIG_EXT_PHY); +#if DEBUG_SMSC + diag_printf("revision_reg: %04X\n", get_reg(sc, LAN91C111_REVISION)); + + diag_printf("read receive_control_reg: %04X\n", get_reg(sc, LAN91C111_RCR)); + + diag_printf("read config_reg: %04X\n", get_reg(sc, LAN91C111_CONFIG)); + diag_printf("searching for phy ..... \n"); +#endif + smc_detect_phy(sc); + //CYGACC_CALL_IF_DELAY_US((cyg_int32)1000000); + smc_write_phy_register(sc, 0, 0, 0x3000); + + // Init PHY + put_reg(sc, LAN91C111_RPCR, LAN91C111_RPCR_ANEG | 0x80); // do auto-negotiation + //put_reg(sc, LAN91C111_RPCR, 0); // do 10 MBit +#if 0 + diag_printf("phy_register0 is: %04X\n", smc_read_phy_register(sc, 0, 0)); + diag_printf("phy_register1 is: %04X\n", smc_read_phy_register(sc, 0, 1)); + diag_printf("phy_register2 is: %04X\n", smc_read_phy_register(sc, 0, 2)); + diag_printf("phy_register3 is: %04X\n", smc_read_phy_register(sc, 0, 3)); + diag_printf("phy_register4 is: %04X\n", smc_read_phy_register(sc, 0, 4)); + diag_printf("phy_register5 is: %04X\n", smc_read_phy_register(sc, 0, 5)); +#endif + time_out = 0; + val = smc_read_phy_register(sc, 0, 1); + while (!(smc_read_phy_register(sc, 0, 1) & PHY_STAT_LINK)) { + time_out++; + if (time_out == 50) { /* 5 seconds */ + diag_printf("\n\nLAN91C111: cannot get valid link, check cabels, hubs ... \n\n"); + return false; + } + CYGACC_CALL_IF_DELAY_US((cyg_int32)100000); /* wait 0,1 seconds */ + } + // Initialize upper level driver + sc->funs->eth_drv->init(sc, cpd->enaddr); + return true; +} + +static void +lan91c111_stop(struct eth_drv_sc *sc) +{ + struct lan91c111_priv_data *cpd = (struct lan91c111_priv_data *)sc->driver_private; + DEBUG_FUNCTION(); + + CYG_ASSERT(cpd->within_send < 10, "stop: Excess send recursions"); + cpd->within_send++; + // Complete any outstanding activity: + if (cpd->txbusy) { + cpd->txbusy = 0; +#if DEBUG_SMSC & 9 + diag_printf("LAN91C111 - Stopping, cleaning up pending TX\n"); +#endif + sc->funs->eth_drv->tx_done(sc, cpd->txkey, 0); + } + // Reset chip + put_reg(sc, LAN91C111_RCR, LAN91C111_RCR_SOFT_RST); + put_reg(sc, LAN91C111_RCR, 0); + cpd->txbusy = cpd->within_send = 0; +} + +// +// This function is called to "start up" the interface. It may be called +// multiple times, even when the hardware is already running. It will be +// called whenever something "hardware oriented" changes and should leave +// the hardware ready to send/receive packets. +// +static void +lan91c111_start(struct eth_drv_sc *sc, unsigned char *enaddr, int flags) +{ +#ifdef CYGPKG_NET + struct ifnet *ifp = &sc->sc_arpcom.ac_if; +#endif + DEBUG_FUNCTION(); + put_reg(sc, LAN91C111_INTERRUPT, 0); // disable interrupts + put_reg(sc, LAN91C111_INTERRUPT, // ack old interrupts + LAN91C111_INTERRUPT_TX_INT | LAN91C111_INTERRUPT_TX_EMPTY_INT | + LAN91C111_INTERRUPT_RX_OVRN_INT | LAN91C111_INTERRUPT_ERCV_INT); + put_reg(sc, LAN91C111_RCR, +#ifdef RCR_HAS_ABORT_ENB // 91C96 does not - page 46. + LAN91C111_RCR_ABORT_ENB | +#endif + LAN91C111_RCR_STRIP_CRC | + LAN91C111_RCR_RXEN); + put_reg(sc, LAN91C111_TCR, LAN91C111_TCR_TXENA | LAN91C111_TCR_PAD_EN); + put_reg(sc, LAN91C111_CONTROL, 0); + put_reg(sc, LAN91C111_INTERRUPT, // enable interrupts + LAN91C111_INTERRUPT_RCV_INT_M); +#ifdef CYGPKG_NET + if ((0 +#ifdef ETH_DRV_FLAGS_PROMISC_MODE + != (flags & ETH_DRV_FLAGS_PROMISC_MODE) +#endif + ) || (ifp->if_flags & IFF_PROMISC) + ) { + // Then we select promiscuous mode. + unsigned short rcr; + rcr = get_reg(sc, LAN91C111_RCR ); + rcr |= LAN91C111_RCR_PRMS; + put_reg(sc, LAN91C111_RCR, rcr ); + } +#endif +} + +// +// This routine is called to perform special "control" operations +// +static int +lan91c111_control(struct eth_drv_sc *sc, unsigned long key, + void *data, int data_length) +{ + unsigned char *esa = (unsigned char *)data; + int i; + unsigned short reg; + struct lan91c111_priv_data *cpd = + (struct lan91c111_priv_data *)sc->driver_private; + + DEBUG_FUNCTION(); + + switch (key) { + case ETH_DRV_SET_MAC_ADDRESS: +#if 9 & DEBUG_SMSC + diag_printf("LAN91C111 - set ESA: %02x:%02x:%02x:%02x:%02x:%02x\n", + esa[0], + esa[1], + esa[2], + esa[3], + esa[4], + esa[5] ); +#ifndef CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM + diag_printf("*** PERMANENT EEPROM WRITE NOT ENABLED ***\n"); +#endif +#endif // DEBUG_SMSC + +#ifdef CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM + // Only now can we command the chip to perform EEPROM writes: + + // select arbitrary writing to the EEPROM + reg = get_reg(sc, LAN91C111_CONTROL); + reg |= LAN91C111_CONTROL_EEPROM_SELECT; + put_reg(sc, LAN91C111_CONTROL, reg ); + + for (i = 0; i < sizeof(cpd->enaddr); i += 2) { + int j; + // Set the address register + put_reg(sc, LAN91C111_POINTER, LAN91C111_ESA_EEPROM_OFFSET + i/2); + // Poke the data + put_reg(sc, LAN91C111_GENERAL, esa[i] | (esa[i+1] << 8)); + // Command the store + reg = get_reg(sc, LAN91C111_CONTROL); + reg |= LAN91C111_CONTROL_STORE; + put_reg(sc, LAN91C111_CONTROL, reg ); + // and poll for completion + for ( j = 1024 * 1024; 0 < j ; j-- ) { + reg = get_reg(sc, LAN91C111_CONTROL); + if ( 0 == (reg & LAN91C111_CONTROL_EEPROM_BUSY) ) + break; + } + CYG_ASSERT( 0 < j, "EEPROM write timout!" ); + } + + reg = get_reg(sc, LAN91C111_CONTROL); + CYG_ASSERT( 0 == (reg & LAN91C111_CONTROL_EEPROM_BUSY), + "EEPROM still busy!" ); + // Clear the EEPROM selection bit + reg &=~LAN91C111_CONTROL_EEPROM_SELECT; + put_reg(sc, LAN91C111_CONTROL, reg ); + // and check it "took" + reg = get_reg(sc, LAN91C111_CONTROL); + CYG_ASSERT(0 == (reg & LAN91C111_CONTROL_EEPROM_SELECT), + "EEPROM still selected!"); + // and command a complete reload + reg |= LAN91C111_CONTROL_RELOAD; + put_reg(sc, LAN91C111_CONTROL, reg); + for (i = 1024 * 1024; 0 < i ; i--) { + reg = get_reg(sc, LAN91C111_CONTROL); + if (0 == (reg & LAN91C111_CONTROL_EEPROM_BUSY)) + break; + } + CYG_ASSERT( 0 < i, "EEPROM reload timout!" ); + // Now extract the MAC address that is in the chip, and tell the + // system about it. + for (i = 0; i < sizeof(cpd->enaddr); i += 2) { + unsigned short z = get_reg(sc, LAN91C111_IA01+i/2 ); + cpd->enaddr[i] = (unsigned char)(0xff & z); + cpd->enaddr[i+1] = (unsigned char)(0xff & (z >> 8)); + } +#if DEBUG_SMSC & 9 + diag_printf("LAN91C111 - eeprom new ESA: %02x:%02x:%02x:%02x:%02x:%02x\n", + cpd->enaddr[0], + cpd->enaddr[1], + cpd->enaddr[2], + cpd->enaddr[3], + cpd->enaddr[4], + cpd->enaddr[5] ); +#endif // DEBUG_SMSC + for (i = 0; i < sizeof(cpd->enaddr); i++ ) { + CYG_ASSERT( esa[i] == cpd->enaddr[i], "ESA not written correctly" ); + if ( esa[i] != cpd->enaddr[i] ) + return 1; // the operation failed. + } +#else // not CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM + // Whatever, we can write the MAC address into the interface info, + // and the chip registers no problem. + for ( i = 0; i < sizeof(cpd->enaddr); i++ ) + cpd->enaddr[i] = esa[i]; + for (i = 0; i < sizeof(cpd->enaddr); i += 2) { + reg = cpd->enaddr[i] | (cpd->enaddr[i+1] << 8); + put_reg(sc, LAN91C111_IA01+i/2, reg ); + } +#endif // !CYGSEM_DEVS_ETH_SMSC_LAN91C111_WRITE_EEPROM + return 0; + +#ifdef ETH_DRV_GET_MAC_ADDRESS + case ETH_DRV_GET_MAC_ADDRESS: + // Extract the MAC address that is in the chip, and tell the + // system about it. + for (i = 0; i < sizeof(cpd->enaddr); i += 2) { + unsigned short z = get_reg(sc, LAN91C111_IA01+i/2 ); + esa[i] = (unsigned char)(0xff & z); + esa[i+1] = (unsigned char)(0xff & (z >> 8)); + } + return 0; +#endif + +#ifdef ETH_DRV_GET_IF_STATS_UD + case ETH_DRV_GET_IF_STATS_UD: // UD == UPDATE +#endif + // drop through +#ifdef ETH_DRV_GET_IF_STATS + case ETH_DRV_GET_IF_STATS: +#endif +#if defined(ETH_DRV_GET_IF_STATS) || defined (ETH_DRV_GET_IF_STATS_UD) + { + struct ether_drv_stats *p = (struct ether_drv_stats *)data; + // Chipset entry is no longer supported; RFC1573. + for (i = 0; i < SNMP_CHIPSET_LEN; i++) + p->snmp_chipset[i] = 0; + + // This perhaps should be a config opt, so you can make up your own + // description, or supply it from the instantiation. + strcpy( p->description, "SMSC LAN91C111" ); + // CYG_ASSERT( 48 > strlen(p->description), "Description too long" ); + + reg = smc_read_phy_register(sc, 0, 1); + + if ((reg & PHY_STAT_LINK) == 0) { + p->operational = 2; // LINK DOWN + p->duplex = 1; // UNKNOWN + p->speed = 0; + } else { + p->operational = 3; // LINK UP + p->duplex = 2; // 2 = SIMPLEX, 3 = DUPLEX + p->speed = 10 * 1000000;// it's only a 10Mbit device + } +#ifdef KEEP_STATISTICS + { + struct smsc_lan91c111_stats *ps = &cpd->stats; + + // Admit to it... + p->supports_dot3 = true; + + p->tx_good = ps->tx_good ; + p->tx_max_collisions = ps->tx_max_collisions ; + p->tx_late_collisions = ps->tx_late_collisions ; + p->tx_underrun = ps->tx_underrun ; + p->tx_carrier_loss = ps->tx_carrier_loss ; + p->tx_deferred = ps->tx_deferred ; + p->tx_sqetesterrors = ps->tx_sqetesterrors ; + p->tx_single_collisions = ps->tx_single_collisions; + p->tx_mult_collisions = ps->tx_mult_collisions ; + p->tx_total_collisions = ps->tx_total_collisions ; + p->rx_good = ps->rx_good ; + p->rx_crc_errors = ps->rx_crc_errors ; + p->rx_align_errors = ps->rx_align_errors ; + p->rx_resource_errors = ps->rx_resource_errors ; + p->rx_overrun_errors = ps->rx_overrun_errors ; + p->rx_collisions = ps->rx_collisions ; + p->rx_short_frames = ps->rx_short_frames ; + p->rx_too_long_frames = ps->rx_too_long_frames ; + p->rx_symbol_errors = ps->rx_symbol_errors ; + + p->interrupts = ps->interrupts ; + p->rx_count = ps->rx_count ; + p->rx_deliver = ps->rx_deliver ; + p->rx_resource = ps->rx_resource ; + p->rx_restart = ps->rx_restart ; + p->tx_count = ps->tx_count ; + p->tx_complete = ps->tx_complete ; + p->tx_dropped = ps->tx_dropped ; + } +#endif // KEEP_STATISTICS + p->tx_queue_len = 1; + return 0; // OK + } +#endif + } + return 1; +} + +// +// This routine is called to see if it is possible to send another packet. +// It will return non-zero if a transmit is possible, zero otherwise. +// +static int lan91c111_can_send(struct eth_drv_sc *sc) +{ + struct lan91c111_priv_data *cpd = (struct lan91c111_priv_data *)sc->driver_private; +#ifdef CHECK_LINK_STAT + unsigned short stat; +#endif + int tcr; + + DEBUG_FUNCTION(); +#ifdef CHECK_LINK_STAT + // You don't want to do this normally on every packet + stat = smc_read_phy_register(sc, 0, 1); + if ((stat & PHY_STAT_LINK) == 0) { + return false; // Link not connected + } +#endif + CYG_ASSERT( cpd->within_send < 10, "can_send: Excess send recursions" ); + cpd->within_send++; + + tcr = get_reg(sc, LAN91C111_TCR); + if (0 == (LAN91C111_TCR_TXENA & tcr)) { +#if DEBUG_SMSC & 1 + diag_printf("%s: ENGINE RESTART: tcr %x\n", __FUNCTION__, tcr ); +#endif + // Complete any outstanding activity: + if (cpd->txbusy) { + cpd->txbusy = 0; +#if DEBUG_SMSC & 9 + diag_printf("LAN91C111 - can_send, cleaning up pending TX\n" ); +#endif + sc->funs->eth_drv->tx_done(sc, cpd->txkey, 0); + } + + tcr |= LAN91C111_TCR_TXENA; + put_reg(sc, LAN91C111_TCR, tcr); + } + + // This helps unstick deadly embraces. + lan91c111_poll(sc); // Deal with any outstanding rx state + cpd->within_send--; + + return (cpd->txbusy == 0) && (0 == cpd->within_send); +} + +// +// This routine is called to send data to the hardware. +static void +lan91c111_send(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len, + int total_len, unsigned long key) +{ + struct lan91c111_priv_data *cpd = (struct lan91c111_priv_data *)sc->driver_private; + int i, len, plen, tcr; + + unsigned short *sdata = NULL; + unsigned short ints, control; + cyg_uint16 packet, status; + + DEBUG_FUNCTION(); + + INCR_STAT(tx_count); + + // Worry about the TX engine stopping. + tcr = get_reg(sc, LAN91C111_TCR); + if (0 == (LAN91C111_TCR_TXENA & tcr)) { +#if DEBUG_SMSC & 1 + diag_printf("%s: ENGINE RESTART: tcr %x\n", __FUNCTION__, tcr ); +#endif + tcr |= LAN91C111_TCR_TXENA; + put_reg(sc, LAN91C111_TCR, tcr); + } + + // This helps unstick deadly embraces. + CYG_ASSERT(cpd->within_send < 10, "send: Excess send recursions" ); + cpd->within_send++; + lan91c111_poll(sc); // Deal with any outstanding rx state + cpd->within_send--; + + cpd->txbusy = 1; + cpd->txkey = key; + + // Find packet length + plen = 0; + for (i = 0; i < sg_len; i++) { + plen += sg_list[i].len; + } + CYG_ASSERT(plen == total_len, "sg data length mismatch"); + + // Alloc new TX packet + do { + //put_reg(sc, LAN91C111_MMU_COMMAND, LAN91C111_MMU_alloc_for_tx | ((plen >> 8) & 0x07)); + put_reg(sc, LAN91C111_MMU_COMMAND, LAN91C111_MMU_alloc_for_tx); + + i = 1024 * 1024; + do { + status = get_reg(sc, LAN91C111_INTERRUPT); + } while (0 == (status & LAN91C111_INTERRUPT_ALLOC_INT) && (--i > 0) ); + if (i) { + packet = get_reg(sc, LAN91C111_PNR); + } else { + packet = 0xffff; + } +#if DEBUG_SMSC & 1 + diag_printf("%s: allocated packet %04x\n", __FUNCTION__, packet); +#endif + packet = packet >> 8; + if (packet & 0x80) { + // Hm.. Isn't this a dead end? +#if 0 //DEBUG_SMSC & 1 + diag_printf("%s: Allocation failed! Retrying...\n", __FUNCTION__ ); +#endif + // Not if we can make progress with what's filling memory. + lan91c111_poll(sc); // Deal with any outstanding state + continue; + } + } while (0); + +#if DEBUG_SMSC & 4 + diag_printf("#####Tx packet allocated %x (previous %x)\n", + packet, cpd->txpacket); +#endif + cpd->txpacket = packet; + + put_reg(sc, LAN91C111_PNR, packet); + // Note: Check FIFO state here before continuing? + put_reg(sc, LAN91C111_POINTER, LAN91C111_POINTER_AUTO_INCR | 0x0000); + // Pointer is now set, and the proper bank is selected for + // data writes. + + // Prepare header: + put_data(sc, 0); // reserve space for status word + // packet length (includes status, byte-count and control shorts) + put_data(sc, 0x7FE & (plen + 6) ); // Always even, always < 15xx(dec) + +#if DEBUG_SMSC & 16 + diag_printf("writing packet data into Tx-FIFO ...\n"); + diag_printf("interrupt status is: %04X\n", get_reg(sc, LAN91C111_INTERRUPT)); + diag_printf("%02X %02X %02X %02X ", 0, 0, (0x7FE & (plen + 6)) & 0xff, (0x7FE & (plen + 6))>>8); + u=4; +#endif + // Put data into buffer + for (i = 0; i < sg_len; i++) { + sdata = (unsigned short *)sg_list[i].buf; + len = sg_list[i].len; + + CYG_ASSERT(0 == (len & 1) || (i == (sg_len-1)), "odd length"); + CYG_ASSERT( sdata, "No sg data pointer here" ); + while (len >= sizeof(*sdata)) { + put_data(sc, *sdata++); +#if DEBUG_SMSC & 16 // dump packet written into FIFO + diag_printf("%02X ", *(sdata-1)&0xff); + diag_printf("%02X ", (*(sdata-1)>>8)&0xff); + u++; + u++; + if (u==16) { + u=0; + diag_printf("\n"); + } +#endif + len -= sizeof(*sdata); + } + } + + CYG_ASSERT( sdata, "No sg data pointer outside" ); + + // Lay down the control short unconditionally at the end. + // (or it might use random memory contents) + control = 0; + + if (1 & plen) { + // Need to set ODD flag and insert the data + unsigned char onebyte = *(unsigned char*)sdata; + control = onebyte; + control |= LAN91C111_CONTROLBYTE_ODD; + } + control |= LAN91C111_CONTROLBYTE_CRC; // Just in case... + put_data(sc, control); +#if DEBUG_SMSC & 16 + diag_printf("%02X %02X\n", control & 0xff, (control>>8)&0xff); +#endif + // Enqueue the packet + // put_reg(sc, LAN91C111_MMU_COMMAND, LAN91C111_MMU_enq_packet); + + // Ack TX empty int and unmask it. + ints = get_reg(sc, LAN91C111_INTERRUPT); + + ints |= LAN91C111_INTERRUPT_TX_SET_ACK; // Do we really need the TX ack here ???? + put_reg(sc, LAN91C111_INTERRUPT, ints); + + ints |= LAN91C111_INTERRUPT_TX_SET_M; + put_reg(sc, LAN91C111_INTERRUPT, ints); + + // Enqueue the packet + put_reg(sc, LAN91C111_MMU_COMMAND, LAN91C111_MMU_enq_packet); + +#if DEBUG_SMSC & 1 + ints = get_reg(sc, LAN91C111_INTERRUPT); + diag_printf("%s:END: ints at TX: %04x\n", __FUNCTION__, ints); +#endif +} + +static void +lan91c111_TxEvent(struct eth_drv_sc *sc, int stat) +{ + unsigned short packet, ints, tcr; + struct lan91c111_priv_data *cpd = (struct lan91c111_priv_data *)sc->driver_private; + int success = 1; + + DEBUG_FUNCTION(); + + INCR_STAT(tx_complete); + + // Ack and mask TX interrupt set + ints = get_reg(sc, LAN91C111_INTERRUPT); + + ints &=~LAN91C111_INTERRUPT_TX_FIFO_ACK; // Do NOT ACK this one here. + ints |= LAN91C111_INTERRUPT_TX_SET_ACK; // Also ACKs other sources! + ints &= ~LAN91C111_INTERRUPT_TX_SET_M; + put_reg(sc, LAN91C111_INTERRUPT, ints); + + // Get number of completed packet and read the status word + packet = get_reg(sc, LAN91C111_FIFO_PORTS); +#if DEBUG_SMSC & 1 + diag_printf("%s:START: fifo %04x ints %04x\n", __FUNCTION__, packet, ints); +#endif + +#ifdef KEEP_STATISTICS + { + unsigned short reg; + + reg = get_reg( sc, LAN91C111_EPH_STATUS ); + + // Covering each bit in turn... + if ( reg & LAN91C111_STATUS_TX_UNRN ) INCR_STAT( tx_underrun ); + //if ( reg & LAN91C111_STATUS_LINK_OK ) INCR_STAT( ); + //if ( reg & LAN91C111_STATUS_CTR_ROL ) INCR_STAT( ); + //if ( reg & LAN91C111_STATUS_EXC_DEF ) INCR_STAT( ); + if ( reg & LAN91C111_STATUS_LOST_CARR ) INCR_STAT( tx_carrier_loss ); + if ( reg & LAN91C111_STATUS_LATCOL ) INCR_STAT( tx_late_collisions ); + //if ( reg & LAN91C111_STATUS_WAKEUP ) INCR_STAT( ); + if ( reg & LAN91C111_STATUS_TX_DEFR ) INCR_STAT( tx_deferred ); + //if ( reg & LAN91C111_STATUS_LTX_BRD ) INCR_STAT( ); + if ( reg & LAN91C111_STATUS_SQET ) INCR_STAT( tx_sqetesterrors ); + if ( reg & LAN91C111_STATUS_16COL ) INCR_STAT( tx_max_collisions ); + //if ( reg & LAN91C111_STATUS_LTX_MULT) INCR_STAT( ); + if ( reg & LAN91C111_STATUS_MUL_COL ) INCR_STAT( tx_mult_collisions ); + if ( reg & LAN91C111_STATUS_SNGL_COL ) INCR_STAT( tx_single_collisions ); + if ( reg & LAN91C111_STATUS_TX_SUC ) INCR_STAT( tx_good ); + + cpd->stats.tx_total_collisions = + cpd->stats.tx_late_collisions + + cpd->stats.tx_max_collisions + + cpd->stats.tx_mult_collisions + + cpd->stats.tx_single_collisions; + + // We do not need to look in the Counter Register (LAN91C111_COUNTER) + // because it just mimics the info we already have above. + } +#endif // KEEP_STATISTICS + +#if DEBUG_SMSC & 16 + diag_printf("transmit status is: %04X\n", get_reg(sc, LAN91C111_EPH_STATUS)); +#endif + // We do not really care about Tx failure. Ethernet is not a reliable + // medium. But we do care about the TX engine stopping. + tcr = get_reg(sc, LAN91C111_TCR); + if (0 == (LAN91C111_TCR_TXENA & tcr)) { +#if DEBUG_SMSC & 1 + diag_printf("%s: ENGINE RESTART: tcr %x ints %04x\n", __FUNCTION__, tcr, ints); +#endif + tcr |= LAN91C111_TCR_TXENA; + put_reg(sc, LAN91C111_TCR, tcr); + success = 0; // And treat this as an error... + } + + packet &= 0xff; + + // Ack the TX int which is supposed to clear the packet from the TX + // completion queue. + ints = get_reg(sc, LAN91C111_INTERRUPT); + ints |= LAN91C111_INTERRUPT_TX_FIFO_ACK; + put_reg(sc, LAN91C111_INTERRUPT, ints); + + // It certainly appears that occasionally the tx fifo tells lies; we + // get the wrong packet number. Freeing the one we allocated seems to + // give correct operation. +#ifdef CYGPKG_INFRA_DEBUG + // Then we log, OOI, the number of times we get a bad packet number + // from the tx done fifo. + if (cpd->txpacket != packet ) + lan91c111_txfifo_bad++; + else + lan91c111_txfifo_good++; +#endif +#if DEBUG_SMSC & 4 + diag_printf("#####Tx packet freed %x (expected %x)\n", packet, cpd->txpacket ); +#endif + // and then free the packet + put_reg(sc, LAN91C111_PNR, cpd->txpacket); + put_reg(sc, LAN91C111_MMU_COMMAND, LAN91C111_MMU_rel_packet); + +#if DEBUG_SMSC & 1 + // Hm... The free doesn't seem to have the desired effect?!? + ints = get_reg(sc, LAN91C111_INTERRUPT); + packet = get_reg(sc, LAN91C111_FIFO_PORTS); + diag_printf("%s:END: fifo %04x ints %04x\n", __FUNCTION__, packet, ints); +#endif + if (cpd->txbusy) { + cpd->txbusy = 0; + sc->funs->eth_drv->tx_done(sc, cpd->txkey, success); + } +} + +// +// This function is called when a packet has been received. Its job is +// to prepare to unload the packet from the hardware. Once the length of +// the packet is known, the upper layer of the driver can be told. When +// the upper layer is ready to unload the packet, the internal function +// 'lan91c111_recv' will be called to actually fetch it from the hardware. +// +static void +lan91c111_RxEvent(struct eth_drv_sc *sc) +{ + struct lan91c111_priv_data *cpd = (struct lan91c111_priv_data *)sc->driver_private; + unsigned short stat, len, controlbyte; +#ifdef CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT + unsigned long result; +#endif + DEBUG_FUNCTION(); + + stat = get_reg(sc, LAN91C111_FIFO_PORTS); +#if DEBUG_SMSC & 1 + diag_printf("RxEvent - FIFOs: 0x%04x\n", stat); +#endif + if (0x8000 & stat) + // Then the Rx FIFO is empty + return; + + INCR_STAT(rx_count); + +#if DEBUG_SMSC & 4 + diag_printf("#####Rx packet allocated %x (previous %x)\n", + 0xff & (stat >> 8), cpd->rxpacket ); +#endif + // There is an Rx Packet ready + cpd->rxpacket = 0xff & (stat >> 8); + + // Read status and (word) length + put_reg(sc, LAN91C111_POINTER, (LAN91C111_POINTER_RCV | LAN91C111_POINTER_READ | + LAN91C111_POINTER_AUTO_INCR | 0x0000)); + +#ifdef CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT + result = get_data32(sc); + stat = (unsigned short)(result & 0xffff); + len = (unsigned short)(result >> 16); +#else + stat = get_data(sc); + len = get_data(sc); // minus header/footer words +#endif + len &= 0x7ff; + len = len - 6; // minus header/footer words +#ifdef CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT + // Read control byte at end of packet to get last bit of length + put_reg(sc, LAN91C111_POINTER, (LAN91C111_POINTER_RCV | LAN91C111_POINTER_READ | + LAN91C111_POINTER_AUTO_INCR | (len + 4))); + if (!(len % 4)) { + put_reg(sc, LAN91C111_POINTER, (LAN91C111_POINTER_RCV | LAN91C111_POINTER_READ | + LAN91C111_POINTER_AUTO_INCR | (len + 2))); + result = get_data32(sc); + controlbyte = (unsigned short)((result >> 16) & 0xffff); + } else { + put_reg(sc, LAN91C111_POINTER, (LAN91C111_POINTER_RCV | LAN91C111_POINTER_READ | + LAN91C111_POINTER_AUTO_INCR | (len + 4))); + result = get_data32(sc); + controlbyte = (unsigned short)((result) & 0xffff); + } +#else + // Read control byte at end of packet to get last bit of length + put_reg(sc, LAN91C111_POINTER, (LAN91C111_POINTER_RCV | LAN91C111_POINTER_READ | + LAN91C111_POINTER_AUTO_INCR | (len + 4))); + controlbyte = get_data(sc); +#endif +#ifdef KEEP_STATISTICS + if ( stat & LAN91C111_RX_STATUS_ALIGNERR ) INCR_STAT( rx_align_errors ); + //if ( stat & LAN91C111_RX_STATUS_BCAST ) INCR_STAT( ); + if ( stat & LAN91C111_RX_STATUS_BADCRC ) INCR_STAT( rx_crc_errors ); + if ( stat & LAN91C111_RX_STATUS_TOOLONG ) INCR_STAT( rx_too_long_frames ); + if ( stat & LAN91C111_RX_STATUS_TOOSHORT ) INCR_STAT( rx_short_frames ); + //if ( stat & LAN91C111_RX_STATUS_MCAST ) INCR_STAT( ); +#endif // KEEP_STATISTICS + if (controlbyte & LAN91C111_CONTROLBYTE_RX) { + INCR_STAT( rx_good ); + // Then it's OK + if (controlbyte & LAN91C111_CONTROLBYTE_ODD) + len++; +#if DEBUG_SMSC & 32 + diag_printf("RxEvent good rx - stat: 0x%04x, len: 0x%04x\n", stat, len); +#endif + // Check for bogusly short packets; can happen in promisc mode: + // Asserted against and checked by upper layer driver. +#ifdef CYGPKG_NET + if (len > sizeof(struct ether_header)) + // then it is acceptable; offer the data to the network stack +#endif + sc->funs->eth_drv->recv(sc, len); + return; + } + // Not OK for one reason or another... +#if DEBUG_SMSC & 32 + diag_printf("RxEvent - No RX bit: stat: 0x%04x, len: %d, control'byte' 0x%04x\n", + stat, len, controlbyte); +#endif +#if DEBUG_SMSC & 4 + stat = get_reg(sc, LAN91C111_FIFO_PORTS); + if ( 0x8000 & stat ) // Then the Rx FIFO is empty + diag_printf("#####Rx packet (bad controlbyte) NOT freed, stat is %x (expected %x)\n", + stat, cpd->rxpacket ); + else + diag_printf("#####Rx packet (bad controlbyte) freed %x (expected %x)\n", + 0xff & (stat >> 8), cpd->rxpacket ); +#endif + // Free packet + put_reg(sc, LAN91C111_MMU_COMMAND, LAN91C111_MMU_remrel_rx_frame); +} + +// +// This function is called as a result of the "eth_drv_recv()" call above. +// Its job is to actually fetch data for a packet from the hardware once +// memory buffers have been allocated for the packet. Note that the buffers +// may come in pieces, using a scatter-gather list. This allows for more +// efficient processing in the upper layers of the stack. +// +static void +lan91c111_recv(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len) +{ +#if (4 & DEBUG_SMSC) || defined(CYGPKG_INFRA_DEBUG) || defined(KEEP_STATISTICS) + struct lan91c111_priv_data *cpd = + (struct lan91c111_priv_data *)sc->driver_private; +#endif + int i, mlen=0, plen; + unsigned short *data = NULL, val; + unsigned char *cp, cval; + int u, wleft = 0; + unsigned long result = 0; + unsigned short stat; + int dump_buf = 0; + + DEBUG_FUNCTION(); +#if DEBUG_SMSC & 32 + diag_printf("\n\n\nreceiving package .... \n"); +#endif + INCR_STAT(rx_deliver); + + put_reg(sc, LAN91C111_POINTER, (LAN91C111_POINTER_RCV | LAN91C111_POINTER_READ | + LAN91C111_POINTER_AUTO_INCR | 0x0000)); +#ifdef CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT + result = get_data32(sc); + stat = (unsigned short)(result & 0xffff); + plen = (unsigned short)(result >> 16) -6; +#else + stat = get_data(sc); + plen = get_data(sc) -6; // minus header/footer words +#endif + if (!((stat & 0x4000) || (stat & 0x0001))) { + dump_buf=1; // don't want to see BroadCast and Multicast + } + u = 0; + + for (i = 0; i < sg_len; i++) { + data = (unsigned short *)sg_list[i].buf; + mlen = sg_list[i].len; + + CYG_ASSERT(0 == (mlen & 1) || (i == (sg_len-1)), "odd length"); +#if DEBUG_SMSC & 1 + diag_printf("%s : mlen %x, plen %x\n", __FUNCTION__, mlen, plen); +#endif +#if (DEBUG_SMSC & 128) + if (dump_buf) { + diag_printf("\n\n\ndumping receive buffer:\n"); + diag_printf("Status of packet is 0x%04X\n", stat); + diag_printf("Data length of packet is %d\n", plen); + } +#endif + wleft = 0; + if (data) { + while (mlen >= sizeof(*data)) { + if (!wleft) { +#ifdef CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT + result = get_data32(sc); +#else + result = get_data(sc) & 0xffff; + result |= (get_data(sc)<<16); +#endif + wleft = 2; + } + + if (wleft == 2) { + *data++ = (unsigned short)(result & 0xffff); + wleft--; + } else { + *data++ = (unsigned short)((result>>16) & 0xffff); + wleft--; + } + +#if (DEBUG_SMSC & 128) + if (dump_buf) { + diag_printf("%02X ", *(data-1)& 0xff); // low byte + diag_printf("%02X ", (*(data-1)& 0xff00)>>8); // high byte + + u++; + if (u==16) { + diag_printf("\n"); + u=0; + } + } + +#endif + + mlen -= sizeof(*data); + plen -= sizeof(*data); + } + } else { // must actively discard ie. read it from the chip anyway. + while (mlen >= sizeof(*data)) { + + if (!wleft) { +#ifdef CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT + result = get_data32(sc); +#else + result = get_data(sc); + result = get_data(sc); +#endif + wleft = 1; + } + + mlen -= sizeof(*data); + plen -= sizeof(*data); + } + } + } + if (wleft == 1) { + val = (unsigned short)((result>>16) & 0xffff); // Read control word unconditionally + } else { +#ifdef CYGSEM_DEVS_ETH_SMSC_LAN91C111_USE_32BIT + val = (unsigned short)(get_data32(sc) & 0xffff); +#else + val = get_data(sc); +#endif + } + + CYG_ASSERT(val & LAN91C111_CONTROLBYTE_RX, + "Controlbyte is not for Rx"); + CYG_ASSERT( (1 == mlen) == (0 != (val & LAN91C111_CONTROLBYTE_ODD)), + "Controlbyte does not match"); + if (data && (1 == mlen) && (val & LAN91C111_CONTROLBYTE_ODD)) { + cval = val & 0x00ff; // last byte contains data + cp = (unsigned char*)data; + *cp = cval; + +#if (DEBUG_SMSC & 128) + if (dump_buf) { + diag_printf("\nlast byte written to buffer: %02X \n",cval); + } +#endif + } + + val = get_reg(sc, LAN91C111_FIFO_PORTS); +#if DEBUG_SMSC & 4 + if (0x8000 & val) { // Then the Rx FIFO is empty + diag_printf("#####Rx packet NOT freed, stat is %x (expected %x)\n", + val, cpd->rxpacket); + } else { + diag_printf("#####Rx packet freed %x (expected %x)\n", + 0xff & (val >> 8), cpd->rxpacket); + } +#endif + CYG_ASSERT((0xff & (val >> 8)) == cpd->rxpacket, "Unexpected rx packet"); + + // Free packet + put_reg(sc, LAN91C111_MMU_COMMAND, LAN91C111_MMU_remrel_rx_frame); +} + +static void +lan91c111_poll(struct eth_drv_sc *sc) +{ + unsigned short event; + + DEBUG_FUNCTION(); + + while (1) { + // Get the (unmasked) requests + event = get_reg(sc, LAN91C111_INTERRUPT); + + //diag_printf("LAN91C111_INTERRUPT_REGISTER: %04X\n", event); + + event &= event >> 8; + //diag_printf("event: %04X\n", event); + + if (0 == event) { + break; + } else if (event & LAN91C111_INTERRUPT_ERCV_INT) { + // Early receive interrupt + } else if (event & LAN91C111_INTERRUPT_EPH_INT) { + // ethernet protocol handler failures + } else if (event & LAN91C111_INTERRUPT_RX_OVRN_INT) { + // receive overrun + } else if (event & LAN91C111_INTERRUPT_ALLOC_INT) { + // allocation interrupt + } else if (event & LAN91C111_INTERRUPT_TX_SET) { + lan91c111_TxEvent(sc, event); + } else if (event & LAN91C111_INTERRUPT_RCV_INT) { + lan91c111_RxEvent(sc); + } else { + diag_printf("%s: Unknown interrupt: 0x%04x\n", + __FUNCTION__, event); + } + } +} diff --git a/packages/devs/eth/smsc/lan91c111/v2_0/src/smsc_lan91c111.h b/packages/devs/eth/smsc/lan91c111/v2_0/src/smsc_lan91c111.h new file mode 100755 index 00000000..11d20b44 --- /dev/null +++ b/packages/devs/eth/smsc/lan91c111/v2_0/src/smsc_lan91c111.h @@ -0,0 +1,550 @@ +#ifndef CYGONCE_DEVS_ETH_SMSC_LAN91C111_LAN91C111_H +#define CYGONCE_DEVS_ETH_SMSC_LAN91C111_LAN91C111_H +//========================================================================== +// +// lan91c111.h +// +// SMCS LAN91C111 (LAN91C111 compatible) Ethernet chip +// +//========================================================================== +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//####BSDCOPYRIGHTBEGIN#### +// +// ------------------------------------------- +// +// Portions of this software may have been derived from OpenBSD or other sources, +// and are covered by the appropriate copyright disclaimers included herein. +// +// ------------------------------------------- +// +//####BSDCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov, usteinkohl +// Contributors: jskov, hmt, jco, usteinkohl +// Date: 2001-01-22 +// Purpose: Hardware description of LAN9000 series, LAN91C96/110. +// modified by usteinkohl for LAN91C111 chip +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + + + +// Set to perms of: +// 0 disables all debug output +// 1 for process debug output +// 2 for added data IO output: get_reg, put_reg +// 4 for packet allocation/free output +// 8 for only startup status, so we can tell we're installed OK + +// 128 dump Rx buffer +#define DEBUG_SMSC (0x00) + +#define PHY_LAN83C183 0x0016f840 +#define PHY_LAN83C180 0x02821c50 + +#define LAN91C111_TCR 0x00 +#define LAN91C111_EPH_STATUS 0x01 +#define LAN91C111_RCR 0x02 +#define LAN91C111_COUNTER 0x03 +#define LAN91C111_MIR 0x04 +#define LAN91C111_RPCR 0x05 // for 91C110 this was MCR +#define LAN91C111_RESERVED_0 0x06 +#define LAN91C111_BS 0x07 + + + +#define LAN91C111_CONFIG 0x08 +#define LAN91C111_BASE_REG 0x09 +#define LAN91C111_IA01 0x0a +#define LAN91C111_IA23 0x0b +#define LAN91C111_IA45 0x0c +#define LAN91C111_GENERAL 0x0d // 91C96 - was "RESERVED_1" for others +#define LAN91C111_CONTROL 0x0e +#define LAN91C111_BS2 0x0f + + + +#define LAN91C111_MMU_COMMAND 0x10 +#define LAN91C111_PNR 0x11 +#define LAN91C111_FIFO_PORTS 0x12 +#define LAN91C111_POINTER 0x13 +#define LAN91C111_DATA 0x15 +#define LAN91C111_DATA_HIGH 0x14 +#define LAN91C111_INTERRUPT 0x16 +#define LAN91C111_BS3 0x17 + + + +#define LAN91C111_MT01 0x18 +#define LAN91C111_MT23 0x19 +#define LAN91C111_MT45 0x1a +#define LAN91C111_MT67 0x1b +#define LAN91C111_MGMT 0x1c +#define LAN91C111_REVISION 0x1d +#define LAN91C111_ERCV 0x1e +#define LAN91C111_BS4 0x1f + +#define LAN91C111_RCR_SOFT_RST 0x8000 // soft reset +#define LAN91C111_RCR_FILT_CAR 0x4000 // filter carrier +#define LAN91C111_RCR_ABORT_ENB 0x2000 // abort on collision +#define LAN91C111_RCR_STRIP_CRC 0x0200 // strip CRC +#define LAN91C111_RCR_RXEN 0x0100 // enable RX +#define LAN91C111_RCR_ALMUL 0x0004 // receive all muticasts +#define LAN91C111_RCR_PRMS 0x0002 // promiscuous +#define LAN91C111_RCR_RX_ABORT 0x0001 // set when abort due to long frame + + + +#define LAN91C111_RPCR_SPEED 0x2000 // Speed select +#define LAN91C111_RPCR_DPLX 0x1000 // Speed select +#define LAN91C111_RPCR_ANEG 0x0800 // Speed select + + +#define LAN91C111_MGMT__MDOE 0x0008 +#define LAN91C111_MGMT__MCLK 0x0004 +#define LAN91C111_MGMT__MDI 0x0002 +#define LAN91C111_MGMT__MDO 0x0001 + + +#define LAN91C111_CONFIG_EXT_PHY 0x0200 +#define LAN91C111_CONFIG_POW_EN 0x8000 +#define LAN91C111_CONFIG_NO_WAIT 0x1000 + + + +#define LAN91C111_TCR_SWFDUP 0x8000 // Switched Full Duplex mode +//#define LAN91CXX_TCR_ETEN_TYPE 0x4000 // ETEN type (91C96) 0 <=> like a 91C94 +#define LAN91C111_TCR_EPH_LOOP 0x2000 // loopback mode +#define LAN91C111_TCR_STP_SQET 0x1000 // Stop transmission on SQET error +#define LAN91C111_TCR_FDUPLX 0x0800 // full duplex +#define LAN91C111_TCR_MON_CSN 0x0400 // monitor carrier during tx (91C96) +#define LAN91C111_TCR_NOCRC 0x0100 // does not append CRC to frames +#define LAN91C111_TCR_PAD_EN 0x0080 // pads frames with 00 to min length +#define LAN91C111_TCR_FORCOL 0x0004 // force collision +#define LAN91C111_TCR_LLOOP 0x0002 // local loopback (91C96) +#define LAN91C111_TCR_TXENA 0x0001 // enable + + + + +#define LAN91C111_POINTER_RCV 0x8000 +#define LAN91C111_POINTER_AUTO_INCR 0x4000 +#define LAN91C111_POINTER_READ 0x2000 +#define LAN91C111_POINTER_ETEN 0x1000 +#define LAN91C111_POINTER_NOT_EMPTY 0x0800 + + +#define LAN91C111_INTERRUPT_MD_INT_M 0x8000 // (91C111) +#define LAN91C111_INTERRUPT_ERCV_INT_M 0x4000 +#define LAN91C111_INTERRUPT_EPH_INT_M 0x2000 +#define LAN91C111_INTERRUPT_RX_OVRN_INT_M 0x1000 +#define LAN91C111_INTERRUPT_ALLOC_INT_M 0x0800 +#define LAN91C111_INTERRUPT_TX_EMPTY_INT_M 0x0400 +#define LAN91C111_INTERRUPT_TX_INT_M 0x0200 +#define LAN91C111_INTERRUPT_RCV_INT_M 0x0100 + + + +#define LAN91C111_INTERRUPT_MD_INT 0x0080 // (91C111) also ack +#define LAN91C111_INTERRUPT_ERCV_INT 0x0040 // also ack +#define LAN91C111_INTERRUPT_EPH_INT 0x0020 +#define LAN91C111_INTERRUPT_RX_OVRN_INT 0x0010 // also ack +#define LAN91C111_INTERRUPT_ALLOC_INT 0x0008 +#define LAN91C111_INTERRUPT_TX_EMPTY_INT 0x0004 // also ack +#define LAN91C111_INTERRUPT_TX_INT 0x0002 // also ack +#define LAN91C111_INTERRUPT_RCV_INT 0x0001 + + + + + +#if 0 // Whichever we choose, the behaviour is the same. +#define LAN91CXX_INTERRUPT_TX_SET 0x0002 // TX +#define LAN91CXX_INTERRUPT_TX_SET_ACK 0x0000 // -none- +#define LAN91CXX_INTERRUPT_TX_FIFO_ACK 0x0002 // TX alone +#define LAN91CXX_INTERRUPT_TX_SET_M 0x0200 // TX alone +#else +#define LAN91C111_INTERRUPT_TX_SET 0x0006 // TX_EMPTY + TX +#define LAN91C111_INTERRUPT_TX_SET_ACK 0x0004 // TX_EMPTY and not plain TX +#define LAN91C111_INTERRUPT_TX_FIFO_ACK 0x0002 // TX alone +#define LAN91C111_INTERRUPT_TX_SET_M 0x0600 // TX_EMPTY + TX +#endif + + + + + + +#define LAN91C111_CONTROL_RCV_BAD 0x4000 +#define LAN91C111_CONTROL_AUTO_RELEASE 0x0800 +#define LAN91C111_CONTROL_LE_ENABLE 0x0080 +#define LAN91C111_CONTROL_CR_ENABLE 0x0040 +#define LAN91C111_CONTROL_TE_ENABLE 0x0020 + +// These are for setting the MAC address in the 91C96 serial EEPROM +#define LAN91C111_CONTROL_EEPROM_SELECT 0x0004 +#define LAN91C111_CONTROL_RELOAD 0x0002 +#define LAN91C111_CONTROL_STORE 0x0001 + + +//#define LAN91CXX_CONTROL_EEPROM_BUSY 0x0003 +//#define LAN91CXX_ESA_EEPROM_OFFSET 0x0020 + + + +#define LAN91C111_STATUS_TX_UNRN 0x8000 +#define LAN91C111_STATUS_LINK_OK 0x4000 // do not use this to check Link status, its just a general purpose input pin +#define LAN91C111_STATUS_CTR_ROL 0x1000 +#define LAN91C111_STATUS_EXC_DEF 0x0800 +#define LAN91C111_STATUS_LOST_CARR 0x0400 +#define LAN91C111_STATUS_LATCOL 0x0200 +//#define LAN91CXX_STATUS_WAKEUP 0x0100 +#define LAN91C111_STATUS_TX_DEFR 0x0080 +#define LAN91C111_STATUS_LTX_BRD 0x0040 +#define LAN91C111_STATUS_SQET 0x0020 +#define LAN91C111_STATUS_16COL 0x0010 +#define LAN91C111_STATUS_LTX_MULT 0x0008 +#define LAN91C111_STATUS_MUL_COL 0x0004 +#define LAN91C111_STATUS_SNGL_COL 0x0002 +#define LAN91C111_STATUS_TX_SUC 0x0001 + + + + +#define LAN91C111_MMU_noop 0x0000 +#define LAN91C111_MMU_alloc_for_tx 0x0020 +#define LAN91C111_MMU_reset_mmu 0x0040 +#define LAN91C111_MMU_rem_rx_frame 0x0060 +//#define LAN91CXX_MMU_rem_tx_frame 0x0070 // (91C96) only when TX stopped +#define LAN91C111_MMU_remrel_rx_frame 0x0080 +#define LAN91C111_MMU_rel_packet 0x00a0 +#define LAN91C111_MMU_enq_packet 0x00c0 +#define LAN91C111_MMU_reset_tx_fifo 0x00e0 + + + + + + + +#define LAN91C111_CONTROLBYTE_CRC 0x1000 +#define LAN91C111_CONTROLBYTE_ODD 0x2000 +#define LAN91C111_CONTROLBYTE_RX 0x4000 + + + + + +#define LAN91C111_RX_STATUS_ALIGNERR 0x8000 +#define LAN91C111_RX_STATUS_BCAST 0x4000 +#define LAN91C111_RX_STATUS_BADCRC 0x2000 +#define LAN91C111_RX_STATUS_ODDFRM 0x1000 +#define LAN91C111_RX_STATUS_TOOLONG 0x0800 +#define LAN91C111_RX_STATUS_TOOSHORT 0x0400 +#define LAN91C111_RX_STATUS_HASHVALMASK 0x007e // MASK +#define LAN91C111_RX_STATUS_MCAST 0x0001 + + + +// PHY Register Addresses (LAN91C111 Internal PHY) + +// PHY Control Register +#define PHY_CNTL_REG 0x00 +#define PHY_CNTL_RST 0x8000 // 1=PHY Reset +#define PHY_CNTL_LPBK 0x4000 // 1=PHY Loopback +#define PHY_CNTL_SPEED 0x2000 // 1=100Mbps, 0=10Mpbs +#define PHY_CNTL_ANEG_EN 0x1000 // 1=Enable Auto negotiation +#define PHY_CNTL_PDN 0x0800 // 1=PHY Power Down mode +#define PHY_CNTL_MII_DIS 0x0400 // 1=MII 4 bit interface disabled +#define PHY_CNTL_ANEG_RST 0x0200 // 1=Reset Auto negotiate +#define PHY_CNTL_DPLX 0x0100 // 1=Full Duplex, 0=Half Duplex +#define PHY_CNTL_COLTST 0x0080 // 1= MII Colision Test + +// PHY Status Register +#define PHY_STAT_REG 0x01 +#define PHY_STAT_CAP_T4 0x8000 // 1=100Base-T4 capable +#define PHY_STAT_CAP_TXF 0x4000 // 1=100Base-X full duplex capable +#define PHY_STAT_CAP_TXH 0x2000 // 1=100Base-X half duplex capable +#define PHY_STAT_CAP_TF 0x1000 // 1=10Mbps full duplex capable +#define PHY_STAT_CAP_TH 0x0800 // 1=10Mbps half duplex capable +#define PHY_STAT_CAP_SUPR 0x0040 // 1=recv mgmt frames with not preamble +#define PHY_STAT_ANEG_ACK 0x0020 // 1=ANEG has completed +#define PHY_STAT_REM_FLT 0x0010 // 1=Remote Fault detected +#define PHY_STAT_CAP_ANEG 0x0008 // 1=Auto negotiate capable +#define PHY_STAT_LINK 0x0004 // 1=valid link +#define PHY_STAT_JAB 0x0002 // 1=10Mbps jabber condition +#define PHY_STAT_EXREG 0x0001 // 1=extended registers implemented + +// PHY Identifier Registers +#define PHY_ID1_REG 0x02 // PHY Identifier 1 +#define PHY_ID2_REG 0x03 // PHY Identifier 2 + +// PHY Auto-Negotiation Advertisement Register +#define PHY_AD_REG 0x04 +#define PHY_AD_NP 0x8000 // 1=PHY requests exchange of Next Page +#define PHY_AD_ACK 0x4000 // 1=got link code word from remote +#define PHY_AD_RF 0x2000 // 1=advertise remote fault +#define PHY_AD_T4 0x0200 // 1=PHY is capable of 100Base-T4 +#define PHY_AD_TX_FDX 0x0100 // 1=PHY is capable of 100Base-TX FDPLX +#define PHY_AD_TX_HDX 0x0080 // 1=PHY is capable of 100Base-TX HDPLX +#define PHY_AD_10_FDX 0x0040 // 1=PHY is capable of 10Base-T FDPLX +#define PHY_AD_10_HDX 0x0020 // 1=PHY is capable of 10Base-T HDPLX +#define PHY_AD_CSMA 0x0001 // 1=PHY is capable of 802.3 CMSA + +// PHY Auto-negotiation Remote End Capability Register +#define PHY_RMT_REG 0x05 +// Uses same bit definitions as PHY_AD_REG + +// PHY Configuration Register 1 +#define PHY_CFG1_REG 0x10 +#define PHY_CFG1_LNKDIS 0x8000 // 1=Rx Link Detect Function disabled +#define PHY_CFG1_XMTDIS 0x4000 // 1=TP Transmitter Disabled +#define PHY_CFG1_XMTPDN 0x2000 // 1=TP Transmitter Powered Down +#define PHY_CFG1_BYPSCR 0x0400 // 1=Bypass scrambler/descrambler +#define PHY_CFG1_UNSCDS 0x0200 // 1=Unscramble Idle Reception Disable +#define PHY_CFG1_EQLZR 0x0100 // 1=Rx Equalizer Disabled +#define PHY_CFG1_CABLE 0x0080 // 1=STP(150ohm), 0=UTP(100ohm) +#define PHY_CFG1_RLVL0 0x0040 // 1=Rx Squelch level reduced by 4.5db +#define PHY_CFG1_TLVL_SHIFT 2 // Transmit Output Level Adjust +#define PHY_CFG1_TLVL_MASK 0x003C +#define PHY_CFG1_TRF_MASK 0x0003 // Transmitter Rise/Fall time + + +// PHY Configuration Register 2 +#define PHY_CFG2_REG 0x11 +#define PHY_CFG2_APOLDIS 0x0020 // 1=Auto Polarity Correction disabled +#define PHY_CFG2_JABDIS 0x0010 // 1=Jabber disabled +#define PHY_CFG2_MREG 0x0008 // 1=Multiple register access (MII mgt) +#define PHY_CFG2_INTMDIO 0x0004 // 1=Interrupt signaled with MDIO pulseo + +// PHY Status Output (and Interrupt status) Register +#define PHY_INT_REG 0x12 // Status Output (Interrupt Status) +#define PHY_INT_INT 0x8000 // 1=bits have changed since last read +#define PHY_INT_LNKFAIL 0x4000 // 1=Link Not detected +#define PHY_INT_LOSSSYNC 0x2000 // 1=Descrambler has lost sync +#define PHY_INT_CWRD 0x1000 // 1=Invalid 4B5B code detected on rx +#define PHY_INT_SSD 0x0800 // 1=No Start Of Stream detected on rx +#define PHY_INT_ESD 0x0400 // 1=No End Of Stream detected on rx +#define PHY_INT_RPOL 0x0200 // 1=Reverse Polarity detected +#define PHY_INT_JAB 0x0100 // 1=Jabber detected +#define PHY_INT_SPDDET 0x0080 // 1=100Base-TX mode, 0=10Base-T mode +#define PHY_INT_DPLXDET 0x0040 // 1=Device in Full Duplex + +// PHY Interrupt/Status Mask Register +#define PHY_MASK_REG 0x13 // Interrupt Mask +// Uses the same bit definitions as PHY_INT_REG + + + + + + +// ------------------------------------------------------------------------ + +#ifdef KEEP_STATISTICS +struct smsc_lan91c111_stats { + unsigned int tx_good ; + unsigned int tx_max_collisions ; + unsigned int tx_late_collisions ; + unsigned int tx_underrun ; + unsigned int tx_carrier_loss ; + unsigned int tx_deferred ; + unsigned int tx_sqetesterrors ; + unsigned int tx_single_collisions; + unsigned int tx_mult_collisions ; + unsigned int tx_total_collisions ; + unsigned int rx_good ; + unsigned int rx_crc_errors ; + unsigned int rx_align_errors ; + unsigned int rx_resource_errors ; + unsigned int rx_overrun_errors ; + unsigned int rx_collisions ; + unsigned int rx_short_frames ; + unsigned int rx_too_long_frames ; + unsigned int rx_symbol_errors ; + unsigned int interrupts ; + unsigned int rx_count ; + unsigned int rx_deliver ; + unsigned int rx_resource ; + unsigned int rx_restart ; + unsigned int tx_count ; + unsigned int tx_complete ; + unsigned int tx_dropped ; +}; +#endif + +typedef struct lan91c111_priv_data { + int txbusy; // A packet has been sent + unsigned long txkey; // Used to ack when packet sent + volatile unsigned short* base; // Base I/O address of controller + // (as it comes out of reset) + + int interrupt; // Interrupt vector used by controller + unsigned char enaddr[6]; // Controller ESA + // Function to configure the ESA - may fetch ESA from EPROM or + // RedBoot config option. + cyg_bool (*config_enaddr)(struct lan91c111_priv_data* cpd); + int txpacket; + int rxpacket; + int within_send; + int addrsh; // Address bits to shift +#ifdef KEEP_STATISTICS + struct smsc_lan91c111_stats stats; +#endif + int phytype; + int phyaddr; +} lan91c111_priv_data; + +// ------------------------------------------------------------------------ + +static __inline__ unsigned short +get_reg(struct eth_drv_sc *sc, int regno) +{ + struct lan91c111_priv_data *cpd = + (struct lan91c111_priv_data *)sc->driver_private; + unsigned short val; + + HAL_WRITE_UINT16(cpd->base+(LAN91C111_BS << cpd->addrsh), regno>>3); + HAL_READ_UINT16(cpd->base+((regno&0x7) << cpd->addrsh), val); +#if DEBUG_SMSC & 2 + diag_printf("read reg %02X val 0x%04x\n", regno, val); +#endif + return val; +} + +static __inline__ void +put_reg(struct eth_drv_sc *sc, int regno, unsigned short val) +{ + struct lan91c111_priv_data *cpd = + (struct lan91c111_priv_data *)sc->driver_private; + + HAL_WRITE_UINT16(cpd->base+(LAN91C111_BS << cpd->addrsh), regno>>3); + HAL_WRITE_UINT16(cpd->base+((regno&0x7) << cpd->addrsh), val); + +#if DEBUG_SMSC & 2 + diag_printf("write reg %02X val 0x%04x\n", regno, val); +#endif +} + +// ------------------------------------------------------------------------ +// Assumes bank2 has been selected +static __inline__ void +put_data(struct eth_drv_sc *sc, unsigned short val) +{ + struct lan91c111_priv_data *cpd = + (struct lan91c111_priv_data *)sc->driver_private; + + HAL_WRITE_UINT16(cpd->base+((LAN91C111_DATA & 0x7) << cpd->addrsh), val); + +#if DEBUG_SMSC & 2 + diag_printf("write data 0x%04x\n", val); +#endif +} + +// Assumes bank2 has been selected +static __inline__ unsigned short +get_data(struct eth_drv_sc *sc) +{ + unsigned short val; + struct lan91c111_priv_data *cpd = + (struct lan91c111_priv_data *)sc->driver_private; + + HAL_READ_UINT16(cpd->base+((LAN91C111_DATA & 0x7) << cpd->addrsh), val); + +#if DEBUG_SMSC & 2 + diag_printf("read data 0x%04x\n", val); +#endif + return val; +} + + +// Assumes bank2 has been selected +static __inline__ unsigned long +get_data32(struct eth_drv_sc *sc) +{ + unsigned long val; + //unsigned long ret_val = 0; + struct lan91c111_priv_data *cpd = + (struct lan91c111_priv_data *)sc->driver_private; + + HAL_READ_UINT32(cpd->base+((0x04) << cpd->addrsh), val); + //ret_val =((val&0xffff0000)>>16) | ((val&0xffff)<<16); + //diag_printf("val: %08X ret_val: %08X \n", val, ret_val); + +#if DEBUG_SMSC & 2 + diag_printf("read data 0x%08x\n", val); +#endif + return val; +} + + + + + + + + +// ------------------------------------------------------------------------ +// Read the bank register (this one is bank-independent) +static __inline__ unsigned short +get_banksel(struct eth_drv_sc *sc) +{ + + + struct lan91c111_priv_data *cpd = + (struct lan91c111_priv_data *)sc->driver_private; + unsigned short val; + + + HAL_READ_UINT16(cpd->base+(LAN91C111_BS << cpd->addrsh), val); +#if DEBUG_SMSC & 2 + diag_printf("read bank val 0x%04x\n", val); +#endif + + + return val; +} + + + +// ------------------------------------------------------------------------ +#endif // CYGONCE_DEVS_ETH_SMSC_LAN91C111_LAN91C111_H +// EOF smsc_lan91c111.h diff --git a/packages/devs/flash/arm/at91/v2_0/ChangeLog b/packages/devs/flash/arm/at91/v2_0/ChangeLog new file mode 100644 index 00000000..9b65c67f --- /dev/null +++ b/packages/devs/flash/arm/at91/v2_0/ChangeLog @@ -0,0 +1,49 @@ +2001-07-19 Gary Thomas + + * src/flash_program_buf.c: Fix - needs to have A16 set. + + * src/at91_flash.c: Remove debugging code. + +2001-07-18 Gary Thomas + + * src/flash_query.c: + * src/flash_program_buf.c: + * src/flash_erase_block.c: + * src/flash.h: + * src/at91_flash.c: + * cdl/flash_at91.cdl: New package - AT29LV1024 FLASH for AT91/EB40. + +//=========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/flash/arm/at91/v2_0/cdl/flash_at91.cdl b/packages/devs/flash/arm/at91/v2_0/cdl/flash_at91.cdl new file mode 100644 index 00000000..218241c5 --- /dev/null +++ b/packages/devs/flash/arm/at91/v2_0/cdl/flash_at91.cdl @@ -0,0 +1,93 @@ +# ==================================================================== +# +# flash_at91.cdl +# +# FLASH memory - Hardware support on Atmel At91/EB40 +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): gthomas +# Original data: gthomas +# Contributors: +# Date: 2001-07-17 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_FLASH_AT91 { + display "Atmel At91/EB40 FLASH memory support" + + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + requires CYGPKG_HAL_ARM_AT91 + + implements CYGHWR_IO_FLASH_DEVICE + implements CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM + + include_dir . + include_files ; # none _exported_ whatsoever + + description "FLASH memory device support for Atmel At91/EB40 boards" + compile at91_flash.c + + make -priority 1 { + flash_erase_block.o: $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -mcpu=strongarm -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c + echo " .globl flash_erase_block_end" >>flash_erase_block.s + echo "flash_erase_block_end:" >>flash_erase_block.s + $(CC) -c -o flash_erase_block.o flash_erase_block.s + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_erase_block.o + } + make -priority 1 { + flash_program_buf.o: $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -mcpu=strongarm -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c + echo " .globl flash_program_buf_end" >>flash_program_buf.s + echo "flash_program_buf_end:" >>flash_program_buf.s + $(CC) -c -o flash_program_buf.o flash_program_buf.s + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_program_buf.o + } + make -priority 1 { + flash_query.o: $(REPOSITORY)/$(PACKAGE)/src/flash_query.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -mcpu=strongarm -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_query.c + echo " .globl flash_query_end" >>flash_query.s + echo "flash_query_end:" >>flash_query.s + $(CC) -c -o flash_query.o flash_query.s + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_query.o + } +} + diff --git a/packages/devs/flash/arm/at91/v2_0/src/at91_flash.c b/packages/devs/flash/arm/at91/v2_0/src/at91_flash.c new file mode 100644 index 00000000..f9c3d679 --- /dev/null +++ b/packages/devs/flash/arm/at91/v2_0/src/at91_flash.c @@ -0,0 +1,129 @@ +//========================================================================== +// +// at91_flash.c +// +// Flash programming +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-07-17 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include + +#define _FLASH_PRIVATE_ +#include + +#include "flash.h" + +#define _si(p) ((p[0]<<8)|p[1]) + +int +flash_hwr_init(void) +{ + unsigned short data[4]; + extern char flash_query, flash_query_end; + typedef int code_fun(unsigned char *); + code_fun *_flash_query; + int code_len, stat, num_regions, region_size; + + // Copy 'program' code to RAM for execution + code_len = (unsigned long)&flash_query_end - (unsigned long)&flash_query; + _flash_query = (code_fun *)flash_info.work_space; + memcpy(_flash_query, &flash_query, code_len); + HAL_DCACHE_SYNC(); // Should guarantee this code will run + + stat = (*_flash_query)(data); +#if 0 + (*flash_info.pf)("stat = %x\n", stat); + dump_buf(data, sizeof(data)); +#endif + + if (data[0] != FLASH_Atmel_code) { + (*flash_info.pf)("Not Atmel = %x\n", data[0]); + return FLASH_ERR_HWR; + } + + if (data[1] == (unsigned short)FLASH_ATMEL_29LV1024) { + num_regions = 256; + region_size = 0x100; + } else { + (*flash_info.pf)("Unknown device type: %x\n", data[1]); + return FLASH_ERR_HWR; + } + + // Hard wired for now + flash_info.block_size = region_size; + flash_info.blocks = num_regions; + flash_info.start = (void *)0x01010000; + flash_info.end = (void *)(0x01010000+(num_regions*region_size)); + return FLASH_ERR_OK; +} + +// Map a hardware status to a package error +int +flash_hwr_map_error(int err) +{ + if (err) { + (*flash_info.pf)("Err = %x\n", err); + return FLASH_ERR_PROGRAM; + } else { + return FLASH_ERR_OK; + } +} + +// See if a range of FLASH addresses overlaps currently running code +bool +flash_code_overlaps(void *start, void *end) +{ + extern char _stext[], _etext[]; + + return ((((unsigned long)&_stext >= (unsigned long)start) && + ((unsigned long)&_stext < (unsigned long)end)) || + (((unsigned long)&_etext >= (unsigned long)start) && + ((unsigned long)&_etext < (unsigned long)end))); +} diff --git a/packages/devs/flash/arm/at91/v2_0/src/flash.h b/packages/devs/flash/arm/at91/v2_0/src/flash.h new file mode 100644 index 00000000..48f197d9 --- /dev/null +++ b/packages/devs/flash/arm/at91/v2_0/src/flash.h @@ -0,0 +1,78 @@ +//========================================================================== +// +// flash.h +// +// Flash programming - device constants, etc. +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-07-17 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#ifndef _FLASH_HWR_H_ +#define _FLASH_HWR_H_ + +// Atmel AT29LV1024 + +#define FLASH_Read_ID 0x9090 +#define FLASH_Program 0xA0A0 +#define FLASH_Reset 0xF0F0 + +#define FLASH_Key_Addr0 0x5555 +#define FLASH_Key_Addr1 0x2AAA +#define FLASH_Key0 0xAAAA +#define FLASH_Key1 0x5555 + +#define FLASH_Atmel_code 0x1F +#define FLASH_ATMEL_29LV1024 0x26 + +#define FLASH_PROGRAM_OK 0x0000 +#define FLASH_LENGTH_ERROR 0x0001 +#define FLASH_PROGRAM_ERROR 0x0002 + +#define FLASH_PAGE_SIZE 0x100 +#define FLASH_PAGE_MASK ~(FLASH_PAGE_SIZE-1) +#define FLASH_PAGE_OFFSET (FLASH_PAGE_SIZE-1) + +#endif // _FLASH_HWR_H_ diff --git a/packages/devs/flash/arm/at91/v2_0/src/flash_erase_block.c b/packages/devs/flash/arm/at91/v2_0/src/flash_erase_block.c new file mode 100644 index 00000000..851e4bdb --- /dev/null +++ b/packages/devs/flash/arm/at91/v2_0/src/flash_erase_block.c @@ -0,0 +1,71 @@ +//========================================================================== +// +// flash_erase_block.c +// +// Flash programming +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-07-17 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include +#include +#include + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +int flash_erase_block(volatile unsigned long *block) +{ + +// This device is implicitly erased as each sector needs to be written +// as a whole. Thus, this is a NOP + + return 0; +} diff --git a/packages/devs/flash/arm/at91/v2_0/src/flash_program_buf.c b/packages/devs/flash/arm/at91/v2_0/src/flash_program_buf.c new file mode 100644 index 00000000..864353e2 --- /dev/null +++ b/packages/devs/flash/arm/at91/v2_0/src/flash_program_buf.c @@ -0,0 +1,127 @@ +//========================================================================== +// +// flash_program_buf.c +// +// Flash programming +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-07-17 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include +#include +#include + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +int +flash_program_buf(volatile unsigned short *addr, unsigned short *data, int len) +{ + volatile unsigned short *PAGE, *ROM; + int timeout = 50000; + int cache_on; + int i, offset; + unsigned short hold[FLASH_PAGE_SIZE/2]; + + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + + if (len != FLASH_PAGE_SIZE) { + return FLASH_LENGTH_ERROR; + } + + ROM = (volatile unsigned short *)((unsigned long)addr & 0xFFFF0000); + PAGE = (volatile unsigned short *)((unsigned long)addr & FLASH_PAGE_MASK); + + // Copy current contents (allows for partial updates) + for (i = 0; i < FLASH_PAGE_SIZE/2; i++) { + hold[i] = PAGE[i]; + } + + // Merge data into holding buffer + offset = (unsigned long)addr & FLASH_PAGE_OFFSET; + for (i = 0; i < (len/2); i++) { + hold[offset+i] = data[i]; + } + + // Now write the data + + // Send lead-in sequence + ROM[FLASH_Key_Addr0] = FLASH_Key0; + ROM[FLASH_Key_Addr1] = FLASH_Key1; + + // Send 'write' command + ROM[FLASH_Key_Addr0] = FLASH_Program; + + // Send one page/sector of data + for (i = 0; i < FLASH_PAGE_SIZE/2; i++) { + PAGE[i] = hold[i]; + } + + // Wait for data to be programmed + while (timeout-- > 0) { + if (PAGE[(FLASH_PAGE_SIZE/2)-1] == hold[(FLASH_PAGE_SIZE/2)-1]) { + break; + } + } + + if (timeout <= 0) { + return FLASH_PROGRAM_ERROR; + } + + if (cache_on) { + HAL_DCACHE_ENABLE(); + } + + return FLASH_PROGRAM_OK; +} diff --git a/packages/devs/flash/arm/at91/v2_0/src/flash_query.c b/packages/devs/flash/arm/at91/v2_0/src/flash_query.c new file mode 100644 index 00000000..da531918 --- /dev/null +++ b/packages/devs/flash/arm/at91/v2_0/src/flash_query.c @@ -0,0 +1,109 @@ +//========================================================================== +// +// flash_query.c +// +// Flash programming - query device +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-07-17 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include +#include +#include +#include CYGHWR_MEMORY_LAYOUT_H + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +#define CNT 2000*1000*10 // At least 20ms + +int +flash_query(unsigned short *data) +{ + volatile unsigned short *ROM; + int cnt, cache_on; + + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + + ROM = (volatile unsigned short *)0x01010000; + + // Send lead-in sequence + ROM[FLASH_Key_Addr0] = FLASH_Key0; + ROM[FLASH_Key_Addr1] = FLASH_Key1; + + // Send 'identify' command + ROM[FLASH_Key_Addr0] = FLASH_Read_ID; + + // Need a delay of 20ms! + for (cnt = 0; cnt < 50000; cnt++) ; + + data[0] = ROM[0]; // Manufacturer code + data[1] = ROM[1]; // Device identifier + + // Send lead-in sequence + ROM[FLASH_Key_Addr0] = FLASH_Key0; + ROM[FLASH_Key_Addr1] = FLASH_Key1; + + // Send 'reset' command + ROM[FLASH_Key_Addr0] = FLASH_Reset; + + // Need a delay of 20ms! + for (cnt = 0; cnt < 50000; cnt++) ; + + if (cache_on) { + HAL_DCACHE_ENABLE(); + } + + return 0; +} diff --git a/packages/devs/flash/arm/triton/v2_0/cdl/flash_arm_xscale_triton.cdl b/packages/devs/flash/arm/triton/v2_0/cdl/flash_arm_xscale_triton.cdl new file mode 100755 index 00000000..12ed57cc --- /dev/null +++ b/packages/devs/flash/arm/triton/v2_0/cdl/flash_arm_xscale_triton.cdl @@ -0,0 +1,82 @@ +# ==================================================================== +# +# flash_arm_xscale_triton.cdl +# +# FLASH memory - Hardware support on Ka-Ro TRITON +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): gthomas, usteinkohl +# Original data: gthomas, usteinkohl +# Contributors: +# Date: 14th January 2003 (last modification) +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON { + display "TRITON FLASH memory support" + + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + + + #requires CYGPKG_HAL_ARM_XSCALE_TRITON + + requires CYGPKG_DEVS_FLASH_STRATA + + implements CYGHWR_IO_FLASH_BLOCK_LOCKING + + include_dir cyg/io + + # Arguably this should do in the generic package + # but then there is a logic loop so you can never enable it. + cdl_interface CYGINT_DEVS_FLASH_STRATA_REQUIRED { + display "Generic StrataFLASH driver required" + } + + implements CYGINT_DEVS_FLASH_STRATA_REQUIRED + + define_proc { + puts $::cdl_system_header "/***** strataflash driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_DEVS_FLASH_STRATA_INL " + puts $::cdl_system_header "#define CYGDAT_DEVS_FLASH_STRATA_CFG " + puts $::cdl_system_header "/***** strataflash driver proc output end *****/" + } +} + diff --git a/packages/devs/flash/arm/triton/v2_0/include/triton_strataflash.inl b/packages/devs/flash/arm/triton/v2_0/include/triton_strataflash.inl new file mode 100755 index 00000000..8a05dc86 --- /dev/null +++ b/packages/devs/flash/arm/triton/v2_0/include/triton_strataflash.inl @@ -0,0 +1,96 @@ +#ifndef CYGONCE_DEVS_FLASH_TRITON_STRATAFLASH_INL +#define CYGONCE_DEVS_FLASH_TRITON_STRATAFLASH_INL +//========================================================================== +// +// triton_strataflash.inl +// +// Flash programming - device constants, etc. +// +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): usteinkohl +// Contributors: usteinkohl +// Date: 14th January 2003 (last modification) +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include // System-wide configuration info + +#ifdef TRITON_FLASH32_32 + #define CYGNUM_FLASH_DEVICES (2) + #define CYGNUM_FLASH_BASE (0x00000000u) + #define CYGNUM_FLASH_BASE_MASK (0xFE000000u) // 2 * 16Mb devices + #define CYGNUM_FLASH_WIDTH (16) + #define CYGNUM_FLASH_BLANK (1) + + #define FLASH_P2V(x) ((volatile flash_t *)(((unsigned)(x) < 0x1000) ? \ + ((unsigned)(x) | 0xa0000000) : \ + (unsigned)(x))) +#endif + +#ifdef TRITON_FLASH16_16 + #define CYGNUM_FLASH_DEVICES (1) + #define CYGNUM_FLASH_BASE (0x00000000u) + #define CYGNUM_FLASH_BASE_MASK (0xFF000000u) // 1 * 16Mb devices + #define CYGNUM_FLASH_WIDTH (16) + #define CYGNUM_FLASH_BLANK (1) + + + #define FLASH_P2V(x) ((volatile flash_t *)(((unsigned)(x) < 0x1000) ? \ + ((unsigned)(x) | 0xa0000000) : \ + (unsigned)(x))) + + + + + +#endif + + + + + + + + + +#endif // CYGONCE_DEVS_FLASH_TRITON_STRATAFLASH_INL +// ------------------------------------------------------------------------ +// EOF triton_strataflash.inl diff --git a/packages/devs/flash/arm/triton270/v2_0/cdl/flash_arm_xscale_triton270.cdl b/packages/devs/flash/arm/triton270/v2_0/cdl/flash_arm_xscale_triton270.cdl new file mode 100755 index 00000000..fc9f02ea --- /dev/null +++ b/packages/devs/flash/arm/triton270/v2_0/cdl/flash_arm_xscale_triton270.cdl @@ -0,0 +1,86 @@ +# ==================================================================== +# +# flash_arm_xscale_triton270.cdl +# +# FLASH memory - Hardware support on Ka-Ro TRITON +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): gthomas, usteinkohl +# Original data: gthomas, usteinkohl +# Contributors: +# Date: 14th January 2003 (last modification) +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_FLASH_ARM_XSCALE_TRITON270 { + display "TRITON270 FLASH memory support" + + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + + + #requires CYGPKG_HAL_ARM_XSCALE_TRITON + + requires CYGPKG_DEVS_FLASH_INTEL_28FXXX + + implements CYGHWR_IO_FLASH_BLOCK_LOCKING + + include_dir cyg/io + + compile triton270_wirelessflash.c + + + + # Arguably this should do in the generic package + # but then there is a logic loop so you can never enable it. + cdl_interface CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED { + display "Generic INTEL 28fxxx driver required" + } + + implements CYGINT_DEVS_FLASH_INTEL_28FXXX_REQUIRED + + define_proc { + puts $::cdl_system_header "/***** intel 28fxxx driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_DEVS_FLASH_INTEL_28FXXX_INL " + puts $::cdl_system_header "#define CYGDAT_DEVS_FLASH_INTEL_28FXXX_CFG " + puts $::cdl_system_header "/***** intel 28fxxx driver proc output end *****/" + } +} + diff --git a/packages/devs/flash/arm/triton270/v2_0/src/triton270_wirelessflash.c b/packages/devs/flash/arm/triton270/v2_0/src/triton270_wirelessflash.c new file mode 100755 index 00000000..1b395929 --- /dev/null +++ b/packages/devs/flash/arm/triton270/v2_0/src/triton270_wirelessflash.c @@ -0,0 +1,113 @@ +#ifndef CYGONCE_DEVS_FLASH_TRITON270_WIRELESSFLASH_INL +#define CYGONCE_DEVS_FLASH_TRITON270_WIRELESSFLASH_INL +//========================================================================== +// +// triton270_wirelessflash.c +// +// Flash programming - device constants, etc. +// +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): usteinkohl +// Contributors: usteinkohl +// Date: 14th January 2003 (last modification) +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include // System-wide configuration info + +#ifdef TRITON270_FLASH16_16 + // Platform code must define the below +#define CYGNUM_FLASH_INTERLEAVE (1) // Number of interleaved devices (in parallel) +#define CYGNUM_FLASH_SERIES (1) // Number of devices in series +#define CYGNUM_FLASH_WIDTH (16) // Width of devices on platform +#define CYGNUM_FLASH_BASE (0x00000000u) // Address of first device + +#define FLASH_P2V(x) ((volatile flash_data_t *)(((unsigned)(x) < 0x1000) ? \ + ((unsigned)(x) | 0xa0000000) : \ + (unsigned)(x))) + +#include "cyg/io/flash_28fxxx_w18.inl" +#endif + +#ifdef TRITON270_FLASH16_16_P30 + // Platform code must define the below +#define CYGNUM_FLASH_INTERLEAVE (1) // Number of interleaved devices (in parallel) +#define CYGNUM_FLASH_SERIES (1) // Number of devices in series +#define CYGNUM_FLASH_WIDTH (16) // Width of devices on platform +#define CYGNUM_FLASH_BASE (0x00000000u) // Address of first device + +#define FLASH_P2V(x) ((volatile flash_data_t *)(((unsigned)(x) < 0x1000) ? \ + ((unsigned)(x) | 0xa0000000) : \ + (unsigned)(x))) + +#include "cyg/io/flash_28fxxx_p30.inl" +#endif + +#ifdef TRITON270_FLASH16_64 + // Platform code must define the below +#define CYGNUM_FLASH_INTERLEAVE (1) // Number of interleaved devices (in parallel) +#define CYGNUM_FLASH_SERIES (2) // Number of devices in series +#define CYGNUM_FLASH_WIDTH (16) // Width of devices on platform +#define CYGNUM_FLASH_BASE (0x00000000u) // Address of first device + +#define FLASH_P2V(x) ((volatile flash_data_t *)(((unsigned)(x) < 0x1000) ? \ + ((unsigned)(x) | 0xa0000000) : \ + (unsigned)(x))) + +#include "cyg/io/flash_28fxxx_p30.inl" +#endif + +#ifdef TRITON270_FLASH16_32 + // Platform code must define the below +#define CYGNUM_FLASH_INTERLEAVE (1) // Number of interleaved devices (in parallel) +#define CYGNUM_FLASH_SERIES (1) // Number of devices in series +#define CYGNUM_FLASH_WIDTH (16) // Width of devices on platform +#define CYGNUM_FLASH_BASE (0x00000000u) // Address of first device + +#define FLASH_P2V(x) ((volatile flash_data_t *)(((unsigned)(x) < 0x1000) ? \ + ((unsigned)(x) | 0xa0000000) : \ + (unsigned)(x))) + +#include "cyg/io/flash_28fxxx_p30.inl" +#endif +#endif // CYGONCE_DEVS_FLASH_TRITON270_WIRELESSFLASH_INL +// ------------------------------------------------------------------------ +// EOF triton270_wirelessflash.inl diff --git a/packages/devs/flash/intel/28fxxx/v2_0/include/flash_28fxxx_p30.inl b/packages/devs/flash/intel/28fxxx/v2_0/include/flash_28fxxx_p30.inl new file mode 100755 index 00000000..4fecc869 --- /dev/null +++ b/packages/devs/flash/intel/28fxxx/v2_0/include/flash_28fxxx_p30.inl @@ -0,0 +1,869 @@ +#ifndef CYGONCE_DEVS_FLASH_INTEL_28FXXX_INL +#define CYGONCE_DEVS_FLASH_INTEL_28FXXX_INL +//========================================================================== +// +// flash_28fxxx.inl +// +// Intel 28Fxxx series flash driver +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2002 Gary Thomas +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov +// Date: 2001-03-21 +// Purpose: +// Description: +// +// Notes: Device table could use unions of flags to save some space +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include + +#include +#include +#include CYGHWR_MEMORY_LAYOUT_H + +#include + +#define _FLASH_PRIVATE_ +#include + +#define nDEBUG + +#define nRAM_VERSION + +typedef void (*call_t)(char* str, ...); +extern void diag_printf(char* str, ...); +call_t d_print = &diag_printf; + +//---------------------------------------------------------------------------- +// Common device details. + +#define FLASH_BOOTBLOCKS_PER_BLOCK 4 + +#define FLASH_Read_ID FLASHWORD( 0x90 ) +#define FLASH_Reset FLASHWORD( 0xFF ) +#define FLASH_Program FLASHWORD( 0x40 ) +#define FLASH_Write_Buffer FLASHWORD( 0xe8 ) +#define FLASH_Block_Erase FLASHWORD( 0x20 ) +#define FLASH_Confirm FLASHWORD( 0xD0 ) +#define FLASH_Resume FLASHWORD( 0xD0 ) + +#define FLASH_Set_Lock FLASHWORD( 0x60 ) +#define FLASH_Set_Lock_Confirm FLASHWORD( 0x01 ) +#define FLASH_Clear_Lock FLASHWORD( 0x60 ) +#define FLASH_Clear_Lock_Confirm FLASHWORD( 0xd0 ) +#define FLASH_Lock_State_Mask FLASHWORD( 0x03 ) +#define FLASH_Status_Locked FLASHWORD( 0x01 ) + +#define FLASH_Read_Status FLASHWORD( 0x70 ) +#define FLASH_Clear_Status FLASHWORD( 0x50 ) +#define FLASH_Status_Ready FLASHWORD( 0x80 ) + +// Status that we read back: +#define FLASH_ErrorMask FLASHWORD( 0x7E ) +#define FLASH_ErrorProgram FLASHWORD( 0x10 ) +#define FLASH_ErrorErase FLASHWORD( 0x20 ) +#define FLASH_ErrorLock FLASHWORD( 0x30 ) +#define FLASH_ErrorLowVoltage FLASHWORD( 0x08 ) +#define FLASH_ErrorLocked FLASHWORD( 0x02 ) + +// Platform code must define the below +// #define CYGNUM_FLASH_INTERLEAVE : Number of interleaved devices (in parallel) +// #define CYGNUM_FLASH_SERIES : Number of devices in series +// #define CYGNUM_FLASH_WIDTH : Width of devices on platform +// #define CYGNUM_FLASH_BASE : Address of first device + +#define CYGNUM_FLASH_BLANK (1) +#define CYGNUM_FLASH_DEVICES (CYGNUM_FLASH_INTERLEAVE*CYGNUM_FLASH_SERIES) + +#ifndef FLASH_P2V +# define FLASH_P2V( _a_ ) ((volatile flash_data_t *)((CYG_ADDRWORD)(_a_))) +#endif +#ifndef CYGHWR_FLASH_28FXXX_PLF_INIT +# define CYGHWR_FLASH_28FXXX_PLF_INIT() +#endif +#ifndef CYGHWR_FLASH_WRITE_ENABLE +#define CYGHWR_FLASH_WRITE_ENABLE() +#endif +#ifndef CYGHWR_FLASH_WRITE_DISABLE +#define CYGHWR_FLASH_WRITE_DISABLE() +#endif + +//---------------------------------------------------------------------------- +// Now that device properties are defined, include magic for defining +// accessor type and constants. +#include + +//---------------------------------------------------------------------------- +// Information about supported devices +typedef struct flash_dev_info { + flash_data_t device_id; + cyg_uint32 block_size; + cyg_int32 block_count; + cyg_uint32 base_mask; + cyg_uint32 device_size; + cyg_bool locking; // supports locking + cyg_bool buffered_w; // supports buffered writes + cyg_bool bootblock; + cyg_uint32 bootblocks[12]; // 0 is bootblock offset, 1-11 sub-sector sizes (or 0) + cyg_bool banked; + cyg_uint32 banks[2]; // bank offets, highest to lowest (lowest should be 0) + // (only one entry for now, increase to support devices + // with more banks). +} flash_dev_info_t; + +// Information about stacked die devices +typedef struct flash_stacked_die_dev_info { + flash_data_t device_id; + cyg_uint32 num_blocks_1; + cyg_uint32 num_blocks_2; + cyg_uint32 num_bytes_1; + cyg_uint32 num_bytes_2; + cyg_uint32 dev_size; + cyg_uint32 dev_start; +} flash_stacked_die_dev_info_t; + +static const flash_dev_info_t* flash_dev_info; +static const flash_dev_info_t supported_devices[] = { +#include +}; + +static flash_stacked_die_dev_info_t sdi[CYGNUM_FLASH_SERIES]; + +#define NUM_DEVICES (sizeof(supported_devices)/sizeof(flash_dev_info_t)) + +#if 1 +//---------------------------------------------------------------------------- +// Functions that put the flash device into non-read mode must reside +// in RAM. + +void flash_query(void* data) __attribute__ ((section (".2ram.flash_query"))); + +int flash_erase_block(void* block, unsigned int size) + __attribute__ ((section (".2ram.flash_erase_block"))); +int flash_program_buf(void* addr, void* data, int len, + unsigned long block_mask, int buffer_size) + __attribute__ ((section (".2ram.flash_program_buf"))); +int flash_lock_block(void* addr) + __attribute__ ((section (".2ram.flash_lock_block"))); +int flash_unlock_block(void* block, int block_size, int blocks, void *) + __attribute__ ((section (".2ram.flash_unlock_block"))); +//---------------------------------------------------------------------------- +#endif + +// Initialize driver details +int +flash_hwr_init(void) +{ + int i; + flash_data_t id[2]; + + CYGHWR_FLASH_28FXXX_PLF_INIT(); + + flash_dev_query(id); + + // Look through table for device data + flash_dev_info = supported_devices; + for (i = 0; i < NUM_DEVICES; i++) { + + if (flash_dev_info->device_id == id[1]) + break; + flash_dev_info++; + } + + // Did we find the device? If not, return error. + if (NUM_DEVICES == i){ + return FLASH_ERR_DRV_WRONG_PART; + } + + // Hard wired for now + flash_info.block_size = flash_dev_info->block_size; + flash_info.blocks = flash_dev_info->block_count * CYGNUM_FLASH_SERIES; + flash_info.start = (void *)CYGNUM_FLASH_BASE; + flash_info.end = (void *)(CYGNUM_FLASH_BASE+ (flash_dev_info->device_size * CYGNUM_FLASH_SERIES)); + + return FLASH_ERR_OK; +} + +//---------------------------------------------------------------------------- +// Map a hardware status to a package error +int +flash_hwr_map_error(int e) +{ + return e; +} + +//---------------------------------------------------------------------------- +// See if a range of FLASH addresses overlaps currently running code +bool +flash_code_overlaps(void *start, void *end) +{ + extern unsigned char _stext[], _etext[]; + + return ((((unsigned long)&_stext >= (unsigned long)start) && + ((unsigned long)&_stext < (unsigned long)end)) || + (((unsigned long)&_etext >= (unsigned long)start) && + ((unsigned long)&_etext < (unsigned long)end))); +} + +//---------------------------------------------------------------------------- +// Flash Query +// +// Only reads the manufacturer and part number codes for the first +// device(s) in series. It is assumed that any devices in series +// will be of the same type. + +void +flash_query(void* data) +{ + volatile flash_data_t *ROM; + flash_data_t* id = (flash_data_t*) data; + flash_data_t w; + unsigned long flash_base; + unsigned long max_erase_time; + unsigned long dsize; + unsigned long max_write_buffer; + unsigned long block_size; + unsigned short val1, val2; + unsigned long nblocks1; // number of blocks in 1st section + unsigned long nblocks2; // number of blocks in 2nd section + unsigned long bsize1; // blocksize in 1st section + unsigned long bsize2; // blocksize in 2nd section + int j; + + ROM = FLASH_P2V(CYGNUM_FLASH_BASE); + + w = ROM[0]; + + CYGHWR_FLASH_WRITE_ENABLE(); + + ROM[0] = FLASH_Read_ID; + + // Manufacturers' code + id[0] = ROM[0]; + // Part number + id[1] = ROM[1]; + + ROM[0] = FLASH_Reset; + //Stall, waiting for flash to return to read mode. + while (w != ROM[0]); + + flash_base = CYGNUM_FLASH_BASE; + for (j = 0; j < CYGNUM_FLASH_SERIES; j++) { + ROM = FLASH_P2V(flash_base); + ROM[0] = 0x0050; // clear status register + ROM[0] = 0x0098; // read query + ROM = FLASH_P2V(flash_base + (0x10 << 1)); + if (ROM[0] != 0x0051) { //Q +#ifdef RAM_VERSION + d_print("error reading flash attribute space Q\n"); +#endif + ROM = FLASH_P2V(flash_base); + ROM[0] = 0x00ff; // read array / reset + //return FLASH_ERR_DRV_WRONG_PART; + } else { +#ifdef RAM_VERSION + d_print("read flash attribute space Q ok\n"); +#endif + } + ROM = FLASH_P2V(flash_base + (0x11 << 1)); + if (ROM[0] != 0x0052) { //R +#ifdef RAM_VERSION + d_print("error reading flash attribute space R\n"); +#endif + ROM = FLASH_P2V(flash_base); + ROM[0] = 0x00ff; // read array / reset + //return FLASH_ERR_DRV_WRONG_PART; + } else { +#ifdef RAM_VERSION + d_print("read flash attribute space R ok\n"); +#endif + } + ROM = FLASH_P2V(flash_base + (0x12 << 1)); + if (ROM[0] != 0x0059) { //Y +#ifdef RAM_VERSION + d_print("error reading flash attribute space Y\n"); +#endif + ROM = FLASH_P2V(flash_base); + ROM[0] = 0x00ff; // read array / reset + //return FLASH_ERR_DRV_WRONG_PART; + } else { +#ifdef RAM_VERSION + d_print("read flash attribute space Y ok\n"); +#endif + } + ROM = FLASH_P2V(flash_base + (0x25 << 1)); + max_erase_time = ROM[0]; // "n" such that the max block erase time = 2^n + max_erase_time = 1 << (max_erase_time & 0xffff); // convert erase time 2^n to the number of seconds + + ROM = FLASH_P2V(flash_base + (0x27 << 1)); + dsize = ROM[0]; // "n" such that the device size = 2^n in number of bytes + dsize = 1 << (dsize & 0xffff); // convert data size from 2^n to the number of bytes + + ROM = FLASH_P2V(flash_base + (0x2a << 1)); + max_write_buffer = ROM[0]; // "n" such that the max num of bytes in write buffer = 2^n + max_write_buffer = (1 << (max_write_buffer & 0xffff)) / 2; // convert from 2^n bytes to the number of words + + ROM = FLASH_P2V(flash_base + (0x2d << 1)); + val1 = ROM[0]; + ROM = FLASH_P2V(flash_base + (0x2e << 1)); + val2 = ROM[0]; + nblocks1 = (val1 + (val2 << 8)) + 1; + + ROM = FLASH_P2V(flash_base + (0x31 << 1)); + val1 = ROM[0]&0xff; + ROM = FLASH_P2V(flash_base + (0x32 << 1)); + val2 = ROM[0]&0xff; + nblocks2 = (val1 + (val2 << 8)) + 1; + + ROM = FLASH_P2V(flash_base + (0x2f << 1)); + val1 = ROM[0]&0xff; + ROM = FLASH_P2V(flash_base + (0x30 << 1)); + val2 = ROM[0]&0xff; + bsize1 = (val1 + (val2 << 8)) * 256; + + ROM = FLASH_P2V(flash_base + (0x33 << 1)); + val1 = ROM[0]&0xff; + ROM = FLASH_P2V(flash_base + (0x34 << 1)); + val2 = ROM[0]&0xff; + bsize2 = (val1 + (val2 << 8)) * 256; + + block_size = bsize1/2; + + ROM = FLASH_P2V(flash_base); + ROM[0] = 0x00ff; // read array / reset + + sdi[j].device_id = 0; + sdi[j].num_blocks_1 = nblocks1; + sdi[j].num_blocks_2 = nblocks2; + sdi[j].num_bytes_1 = bsize1; + sdi[j].num_bytes_2 = bsize2; + sdi[j].dev_size = dsize; + sdi[j].dev_start = flash_base; +#ifdef RAM_VERSION + d_print("number of blocks in region 1: %d\n", sdi[j].num_blocks_1); + d_print("number of blocks in region 2: %d\n", sdi[j].num_blocks_2); + d_print("number of bytes in region 1: %lu (0x%04X)\n", sdi[j].num_bytes_1, sdi[j].num_bytes_1); + d_print("number of bytes in region 2: %lu (0x%04X)\n", sdi[j].num_bytes_2, sdi[j].num_bytes_2); + d_print("Device size = %ld Mbytes (0x%lx)\n",sdi[j].dev_size/1024/1024 ,sdi[j].dev_size); + d_print("max. erase time is %d nseconds\n", max_erase_time); + d_print("number of words for write buffer are %d\n\n\n\n", max_write_buffer); +#endif + flash_info.buffer_size = max_write_buffer; + flash_base += dsize; + } + CYGHWR_FLASH_WRITE_DISABLE(); +} + +//---------------------------------------------------------------------------- +// Erase Block +int +flash_erase_block(void* block, unsigned int block_size) +{ + int res = FLASH_ERR_OK; + int timeout; + unsigned long len; + flash_data_t stat; + volatile flash_data_t *ROM; + int j, die_number, blocks_to_do; + unsigned long phys_block_length; + volatile flash_data_t *b_p = (flash_data_t*) block; + volatile flash_data_t *b_v; + cyg_bool bootblock; + + ROM = FLASH_P2V((unsigned long)block & flash_dev_info->base_mask); + + // check out which die we have to handle + die_number = 0; + for (j = 0; j < CYGNUM_FLASH_SERIES; j++) { + if (((unsigned long)block >= sdi[j].dev_start) && + ((unsigned long)block < (sdi[j].dev_start + sdi[j].dev_size))) { + die_number = j + 1; + break; + } + } + if (die_number == 0) { +#ifdef RAM_VERSION + d_print("\n\ndid not found a valid die number \n\n"); +#endif + return FLASH_ERR_DRV_WRONG_PART; + } + + // check out which area we have to handle inside the die + if ((unsigned long)block < sdi[die_number - 1].dev_start + + sdi[die_number - 1].num_blocks_1 * + sdi[die_number - 1].num_bytes_1) { + // we stay in flash region 1 + phys_block_length = sdi[die_number - 1].num_bytes_1; + if (sdi[die_number - 1].num_bytes_1 > sdi[die_number - 1].num_bytes_2) { + blocks_to_do = 1; // this is no boot block area + bootblock = 0; + } else { + blocks_to_do = FLASH_BOOTBLOCKS_PER_BLOCK; //sdi[die_number - 1].num_bytes_2 / sdi[die_number - 1].num_bytes_1; // this is a bootblock area + bootblock = 1; + } + } else { + // we stay in flash region 2 + phys_block_length = sdi[die_number - 1].num_bytes_2; + if (sdi[die_number - 1].num_bytes_2 > sdi[die_number - 1].num_bytes_1) { + blocks_to_do = 1; // this is no boot block area + bootblock = 0; + } else { + blocks_to_do = FLASH_BOOTBLOCKS_PER_BLOCK; //sdi[die_number - 1].num_bytes_1 / sdi[die_number - 1].num_bytes_2; // this is a bootblock area + bootblock = 1; + } + } + + len = phys_block_length; + + CYGHWR_FLASH_WRITE_ENABLE(); + while (len > 0) { + b_v = FLASH_P2V(b_p); + + // Clear any error conditions + *b_v = FLASH_Clear_Status; + + // Erase block + *b_v = FLASH_Block_Erase; + *b_v = FLASH_Confirm; + + timeout = 5000000; + while (((stat = *b_v) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) break; + } + + // Restore ROM to "normal" mode + *b_v = FLASH_Reset; + + if (stat & FLASH_ErrorMask) { + if (!(stat & FLASH_ErrorErase)) { + res = FLASH_ERR_HWR; // Unknown error + } else { + if (stat & FLASH_ErrorLowVoltage) + res = FLASH_ERR_LOW_VOLTAGE; + else if (stat & FLASH_ErrorLocked) + res = FLASH_ERR_PROTECT; + else + res = FLASH_ERR_ERASE; + } + } + + // Check if block got erased + + while (len > 0) { + b_v = FLASH_P2V(b_p); + b_p++; + if (*b_v != FLASH_BlankValue ) { + // Only update return value if erase operation was OK + if (FLASH_ERR_OK == res) res = FLASH_ERR_DRV_VERIFY; + return res; + } + len -= sizeof(*b_p); + } + + blocks_to_do--; + if (blocks_to_do) { + len = phys_block_length; + } else { + len = 0; + } + } + + CYGHWR_FLASH_WRITE_DISABLE(); + + return res; +} + +//---------------------------------------------------------------------------- +// Program Buffer +int +flash_program_buf(void* addr, void* data, int len, + unsigned long block_mask, int buffer_size) +{ + flash_data_t stat = 0; + int timeout; + int words_to_write; + volatile flash_data_t* ROM; + int i; + volatile flash_data_t* addr_v; + volatile flash_data_t* addr_p = (flash_data_t*) addr; + volatile flash_data_t* data_p = (flash_data_t*) data; + int res = FLASH_ERR_OK; + +#ifdef RAM_VERSION + d_print("programming at address: 0x%08X length: 0x%08X buffer_size: 0x%08X\n", + (unsigned long)addr, (unsigned long)len, (unsigned long)buffer_size); +#endif + // Base address of device(s) being programmed. + ROM = FLASH_P2V((unsigned long)addr & flash_dev_info->base_mask); + + CYGHWR_FLASH_WRITE_ENABLE(); + + // Clear any error conditions + ROM[0] = FLASH_Clear_Status; + while (len > 0) { + if (len/sizeof( flash_data_t ) >= buffer_size){ + words_to_write = buffer_size; //full buffer + } else { + words_to_write = len / sizeof( flash_data_t ); + if (len&1) + words_to_write++; + } + + addr_v = FLASH_P2V(addr_p); + addr_p += words_to_write; + timeout = 5000000; + + while (--timeout>0) { + *addr_v = FLASH_Write_Buffer; + stat=*addr_v; + //d_print("\nstatus after FLASH_WRITE_BUFFER command is 0x%08X\n", stat); + if (stat & FLASH_Status_Ready) + break; + } + if (timeout==0){ + res = FLASH_ERR_DRV_TIMEOUT; + goto bad; + } + + *addr_v = words_to_write - 1; // write word count + + for (i = 0; i < words_to_write; i++) { + *(addr_v+i) = *(data_p+i); + } + + *addr_v = FLASH_Confirm; + + timeout = 5000000; + while (((stat = *addr_v) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) { +#ifdef DEBUG + d_print("status is 0x%08X \n", stat); +#endif + res = FLASH_ERR_DRV_TIMEOUT; + goto bad; + } + } +#if 0 + d_print("address pointer : 0x%08X\n", (unsigned long)addr_v); + d_print("status register is: 0x%08X\n", stat); +#endif + if (stat & FLASH_ErrorMask) { + if (!(stat & FLASH_ErrorProgram)) + res = FLASH_ERR_HWR; // Unknown error + else { + if (stat & FLASH_ErrorLowVoltage) + res = FLASH_ERR_LOW_VOLTAGE; + else if (stat & FLASH_ErrorLocked) + res = FLASH_ERR_PROTECT; + else + res = FLASH_ERR_PROGRAM; + } + break; + } + *addr_v = FLASH_Clear_Status; + *addr_v = FLASH_Reset; + for (i = 0; i < words_to_write; i++) { + if (*(addr_v+i) != *(data_p+i)) { + res = FLASH_ERR_DRV_VERIFY; + break; + } + } + data_p += words_to_write; + if (words_to_write == buffer_size) { + len -= (buffer_size*sizeof(flash_data_t)); + } else { + len = 0; + } + } + + // Restore ROM to "normal" mode + bad: + ROM[0] = FLASH_Reset; + + CYGHWR_FLASH_WRITE_DISABLE(); + + // Ideally, we'd want to return not only the failure code, but also + // the address/device that reported the error. + return res; +} + +#ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING +//---------------------------------------------------------------------------- +// Lock block +int +flash_lock_block(void* block) +{ + volatile flash_data_t *ROM; + int res = FLASH_ERR_OK; + flash_data_t state; + int timeout = 5000000; + volatile flash_data_t* b_p = (flash_data_t*) block; + volatile flash_data_t *b_v; + cyg_bool bootblock; + int len; + int j, die_number, blocks_to_do; + unsigned long phys_block_length; + + if (!flash_dev_info->locking) + return res; + +#ifdef DEBUG + d_print("flash_lock_block %08x\n", block); +#endif + ROM = FLASH_P2V((unsigned long)block & flash_dev_info->base_mask); + + // check out which die we have to handle + die_number = 0; + for (j = 0; j < CYGNUM_FLASH_SERIES; j++) { + if (((unsigned long)block >= sdi[j].dev_start)&&((unsigned long)block < (sdi[j].dev_start + sdi[j].dev_size))) { + die_number = j + 1; + break; + } + } + if (die_number == 0) { +#ifdef RAM_VERSION + d_print("\n\ndid not found a valid die number \n\n"); +#endif + return FLASH_ERR_DRV_WRONG_PART; + } + + // check out which area we have to handle inside the die + if ((unsigned long)block < sdi[die_number - 1].dev_start + sdi[die_number - 1].num_blocks_1 * sdi[die_number - 1].num_bytes_1) { + // we stay in flash region 1 + phys_block_length = sdi[die_number - 1].num_bytes_1; + if (sdi[die_number - 1].num_bytes_1 > sdi[die_number - 1].num_bytes_2) { + blocks_to_do = 1; // this is no boot block area + bootblock = 0; + } else { + blocks_to_do = FLASH_BOOTBLOCKS_PER_BLOCK; //sdi[die_number - 1].num_bytes_2 / sdi[die_number - 1].num_bytes_1; // this is a bootblock area + bootblock = 1; + } + } else { + // we stay in flash region 2 + phys_block_length = sdi[die_number - 1].num_bytes_2; + if (sdi[die_number - 1].num_bytes_2 > sdi[die_number - 1].num_bytes_1) { + blocks_to_do = 1; // this is no boot block area + bootblock = 0; + } else { + blocks_to_do = FLASH_BOOTBLOCKS_PER_BLOCK; //sdi[die_number - 1].num_bytes_1 / sdi[die_number - 1].num_bytes_2; // this is a bootblock area + bootblock = 1; + } + } + len = phys_block_length; + + CYGHWR_FLASH_WRITE_ENABLE(); + + while (len > 0) { +#ifdef RAM_VERSION + d_print("locking block at address 0x%08X\n", (unsigned long)b_p); +#endif + b_v = FLASH_P2V(b_p); + + // Clear any error conditions + *b_v = FLASH_Clear_Status; + + // Set lock bit + *b_v = FLASH_Set_Lock; + *b_v = FLASH_Set_Lock_Confirm; // Confirmation + *(b_v + 2) = FLASH_Read_ID ; + while (((state = *(b_v + 2)) & FLASH_Lock_State_Mask) != FLASH_Status_Locked) { + if (--timeout == 0) { + res = FLASH_ERR_DRV_TIMEOUT; + break; + } + } + + // Restore ROM to "normal" mode + *b_v = FLASH_Reset; + + // Go to next block + b_p += len / sizeof( flash_data_t ); + + if (FLASH_ErrorLock == (state & FLASH_ErrorLock)) + res = FLASH_ERR_LOCK; + + if (res != FLASH_ERR_OK) + break; + + blocks_to_do--; + if (blocks_to_do) { + len = phys_block_length; + } else { + len = 0; + } + } + + CYGHWR_FLASH_WRITE_DISABLE(); + + return res; +} + +//---------------------------------------------------------------------------- +// Unlock block + +int +flash_unlock_block(void* block, int block_size, int blocks, void *myprint) +{ + volatile flash_data_t *ROM; + int res = FLASH_ERR_OK; + flash_data_t state; + int timeout = 5000000; + volatile flash_data_t* b_p = (flash_data_t*) block; + volatile flash_data_t *b_v; + int j, die_number, blocks_to_do; + unsigned long phys_block_length; + cyg_bool bootblock; + int len; +#ifdef DEBUG + void (*func_ptr)(void) = myprint; +#endif + +#ifdef DEBUG + d_print("flash_unlock_block function entered ....\n"); +#endif + if (!flash_dev_info->locking) + return res; + + ROM = FLASH_P2V((unsigned long)block & flash_dev_info->base_mask); +#ifdef DEBUG + d_print("flash_unlock_block dev %08x block %08x size %08x count %08x\n", ROM, block, block_size, blocks); +#endif + // check out which die we have to handle + die_number = 0; + for (j = 0; j < CYGNUM_FLASH_SERIES; j++) { + if (((unsigned long)block >= sdi[j].dev_start)&&((unsigned long)block < (sdi[j].dev_start + sdi[j].dev_size))) { + die_number = j+1; + break; + } + } + if (die_number == 0) { +#ifdef RAM_VERSION + d_print("\n\ndid not found a valid die number \n\n"); +#endif + return FLASH_ERR_DRV_WRONG_PART; + } + + // check out which area we have to handle inside the die + if ((unsigned long)block < sdi[die_number - 1].dev_start + sdi[die_number - 1].num_blocks_1 * sdi[die_number - 1].num_bytes_1) { + // we stay in flash region 1 + phys_block_length = sdi[die_number - 1].num_bytes_1; + if (sdi[die_number - 1].num_bytes_1 > sdi[die_number - 1].num_bytes_2) { + blocks_to_do = 1; // this is no boot block area + bootblock = 0; + } else { + blocks_to_do = FLASH_BOOTBLOCKS_PER_BLOCK; //sdi[die_number - 1].num_bytes_2 / sdi[die_number - 1].num_bytes_1; // this is a bootblock area + bootblock = 1; + } + } else { + // we stay in flash region 2 + phys_block_length = sdi[die_number - 1].num_bytes_2; + if (sdi[die_number - 1].num_bytes_2 > sdi[die_number - 1].num_bytes_1) { + blocks_to_do = 1; // this is no boot block area + bootblock = 0; + } else { + blocks_to_do = FLASH_BOOTBLOCKS_PER_BLOCK; //sdi[die_number - 1].num_bytes_1 / sdi[die_number - 1].num_bytes_2; // this is a bootblock area + bootblock = 1; + } + } +#ifdef RAM_VERSION + d_print("\n\n"); + d_print("unlocking block: ....... 0x%08X\n", (unsigned long)block); + d_print("block size: ............ 0x%08X\n", (unsigned long)block_size); + d_print("die number: ............ %d\n", die_number); + d_print("physical block length: . 0x%08X\n", phys_block_length); + d_print("blocks to do: .......... 0x%08X\n", blocks_to_do); +#endif + len = phys_block_length; + + CYGHWR_FLASH_WRITE_ENABLE(); + + while (len > 0) { +#ifdef RAM_VERSION + d_print("unlocking block at address 0x%08X\n", (unsigned long)b_p); +#endif + b_v = FLASH_P2V(b_p); + + // Clear any error conditions + *b_v = FLASH_Clear_Status; + + // Clear lock bit + *b_v = FLASH_Clear_Lock; + *b_v = FLASH_Clear_Lock_Confirm; // Confirmation + + *(b_v+2) = FLASH_Read_ID; + + while ((state = *(b_v+2)) & FLASH_Lock_State_Mask) { + if (--timeout == 0) { + res = FLASH_ERR_DRV_TIMEOUT; + break; + } + } + + // Restore ROM to "normal" mode + *b_v = FLASH_Reset; + + // Go to next block + b_p += len / sizeof( flash_data_t ); + + if (FLASH_ErrorLock == (state & FLASH_ErrorLock)) + res = FLASH_ERR_LOCK; + + if (res != FLASH_ERR_OK) + break; + + blocks_to_do--; + if (blocks_to_do) { + len = phys_block_length; + } else { + len = 0; + } + } + + CYGHWR_FLASH_WRITE_DISABLE(); + + return res; +} +#endif // CYGHWR_IO_FLASH_BLOCK_LOCKING +#endif // CYGONCE_DEVS_FLASH_INTEL_28FXXX_INL diff --git a/packages/devs/flash/intel/28fxxx/v2_0/include/flash_28fxxx_w18.inl b/packages/devs/flash/intel/28fxxx/v2_0/include/flash_28fxxx_w18.inl new file mode 100755 index 00000000..0998044d --- /dev/null +++ b/packages/devs/flash/intel/28fxxx/v2_0/include/flash_28fxxx_w18.inl @@ -0,0 +1,697 @@ +#ifndef CYGONCE_DEVS_FLASH_INTEL_28FXXX_INL +#define CYGONCE_DEVS_FLASH_INTEL_28FXXX_INL +//========================================================================== +// +// flash_28fxxx.inl +// +// Intel 28Fxxx series flash driver +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2002 Gary Thomas +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov +// Date: 2001-03-21 +// Purpose: +// Description: +// +// Notes: Device table could use unions of flags to save some space +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include + +#include +#include +#include CYGHWR_MEMORY_LAYOUT_H + +#include + +#define _FLASH_PRIVATE_ +#include + +#define nDEBUG + +#ifdef DEBUG +typedef void (*call_t)(char* str, ...); +extern void diag_printf(char* str, ...); +call_t d_print = &diag_printf; +#endif + + + + + + +//---------------------------------------------------------------------------- +// Common device details. +#define FLASH_Read_ID FLASHWORD( 0x90 ) +#define FLASH_Reset FLASHWORD( 0xFF ) +#define FLASH_Program FLASHWORD( 0x40 ) +#define FLASH_Write_Buffer FLASHWORD( 0xe8 ) +#define FLASH_Block_Erase FLASHWORD( 0x20 ) +#define FLASH_Confirm FLASHWORD( 0xD0 ) +#define FLASH_Resume FLASHWORD( 0xD0 ) + +#define FLASH_Set_Lock FLASHWORD( 0x60 ) +#define FLASH_Set_Lock_Confirm FLASHWORD( 0x01 ) +#define FLASH_Clear_Lock FLASHWORD( 0x60 ) +#define FLASH_Clear_Lock_Confirm FLASHWORD( 0xd0 ) +#define FLASH_Lock_State_Mask FLASHWORD( 0x03 ) +#define FLASH_Status_Locked FLASHWORD( 0x01 ) + +#define FLASH_Read_Status FLASHWORD( 0x70 ) +#define FLASH_Clear_Status FLASHWORD( 0x50 ) +#define FLASH_Status_Ready FLASHWORD( 0x80 ) + +// Status that we read back: +#define FLASH_ErrorMask FLASHWORD( 0x7E ) +#define FLASH_ErrorProgram FLASHWORD( 0x10 ) +#define FLASH_ErrorErase FLASHWORD( 0x20 ) +#define FLASH_ErrorLock FLASHWORD( 0x30 ) +#define FLASH_ErrorLowVoltage FLASHWORD( 0x08 ) +#define FLASH_ErrorLocked FLASHWORD( 0x02 ) + +// Platform code must define the below +// #define CYGNUM_FLASH_INTERLEAVE : Number of interleaved devices (in parallel) +// #define CYGNUM_FLASH_SERIES : Number of devices in series +// #define CYGNUM_FLASH_WIDTH : Width of devices on platform +// #define CYGNUM_FLASH_BASE : Address of first device + +#define CYGNUM_FLASH_BLANK (1) +#define CYGNUM_FLASH_DEVICES (CYGNUM_FLASH_INTERLEAVE*CYGNUM_FLASH_SERIES) + + +#ifndef FLASH_P2V +# define FLASH_P2V( _a_ ) ((volatile flash_data_t *)((CYG_ADDRWORD)(_a_))) +#endif +#ifndef CYGHWR_FLASH_28FXXX_PLF_INIT +# define CYGHWR_FLASH_28FXXX_PLF_INIT() +#endif +#ifndef CYGHWR_FLASH_WRITE_ENABLE +#define CYGHWR_FLASH_WRITE_ENABLE() +#endif +#ifndef CYGHWR_FLASH_WRITE_DISABLE +#define CYGHWR_FLASH_WRITE_DISABLE() +#endif + +//---------------------------------------------------------------------------- +// Now that device properties are defined, include magic for defining +// accessor type and constants. +#include + +//---------------------------------------------------------------------------- +// Information about supported devices +typedef struct flash_dev_info { + flash_data_t device_id; + cyg_uint32 block_size; + cyg_int32 block_count; + cyg_uint32 base_mask; + cyg_uint32 device_size; + cyg_bool locking; // supports locking + cyg_bool buffered_w; // supports buffered writes + cyg_bool bootblock; + cyg_uint32 bootblocks[12]; // 0 is bootblock offset, 1-11 sub-sector sizes (or 0) + cyg_bool banked; + cyg_uint32 banks[2]; // bank offets, highest to lowest (lowest should be 0) + // (only one entry for now, increase to support devices + // with more banks). +} flash_dev_info_t; + +static const flash_dev_info_t* flash_dev_info; +static const flash_dev_info_t supported_devices[] = { + #include +}; + + + +#define NUM_DEVICES (sizeof(supported_devices)/sizeof(flash_dev_info_t)) + + + +#if 1 +//---------------------------------------------------------------------------- +// Functions that put the flash device into non-read mode must reside +// in RAM. + + +void print_string(unsigned char *sp) + __attribute__ ((section (".2ram.print_string"))); + +void flash_query(void* data) __attribute__ ((section (".2ram.flash_query"))); + +int flash_erase_block(void* block, unsigned int size) + __attribute__ ((section (".2ram.flash_erase_block"))); +int flash_program_buf(void* addr, void* data, int len, + unsigned long block_mask, int buffer_size) + __attribute__ ((section (".2ram.flash_program_buf"))); +int flash_lock_block(void* addr) + __attribute__ ((section (".2ram.flash_lock_block"))); +int flash_unlock_block(void* block, int block_size, int blocks, void *) + __attribute__ ((section (".2ram.flash_unlock_block"))); + + + + +//---------------------------------------------------------------------------- +#endif + +#if 0 + while(1) { + *((unsigned long *)0x40E0002C) = 0x04000000; // clear GPIO90 + *((unsigned long *)0x40E00020) = 0x04000000; // set GPIO90 + } +#endif + +void print_string(unsigned char *sp) { + + unsigned char *cp; + + unsigned long value; + + cp = sp; + + + + + + while((*cp) != 0x00) { + *((volatile unsigned long *)0x40E0002C) = 0x04000000; // clear GPIO90 + *((volatile unsigned long *)0x40E00020) = 0x04000000; // set GPIO90 + + value = *((volatile unsigned long *)0x40100014); //FFLSR + + + while(!(value&0x40)){ + value = *((volatile unsigned long *)0x40100014); //FFLSR + } + *((volatile unsigned long *)0x40E0002C) = 0x04000000; // clear GPIO90 + *((volatile unsigned long *)0x40E00020) = 0x04000000; // set GPIO90 + + *((volatile unsigned long *)0x40100000) = (unsigned long)*cp; //FFTHR + + *((volatile unsigned long *)0x40E0002C) = 0x04000000; // clear GPIO90 + *((volatile unsigned long *)0x40E00020) = 0x04000000; // set GPIO90 + + + cp++; + *((volatile unsigned long *)0x40E0002C) = 0x04000000; // clear GPIO90 + *((volatile unsigned long *)0x40E0002C) = 0x04000000; // clear GPIO90 + *((volatile unsigned long *)0x40E0002C) = 0x04000000; // clear GPIO90 + *((volatile unsigned long *)0x40E0002C) = 0x04000000; // clear GPIO90 + *((volatile unsigned long *)0x40E00020) = 0x04000000; // set GPIO90 + + + } + + +} + + + + + + + + + + +// Initialize driver details +int +flash_hwr_init(void) +{ + int i; + flash_data_t id[2]; + + CYGHWR_FLASH_28FXXX_PLF_INIT(); + + flash_dev_query(id); + + // Look through table for device data + flash_dev_info = supported_devices; + for (i = 0; i < NUM_DEVICES; i++) { + + if (flash_dev_info->device_id == id[1]) + break; + flash_dev_info++; + } + + // Did we find the device? If not, return error. + if (NUM_DEVICES == i){ + return FLASH_ERR_DRV_WRONG_PART; + } + + // Hard wired for now + flash_info.block_size = flash_dev_info->block_size; + flash_info.blocks = flash_dev_info->block_count * CYGNUM_FLASH_SERIES; + flash_info.start = (void *)CYGNUM_FLASH_BASE; + flash_info.end = (void *)(CYGNUM_FLASH_BASE + (flash_dev_info->device_size * CYGNUM_FLASH_SERIES)); + + return FLASH_ERR_OK; +} + +//---------------------------------------------------------------------------- +// Map a hardware status to a package error +int +flash_hwr_map_error(int e) +{ + return e; +} + + +//---------------------------------------------------------------------------- +// See if a range of FLASH addresses overlaps currently running code +bool +flash_code_overlaps(void *start, void *end) +{ + extern unsigned char _stext[], _etext[]; + + return ((((unsigned long)&_stext >= (unsigned long)start) && + ((unsigned long)&_stext < (unsigned long)end)) || + (((unsigned long)&_etext >= (unsigned long)start) && + ((unsigned long)&_etext < (unsigned long)end))); +} + +//---------------------------------------------------------------------------- +// Flash Query +// +// Only reads the manufacturer and part number codes for the first +// device(s) in series. It is assumed that any devices in series +// will be of the same type. + +void +flash_query(void* data) +{ + volatile flash_data_t *ROM; + flash_data_t* id = (flash_data_t*) data; + flash_data_t w; + + ROM = FLASH_P2V(CYGNUM_FLASH_BASE); + w = ROM[0]; + + CYGHWR_FLASH_WRITE_ENABLE(); + + ROM[0] = FLASH_Read_ID; + + // Manufacturers' code + id[0] = ROM[0]; + // Part number + id[1] = ROM[1]; + + ROM[0] = FLASH_Reset; + + CYGHWR_FLASH_WRITE_DISABLE(); + + // Stall, waiting for flash to return to read mode. + while (w != ROM[0]); +} + +//---------------------------------------------------------------------------- +// Erase Block +int +flash_erase_block(void* block, unsigned int block_size) +{ + int res = FLASH_ERR_OK; + int timeout; + unsigned long len; + int len_ix = 1; + flash_data_t stat; + volatile flash_data_t *ROM; + volatile flash_data_t *b_p = (flash_data_t*) block; + volatile flash_data_t *b_v; + cyg_bool bootblock; + + ROM = FLASH_P2V((unsigned long)block & flash_dev_info->base_mask); + + // Is this the boot sector? + bootblock = (flash_dev_info->bootblock && + (flash_dev_info->bootblocks[0] == ((unsigned long)block - (unsigned long)ROM))); + if (bootblock) { + len = flash_dev_info->bootblocks[len_ix++]; + } else { + len = flash_dev_info->block_size; + } + + CYGHWR_FLASH_WRITE_ENABLE(); + + while (len > 0) { + b_v = FLASH_P2V(b_p); + + // Clear any error conditions + *b_v = FLASH_Clear_Status; + + // Erase block + *b_v = FLASH_Block_Erase; + *b_v = FLASH_Confirm; + + timeout = 5000000; + while(((stat = *b_v) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) break; + } + + // Restore ROM to "normal" mode + *b_v = FLASH_Reset; + + + + + if (stat & FLASH_ErrorMask) { + if (!(stat & FLASH_ErrorErase)) { + res = FLASH_ERR_HWR; // Unknown error + } else { + if (stat & FLASH_ErrorLowVoltage) + res = FLASH_ERR_LOW_VOLTAGE; + else if (stat & FLASH_ErrorLocked) + res = FLASH_ERR_PROTECT; + else + res = FLASH_ERR_ERASE; + } + } + + // Check if block got erased + + while (len > 0) { + b_v = FLASH_P2V(b_p); + b_p++; + if (*b_v != FLASH_BlankValue ) { + // Only update return value if erase operation was OK + if (FLASH_ERR_OK == res) res = FLASH_ERR_DRV_VERIFY; + return res; + } + len -= sizeof(*b_p); + } + + if (bootblock) + len = flash_dev_info->bootblocks[len_ix++]; + } + + CYGHWR_FLASH_WRITE_DISABLE(); + + return res; +} + +//---------------------------------------------------------------------------- +// Program Buffer +int +flash_program_buf(void* addr, void* data, int len, + unsigned long block_mask, int buffer_size) +{ + flash_data_t stat = 0; + int timeout; + volatile flash_data_t* ROM; + volatile flash_data_t* addr_v; + volatile flash_data_t* addr_p = (flash_data_t*) addr; + volatile flash_data_t* data_p = (flash_data_t*) data; + + int res = FLASH_ERR_OK; + + // Base address of device(s) being programmed. + ROM = FLASH_P2V((unsigned long)addr & flash_dev_info->base_mask); + + CYGHWR_FLASH_WRITE_ENABLE(); + + // Clear any error conditions + ROM[0] = FLASH_Clear_Status; + + while (len > 0) { + addr_v = FLASH_P2V(addr_p); + addr_p++; + *addr_v = FLASH_Program; + *addr_v = *data_p; + timeout = 5000000; + while(((stat = *addr_v) & FLASH_Status_Ready) != FLASH_Status_Ready) { + + if (--timeout == 0) { + #ifdef DEBUG + d_print("status is 0x%08X \n", stat); + #endif + res = FLASH_ERR_DRV_TIMEOUT; + goto bad; + } + } + if (stat & FLASH_ErrorMask) { + if (!(stat & FLASH_ErrorProgram)) + res = FLASH_ERR_HWR; // Unknown error + else { + if (stat & FLASH_ErrorLowVoltage) + res = FLASH_ERR_LOW_VOLTAGE; + else if (stat & FLASH_ErrorLocked) + res = FLASH_ERR_PROTECT; + else + res = FLASH_ERR_PROGRAM; + } + break; + } + *addr_v = FLASH_Clear_Status; + *addr_v = FLASH_Reset; + if (*addr_v != *data_p++) { + res = FLASH_ERR_DRV_VERIFY; + break; + } + len -= sizeof( flash_data_t ); + } + + // Restore ROM to "normal" mode + bad: + ROM[0] = FLASH_Reset; + + CYGHWR_FLASH_WRITE_DISABLE(); + + // Ideally, we'd want to return not only the failure code, but also + // the address/device that reported the error. + return res; +} + + + + + + +#ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING +//---------------------------------------------------------------------------- +// Lock block +int +flash_lock_block(void* block) +{ + volatile flash_data_t *ROM; + int res = FLASH_ERR_OK; + flash_data_t state; + int timeout = 5000000; + volatile flash_data_t* b_p = (flash_data_t*) block; + volatile flash_data_t *b_v; + cyg_bool bootblock; + int len, len_ix = 1; +#if 0 + register unsigned long PC asm("pc"); + + unsigned char testbuffer[3]; + + testbuffer[0]='o'; + testbuffer[1]='k'; + testbuffer[2]='\0'; + + *((volatile unsigned long *)0xa1000000) = PC; + *((volatile unsigned long *)0xa1000004) = testbuffer; + + return res; + + print_string(testbuffer); + + + testbuffer[0]='n'; + testbuffer[1]='a'; + testbuffer[2]='\0'; + + print_string(testbuffer); + return res; +#endif + if (!flash_dev_info->locking) { + return res; + } +#ifdef DEBUG + d_print("flash_lock_block %08x\n", block); +#endif + //ROM = (volatile flash_data_t*)((unsigned long)block & flash_dev_info->base_mask); + ROM = FLASH_P2V((unsigned long)block & flash_dev_info->base_mask); + + // Is this the boot sector? + bootblock = (flash_dev_info->bootblock && + (flash_dev_info->bootblocks[0] == ((unsigned long)block - (unsigned long)ROM))); + if (bootblock) { + len = flash_dev_info->bootblocks[len_ix++]; + } else { + len = flash_dev_info->block_size; + } + + CYGHWR_FLASH_WRITE_ENABLE(); + while (len > 0) { + b_v = FLASH_P2V(b_p); + + // Clear any error conditions + *b_v = FLASH_Clear_Status; + + // Set lock bit + *b_v = FLASH_Set_Lock; + *b_v = FLASH_Set_Lock_Confirm; // Confirmation + *(b_v+2) = FLASH_Read_ID ; + while(((state = *(b_v+2)) & FLASH_Lock_State_Mask) != FLASH_Status_Locked) { + if (--timeout == 0) { + res = FLASH_ERR_DRV_TIMEOUT; + break; + } + } + + // Restore ROM to "normal" mode + *b_v = FLASH_Reset; + + // Go to next block + b_p += len / sizeof( flash_data_t ); + len = 0; + + if (FLASH_ErrorLock == (state & FLASH_ErrorLock)) + res = FLASH_ERR_LOCK; + + if (res != FLASH_ERR_OK) + break; + + if (bootblock) + len = flash_dev_info->bootblocks[len_ix++]; + } + + CYGHWR_FLASH_WRITE_DISABLE(); + + return res; +} +//---------------------------------------------------------------------------- +// Unlock block + +int +flash_unlock_block(void* block, int block_size, int blocks, void *myprint) +{ + volatile flash_data_t *ROM; + int res = FLASH_ERR_OK; + flash_data_t state; + int timeout = 5000000; + volatile flash_data_t* b_p = (flash_data_t*) block; + volatile flash_data_t *b_v; + cyg_bool bootblock; + int len, len_ix = 1; + //void (*func_ptr)(void) = myprint; +#if 0 + unsigned char testbuffer[16]; + + testbuffer[0]='o'; + testbuffer[1]='k'; + testbuffer[2]='1'; + testbuffer[3]='\r'; + testbuffer[4]='\n'; + testbuffer[5]='\0'; +#endif + + //*((unsigned long *)0xA0100000) = func_ptr; + //(*func_ptr)(testbuffer); + //(*func_ptr)("flash_unlock_block function entered now ....\n"); + //return FLASH_ERR_OK; +#ifdef DEBUG + d_print("flash_unlock_block function entered ....\n"); +#endif + if (!flash_dev_info->locking) { + return res; + } + //ROM = (volatile flash_data_t*)((unsigned long)block & flash_dev_info->base_mask); + ROM = FLASH_P2V((unsigned long)block & flash_dev_info->base_mask); +#ifdef DEBUG + d_print("flash_unlock_block dev %08x block %08x size %08x count %08x\n", ROM, block, block_size, blocks); +#endif + // Is this the boot sector? + bootblock = (flash_dev_info->bootblock && + (flash_dev_info->bootblocks[0] == ((unsigned long)block - (unsigned long)ROM))); + if (bootblock) { + len = flash_dev_info->bootblocks[len_ix++]; + } else { + len = flash_dev_info->block_size; + } + + CYGHWR_FLASH_WRITE_ENABLE(); + + while (len > 0) { + b_v = FLASH_P2V(b_p); + // Clear any error conditions + *b_v = FLASH_Clear_Status; + + // Clear lock bit + *b_v = FLASH_Clear_Lock; + *b_v = FLASH_Clear_Lock_Confirm; // Confirmation + + *(b_v+2) = FLASH_Read_ID; + + while((state = *(b_v+2)) & FLASH_Lock_State_Mask) { + if (--timeout == 0) { + res = FLASH_ERR_DRV_TIMEOUT; + break; + } + } + // Restore ROM to "normal" mode + *b_v = FLASH_Reset; + + // Go to next block + b_p += len / sizeof( flash_data_t ); + len = 0; + if (FLASH_ErrorLock == (state & FLASH_ErrorLock)) { + res = FLASH_ERR_LOCK; + } + if (res != FLASH_ERR_OK) { + break; + } + if (bootblock) { + len = flash_dev_info->bootblocks[len_ix++]; + } + } + CYGHWR_FLASH_WRITE_DISABLE(); + // (*func_ptr)("leaving flash_unlock_block function now\n"); + + return res; + + // FIXME: Unlocking need to support some other parts in the future + // as well which take a little more diddling. +} +#endif // CYGHWR_IO_FLASH_BLOCK_LOCKING +#endif // CYGONCE_DEVS_FLASH_INTEL_28FXXX_INL diff --git a/packages/devs/flash/intel/bootblock/v2_0/ChangeLog b/packages/devs/flash/intel/bootblock/v2_0/ChangeLog new file mode 100644 index 00000000..a3e5c0d2 --- /dev/null +++ b/packages/devs/flash/intel/bootblock/v2_0/ChangeLog @@ -0,0 +1,74 @@ +2001-06-11 Gary Thomas + + * src/bootblock_flash.c:Remove dependency on printf() via user functions. + +2001-05-23 Jesper Skov + + * cdl/flash_intel_bootblock.cdl: Needs IO driver to copy functions + to RAM. + +2000-12-05 Jonathan Larmour + + * src/bootblock_flash.c (flash_code_overlaps): Define stext/etext + as array types so no assumptions can be made by the compiler about + location. + +2000-11-22 Jesper Skov + + * src/bootblock_flash.c (flash_hwr_init): Invalidate icache + instead of disabling it. + +2000-11-20 Jesper Skov + + * src/flash_query.c (flash_query): A new hardwired flash address. + * src/bootblock_flash.c (flash_hwr_init): Same + +2000-11-17 Jesper Skov + + * src/flash_erase_block.c: cleanup. + * src/flash_program_buf.c: cleanup. + +2000-11-16 Jesper Skov + + * src/bootblock_flash.c: Handle suspend failures. + * src/flash.h: Same. + +2000-11-15 Jesper Skov + + * Copy of edb7xxx driver. Need to rewrite to be more generic. Need + CDL options to control number of parts, interleaving, size, etc. + +//=========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/flash/intel/bootblock/v2_0/cdl/flash_intel_bootblock.cdl b/packages/devs/flash/intel/bootblock/v2_0/cdl/flash_intel_bootblock.cdl new file mode 100644 index 00000000..d8896d2f --- /dev/null +++ b/packages/devs/flash/intel/bootblock/v2_0/cdl/flash_intel_bootblock.cdl @@ -0,0 +1,92 @@ +# ==================================================================== +# +# flash_bootblock.cdl +# +# FLASH memory - Hardware support for Intel Boot Block Flash Memory +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): gthomas +# Contributors: jskov +# Date: 2000-07-26 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_FLASH_INTEL_BOOTBLOCK { + display "Intel boot block flash memory support" + + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + + implements CYGHWR_IO_FLASH_DEVICE + implements CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM + + include_dir . + include_files ; # none _exported_ whatsoever + description "FLASH memory device support for Intel boot block flash memory" + compile bootblock_flash.c + + make -priority 1 { + flash_erase_block.o: $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -mcpu=strongarm -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c + echo "#include " > flash_erase_block2.S + cat flash_erase_block.s >> flash_erase_block2.S + echo "FUNC_END(flash_erase_block_end)" >>flash_erase_block2.S + $(CC) -c $(INCLUDE_PATH) -o flash_erase_block.o flash_erase_block2.S + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_erase_block.o + } + make -priority 1 { + flash_program_buf.o: $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -mcpu=strongarm -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c + echo "#include " > flash_program_buf2.S + cat flash_program_buf.s >> flash_program_buf2.S + echo "FUNC_END(flash_program_buf_end)" >>flash_program_buf2.S + $(CC) -c $(INCLUDE_PATH) -o flash_program_buf.o flash_program_buf2.S + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_program_buf.o + } + make -priority 1 { + flash_query.o: $(REPOSITORY)/$(PACKAGE)/src/flash_query.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -mcpu=strongarm -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_query.c + echo "#include " > flash_query2.S + cat flash_query.s >> flash_query2.S + echo "FUNC_END(flash_query_end)" >>flash_query2.S + $(CC) -c $(INCLUDE_PATH) -o flash_query.o flash_query2.S + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_query.o + } +} diff --git a/packages/devs/flash/intel/bootblock/v2_0/src/bootblock_flash.c b/packages/devs/flash/intel/bootblock/v2_0/src/bootblock_flash.c new file mode 100644 index 00000000..12853b47 --- /dev/null +++ b/packages/devs/flash/intel/bootblock/v2_0/src/bootblock_flash.c @@ -0,0 +1,155 @@ +//========================================================================== +// +// bootblock_flash.c +// +// Flash programming +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, jskov +// Date: 2000-07-26 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include + +#define _FLASH_PRIVATE_ +#include + +#include "flash.h" + +#define _si(p) ((p[0]<<8)|p[1]) + +#define DEBUG 0 + +int +flash_hwr_init(void) +{ + unsigned short data[4]; + extern char flash_query, flash_query_end; + typedef int code_fun(unsigned char *); + code_fun *_flash_query; + int code_len, stat, num_regions, region_size; + + // Copy 'program' code to RAM for execution + code_len = (unsigned long)&flash_query_end - (unsigned long)&flash_query; + _flash_query = (code_fun *)flash_info.work_space; + memcpy(_flash_query, &flash_query, code_len); + HAL_DCACHE_SYNC(); // Should guarantee this code will run + HAL_ICACHE_INVALIDATE_ALL(); // is also required to avoid old contents + stat = (*_flash_query)(data); +#if DEBUG + (*flash_info.pf)("stat = %x\n", stat); + dump_buf(data, sizeof(data)); +#endif + + if (data[0] != FLASH_Intel_code) { + (*flash_info.pf)("Not Intel = %x\n", data[0]); + return FLASH_ERR_HWR; + } + + // FIXME: More devices, comments, etc + if (data[1] == (unsigned short)0x8897) { + num_regions = 64*2; + region_size = 0x20000; + } else if (data[1] == (unsigned short)0x88f4) { + num_regions = 32; // (only use one for now)*4; // 4 devices in serial, each having 32 regions + region_size = 0x10000; + } else { + (*flash_info.pf)("Unknown device type: %x\n", data[1]); + return FLASH_ERR_HWR; + } + + // Hard wired for now FIXME + flash_info.block_size = region_size; + flash_info.blocks = num_regions; +#if 0 // This should be used only for the gross XX firmware build + flash_info.start = (void *)0; + flash_info.end = (void *)(0x10000000+(num_regions*region_size)); +#else + flash_info.start = (void *)0x50000000; + flash_info.end = (void *)(0x50000000+(num_regions*region_size)); +#endif + + return FLASH_ERR_OK; +} + +// Map a hardware status to a package error +int +flash_hwr_map_error(int err) +{ + if (err & 0x007E007E) { + (*flash_info.pf)("Err = %x\n", err); + if (err & 0x00400040) { + return FLASH_ERR_ERASE_SUSPEND; + } else + if (err & 0x00040004) { + return FLASH_ERR_PROGRAM_SUSPEND; + } else + if (err & 0x00020002) { + return FLASH_ERR_PROTECT; + } else + if (err & 0x00100010) { + return FLASH_ERR_PROGRAM; + } else + if (err & 0x00200020) { + return FLASH_ERR_ERASE; + } else + return FLASH_ERR_HWR; // FIXME + } else { + return FLASH_ERR_OK; + } +} + +// See if a range of FLASH addresses overlaps currently running code +bool +flash_code_overlaps(void *start, void *end) +{ + extern char _stext[], _etext[]; + + return ((((unsigned long)&_stext >= (unsigned long)start) && + ((unsigned long)&_stext < (unsigned long)end)) || + (((unsigned long)&_etext >= (unsigned long)start) && + ((unsigned long)&_etext < (unsigned long)end))); +} diff --git a/packages/devs/flash/intel/bootblock/v2_0/src/flash.h b/packages/devs/flash/intel/bootblock/v2_0/src/flash.h new file mode 100644 index 00000000..53191e02 --- /dev/null +++ b/packages/devs/flash/intel/bootblock/v2_0/src/flash.h @@ -0,0 +1,82 @@ +//========================================================================== +// +// flash.h +// +// Flash programming - device constants, etc. +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2000-07-26 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#ifndef _FLASH_HWR_H_ +#define _FLASH_HWR_H_ + +// FIXME: must be 16/32 bit depending on use of interleaved parts + +#define FLASH_Read_ID 0x9090 // 9090 +#define FLASH_Read_Status 0x0070 // 0070 +#define FLASH_Clear_Status 0x5050 // 5050 +#define FLASH_Status_Ready 0x0080 // 0080 // Only low 8 bits +#define FLASH_Program 0x4040 // 4040 +#define FLASH_Block_Erase 0x2020 // 2020 +#define FLASH_Suspend 0xB0B0 // B0B0 +#define FLASH_Resume 0xD0D0 // D0D0 +#define FLASH_Confirm 0xD0D0 // D0D0 +#define FLASH_Reset 0xFFFF // FFFF + +#define FLASH_BLOCK_SIZE 0x10000 +#define FLASH_BOOT_BLOCK_SIZE 0x2000 + +#define FLASH_Intel_code 0x89 + + + +#ifndef GO_FAST +# define GO_FAST +# define GO_SLOW +#endif + + +#endif // _FLASH_HWR_H_ diff --git a/packages/devs/flash/intel/bootblock/v2_0/src/flash_erase_block.c b/packages/devs/flash/intel/bootblock/v2_0/src/flash_erase_block.c new file mode 100644 index 00000000..e3cb2fd1 --- /dev/null +++ b/packages/devs/flash/intel/bootblock/v2_0/src/flash_erase_block.c @@ -0,0 +1,115 @@ +//========================================================================== +// +// flash_erase_block.c +// +// Flash programming +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2000-07-14 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include +#include +#include + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +int flash_erase_block(volatile unsigned short *block) +{ + volatile unsigned short *ROM, *sb; + unsigned long stat; + int timeout = 50000; + int len, block_size; + + GO_SLOW + + ROM = (volatile unsigned short *)((unsigned long)block & 0xFF800000); + + // Clear any error conditions + ROM[0] = FLASH_Clear_Status; + + len = FLASH_BLOCK_SIZE; + if (((unsigned long)block - (unsigned long)ROM) < FLASH_BLOCK_SIZE) { + block_size = FLASH_BOOT_BLOCK_SIZE; // First 8 blocks are only 8Kx2 each + } else { + block_size = FLASH_BLOCK_SIZE; + } + sb = block; + while (len > 0) { + // Erase block + ROM[0] = FLASH_Block_Erase; + *block = FLASH_Confirm; + timeout = 5000000; + while(((stat = ROM[0]) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) break; + } + + len -= block_size; + block += block_size / sizeof(*block); + } + + // Restore ROM to "normal" mode + ROM[0] = FLASH_Reset; + + // If an error was reported, see if the block erased anyway + if (stat & 0x007E007E) { + len = FLASH_BLOCK_SIZE; + block = sb; + while (len > 0) { + if (*block++ != 0xFFFFFFFF) break; + len -= sizeof(*block); + } + if (len == 0) stat = 0; + } + + GO_FAST + + return stat; +} diff --git a/packages/devs/flash/intel/bootblock/v2_0/src/flash_program_buf.c b/packages/devs/flash/intel/bootblock/v2_0/src/flash_program_buf.c new file mode 100644 index 00000000..77c85411 --- /dev/null +++ b/packages/devs/flash/intel/bootblock/v2_0/src/flash_program_buf.c @@ -0,0 +1,104 @@ +//========================================================================== +// +// flash_program_buf.c +// +// Flash programming +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2000-07-14 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include +#include +#include + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +int +flash_program_buf(volatile unsigned short *addr, unsigned short *data, int len) +{ + volatile unsigned short *ROM; + unsigned short stat = 0; + int timeout = 50000; + + GO_SLOW + + ROM = (volatile unsigned short *)((unsigned long)addr & 0xFF800000); + // Clear any error conditions + ROM[0] = FLASH_Clear_Status; + + while (len > 0) { + ROM[0] = FLASH_Program; + *addr = *data; + timeout = 5000000; + while(((stat = ROM[0]) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) { + goto bad; + } + } + if (stat & 0x007E) { + break; + } + ROM[0] = FLASH_Reset; + if (*addr++ != *data++) { + stat = 0x9910; + break; + } + len -= 2; + } + + // Restore ROM to "normal" mode + bad: + ROM[0] = FLASH_Reset; + + GO_FAST + + return stat; +} diff --git a/packages/devs/flash/intel/bootblock/v2_0/src/flash_query.c b/packages/devs/flash/intel/bootblock/v2_0/src/flash_query.c new file mode 100644 index 00000000..3d7077b9 --- /dev/null +++ b/packages/devs/flash/intel/bootblock/v2_0/src/flash_query.c @@ -0,0 +1,84 @@ +//========================================================================== +// +// flash_query.c +// +// Flash programming - query device +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2000-07-26 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include +#include +#include +#include CYGHWR_MEMORY_LAYOUT_H + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +#define CNT 200*1000*10 // Approx 20ms + +int +flash_query(unsigned short *data) +{ + volatile unsigned short *ROM; + int cnt; + int cache_on; + + ROM = (volatile unsigned short *)0x53000000; + + ROM[0] = FLASH_Read_ID; + for (cnt = CNT; cnt > 0; cnt--) ; + *data++ = *ROM++; // Manufacturer code + *data++ = *ROM++; // Device identifier + + ROM[0] = FLASH_Reset; + + return 0; +} diff --git a/packages/devs/flash/intel/strata/v2_0/src/flash_program_buf2.c b/packages/devs/flash/intel/strata/v2_0/src/flash_program_buf2.c new file mode 100755 index 00000000..5af493d8 --- /dev/null +++ b/packages/devs/flash/intel/strata/v2_0/src/flash_program_buf2.c @@ -0,0 +1,217 @@ +//========================================================================== +// +// flash_program_buf.c +// +// Flash programming +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas, hmt +// Contributors: gthomas +// Date: 2001-02-14 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + + +// original code changed by KARO electronics GmbH 09.04.2003 +// the original code assumes, that the BA is constant over the whole region to program. +// As we remap the first 4k of flash to DRAM, and the corresponding DRAM to flash, +// this is not true if we want to update the RedBoot image itself. +#include "strata.h" + +#include +#include +#include + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +int +flash_program_buf(volatile flash_t *addr, flash_t *data, int len, + unsigned long block_mask, int buffer_size) +{ + volatile flash_t *ROM; + volatile flash_t *BA; + volatile flash_t *phy_address; + flash_t stat = 0; + int timeout = 50000; + int cache_on; +#ifdef FLASH_Write_Buffer + int i, wc; +#endif + + phy_address = addr; + + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + + // Get base address and map addresses to virtual addresses + ROM = FLASH_P2V( CYGNUM_FLASH_BASE_MASK & (unsigned int)addr); + BA = FLASH_P2V( block_mask & (unsigned int)addr ); + addr = FLASH_P2V(addr); + + + + // Clear any error conditions + ROM[0] = FLASH_Clear_Status; + +#ifdef FLASH_Write_Buffer + // Write any big chunks first + while (len >= buffer_size) { + ROM = FLASH_P2V( CYGNUM_FLASH_BASE_MASK & (unsigned int)phy_address ); + BA = FLASH_P2V( block_mask & (unsigned int)phy_address ); + addr = FLASH_P2V(phy_address); + + wc = buffer_size; + if (wc > len) wc = len; + len -= wc; + + // convert 'wc' in bytes to 'wc' in 'flash_t' + + wc = wc / sizeof(flash_t); // Word count + + + + *BA = FLASH_Write_Buffer; + + timeout = 5000000; + while(((stat = ROM[0]) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) { + + + goto bad; + } + *BA = FLASH_Write_Buffer; + } + + *BA = FLASHWORD(wc-1); // Count is 0..N-1 + for (i = 0; i < wc; i++) { +#ifdef CYGHWR_FLASH_WRITE_ELEM + CYGHWR_FLASH_WRITE_ELEM(addr+i, data+i); +#else + *(addr+i) = *(data+i); +#endif + } + + + + *BA = FLASH_Confirm; + + ROM[0] = FLASH_Read_Status; + timeout = 5000000; + while(((stat = ROM[0]) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) { + + + + goto bad; + } + } + + // Jump out if there was an error + if (stat & FLASH_ErrorMask) { + + + + goto bad; + } + + // And verify the data - also increments the pointers. + *BA = FLASH_Reset; + for (i = 0; i < wc; i++) { + phy_address++; + if ( *addr++ != *data++ ) { + stat = FLASH_ErrorNotVerified; + goto bad; + } + } + + + + + } +#endif + + while (len > 0) { + diag_printf("hier komm ich auch rein !!!!\n"); + ROM = FLASH_P2V( CYGNUM_FLASH_BASE_MASK & (unsigned int)phy_address ); + BA = FLASH_P2V( block_mask & (unsigned int)phy_address ); + addr = FLASH_P2V(phy_address); + + ROM[0] = FLASH_Program; +#ifdef CYGHWR_FLASH_WRITE_ELEM + CYGHWR_FLASH_WRITE_ELEM(addr, data); +#else + *addr = *data; +#endif + timeout = 5000000; + while(((stat = ROM[0]) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) { + goto bad; + } + } + if (stat & FLASH_ErrorMask) { + break; + } + ROM[0] = FLASH_Reset; + phy_address++; + if (*addr++ != *data++) { + stat = FLASH_ErrorNotVerified; + break; + } + len -= sizeof( flash_t ); + } + + // Restore ROM to "normal" mode + bad: + ROM[0] = FLASH_Reset; + + if (cache_on) { + HAL_DCACHE_ENABLE(); + } + + return stat; +} diff --git a/packages/devs/serial/arm/triton/v2_0/cdl/ser_arm_xscale_triton.cdl b/packages/devs/serial/arm/triton/v2_0/cdl/ser_arm_xscale_triton.cdl new file mode 100755 index 00000000..fe8f643f --- /dev/null +++ b/packages/devs/serial/arm/triton/v2_0/cdl/ser_arm_xscale_triton.cdl @@ -0,0 +1,200 @@ +# ==================================================================== +# +# ser_arm_xscale_triton.cdl +# +# eCos serial TRITON configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): msalter, usteinkohl +# Original data: msalter, usteinkohl +# Contributors: +# Date: 14th January 2003 (last modification) +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + + +cdl_package CYGPKG_IO_SERIAL_ARM_XSCALE_TRITON { + display "Ka-Ro Triton serial device drivers" + + parent CYGPKG_IO_SERIAL_DEVICES + active_if CYGPKG_IO_SERIAL +# active_if CYGPKG_HAL_ARM_XSCALE_TRITON_STK + + requires CYGPKG_ERROR + include_dir cyg/io + + description " + This option enables the serial device drivers for the + TRITON evaluation board." + doc redirect/ecos-device-drivers.html + + # FIXME: This really belongs in the GENERIC_16X5X package + cdl_interface CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED { + display "Generic 16x5x serial driver required" + } + define_proc { + puts $::cdl_header "#define CYGPRI_IO_SERIAL_GENERIC_16X5X_STEP 1" + } + + + define_proc { + puts $::cdl_system_header "/***** serial driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_GENERIC_16X5X_INL " + puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_GENERIC_16X5X_CFG " + puts $::cdl_system_header "/***** serial driver proc output end *****/" + } + + cdl_component CYGPKG_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0 { + display "ARM XSCALE TRITON serial port 0 driver" + flavor bool + default_value 1 + + implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED + implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW + implements CYGINT_IO_SERIAL_LINE_STATUS_HW + implements CYGNUM_SERIAL_FLOW_RTSCTS_RX + implements CYGNUM_SERIAL_FLOW_RTSCTS_TX + + + description " + This option includes the serial device driver for the Ka-Ro + TRITON port 0." + + cdl_option CYGDAT_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0_NAME { + display "Device name for TRITON serial port 0 driver" + flavor data + default_value {"\"/dev/ser0\""} + description " + This option specifies the name of the serial device + for the Ka-Ro TRITON port 0." + } + + cdl_option CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0_BAUD { + display "Baud rate for the TRITON serial port 0 driver" + flavor data + legal_values { 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 + 3600 4800 7200 9600 14400 19200 38400 + 57600 115200 } + default_value 38400 + description " + This option specifies the default baud rate (speed) + for the TRITON port 0." + } + + cdl_option CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0_BUFSIZE { + display "Buffer size for the TRITON serial port 0 driver" + flavor data + legal_values 0 to 8192 + default_value 128 + description " + This option specifies the size of the internal buffers + used for the TRITON port 0." + } + } + +# cdl_component CYGPKG_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1 { +# display "ARM TRITON serial port 1 driver" +# flavor bool +# default_value 1 +# +# implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED +# implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW +# implements CYGINT_IO_SERIAL_LINE_STATUS_HW +# +# description " +# This option includes the serial device driver for the +# TRITON port 1." +# +# cdl_option CYGDAT_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_NAME { +# display "Device name for TRITON serial port 1 driver" +# flavor data +# default_value {"\"/dev/ser1\""} +# description " +# This option specifies the name of the serial device +# for the TRITON port 1." +# } + +# cdl_option CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_BAUD { +# display "Baud rate for the TRITON serial port 1 driver" +# flavor data +# legal_values { 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 +# 3600 4800 7200 9600 14400 19200 38400 +# 57600 115200 } +# default_value 38400 +# description " +# This option specifies the default baud rate (speed) +# for the TRITON port 1." +# } + +# cdl_option CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_BUFSIZE { +# display "Buffer size for the TRITON serial port 1 driver" +# flavor data +# legal_values 0 to 8192 +# default_value 128 +# description " +# This option specifies the size of the internal buffers +# used for the TRITON port 1." +# } +# } + + cdl_component CYGPKG_IO_SERIAL_ARM_XSCALE_TRITON_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0 + + implements CYGINT_IO_SERIAL_TEST_SKIP_9600 + implements CYGINT_IO_SERIAL_TEST_SKIP_115200 + implements CYGINT_IO_SERIAL_TEST_SKIP_PARITY_EVEN + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"triton\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\"" + } + } +} + +# EOF ser_arm_xscale_triton.cdl diff --git a/packages/devs/serial/arm/triton/v2_0/include/arm_xscale_triton_ser.inl b/packages/devs/serial/arm/triton/v2_0/include/arm_xscale_triton_ser.inl new file mode 100755 index 00000000..98046757 --- /dev/null +++ b/packages/devs/serial/arm/triton/v2_0/include/arm_xscale_triton_ser.inl @@ -0,0 +1,162 @@ +//========================================================================== +// +// io/serial/arm/arm_xscale_triton_ser.inl +// +// Ka-Ro TRITON Serial I/O definitions +// +//========================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter, usteinkohl +// Contributors: msalter, usteinkohl +// Date: 14th January 2003 +// Purpose: TRITON Serial I/O module (interrupt driven version) +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +//----------------------------------------------------------------------------- +// Baud rate specification + +static unsigned short select_baud[] = { + 0, // Unused + 0, // 50 + 0, // 75 + 1047, // 110 + 0, // 134.5 + 768, // 150 + 0, // 200 + 384, // 300 + 192, // 600 + 96, // 1200 + 24, // 1800 + 48, // 2400 + 0, // 3600 + 24, // 4800 + 16, // 7200 + 12, // 9600 + 8, // 14400 + 6, // 19200 + 3, // 38400 + 2, // 57600 + 1, // 115200 +}; + +#ifdef CYGPKG_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0 +static pc_serial_info triton_serial_info0 = {0x40100000, + CYGNUM_HAL_INTERRUPT_SERIALA}; +#if CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0_BUFSIZE > 0 +static unsigned char triton_serial_out_buf0[CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0_BUFSIZE]; +static unsigned char triton_serial_in_buf0[CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0_BUFSIZE]; + +static SERIAL_CHANNEL_USING_INTERRUPTS(triton_serial_channel0, + pc_serial_funs, + triton_serial_info0, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &triton_serial_out_buf0[0], sizeof(triton_serial_out_buf0), + &triton_serial_in_buf0[0], sizeof(triton_serial_in_buf0) + ); +#else +static SERIAL_CHANNEL(triton_serial_channel0, + pc_serial_funs, + triton_serial_info0, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT + ); +#endif + +DEVTAB_ENTRY(triton_serial_io0, + CYGDAT_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0_NAME, + 0, // Does not depend on a lower level interface + &cyg_io_serial_devio, + pc_serial_init, + pc_serial_lookup, // Serial driver may need initializing + &triton_serial_channel0 + ); +#endif // CYGPKG_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL0 + +#ifdef CYGPKG_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1 +static pc_serial_info triton_serial_info1 = {0x40200000, + CYGNUM_HAL_INTERRUPT_SERIALB}; +#if CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_BUFSIZE > 0 +static unsigned char triton_serial_out_buf1[CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_BUFSIZE]; +static unsigned char triton_serial_in_buf1[CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_BUFSIZE]; + +static SERIAL_CHANNEL_USING_INTERRUPTS(triton_serial_channel1, + pc_serial_funs, + triton_serial_info1, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &triton_serial_out_buf1[0], sizeof(triton_serial_out_buf1), + &triton_serial_in_buf1[0], sizeof(triton_serial_in_buf1) + ); +#else +static SERIAL_CHANNEL(triton_serial_channel1, + pc_serial_funs, + triton_serial_info1, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT + ); +#endif + +DEVTAB_ENTRY(triton_serial_io1, + CYGDAT_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1_NAME, + 0, // Does not depend on a lower level interface + &cyg_io_serial_devio, + pc_serial_init, + pc_serial_lookup, // Serial driver may need initializing + &triton_serial_channel1 + ); +#endif // CYGPKG_IO_SERIAL_ARM_XSCALE_TRITON_SERIAL1 + +// EOF arm_xscale_triton_ser.inl diff --git a/packages/fs/jffs2/v2_0/src/file-ecos.c b/packages/fs/jffs2/v2_0/src/file-ecos.c new file mode 100644 index 00000000..edad4383 --- /dev/null +++ b/packages/fs/jffs2/v2_0/src/file-ecos.c @@ -0,0 +1,214 @@ +/* + * JFFS2 -- Journalling Flash File System, Version 2. + * + * Copyright (C) 2001, 2002 Red Hat, Inc. + * + * Created by David Woodhouse + * + * For licensing information, see the file 'LICENCE' in this directory. + * + * $Id$ + * + */ + +#include +#include +#include +#include "nodelist.h" + +int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg) +{ + struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); + struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); + unsigned char *pg_buf; + int ret; + + D1(printk(KERN_DEBUG "jffs2_do_readpage_nolock(): ino #%lu, page at offset 0x%lx\n", inode->i_ino, pg->index << PAGE_CACHE_SHIFT)); + + if (!PageLocked(pg)) + PAGE_BUG(pg); + + pg_buf = (char *)kmap(pg); + /* FIXME: Can kmap fail? */ + + ret = jffs2_read_inode_range(c, f, pg_buf, pg->index << PAGE_CACHE_SHIFT, PAGE_CACHE_SIZE); + + if (ret) { + ClearPageUptodate(pg); + SetPageError(pg); + } else { + SetPageUptodate(pg); + ClearPageError(pg); + } + + flush_dcache_page(pg); + kunmap(pg); + + D1(printk(KERN_DEBUG "readpage finished\n")); + return 0; +} + +int jffs2_do_readpage_unlock(struct inode *inode, struct page *pg) +{ + int ret = jffs2_do_readpage_nolock(inode, pg); + UnlockPage(pg); + return ret; +} + + +//int jffs2_readpage (struct file *filp, struct page *pg) +int jffs2_readpage (struct inode *d_inode, struct page *pg) +{ + // struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode); + int ret; + + // down(&f->sem); + ret = jffs2_do_readpage_unlock(d_inode, pg); + // up(&f->sem); + return ret; +} + +//int jffs2_prepare_write (struct file *filp, struct page *pg, unsigned start, unsigned end) +int jffs2_prepare_write (struct inode *d_inode, struct page *pg, unsigned start, unsigned end) +{ + struct inode *inode = d_inode; + struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); + uint32_t pageofs = pg->index << PAGE_CACHE_SHIFT; + int ret = 0; + + D1(printk(KERN_DEBUG "jffs2_prepare_write()\n")); + + if (pageofs > inode->i_size) { + /* Make new hole frag from old EOF to new page */ + struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); + struct jffs2_raw_inode ri; + struct jffs2_full_dnode *fn; + uint32_t phys_ofs, alloc_len; + + D1(printk(KERN_DEBUG "Writing new hole frag 0x%x-0x%x between current EOF and new page\n", + (unsigned int)inode->i_size, pageofs)); + + ret = jffs2_reserve_space(c, sizeof(ri), &phys_ofs, &alloc_len, ALLOC_NORMAL); + if (ret) + return ret; + + down(&f->sem); + memset(&ri, 0, sizeof(ri)); + + ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); + ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); + ri.totlen = cpu_to_je32(sizeof(ri)); + ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4)); + + ri.ino = cpu_to_je32(f->inocache->ino); + ri.version = cpu_to_je32(++f->highest_version); + ri.mode = cpu_to_jemode(inode->i_mode); + ri.uid = cpu_to_je16(inode->i_uid); + ri.gid = cpu_to_je16(inode->i_gid); + + ri.isize = cpu_to_je32(max((uint32_t)inode->i_size, pageofs)); + ri.atime = ri.ctime = ri.mtime = cpu_to_je32(cyg_timestamp()); + ri.offset = cpu_to_je32(inode->i_size); + ri.dsize = cpu_to_je32(pageofs - inode->i_size); + ri.csize = cpu_to_je32(0); + ri.compr = JFFS2_COMPR_ZERO; + ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8)); + ri.data_crc = cpu_to_je32(0); + + fn = jffs2_write_dnode(c, f, &ri, NULL, 0, phys_ofs, NULL); + jffs2_complete_reservation(c); + if (IS_ERR(fn)) { + ret = PTR_ERR(fn); + up(&f->sem); + return ret; + } + ret = jffs2_add_full_dnode_to_inode(c, f, fn); + if (f->metadata) { + jffs2_mark_node_obsolete(c, f->metadata->raw); + jffs2_free_full_dnode(f->metadata); + f->metadata = NULL; + } + if (ret) { + D1(printk(KERN_DEBUG "Eep. add_full_dnode_to_inode() failed in prepare_write, returned %d\n", ret)); + jffs2_mark_node_obsolete(c, fn->raw); + jffs2_free_full_dnode(fn); + up(&f->sem); + return ret; + } + inode->i_size = pageofs; + up(&f->sem); + } + + + /* Read in the page if it wasn't already present, unless it's a whole page */ + // eCos has no concept of uptodate and by default always reads pages afresh + if (!Page_Uptodate(pg) && (start || end < PAGE_CACHE_SIZE)) { + down(&f->sem); + ret = jffs2_do_readpage_nolock(inode, pg); + up(&f->sem); + } + D1(printk(KERN_DEBUG "end prepare_write()\n")); + return ret; +} + +//int jffs2_commit_write (struct file *filp, struct page *pg, unsigned start, unsigned end) +int jffs2_commit_write (struct inode *d_inode, struct page *pg, unsigned start, unsigned end) +{ + /* Actually commit the write from the page cache page we're looking at. + * For now, we write the full page out each time. It sucks, but it's simple + */ + struct inode *inode = d_inode; + struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); + struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); + struct jffs2_raw_inode *ri; + int ret = 0; + uint32_t writtenlen = 0; + + D1(printk(KERN_DEBUG "jffs2_commit_write(): ino #%lu, page at 0x%lx, range %d-%d\n", + inode->i_ino, pg->index << PAGE_CACHE_SHIFT, start, end)); + + + ri = jffs2_alloc_raw_inode(); + if (!ri) { + D1(printk(KERN_DEBUG "jffs2_commit_write(): Allocation of raw inode failed\n")); + return -ENOMEM; + } + + /* Set the fields that the generic jffs2_write_inode_range() code can't find */ + ri->ino = cpu_to_je32(inode->i_ino); + ri->mode = cpu_to_jemode(inode->i_mode); + ri->uid = cpu_to_je16(inode->i_uid); + ri->gid = cpu_to_je16(inode->i_gid); + ri->isize = cpu_to_je32((uint32_t)inode->i_size); + ri->atime = ri->ctime = ri->mtime = cpu_to_je32(cyg_timestamp()); + + ret = jffs2_write_inode_range(c, f, ri, page_address(pg) + start, + (pg->index << PAGE_CACHE_SHIFT) + start, + end - start, &writtenlen); + + if (ret) { + /* There was an error writing. */ + SetPageError(pg); + } + + if (writtenlen) { + if (inode->i_size < (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen) { + inode->i_size = (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen; + inode->i_ctime = inode->i_mtime = je32_to_cpu(ri->ctime); + } + } + + jffs2_free_raw_inode(ri); + + if (start+writtenlen < end) { + /* generic_file_write has written more to the page cache than we've + actually written to the medium. Mark the page !Uptodate so that + it gets reread */ + D1(printk(KERN_DEBUG "jffs2_commit_write(): Not all bytes written. Marking page !uptodate\n")); + SetPageError(pg); + ClearPageUptodate(pg); + } + + D1(printk(KERN_DEBUG "jffs2_commit_write() returning %d\n",writtenlen?writtenlen:ret)); + return writtenlen?writtenlen:ret; +} diff --git a/packages/fs/jffs2/v2_0/src/jffs2port.h b/packages/fs/jffs2/v2_0/src/jffs2port.h new file mode 100644 index 00000000..cf84370c --- /dev/null +++ b/packages/fs/jffs2/v2_0/src/jffs2port.h @@ -0,0 +1,241 @@ +#ifndef __LINUX_JFFS2PORT_H__ +#define __LINUX_JFFS2PORT_H__ + +/* $Id$ */ + +#include +#include +//#include +#include +//#include + +#include // tracing macros +#include // assertion macros + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include + +#include + +#include +#include +#include +#include +// Linux types +#define printf diag_printf + +// Structures used by VFS + +typedef unsigned short kdev_t; + +struct qstr { + const unsigned char * name; + unsigned int len; + unsigned int hash; +}; + +#define DNAME_INLINE_LEN 16 + +struct dentry { + // atomic_t d_count; + unsigned int d_flags; + struct inode * d_inode; /* Where the name belongs to - NULL is negative */ + struct dentry * d_parent; /* parent directory */ + struct list_head d_hash; /* lookup hash list */ + struct list_head d_child; /* child of parent list */ + struct list_head d_subdirs; /* our children */ + struct list_head d_alias; /* inode alias list */ + struct qstr d_name; + struct dentry_operations *d_op; + struct super_block * d_sb; /* The root of the dentry tree */ + unsigned char d_iname[DNAME_INLINE_LEN]; /* small names */ +}; + +struct file { + struct dentry *f_dentry; + unsigned int f_flags; + mode_t f_mode; + loff_t f_pos; + unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin; +}; + +#define ATTR_MODE 1 +#define ATTR_UID 2 +#define ATTR_GID 4 +#define ATTR_SIZE 8 +#define ATTR_ATIME 16 +#define ATTR_MTIME 32 +#define ATTR_CTIME 64 +#define ATTR_ATIME_SET 128 +#define ATTR_MTIME_SET 256 +#define ATTR_FORCE 512 /* Not a change, but a change it */ +#define ATTR_ATTR_FLAG 1024 + +typedef unsigned short umode_t; + +struct iattr { + unsigned int ia_valid; + umode_t ia_mode; + uid_t ia_uid; + gid_t ia_gid; + loff_t ia_size; + time_t ia_atime; + time_t ia_mtime; + time_t ia_ctime; +}; + +struct page { + unsigned long index; + void *virtual; +}; + +struct nameidata { + struct dentry *dentry; + struct qstr last; + unsigned int flags; + int last_type; +}; + +struct file_operations { + //struct module *owner; + //loff_t (*llseek) (struct file *, loff_t, int); + ssize_t (*read) (struct file *, char *, size_t, loff_t *); + //ssize_t (*write) (struct file *, const char *, size_t, loff_t *); + int (*readdir) (struct file *, char *, int); + //unsigned int (*poll) (struct file *, struct poll_table_struct *); + int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); + //int (*mmap) (struct file *, struct vm_area_struct *); + //int (*open) (struct inode *, struct file *); + //int (*flush) (struct file *); + //int (*release) (struct inode *, struct file *); + int (*fsync) (struct file *, struct dentry *, int datasync); + //int (*fasync) (int, struct file *, int); + //int (*lock) (struct file *, int, struct file_lock *); + //ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *); + //ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *); +}; + +struct inode_operations { + int (*create) (struct inode *,struct dentry *,int); + struct dentry * (*lookup) (struct inode *,struct dentry *); + int (*link) (struct dentry *,struct inode *,struct dentry *); + int (*unlink) (struct inode *,struct dentry *); + int (*symlink) (struct inode *,struct dentry *,const char *); + int (*mkdir) (struct inode *,struct dentry *,int); + int (*rmdir) (struct inode *,struct dentry *); + int (*mknod) (struct inode *,struct dentry *,int,int); + int (*rename) (struct inode *, struct dentry *, + struct inode *, struct dentry *); + int (*readlink) (struct dentry *, char *,int); + int (*follow_link) (struct dentry *, struct nameidata *); + //void (*truncate) (struct inode *); + int (*permission) (struct inode *, int); + //int (*revalidate) (struct dentry *); + int (*setattr) (struct dentry *, struct iattr *); + //int (*getattr) (struct dentry *, struct iattr *); +}; + + +struct iovec { + void *iov_base; + ssize_t iov_len; +}; + + +// called by JFFS2 + +#define to_kdev_t(rdev) (rdev) +#define MAJOR(rdev) (rdev)>>8 +#define MINOR(rdev) (rdev) + +#define page_address(page) ((page)->virtual) + +static __inline__ void * kmap(struct page * page) { + return page_address(page); +} + +#define kunmap(page) do { } while (0) + +//struct page * read_cache_page(cyg_uint32 start, void * f, struct inode * i); +struct page *read_cache_page(unsigned long index, int (*filler)(void *,struct page*), void *data); +void page_cache_release(struct page * pg); + +struct inode * new_inode(struct super_block *sb); +struct inode * iget(struct super_block *sb, cyg_uint32 ino); +void iput(struct inode * i); +void make_bad_inode(struct inode * inode); +int is_bad_inode(struct inode * inode); + +#define insert_inode_hash(inode) do { } while (0) + +#define d_alloc_root(root_inode) root_inode + +#define flush_dcache_page(page) do { } while (0) + +struct jffs2_sb_info; +struct jffs2_eraseblock; + +cyg_bool jffs2_flash_read(struct jffs2_sb_info *c, cyg_uint32 read_buffer_offset, const size_t size, size_t * return_size, char * write_buffer); +cyg_bool jffs2_flash_write(struct jffs2_sb_info *c, cyg_uint32 write_buffer_offset, const size_t size, size_t * return_size, char * read_buffer); +int jffs2_flash_writev(struct jffs2_sb_info *c, const struct iovec *vecs, unsigned long count, loff_t to, size_t *retlen); +cyg_bool jffs2_flash_erase(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb); + + +// calls to JFFS2 + +// dir-ecos.c +struct inode *jffs2_lookup(struct inode *dir_i, struct qstr *name); +int jffs2_readdir (struct inode *d_inode, unsigned long f_pos, char *nbuf, int nlen); +int jffs2_create(struct inode *dir_i, struct qstr *d_name, int mode, struct inode **new_i); +int jffs2_mkdir (struct inode *dir_i, struct qstr *d_name, int mode, struct inode **new_i); +int jffs2_link (struct inode *old_d_inode, struct inode *dir_i, struct qstr *d_name); +int jffs2_unlink(struct inode *dir_i, struct inode *d_inode, struct qstr *d_name); +int jffs2_rmdir (struct inode *dir_i, struct inode *d_inode, struct qstr *d_name); +int jffs2_rename (struct inode *old_dir_i, struct inode *d_inode, struct qstr *old_d_name, + struct inode *new_dir_i, struct qstr *new_d_name); + +#define init_name_hash() 0 +static inline unsigned long partial_name_hash(unsigned long c, unsigned long prevhash) +{ + prevhash = (prevhash << 4) | (prevhash >> (8*sizeof(unsigned long)-4)); + return prevhash ^ c; +} + +static inline unsigned long end_name_hash(unsigned long hash) +{ + if (sizeof(hash) > sizeof(unsigned int)) + hash += hash >> 4*sizeof(hash); + return (unsigned int) hash; +} + +static inline unsigned int full_name_hash(const unsigned char * name, unsigned int len) { + + unsigned long hash = init_name_hash(); + while (len--) + hash = partial_name_hash(*name++, hash); + return end_name_hash(hash); +} + +#endif /* __LINUX_JFFS2PORT_H__ */ + + + + + + + + + + diff --git a/packages/fs/jffs2/v2_0/tests/fileio1.c b/packages/fs/jffs2/v2_0/tests/fileio1.c new file mode 100644 index 00000000..c6a2af0b --- /dev/null +++ b/packages/fs/jffs2/v2_0/tests/fileio1.c @@ -0,0 +1,669 @@ +//========================================================================== +// +// fileio1.c +// +// Test fileio system +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: nickg +// Date: 2000-05-25 +// Purpose: Test fileio system +// Description: This test uses the testfs to check out the initialization +// and basic operation of the fileio system +// +// +// +// +// +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include + +#include // base kernel types +#include // tracing macros +#include // assertion macros +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include // HAL polled output + +#include // Address of JFFS2 + +//========================================================================== + +#if 0 +MTAB_ENTRY( jffs2_mte1, + "/", + "jffs2", + CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1, + 0); +#endif + +//========================================================================== + +#define SHOW_RESULT( _fn, _res ) \ +diag_printf(": " #_fn "() returned %d %s\n", _res, _res<0?strerror(errno):""); + +//========================================================================== + +#define IOSIZE 100 + +#define LONGNAME1 "long_file_name_that_should_take_up_more_than_one_directory_entry_1" +#define LONGNAME2 "long_file_name_that_should_take_up_more_than_one_directory_entry_2" + + +//========================================================================== + +#ifndef CYGPKG_LIBC_STRING + +char *strcat( char *s1, const char *s2 ) +{ + char *s = s1; + while( *s1 ) s1++; + while( (*s1++ = *s2++) != 0); + return s; +} + +#endif + +//========================================================================== + +static void listdir( char *name, int statp, int numexpected, int *numgot ) +{ + int err; + DIR *dirp; + int num=0; + + diag_printf(": reading directory %s\n",name); + + dirp = opendir( name ); + if( dirp == NULL ) SHOW_RESULT( opendir, -1 ); + + for(;;) + { + struct dirent *entry = readdir( dirp ); + + if( entry == NULL ) + break; + num++; + diag_printf(": entry %14s",entry->d_name); + if( statp ) + { + char fullname[PATH_MAX]; + struct stat sbuf; + + if( name[0] ) + { + strcpy(fullname, name ); + if( !(name[0] == '/' && name[1] == 0 ) ) + strcat(fullname, "/" ); + } + else fullname[0] = 0; + + strcat(fullname, entry->d_name ); + + err = stat( fullname, &sbuf ); + if( err < 0 ) + { + if( errno == ENOSYS ) + diag_printf(" "); + else SHOW_RESULT( stat, err ); + } + else + { + diag_printf(" [mode %08x ino %08x nlink %d size %d]", + sbuf.st_mode,sbuf.st_ino,sbuf.st_nlink,sbuf.st_size); + } + } + + diag_printf("\n"); + } + + err = closedir( dirp ); + if( err < 0 ) SHOW_RESULT( stat, err ); + if (numexpected >= 0 && num != numexpected) + CYG_TEST_FAIL("Wrong number of dir entries\n"); + if ( numgot != NULL ) + *numgot = num; +} + +//========================================================================== + +static void createfile( char *name, size_t size ) +{ + char buf[IOSIZE]; + int fd; + ssize_t wrote; + int i; + int err; + + diag_printf(": create file %s size %d\n",name,size); + + err = access( name, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + for( i = 0; i < IOSIZE; i++ ) buf[i] = i%256; + + fd = open( name, O_WRONLY|O_CREAT ); + if( fd < 0 ) SHOW_RESULT( open, fd ); + + while( size > 0 ) + { + ssize_t len = size; + if ( len > IOSIZE ) len = IOSIZE; + + wrote = write( fd, buf, len ); + if( wrote != len ) SHOW_RESULT( write, wrote ); + + size -= wrote; + } + + err = close( fd ); + if( err < 0 ) SHOW_RESULT( close, err ); +} + +//========================================================================== + +#if 0 +static void maxfile( char *name ) +{ + char buf[IOSIZE]; + int fd; + ssize_t wrote; + int i; + int err; + size_t size = 0; + + diag_printf(": create maximal file %s\n",name); + + err = access( name, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + for( i = 0; i < IOSIZE; i++ ) buf[i] = i%256; + + fd = open( name, O_WRONLY|O_CREAT ); + if( fd < 0 ) SHOW_RESULT( open, fd ); + + do + { + wrote = write( fd, buf, IOSIZE ); + if( wrote < 0 ) SHOW_RESULT( write, wrote ); + + size += wrote; + + } while( wrote == IOSIZE ); + + diag_printf(": file size == %d\n",size); + + err = close( fd ); + if( err < 0 ) SHOW_RESULT( close, err ); +} +#endif + +//========================================================================== + +static void checkfile( char *name ) +{ + char buf[IOSIZE]; + int fd; + ssize_t done; + int i; + int err; + off_t pos = 0; + + diag_printf(": check file %s\n",name); + + err = access( name, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd = open( name, O_RDONLY ); + if( fd < 0 ) SHOW_RESULT( open, fd ); + + for(;;) + { + done = read( fd, buf, IOSIZE ); + if( done < 0 ) SHOW_RESULT( read, done ); + + if( done == 0 ) break; + + for( i = 0; i < done; i++ ) + if( buf[i] != i%256 ) + { + diag_printf("buf[%d+%d](%02x) != %02x\n",pos,i,buf[i],i%256); + CYG_TEST_FAIL("Data read not equal to data written\n"); + } + + pos += done; + } + + err = close( fd ); + if( err < 0 ) SHOW_RESULT( close, err ); +} + +//========================================================================== + +static void copyfile( char *name2, char *name1 ) +{ + + int err; + char buf[IOSIZE]; + int fd1, fd2; + ssize_t done, wrote; + + diag_printf(": copy file %s -> %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + err = access( name2, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_WRONLY|O_CREAT ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done = read( fd2, buf, IOSIZE ); + if( done < 0 ) SHOW_RESULT( read, done ); + + if( done == 0 ) break; + + wrote = write( fd1, buf, done ); + if( wrote != done ) SHOW_RESULT( write, wrote ); + + if( wrote != done ) break; + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} + +//========================================================================== + +static void comparefiles( char *name2, char *name1 ) +{ + int err; + char buf1[IOSIZE]; + char buf2[IOSIZE]; + int fd1, fd2; + ssize_t done1, done2; + int i; + + diag_printf(": compare files %s == %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_RDONLY ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done1 = read( fd1, buf1, IOSIZE ); + if( done1 < 0 ) SHOW_RESULT( read, done1 ); + + done2 = read( fd2, buf2, IOSIZE ); + if( done2 < 0 ) SHOW_RESULT( read, done2 ); + + if( done1 != done2 ) + diag_printf("Files different sizes\n"); + + if( done1 == 0 ) break; + + for( i = 0; i < done1; i++ ) + if( buf1[i] != buf2[i] ) + { + diag_printf("buf1[%d](%02x) != buf1[%d](%02x)\n",i,buf1[i],i,buf2[i]); + CYG_TEST_FAIL("Data in files not equal\n"); + } + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} + +//========================================================================== + +void checkcwd( const char *cwd ) +{ + static char cwdbuf[PATH_MAX]; + char *ret; + + ret = getcwd( cwdbuf, sizeof(cwdbuf)); + if( ret == NULL ) SHOW_RESULT( getcwd, ret ); + + if( strcmp( cwdbuf, cwd ) != 0 ) + { + diag_printf( "cwdbuf %s cwd %s\n",cwdbuf, cwd ); + CYG_TEST_FAIL( "Current directory mismatch"); + } +} + +//========================================================================== +// main + +int main( int argc, char **argv ) +{ + int err; + //int i; + int existingdirents=-1; + + CYG_TEST_INIT(); + + // -------------------------------------------------------------- + + err = mount( CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1, "/", "jffs2" ); + if( err < 0 ) SHOW_RESULT( mount, err ); + + err = chdir( "/" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/" ); + + listdir( "/", true, -1, &existingdirents ); + if ( existingdirents < 2 ) + CYG_TEST_FAIL("Not enough dir entries\n"); + + // -------------------------------------------------------------- + + createfile( "/foo", 202 ); + checkfile( "foo" ); + copyfile( "foo", "fee"); + checkfile( "fee" ); + comparefiles( "foo", "/fee" ); + diag_printf(": mkdir bar\n"); + err = mkdir( "/bar", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + listdir( "/" , true, existingdirents+3, NULL ); + + copyfile( "fee", "/bar/fum" ); + checkfile( "bar/fum" ); + comparefiles( "/fee", "bar/fum" ); + + diag_printf(": cd bar\n"); + err = chdir( "bar" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/bar" ); + + diag_printf(": rename /foo bundy\n"); + err = rename( "/foo", "bundy" ); + if( err < 0 ) SHOW_RESULT( rename, err ); + + listdir( "/", true, existingdirents+2, NULL ); + listdir( "" , true, 4, NULL ); + + checkfile( "/bar/bundy" ); + comparefiles("/fee", "bundy" ); + + // -------------------------------------------------------------- + + createfile( LONGNAME1, 123 ); + checkfile( LONGNAME1 ); + copyfile( LONGNAME1, LONGNAME2 ); + + listdir( "", false, 6, NULL ); + + diag_printf(": unlink " LONGNAME1 "\n"); + err = unlink( LONGNAME1 ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink " LONGNAME2 "\n"); + err = unlink( LONGNAME2 ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + + // -------------------------------------------------------------- + + diag_printf(": unlink fee\n"); + err = unlink( "/fee" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink fum\n"); + err = unlink( "fum" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink /bar/bundy\n"); + err = unlink( "/bar/bundy" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": cd /\n"); + err = chdir( "/" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/" ); + + diag_printf(": rmdir /bar\n"); + err = rmdir( "/bar" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + listdir( "/", false, existingdirents, NULL ); + + // -------------------------------------------------------------- + + diag_printf(": mount /jffs2 \n"); + err = mount( CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1, "/jffs2", "jffs2" ); + if( err < 0 ) SHOW_RESULT( mount, err ); + + createfile( "/jffs2/tinky", 456 ); + copyfile( "/jffs2/tinky", "/jffs2/laalaa" ); + checkfile( "/jffs2/tinky"); + checkfile( "/jffs2/laalaa"); + comparefiles( "/jffs2/tinky", "/jffs2/laalaa" ); + + diag_printf(": cd /jffs2\n"); + err = chdir( "/jffs2" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/jffs2" ); + + diag_printf(": mkdir noonoo\n"); + err = mkdir( "noonoo", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + listdir( "." , true, existingdirents+3, NULL); + + diag_printf(": cd noonoo\n"); + err = chdir( "noonoo" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/jffs2/noonoo" ); + + createfile( "tinky", 678 ); + checkfile( "tinky" ); + + createfile( "dipsy", 3456 ); + checkfile( "dipsy" ); + copyfile( "dipsy", "po" ); + checkfile( "po" ); + comparefiles( "dipsy", "po" ); + + + /*for(i=0;i<2048;i++) { + diag_printf(": churningchurningchurning................................ITERATION = %d\n", i); + createfile( "churningchurningchurning", 4096 ); + diag_printf(": unlink churningchurningchurning\n"); + err = unlink( "churningchurningchurning" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + }*/ + + + listdir( ".", true, 5, NULL ); + listdir( "", true, 5, NULL ); + listdir( "..", true, existingdirents+3, NULL ); + + // -------------------------------------------------------------- + + diag_printf(": unlink tinky\n"); + err = unlink( "tinky" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink dipsy\n"); + err = unlink( "dipsy" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink po\n"); + err = unlink( "po" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": cd ..\n"); + err = chdir( ".." ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/jffs2" ); + + diag_printf(": rmdir noonoo\n"); + err = rmdir( "noonoo" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + // -------------------------------------------------------------- + + err = mkdir( "x", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + err = mkdir( "x/y", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + err = mkdir( "x/y/z", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + err = mkdir( "x/y/z/w", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + diag_printf(": cd /jffs2/x/y/z/w\n"); + err = chdir( "/jffs2/x/y/z/w" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/jffs2/x/y/z/w" ); + + diag_printf(": cd ..\n"); + err = chdir( ".." ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/jffs2/x/y/z" ); + + diag_printf(": cd .\n"); + err = chdir( "." ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/jffs2/x/y/z" ); + + diag_printf(": cd ../../y\n"); + err = chdir( "../../y" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/jffs2/x/y" ); + + diag_printf(": cd ../..\n"); + err = chdir( "../.." ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/jffs2" ); + + diag_printf(": rmdir x/y/z/w\n"); + err = rmdir( "x/y/z/w" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + diag_printf(": rmdir x/y/z\n"); + err = rmdir( "x/y/z" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + diag_printf(": rmdir x/y\n"); + err = rmdir( "x/y" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + diag_printf(": rmdir x\n"); + err = rmdir( "x" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + // -------------------------------------------------------------- + + diag_printf(": unlink tinky\n"); + err = unlink( "tinky" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink laalaa\n"); + err = unlink( "laalaa" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": cd /\n"); + err = chdir( "/" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/" ); + + diag_printf(": umount /jffs2\n"); + err = umount( "/jffs2" ); + if( err < 0 ) SHOW_RESULT( umount, err ); + + diag_printf(": umount /\n"); + err = umount( "/" ); + if( err < 0 ) SHOW_RESULT( umount, err ); + + CYG_TEST_PASS_FINISH("fileio1"); +} + +// ------------------------------------------------------------------------- +// EOF fileio1.c diff --git a/packages/fs/jffs2/v2_0/tests/romfileio1.c b/packages/fs/jffs2/v2_0/tests/romfileio1.c new file mode 100644 index 00000000..f16a6427 --- /dev/null +++ b/packages/fs/jffs2/v2_0/tests/romfileio1.c @@ -0,0 +1,370 @@ +//========================================================================== +// +// fileio1.c +// +// Test fileio system +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: nickg, richard.panton@3glab.com +// Date: 2000-05-25 +// Purpose: Test fileio system +// Description: This test uses the testfs to check out the initialization +// and basic operation of the fileio system +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include + +#include // base kernel types +#include // tracing macros +#include // assertion macros +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include // HAL polled output + +#include // Address of JFFS2 + +//========================================================================== + +/* MTAB_ENTRY( jffs2_mte1, + "/", + "jffs2", + "", + (CYG_ADDRWORD) CYGNUM_FS_JFFS2_BASE_ADDRESS ); */ + + +//========================================================================== + +#define SHOW_RESULT( _fn, _res ) \ +diag_printf(": " #_fn "() returned %d %s\n", _res, _res<0?strerror(errno):""); + +#define CHKFAIL_TYPE( _fn, _res, _type ) { \ +if ( _res != -1 ) \ + diag_printf(": " #_fn "() returned %d (expected -1)\n", _res); \ +else if ( errno != _type ) \ + diag_printf(": " #_fn "() failed with errno %d (%s),\n expected %d (%s)\n", errno, strerror(errno), _type, strerror(_type) ); \ +} + +//========================================================================== + +#define IOSIZE 100 + +#define LONGNAME1 "long_file_name_that_should_take_up_more_than_one_directory_entry_1" +#define LONGNAME2 "long_file_name_that_should_take_up_more_than_one_directory_entry_2" + + +//========================================================================== + +#ifndef CYGPKG_LIBC_STRING + +char *strcat( char *s1, const char *s2 ) +{ + char *s = s1; + while( *s1 ) s1++; + while( (*s1++ = *s2++) != 0); + return s; +} + +#endif + +//========================================================================== + +static void listdir( char *name, int statp ) +{ + int err; + DIR *dirp; + + diag_printf(": reading directory %s\n",name); + + dirp = opendir( name ); + if( dirp == NULL ) SHOW_RESULT( opendir, -1 ); + + for(;;) + { + struct dirent *entry = readdir( dirp ); + + if( entry == NULL ) + break; + + diag_printf(": entry %14s",entry->d_name); + if( statp ) + { + char fullname[PATH_MAX]; + struct stat sbuf; + + if( name[0] ) + { + strcpy(fullname, name ); + if( !(name[0] == '/' && name[1] == 0 ) ) + strcat(fullname, "/" ); + } + else fullname[0] = 0; + + strcat(fullname, entry->d_name ); + + err = stat( fullname, &sbuf ); + if( err < 0 ) + { + if( errno == ENOSYS ) + diag_printf(" "); + else SHOW_RESULT( stat, err ); + } + else + { + diag_printf(" [mode %08x ino %08x nlink %d size %d]", + sbuf.st_mode,sbuf.st_ino,sbuf.st_nlink,sbuf.st_size); + } + } + + diag_printf("\n"); + } + + err = closedir( dirp ); + if( err < 0 ) SHOW_RESULT( stat, err ); +} + +//========================================================================== + +static void copyfile( char *name2, char *name1 ) +{ + + int err; + char buf[IOSIZE]; + int fd1, fd2; + ssize_t done, wrote; + + diag_printf(": copy file %s -> %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + err = access( name2, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_WRONLY|O_CREAT ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done = read( fd2, buf, IOSIZE ); + if( done < 0 ) SHOW_RESULT( read, done ); + + if( done == 0 ) break; + + wrote = write( fd1, buf, done ); + if( wrote != done ) SHOW_RESULT( write, wrote ); + + if( wrote != done ) break; + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} + +//========================================================================== + +static void comparefiles( char *name2, char *name1 ) +{ + int err; + char buf1[IOSIZE]; + char buf2[IOSIZE]; + int fd1, fd2; + ssize_t done1, done2; + int i; + + diag_printf(": compare files %s == %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_RDONLY ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done1 = read( fd1, buf1, IOSIZE ); + if( done1 < 0 ) SHOW_RESULT( read, done1 ); + + done2 = read( fd2, buf2, IOSIZE ); + if( done2 < 0 ) SHOW_RESULT( read, done2 ); + + if( done1 != done2 ) + diag_printf("Files different sizes\n"); + + if( done1 == 0 ) break; + + for( i = 0; i < done1; i++ ) + if( buf1[i] != buf2[i] ) + { + diag_printf("buf1[%d](%02x) != buf1[%d](%02x)\n",i,buf1[i],i,buf2[i]); + CYG_TEST_FAIL("Data in files not equal\n"); + } + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} + +//========================================================================== +// main + +int main( int argc, char **argv ) +{ + int err; + // char address[16]; + + CYG_TEST_INIT(); + + // -------------------------------------------------------------- + + err = mount( CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1, "/", "jffs2" ); + if ( err != ENOERR ) SHOW_RESULT( chdir, err ); + + diag_printf(": JFFS2 root follows\n"); + diag_printf(": Note that dev cannot be stat()ed\n"); + listdir( "/", true ); + + diag_printf(": cd /etc\n" ); + err = chdir( "/etc" ); + if ( err < 0 ) SHOW_RESULT( chdir, err ); + + diag_printf(": JFFS2 list of '' follows\n"); + listdir( "", true ); + + diag_printf(": JFFS2 list of /etc follows\n"); + listdir( "/etc", true ); + + //diag_printf(": JFFS2 list of . follows\n"); + //listdir( ".", true ); + + err = mount( "", "/var", "ramfs" ); + if( err < 0 ) SHOW_RESULT( mount, err ); + + copyfile( "/etc/passwd", "/var/passwd_copy" ); + + comparefiles( "/etc/passwd", "/var/passwd_copy" ); + + diag_printf(": JFFS2 list of / follows\n"); + diag_printf(": Note that /var now gives stat() info for RAMFS\n"); + listdir( "/", true ); + + diag_printf(": Mount JFFS2 again onto /mnt\n"); + //sprintf( address, "%p", (void*)CYGNUM_FS_JFFS2_BASE_ADDRESS ); + err = mount( CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1, "/mnt", "jffs2" ); + if( err < 0 ) SHOW_RESULT( mount, err ); + + comparefiles( "/etc/passwd", "/mnt/etc/passwd" ); + + + err = mkdir( "/foo", 0 ); + CHKFAIL_TYPE( mkdir, err, EROFS ); + + err = rename( "/var", "/tmp" ); // RAMFS is mounted here + CHKFAIL_TYPE( rename, err, EXDEV ); + + err = rename( "/var/passwd_copy", "/mnt/etc/passwd_copy" ); + CHKFAIL_TYPE( rename, err, EXDEV ); + + err = rename( "/etc", "/tmp" ); + CHKFAIL_TYPE( rename, err, EROFS ); + + diag_printf(": cd /etc\n"); + err = chdir( "/etc" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + err = chdir( "/mnt/etc" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + //listdir( ".", true ); + + diag_printf(": unlink /tmp\n"); + err = unlink( "/tmp" ); + CHKFAIL_TYPE( unlink, err, EROFS ); + + diag_printf(": mount random area\n"); + //sprintf(address, "%p", (void*)(CYGNUM_FS_JFFS2_BASE_ADDRESS + 0x20000)); + err = mount( "", "/tmp", "jffs2" ); + SHOW_RESULT( mount, err ); + + err = umount( "/mnt" ); + if( err < 0 ) SHOW_RESULT( umount, err ); + + err = umount( "/var" ); + if( err < 0 ) SHOW_RESULT( umount, err ); + + err = umount( "/" ); + if( err < 0 ) SHOW_RESULT( umount, err ); + + + CYG_TEST_PASS_FINISH("fileio1"); +} + +// ------------------------------------------------------------------------- +// EOF fileio1.c diff --git a/packages/fs/ram/v2_0/tests/fileio1.c b/packages/fs/ram/v2_0/tests/fileio1.c new file mode 100644 index 00000000..c92dc8ed --- /dev/null +++ b/packages/fs/ram/v2_0/tests/fileio1.c @@ -0,0 +1,651 @@ +//========================================================================== +// +// fileio1.c +// +// Test fileio system +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: nickg +// Date: 2000-05-25 +// Purpose: Test fileio system +// Description: This test uses the testfs to check out the initialization +// and basic operation of the fileio system +// +// +// +// +// +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include + +#include // base kernel types +#include // tracing macros +#include // assertion macros + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include // HAL polled output + +//========================================================================== + +#if 0 +MTAB_ENTRY( ramfs_mte1, + "/", + "ramfs", + "", + 0); +#endif + +//========================================================================== + +#define SHOW_RESULT( _fn, _res ) \ +diag_printf(": " #_fn "() returned %d %s\n", _res, _res<0?strerror(errno):""); + +//========================================================================== + +#define IOSIZE 100 + +#define LONGNAME1 "long_file_name_that_should_take_up_more_than_one_directory_entry_1" +#define LONGNAME2 "long_file_name_that_should_take_up_more_than_one_directory_entry_2" + + +//========================================================================== + +#ifndef CYGPKG_LIBC_STRING + +char *strcat( char *s1, const char *s2 ) +{ + char *s = s1; + while( *s1 ) s1++; + while( (*s1++ = *s2++) != 0); + return s; +} + +#endif + +//========================================================================== + +static void listdir( char *name, int statp, int numexpected, int *numgot ) +{ + int err; + DIR *dirp; + int num=0; + + diag_printf(": reading directory %s\n",name); + + dirp = opendir( name ); + if( dirp == NULL ) SHOW_RESULT( opendir, -1 ); + + for(;;) + { + struct dirent *entry = readdir( dirp ); + + if( entry == NULL ) + break; + num++; + diag_printf(": entry %14s",entry->d_name); + if( statp ) + { + char fullname[PATH_MAX]; + struct stat sbuf; + + if( name[0] ) + { + strcpy(fullname, name ); + if( !(name[0] == '/' && name[1] == 0 ) ) + strcat(fullname, "/" ); + } + else fullname[0] = 0; + + strcat(fullname, entry->d_name ); + + err = stat( fullname, &sbuf ); + if( err < 0 ) + { + if( errno == ENOSYS ) + diag_printf(" "); + else SHOW_RESULT( stat, err ); + } + else + { + diag_printf(" [mode %08x ino %08x nlink %d size %d]", + sbuf.st_mode,sbuf.st_ino,sbuf.st_nlink,sbuf.st_size); + } + } + + diag_printf("\n"); + } + + err = closedir( dirp ); + if( err < 0 ) SHOW_RESULT( stat, err ); + if (numexpected >= 0 && num != numexpected) + CYG_TEST_FAIL("Wrong number of dir entries\n"); + if ( numgot != NULL ) + *numgot = num; +} + +//========================================================================== + +static void createfile( char *name, size_t size ) +{ + char buf[IOSIZE]; + int fd; + ssize_t wrote; + int i; + int err; + + diag_printf(": create file %s size %d\n",name,size); + + err = access( name, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + for( i = 0; i < IOSIZE; i++ ) buf[i] = i%256; + + fd = open( name, O_WRONLY|O_CREAT ); + if( fd < 0 ) SHOW_RESULT( open, fd ); + + while( size > 0 ) + { + ssize_t len = size; + if ( len > IOSIZE ) len = IOSIZE; + + wrote = write( fd, buf, len ); + if( wrote != len ) SHOW_RESULT( write, wrote ); + + size -= wrote; + } + + err = close( fd ); + if( err < 0 ) SHOW_RESULT( close, err ); +} + +//========================================================================== + +#if 0 +static void maxfile( char *name ) +{ + char buf[IOSIZE]; + int fd; + ssize_t wrote; + int i; + int err; + size_t size = 0; + + diag_printf(": create maximal file %s\n",name); + + err = access( name, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + for( i = 0; i < IOSIZE; i++ ) buf[i] = i%256; + + fd = open( name, O_WRONLY|O_CREAT ); + if( fd < 0 ) SHOW_RESULT( open, fd ); + + do + { + wrote = write( fd, buf, IOSIZE ); + if( wrote < 0 ) SHOW_RESULT( write, wrote ); + + size += wrote; + + } while( wrote == IOSIZE ); + + diag_printf(": file size == %d\n",size); + + err = close( fd ); + if( err < 0 ) SHOW_RESULT( close, err ); +} +#endif + +//========================================================================== + +static void checkfile( char *name ) +{ + char buf[IOSIZE]; + int fd; + ssize_t done; + int i; + int err; + off_t pos = 0; + + diag_printf(": check file %s\n",name); + + err = access( name, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd = open( name, O_RDONLY ); + if( fd < 0 ) SHOW_RESULT( open, fd ); + + for(;;) + { + done = read( fd, buf, IOSIZE ); + if( done < 0 ) SHOW_RESULT( read, done ); + + if( done == 0 ) break; + + for( i = 0; i < done; i++ ) + if( buf[i] != i%256 ) + { + diag_printf("buf[%d+%d](%02x) != %02x\n",pos,i,buf[i],i%256); + CYG_TEST_FAIL("Data read not equal to data written\n"); + } + + pos += done; + } + + err = close( fd ); + if( err < 0 ) SHOW_RESULT( close, err ); +} + +//========================================================================== + +static void copyfile( char *name2, char *name1 ) +{ + + int err; + char buf[IOSIZE]; + int fd1, fd2; + ssize_t done, wrote; + + diag_printf(": copy file %s -> %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + err = access( name2, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_WRONLY|O_CREAT ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done = read( fd2, buf, IOSIZE ); + if( done < 0 ) SHOW_RESULT( read, done ); + + if( done == 0 ) break; + + wrote = write( fd1, buf, done ); + if( wrote != done ) SHOW_RESULT( write, wrote ); + + if( wrote != done ) break; + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} + +//========================================================================== + +static void comparefiles( char *name2, char *name1 ) +{ + int err; + char buf1[IOSIZE]; + char buf2[IOSIZE]; + int fd1, fd2; + ssize_t done1, done2; + int i; + + diag_printf(": compare files %s == %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_RDONLY ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done1 = read( fd1, buf1, IOSIZE ); + if( done1 < 0 ) SHOW_RESULT( read, done1 ); + + done2 = read( fd2, buf2, IOSIZE ); + if( done2 < 0 ) SHOW_RESULT( read, done2 ); + + if( done1 != done2 ) + diag_printf("Files different sizes\n"); + + if( done1 == 0 ) break; + + for( i = 0; i < done1; i++ ) + if( buf1[i] != buf2[i] ) + { + diag_printf("buf1[%d](%02x) != buf1[%d](%02x)\n",i,buf1[i],i,buf2[i]); + CYG_TEST_FAIL("Data in files not equal\n"); + } + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} + +//========================================================================== + +void checkcwd( const char *cwd ) +{ + static char cwdbuf[PATH_MAX]; + char *ret; + + ret = getcwd( cwdbuf, sizeof(cwdbuf)); + if( ret == NULL ) SHOW_RESULT( getcwd, ret ); + + if( strcmp( cwdbuf, cwd ) != 0 ) + { + diag_printf( "cwdbuf %s cwd %s\n",cwdbuf, cwd ); + CYG_TEST_FAIL( "Current directory mismatch"); + } +} + +//========================================================================== +// main + +int main( int argc, char **argv ) +{ + int err; + int existingdirents=-1; + + CYG_TEST_INIT(); + + // -------------------------------------------------------------- + + err = mount( "", "/", "ramfs" ); + if( err < 0 ) SHOW_RESULT( mount, err ); + + err = chdir( "/" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/" ); + + listdir( "/", true, -1, &existingdirents ); + if ( existingdirents < 2 ) + CYG_TEST_FAIL("Not enough dir entries\n"); + + // -------------------------------------------------------------- + + createfile( "/foo", 202 ); + checkfile( "foo" ); + copyfile( "foo", "fee"); + checkfile( "fee" ); + comparefiles( "foo", "/fee" ); + diag_printf(": mkdir bar\n"); + err = mkdir( "/bar", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + listdir( "/" , true, existingdirents+3, NULL ); + + copyfile( "fee", "/bar/fum" ); + checkfile( "bar/fum" ); + comparefiles( "/fee", "bar/fum" ); + + diag_printf(": cd bar\n"); + err = chdir( "bar" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/bar" ); + + diag_printf(": rename /foo bundy\n"); + err = rename( "/foo", "bundy" ); + if( err < 0 ) SHOW_RESULT( rename, err ); + + listdir( "/", true, existingdirents+2, NULL ); + listdir( "" , true, 4, NULL ); + + checkfile( "/bar/bundy" ); + comparefiles("/fee", "bundy" ); + + // -------------------------------------------------------------- + + createfile( LONGNAME1, 123 ); + checkfile( LONGNAME1 ); + copyfile( LONGNAME1, LONGNAME2 ); + + listdir( "", false, 6, NULL ); + + diag_printf(": unlink " LONGNAME1 "\n"); + err = unlink( LONGNAME1 ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink " LONGNAME2 "\n"); + err = unlink( LONGNAME2 ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + + // -------------------------------------------------------------- + + diag_printf(": unlink fee\n"); + err = unlink( "/fee" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink fum\n"); + err = unlink( "fum" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink /bar/bundy\n"); + err = unlink( "/bar/bundy" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": cd /\n"); + err = chdir( "/" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/" ); + + diag_printf(": rmdir /bar\n"); + err = rmdir( "/bar" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + listdir( "/", false, existingdirents, NULL ); + + // -------------------------------------------------------------- + + diag_printf(": mount /ram \n"); + err = mount( "", "/ram", "ramfs" ); + if( err < 0 ) SHOW_RESULT( mount, err ); + + createfile( "/ram/tinky", 456 ); + copyfile( "/ram/tinky", "/ram/laalaa" ); + checkfile( "/ram/tinky"); + checkfile( "/ram/laalaa"); + comparefiles( "/ram/tinky", "/ram/laalaa" ); + + diag_printf(": cd /ram\n"); + err = chdir( "/ram" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/ram" ); + + diag_printf(": mkdir noonoo\n"); + err = mkdir( "noonoo", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + listdir( "." , true, existingdirents+3, NULL); + + diag_printf(": cd noonoo\n"); + err = chdir( "noonoo" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + checkcwd( "/ram/noonoo" ); + + createfile( "tinky", 678 ); + checkfile( "tinky" ); + + createfile( "dipsy", 3456 ); + checkfile( "dipsy" ); + copyfile( "dipsy", "po" ); + checkfile( "po" ); + comparefiles( "dipsy", "po" ); + + listdir( ".", true, 5, NULL ); + listdir( "", true, 5, NULL ); + listdir( "..", true, existingdirents+3, NULL ); + + // -------------------------------------------------------------- + + diag_printf(": unlink tinky\n"); + err = unlink( "tinky" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink dipsy\n"); + err = unlink( "dipsy" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink po\n"); + err = unlink( "po" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": cd ..\n"); + err = chdir( ".." ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/ram" ); + + diag_printf(": rmdir noonoo\n"); + err = rmdir( "noonoo" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + // -------------------------------------------------------------- + + err = mkdir( "x", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + err = mkdir( "x/y", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + err = mkdir( "x/y/z", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + err = mkdir( "x/y/z/w", 0 ); + if( err < 0 ) SHOW_RESULT( mkdir, err ); + + diag_printf(": cd /ram/x/y/z/w\n"); + err = chdir( "/ram/x/y/z/w" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/ram/x/y/z/w" ); + + diag_printf(": cd ..\n"); + err = chdir( ".." ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/ram/x/y/z" ); + + diag_printf(": cd .\n"); + err = chdir( "." ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/ram/x/y/z" ); + + diag_printf(": cd ../../y\n"); + err = chdir( "../../y" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/ram/x/y" ); + + diag_printf(": cd ../..\n"); + err = chdir( "../.." ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/ram" ); + + diag_printf(": rmdir x/y/z/w\n"); + err = rmdir( "x/y/z/w" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + diag_printf(": rmdir x/y/z\n"); + err = rmdir( "x/y/z" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + diag_printf(": rmdir x/y\n"); + err = rmdir( "x/y" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + diag_printf(": rmdir x\n"); + err = rmdir( "x" ); + if( err < 0 ) SHOW_RESULT( rmdir, err ); + + // -------------------------------------------------------------- + + diag_printf(": unlink tinky\n"); + err = unlink( "tinky" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": unlink laalaa\n"); + err = unlink( "laalaa" ); + if( err < 0 ) SHOW_RESULT( unlink, err ); + + diag_printf(": cd /\n"); + err = chdir( "/" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + checkcwd( "/" ); + + diag_printf(": umount /ram\n"); + err = umount( "/ram" ); + if( err < 0 ) SHOW_RESULT( umount, err ); + + CYG_TEST_PASS_FINISH("fileio1"); +} + +// ------------------------------------------------------------------------- +// EOF fileio1.c diff --git a/packages/fs/rom/v2_0/tests/fileio1.c b/packages/fs/rom/v2_0/tests/fileio1.c new file mode 100644 index 00000000..ed1c4049 --- /dev/null +++ b/packages/fs/rom/v2_0/tests/fileio1.c @@ -0,0 +1,377 @@ +//========================================================================== +// +// fileio1.c +// +// Test fileio system +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: nickg, richard.panton@3glab.com, jlarmour +// Date: 2000-05-25 +// Purpose: Test fileio system +// Description: This test uses the testfs to check out the initialization +// and basic operation of the fileio system +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include // HAL polled output + +#include // Test ROMFS data + +//========================================================================== + +MTAB_ENTRY( romfs_mte1, + "/", + "romfs", + "", + (CYG_ADDRWORD) &filedata[0] ); + + +//========================================================================== + +#define SHOW_RESULT( _fn, _res ) \ +diag_printf(": " #_fn "() returned %d %s\n", _res, _res<0?strerror(errno):""); + +#define CHKFAIL_TYPE( _fn, _res, _type ) { \ +if ( _res != -1 ) \ + diag_printf(": " #_fn "() returned %d (expected -1)\n", _res); \ +else if ( errno != _type ) \ + diag_printf(": " #_fn "() failed with errno %d (%s),\n expected %d (%s)\n", errno, strerror(errno), _type, strerror(_type) ); \ +} + +//========================================================================== + +#define IOSIZE 100 + +#define LONGNAME1 "long_file_name_that_should_take_up_more_than_one_directory_entry_1" +#define LONGNAME2 "long_file_name_that_should_take_up_more_than_one_directory_entry_2" + + +//========================================================================== + +#ifndef CYGINT_ISO_STRING_STRFUNCS + +char *strcat( char *s1, const char *s2 ) +{ + char *s = s1; + while( *s1 ) s1++; + while( (*s1++ = *s2++) != 0); + return s; +} + +#endif + +//========================================================================== + +static void listdir( char *name, int statp ) +{ + int err; + DIR *dirp; + + diag_printf(": reading directory %s\n",name); + + dirp = opendir( name ); + if( dirp == NULL ) SHOW_RESULT( opendir, -1 ); + + for(;;) + { + struct dirent *entry = readdir( dirp ); + + if( entry == NULL ) + break; + + diag_printf(": entry %14s",entry->d_name); + if( statp ) + { + char fullname[PATH_MAX]; + struct stat sbuf; + + if( name[0] ) + { + strcpy(fullname, name ); + if( !(name[0] == '/' && name[1] == 0 ) ) + strcat(fullname, "/" ); + } + else fullname[0] = 0; + + strcat(fullname, entry->d_name ); + + err = stat( fullname, &sbuf ); + if( err < 0 ) + { + if( errno == ENOSYS ) + diag_printf(" "); + else SHOW_RESULT( stat, err ); + } + else + { + diag_printf(" [mode %08x ino %08x nlink %d size %d]", + sbuf.st_mode,sbuf.st_ino,sbuf.st_nlink,sbuf.st_size); + } + } + + diag_printf("\n"); + } + + err = closedir( dirp ); + if( err < 0 ) SHOW_RESULT( stat, err ); +} + +//========================================================================== + +#ifdef CYGPKG_FS_RAM +static void copyfile( char *name2, char *name1 ) +{ + + int err; + char buf[IOSIZE]; + int fd1, fd2; + ssize_t done, wrote; + + diag_printf(": copy file %s -> %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err ); + + err = access( name2, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_WRONLY|O_CREAT ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done = read( fd2, buf, IOSIZE ); + if( done < 0 ) SHOW_RESULT( read, done ); + + if( done == 0 ) break; + + wrote = write( fd1, buf, done ); + if( wrote != done ) SHOW_RESULT( write, wrote ); + + if( wrote != done ) break; + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} +#endif + +//========================================================================== + +static void comparefiles( char *name2, char *name1 ) +{ + int err; + char buf1[IOSIZE]; + char buf2[IOSIZE]; + int fd1, fd2; + ssize_t done1, done2; + int i; + + diag_printf(": compare files %s == %s\n",name2,name1); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + err = access( name1, F_OK ); + if( err != 0 ) SHOW_RESULT( access, err ); + + fd1 = open( name1, O_RDONLY ); + if( fd1 < 0 ) SHOW_RESULT( open, fd1 ); + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) SHOW_RESULT( open, fd2 ); + + for(;;) + { + done1 = read( fd1, buf1, IOSIZE ); + if( done1 < 0 ) SHOW_RESULT( read, done1 ); + + done2 = read( fd2, buf2, IOSIZE ); + if( done2 < 0 ) SHOW_RESULT( read, done2 ); + + if( done1 != done2 ) + diag_printf("Files different sizes\n"); + + if( done1 == 0 ) break; + + for( i = 0; i < done1; i++ ) + if( buf1[i] != buf2[i] ) + { + diag_printf("buf1[%d](%02x) != buf1[%d](%02x)\n",i,buf1[i],i,buf2[i]); + CYG_TEST_FAIL("Data in files not equal\n"); + } + } + + err = close( fd1 ); + if( err < 0 ) SHOW_RESULT( close, err ); + + err = close( fd2 ); + if( err < 0 ) SHOW_RESULT( close, err ); + +} + +//========================================================================== +// main + +int main( int argc, char **argv ) +{ + int err; + char address[16]; + + CYG_TEST_INIT(); + + // -------------------------------------------------------------- + + diag_printf(": ROMFS root follows\n"); + listdir( "/", true ); + + diag_printf(": cd /etc\n" ); + err = chdir( "/etc" ); + if ( err < 0 ) SHOW_RESULT( chdir, err ); + + diag_printf(": ROMFS list of '' follows\n"); + listdir( "", true ); + + diag_printf(": ROMFS list of /etc follows\n"); + listdir( "/etc", true ); + + diag_printf(": ROMFS list of . follows\n"); + listdir( ".", true ); + +#ifdef CYGPKG_FS_RAM + err = mount( "", "/var", "ramfs" ); + if( err < 0 ) SHOW_RESULT( mount, err ); + + copyfile( "/etc/passwd", "/var/passwd_copy" ); + + comparefiles( "/etc/passwd", "/var/passwd_copy" ); +#endif + + diag_printf(": ROMFS list of / follows\n"); +#ifdef CYGPKG_FS_RAM + diag_printf(": Note that /var now gives stat() info for RAMFS\n"); +#endif + listdir( "/", true ); + + diag_printf(": Mount ROMFS again onto /mnt\n"); + sprintf( address, "%p", (void*)&filedata[0] ); + err = mount( address, "/mnt", "romfs" ); + if( err < 0 ) SHOW_RESULT( mount, err ); + + comparefiles( "/etc/passwd", "/mnt/etc/passwd" ); + + + err = mkdir( "/foo", 0 ); + CHKFAIL_TYPE( mkdir, err, EROFS ); + + err = rename( "/var", "/tmp" ); // RAMFS is mounted here +#ifdef CYGPKG_FS_RAM + CHKFAIL_TYPE( rename, err, EXDEV ); +#else + CHKFAIL_TYPE( rename, err, EROFS ); +#endif + + err = rename( "/var/passwd_copy", "/mnt/etc/passwd_copy" ); + CHKFAIL_TYPE( rename, err, EXDEV ); + + err = rename( "/etc", "/tmp" ); + CHKFAIL_TYPE( rename, err, EROFS ); + + diag_printf(": cd /etc\n"); + err = chdir( "/etc" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + err = chdir( "/mnt/etc" ); + if( err < 0 ) SHOW_RESULT( chdir, err ); + + listdir( ".", true ); + + diag_printf(": unlink /tmp\n"); + err = unlink( "/tmp" ); + CHKFAIL_TYPE( unlink, err, EROFS ); + + diag_printf(": mount random area\n"); + sprintf(address, "%p", (void*)(&filedata[0] + 0x100)); + err = mount( address, "/tmp", "romfs" ); + CHKFAIL_TYPE( mount, err, ENOENT ); + + err = umount( "/mnt" ); + if( err < 0 ) SHOW_RESULT( umount, err ); + + err = umount( "/var" ); +#ifdef CYGPKG_FS_RAM + if( err < 0 ) SHOW_RESULT( umount, err ); +#else + CHKFAIL_TYPE( umount, err, EINVAL ); +#endif + + err = umount( "/" ); + if( err < 0 ) SHOW_RESULT( umount, err ); + + + CYG_TEST_PASS_FINISH("fileio1"); +} + +// ------------------------------------------------------------------------- +// EOF fileio1.c diff --git a/packages/hal/arm/at91/v2_0/ChangeLog b/packages/hal/arm/at91/v2_0/ChangeLog new file mode 100644 index 00000000..3b65f8df --- /dev/null +++ b/packages/hal/arm/at91/v2_0/ChangeLog @@ -0,0 +1,154 @@ +2002-12-07 Gary Thomas + + * misc/redboot_ROMRAM.ecm: + * misc/redboot_ROM.ecm: + * misc/redboot_RAM.ecm: Suppress building Linux 'exec' command + (which makes little sense on this platform). + +2002-09-23 Gary Thomas on behalf of +2002-11-23 Scott Dattalo + + * include/plf_io.h: Add some missing register definitions. + +2002-05-28 Thomas Koeller + + * include/plf_io.h: Add watchdog definitions. + +2002-05-08 Gary Thomas + + * misc/redboot_ROMRAM.ecm: + * misc/redboot_ROM.ecm: Disable 'fconfig' since the FLASH is too small. + +2001-08-17 George Hampton +2001-08-17 Gary Thomas + + * include/hal_platform_ints.h (CYGNUM_HAL_ISR_COUNT): PR 22864 + Don't adjust by "min" value if not doing translations. + +2001-07-26 Gary Thomas + + * src/at91_misc.c (hal_clock_initialize): + * cdl/hal_arm_at91.cdl: Increase system clock (RTC) to run at 1MHz for + better timing resolution. CAUTION! this means that the system clock tick + can never be more than 64ms. + +2001-07-23 Gary Thomas + + * include/pkgconf/mlt_arm_at91_eb40_romram.mlt: + * include/pkgconf/mlt_arm_at91_eb40_romram.ldi: + * include/pkgconf/mlt_arm_at91_eb40_romram.h: + * include/pkgconf/mlt_arm_at91_eb40_ram.mlt: + * include/pkgconf/mlt_arm_at91_eb40_ram.ldi: + * include/pkgconf/mlt_arm_at91_eb40_ram.h: + * cdl/hal_arm_at91.cdl: Fix MLT files (names, layout). + +2001-07-20 Gary Thomas + + * include/plf_io.h: Add UART interrupt definitions. + + * src/hal_diag.c (cyg_hal_plf_serial_control): Enable ^C support. + + * src/at91_misc.c (hal_clock_initialize): Add clock/rtc implementation. + + * include/pkgconf/mlt_arm_at91_eb40_romram.ldi: + Replace missing 'fixed vectors'. + +2001-07-19 Gary Thomas + + * misc/redboot_ROMRAM.ecm: New exported config. + + * include/pkgconf/mlt_arm_at91_eb40_romram.ldi: + * include/pkgconf/mlt_arm_at91_eb40_ram.mlt: + * include/pkgconf/mlt_arm_at91_eb40_ram.ldi: + * include/hal_platform_setup.h: Fix ROMRAM startup mode. Note: I + can't get the onboard SRAM at 0x00100000 to work, so for now, this + will just have to go in low external RAM. Thus the change for the + RAM base address in startup=RAM mode. + + * src/hal_diag.c (cyg_hal_plf_serial_getc_timeout): Remove debug code. + + * src/at91_misc.c (set_leds): LEDs are on D4/D2/D1. + + * misc/redboot_ROM.ecm: + * misc/redboot_RAM.ecm: Exported configurations. + + * include/pkgconf/mlt_arm_at91_eb40_romram.mlt: + * include/pkgconf/mlt_arm_at91_eb40_romram.ldi: + * include/pkgconf/mlt_arm_at91_eb40_romram.h: New startup type. + + * include/pkgconf/mlt_arm_at91_eb40_rom.h: Fix heap layout. + + * include/pkgconf/mlt_arm_at91_eb40_ram.mlt: + * include/pkgconf/mlt_arm_at91_eb40_ram.ldi: + * include/pkgconf/mlt_arm_at91_eb40_ram.h: + Fix heap layout. Move RAM load address to leave room for RedBoot/GDB. + + * include/plf_io.h: Add definitions for PIO, EBI and PS. + + * include/hal_platform_setup.h: ROM startup mode now works. + First attempt at ROMRAM startup - not yet working. + + * cdl/hal_arm_at91.cdl: Add ROMRAM startup mode. + +2001-07-18 Gary Thomas + + * src/hal_diag.c: More complete initialization. + + * src/at91_misc.c: Support interrupt controller, delay_us(). + + * include/plf_io.h: Add interrupt controller, timer definitions. + + * cdl/hal_arm_at91.cdl: Fix clock speed, number I/O channels. + +2001-07-16 Gary Thomas + + * src/hal_diag.c: + * src/at91_misc.c: + * include/pkgconf/mlt_arm_at91_eb40_rom.mlt: + * include/pkgconf/mlt_arm_at91_eb40_rom.ldi: + * include/pkgconf/mlt_arm_at91_eb40_rom.h: + * include/pkgconf/mlt_arm_at91_eb40_ram.mlt: + * include/pkgconf/mlt_arm_at91_eb40_ram.ldi: + * include/pkgconf/mlt_arm_at91_eb40_ram.h: + * include/plf_stub.h: + * include/plf_io.h: + * include/hal_platform_setup.h: + * include/hal_platform_ints.h: + * include/hal_diag.h: + * include/hal_cache.h: + * cdl/hal_arm_at91.cdl: New port - cloned from E7T. + +//=========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/packages/hal/arm/at91/v2_0/cdl/hal_arm_at91.cdl b/packages/hal/arm/at91/v2_0/cdl/hal_arm_at91.cdl new file mode 100644 index 00000000..3d675401 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/cdl/hal_arm_at91.cdl @@ -0,0 +1,293 @@ +# ==================================================================== +# +# hal_arm_at91.cdl +# +# Atmel evaluation board (EB40) HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): gthomas +# Contributors: gthomas +# Date: 2001-07-12 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_ARM_AT91 { + display "Atmel evaluation board (EB40)" + parent CYGPKG_HAL_ARM + define_header hal_arm_at91.h + include_dir cyg/hal + hardware + description " + The AT91 HAL package provides the support needed to run + eCos on an Atmel AT91/EB40 eval board." + + compile hal_diag.c at91_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_ARM7 + implements CYGINT_HAL_ARM_THUMB_ARCH + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"ARM7TDMI\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Atmel AT91/EB40\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM" "ROMRAM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the AT91 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Using ROMRAM will allow the program to exist in + ROM, but be copied to RAM during startup." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The AT91 board has two serial ports. This option + chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The AT91 board has two serial ports. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CHANNELS_DEFAULT_BAUD { + display "Console/GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the default baud rate used for the + Console/GDB connection." + } + + # Real-time clock/counter specifics + cdl_option CYGNUM_HAL_ARM_AT91_CLOCK_SPEED { + display "CPU clock speed" + flavor data + calculated 32768000 + } + + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated ((CYGNUM_HAL_ARM_AT91_CLOCK_SPEED/32) / CYGNUM_HAL_RTC_DENOMINATOR) + } + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-mcpu=arm7tdmi -mno-short-load-words -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-mcpu=arm7tdmi -mno-short-load-words -Wl,--gc-sections -Wl,-static -g -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { (CYG_HAL_STARTUP == "RAM") ? "arm_at91_eb40_ram" : + (CYG_HAL_STARTUP == "ROMRAM") ? "arm_at91_eb40_romram" : + "arm_at91_eb40_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { (CYG_HAL_STARTUP == "RAM") ? "" : + (CYG_HAL_STARTUP == "ROMRAM") ? "" : + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { (CYG_HAL_STARTUP == "RAM") ? "" : + (CYG_HAL_STARTUP == "ROMRAM") ? "" : + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/redboot.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ + } + + } + } +} diff --git a/packages/hal/arm/at91/v2_0/include/hal_cache.h b/packages/hal/arm/at91/v2_0/include/hal_cache.h new file mode 100644 index 00000000..528fd326 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/hal_cache.h @@ -0,0 +1,192 @@ +#ifndef CYGONCE_HAL_CACHE_H +#define CYGONCE_HAL_CACHE_H + +//============================================================================= +// +// hal_cache.h +// +// HAL cache control API +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, gthomas +// Contributors: nickg, gthomas +// Date: 1998-09-28 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +//----------------------------------------------------------------------------- +// Cache dimensions + +// Data cache +//#define HAL_DCACHE_SIZE 0 // Size of data cache in bytes +//#define HAL_DCACHE_LINE_SIZE 0 // Size of a data cache line +//#define HAL_DCACHE_WAYS 0 // Associativity of the cache + +// Instruction cache +//#define HAL_ICACHE_SIZE 0 // Size of cache in bytes +//#define HAL_ICACHE_LINE_SIZE 0 // Size of a cache line +//#define HAL_ICACHE_WAYS 0 // Associativity of the cache + +//#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) +//#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) + +//----------------------------------------------------------------------------- +// Global control of data cache + +// Enable the data cache +#define HAL_DCACHE_ENABLE() + +// Disable the data cache +#define HAL_DCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() + +// Purge contents of data cache +#define HAL_DCACHE_PURGE_ALL() + +// Query the state of the data cache (does not affect the caching) +#define HAL_DCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +// Set the data cache refill burst size +//#define HAL_DCACHE_BURST_SIZE(_size_) + +// Set the data cache write mode +//#define HAL_DCACHE_WRITE_MODE( _mode_ ) + +//#define HAL_DCACHE_WRITETHRU_MODE 0 +//#define HAL_DCACHE_WRITEBACK_MODE 1 + +// Load the contents of the given address range into the data cache +// and then lock the cache so that it stays there. +//#define HAL_DCACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_DCACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_DCACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Data cache line control + +// Allocate cache lines for the given address range without reading its +// contents from memory. +//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) + +// Write dirty cache lines to memory and invalidate the cache entries +// for the given address range. +//#define HAL_DCACHE_FLUSH( _base_ , _size_ ) + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) + +// Write dirty cache lines to memory for the given address range. +//#define HAL_DCACHE_STORE( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of reading +// from it later. +//#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of writing +// to it later. +//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) + +// Allocate and zero the cache lines associated with the given range. +//#define HAL_DCACHE_ZERO( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() + +// Query the state of the instruction cache (does not affect the caching) +#define HAL_ICACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +// Set the instruction cache refill burst size +//#define HAL_ICACHE_BURST_SIZE(_size_) + +// Load the contents of the given address range into the instruction cache +// and then lock the cache so that it stays there. +//#define HAL_ICACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_ICACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_ICACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Instruction cache line control + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_CACHE_H +// End of hal_cache.h diff --git a/packages/hal/arm/at91/v2_0/include/hal_diag.h b/packages/hal/arm/at91/v2_0/include/hal_diag.h new file mode 100644 index 00000000..35394e12 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/hal_diag.h @@ -0,0 +1,79 @@ +#ifndef CYGONCE_HAL_DIAG_H +#define CYGONCE_HAL_DIAG_H + +//============================================================================= +// +// hal_diag.h +// +// HAL Support for Kernel Diagnostic Routines +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov, gthomas +// Date: 2001-07-12 +// Purpose: HAL Support for Kernel Diagnostic Routines +// Description: Diagnostic routines for use during kernel development. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include + +#include + +#define HAL_DIAG_INIT() hal_if_diag_init() +#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + +//----------------------------------------------------------------------------- +// LED +externC void hal_diag_led(int mask); + +//----------------------------------------------------------------------------- +// delay + +extern void hal_delay_us(cyg_int32 usecs); +#define HAL_DELAY_US(n) hal_delay_us(n); + +//----------------------------------------------------------------------------- +// end of hal_diag.h +#endif // CYGONCE_HAL_DIAG_H diff --git a/packages/hal/arm/at91/v2_0/include/hal_platform_ints.h b/packages/hal/arm/at91/v2_0/include/hal_platform_ints.h new file mode 100644 index 00000000..79942763 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/hal_platform_ints.h @@ -0,0 +1,86 @@ +#ifndef CYGONCE_HAL_PLATFORM_INTS_H +#define CYGONCE_HAL_PLATFORM_INTS_H +//========================================================================== +// +// hal_platform_ints.h +// +// HAL Interrupt and clock assignments for AT91/EB40 +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-07-12 +// Purpose: Define Interrupt support +// Description: The interrupt specifics for the AT91/EB40 board/platform are +// defined here. +// +// Usage: #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define CYGNUM_HAL_INTERRUPT_USART0 2 +#define CYGNUM_HAL_INTERRUPT_USART1 3 +#define CYGNUM_HAL_INTERRUPT_TIMER0 4 +#define CYGNUM_HAL_INTERRUPT_TIMER1 5 +#define CYGNUM_HAL_INTERRUPT_TIMER2 6 +#define CYGNUM_HAL_INTERRUPT_WATCHDOG 7 +#define CYGNUM_HAL_INTERRUPT_PIO 8 +#define CYGNUM_HAL_INTERRUPT_EXT0 16 +#define CYGNUM_HAL_INTERRUPT_EXT1 17 +#define CYGNUM_HAL_INTERRUPT_EXT2 18 + +#define CYGNUM_HAL_ISR_MIN 2 +#define CYGNUM_HAL_ISR_MAX 18 +// Note: extra slots (0,1) to avoid messing with vector translation +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX + 1) + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TIMER0 + + +//---------------------------------------------------------------------------- +// Reset. +#define HAL_PLATFORM_RESET() + +#define HAL_PLATFORM_RESET_ENTRY 0x01010000 + +#endif // CYGONCE_HAL_PLATFORM_INTS_H diff --git a/packages/hal/arm/at91/v2_0/include/hal_platform_setup.h b/packages/hal/arm/at91/v2_0/include/hal_platform_setup.h new file mode 100644 index 00000000..4ee660e8 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/hal_platform_setup.h @@ -0,0 +1,122 @@ +#ifndef CYGONCE_HAL_PLATFORM_SETUP_H +#define CYGONCE_HAL_PLATFORM_SETUP_H + +/*============================================================================= +// +// hal_platform_setup.h +// +// Platform specific support for HAL (assembly code) +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors:gthomas +// Date: 2001-07-12 +// Purpose: AT91/EB40 platform specific support routines +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include + +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM) + + .macro _setup + ldr r10,=_InitMemory // Initialize memory controller + movs r0,pc,lsr #20 // If ROM startup, PC < 0x100000 + moveq r10,r10,lsl #12 // mask address to low 20 bits + moveq r10,r10,lsr #12 + ldmia r10!,{r0-r9,r11-r12} // Table of initialization constants +#if defined(CYG_HAL_STARTUP_ROMRAM) + ldr r10,=0x0000FFFF + and r12,r12,r10 + ldr r10,=0x01010000 + orr r12,r12,r10 +#endif + stmia r11!,{r0-r9} // Write to controller + mov pc,r12 // Change address space, break pipeline +_InitMemory: + .long 0x01002535 // 0x01000000, 16MB, 2 cycles added after transfer, 16-bit, 6 wait states + .long 0x02002121 // 0x02000000, 16MB, 0 cycles added after transfer, 16-bit, 1 wait state + .long 0x20000000 // unused + .long 0x30000000 // unused + .long 0x40000000 // unused + .long 0x50000000 // unused + .long 0x60000000 // unused + .long 0x70000000 // unused + .long 0x00000001 // REMAP commande + .long 0x00000006 // 7 memory regions, standard read + .long AT91_EBI // External Bus Interface address + .long 10f // address where to jump +10: + +#if defined(CYG_HAL_STARTUP_ROMRAM) + ldr r0,=0x01010000 // Relocate FLASH/ROM to on-chip RAM + ldr r1,=0x02000000 // RAM base & length + ldr r2,=0x02010000 +20: ldr r3,[r0],#4 + str r3,[r1],#4 + cmp r1,r2 + bne 20b + ldr r0,=30f + mov pc,r0 +30: +#endif + + ldr r0,=AT91_PS // Power saving interface + ldr r1,=0xFFFFFFFF // Enable all peripheral [clocks] + str r1,[r0,#AT91_PS_PCER] + ldr r0,=AT91_PIO // Disable PIO (so peripherals can use bits) + ldr r1,=0x0070FE49 // UART, FIQ, EINT, Timer clocks + str r1,[r0,#AT91_PIO_PDR] + ldr r1,=0x000001B6 // LEDs + str r1,[r0,#AT91_PIO_OER] + str r1,[r0,#AT91_PIO_SODR] + .endm + +#define CYGSEM_HAL_ROM_RESET_USES_JUMP +#define PLATFORM_SETUP1 _setup +#else +#define PLATFORM_SETUP1 +#endif + +//----------------------------------------------------------------------------- +// end of hal_platform_setup.h +#endif // CYGONCE_HAL_PLATFORM_SETUP_H diff --git a/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_ram.h b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_ram.h new file mode 100644 index 00000000..c641278a --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_ram.h @@ -0,0 +1,20 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0) +#define CYGMEM_REGION_sram_SIZE (0x1000) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_ram (0x2000000) +#define CYGMEM_REGION_ram_SIZE (0x80000) +#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 (0x2080000 - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_ram.ldi b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_ram.ldi new file mode 100644 index 00000000..287aba34 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_ram.ldi @@ -0,0 +1,28 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#include + +MEMORY +{ + sram : ORIGIN = 0, LENGTH = 0x1000 + ram : ORIGIN = 0x2000000, LENGTH = 0x80000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (sram, 0x20, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0x2020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_ram.mlt b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_ram.mlt new file mode 100644 index 00000000..ccb439d8 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_ram.mlt @@ -0,0 +1,14 @@ +version 0 +region sram 0 1000 0 !On-chip SRAM +region ram 2000000 80000 0 ! +section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! +section rom_vectors 0 1 0 1 1 1 1 1 2020000 2020000 text text ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata rodata ! +section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 4 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 4 0 1 0 1 0 1 data data ! +section data 0 4 0 1 0 1 0 1 bss bss ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! diff --git a/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_rom.h b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_rom.h new file mode 100644 index 00000000..b79622fb --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_rom.h @@ -0,0 +1,25 @@ +// eCos memory layout - Wed Apr 11 13:49:55 2001 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x02000000) +#define CYGMEM_REGION_ram_SIZE (0x80000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x01000000) +#define CYGMEM_REGION_rom_SIZE (0x20000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__reserved_bootmon) []; +#endif +#define CYGMEM_SECTION_reserved_bootmon (CYG_LABEL_NAME (__reserved_bootmon)) +#define CYGMEM_SECTION_reserved_bootmon_SIZE (0x10000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x02080000 - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_rom.ldi b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_rom.ldi new file mode 100644 index 00000000..125c7163 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_rom.ldi @@ -0,0 +1,30 @@ +// eCos memory layout - Wed Apr 11 13:49:55 2001 + +// This is a generated file - do not edit + +#include + +MEMORY +{ + sram : ORIGIN = 0x00000000, LENGTH = 0x2000 + ram : ORIGIN = 0x02000000, LENGTH = 0x80000 + rom : ORIGIN = 0x01000000, LENGTH = 0x20000 +} + +SECTIONS +{ + SECTIONS_BEGIN + CYG_LABEL_DEFN(__reserved_bootmon) = 0x01000000; . = CYG_LABEL_DEFN(__reserved_bootmon) + 0x10000; + SECTION_rom_vectors (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (sram, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0x02000000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_rom.mlt b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_rom.mlt new file mode 100644 index 00000000..918df1c6 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_rom.mlt @@ -0,0 +1,16 @@ +version 0 +region sram 0 80000 00100000 ! +region ram 0 80000 00100000 ! +region rom 01000000 20000 1 ! +section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! +section data 0 1 1 1 1 1 0 0 00100000 bss ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! +section reserved_bootmon 10000 1 0 0 1 1 1 1 01000000 01000000 rom_vectors rom_vectors ! +section rom_vectors 0 8 0 1 0 1 0 1 text text ! +section text 0 1 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata rodata ! +section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 4 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 4 0 1 0 0 0 1 data ! diff --git a/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_romram.h b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_romram.h new file mode 100644 index 00000000..c641278a --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_romram.h @@ -0,0 +1,20 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_sram (0) +#define CYGMEM_REGION_sram_SIZE (0x1000) +#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_ram (0x2000000) +#define CYGMEM_REGION_ram_SIZE (0x80000) +#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 (0x2080000 - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_romram.ldi b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_romram.ldi new file mode 100644 index 00000000..146fc46c --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_romram.ldi @@ -0,0 +1,28 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#include + +MEMORY +{ + sram : ORIGIN = 0, LENGTH = 0x1000 + ram : ORIGIN = 0x2000000, LENGTH = 0x80000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (sram, 0x20, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0x2000000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_romram.mlt b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_romram.mlt new file mode 100644 index 00000000..e7e04feb --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/pkgconf/mlt_arm_at91_eb40_romram.mlt @@ -0,0 +1,14 @@ +version 0 +region sram 0 1000 0 !On-chip SRAM +region ram 2000000 80000 0 ! +section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! +section rom_vectors 0 1 0 1 1 1 1 1 2000000 2000000 text text ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata rodata ! +section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 4 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 4 0 1 0 1 0 1 data data ! +section data 0 4 0 1 0 1 0 1 bss bss ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! diff --git a/packages/hal/arm/at91/v2_0/include/plf_io.h b/packages/hal/arm/at91/v2_0/include/plf_io.h new file mode 100644 index 00000000..32ddb1ae --- /dev/null +++ b/packages/hal/arm/at91/v2_0/include/plf_io.h @@ -0,0 +1,396 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// Platform specific registers +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov, gthomas +// Date: 2001-07-12 +// Purpose: AT91/EB40 platform specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +// USART + +#define AT91_USART0 0xFFFD0000 +#define AT91_USART1 0xFFFCC000 + +#define AT91_US_CR 0x00 // Control register +#define AT91_US_CR_RxRESET (1<<2) +#define AT91_US_CR_TxRESET (1<<3) +#define AT91_US_CR_RxENAB (1<<4) +#define AT91_US_CR_RxDISAB (1<<5) +#define AT91_US_CR_TxENAB (1<<6) +#define AT91_US_CR_TxDISAB (1<<7) +#define AT91_US_CR_RSTATUS (1<<8) +#define AT91_US_MR 0x04 // Mode register +#define AT91_US_MR_CLOCK 4 +#define AT91_US_MR_CLOCK_MCK (0< +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include CYGBLD_HAL_PLATFORM_H + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include // CYG_UNUSED_PARAM + +#include // architecture stub support + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. +#define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h diff --git a/packages/hal/arm/at91/v2_0/misc/redboot_RAM.ecm b/packages/hal/arm/at91/v2_0/misc/redboot_RAM.ecm new file mode 100644 index 00000000..513773ef --- /dev/null +++ b/packages/hal/arm/at91/v2_0/misc/redboot_RAM.ecm @@ -0,0 +1,58 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware at91 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM v2_0 ; + package -hardware CYGPKG_HAL_ARM_AT91 v2_0 ; + package -hardware CYGPKG_DEVS_FLASH_AT91 v2_0 ; + package -template CYGPKG_HAL v2_0 ; + package -template CYGPKG_INFRA v2_0 ; + package -template CYGPKG_REDBOOT v2_0 ; + package CYGPKG_IO_FLASH v2_0 ; +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 6144 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGOPT_REDBOOT_FIS { + user_value 0 +}; + +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + user_value 0 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + user_value 0 +}; + diff --git a/packages/hal/arm/at91/v2_0/misc/redboot_ROM.ecm b/packages/hal/arm/at91/v2_0/misc/redboot_ROM.ecm new file mode 100644 index 00000000..316d94ab --- /dev/null +++ b/packages/hal/arm/at91/v2_0/misc/redboot_ROM.ecm @@ -0,0 +1,66 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware at91 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM v2_0 ; + package -hardware CYGPKG_HAL_ARM_AT91 v2_0 ; + package -hardware CYGPKG_DEVS_FLASH_AT91 v2_0 ; + package -template CYGPKG_HAL v2_0 ; + package -template CYGPKG_INFRA v2_0 ; + package -template CYGPKG_REDBOOT v2_0 ; + package CYGPKG_IO_FLASH v2_0 ; +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 6144 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROM +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGOPT_REDBOOT_FIS { + user_value 0 +}; + +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + user_value 0 +}; + + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + user_value 0 +}; diff --git a/packages/hal/arm/at91/v2_0/misc/redboot_ROMRAM.ecm b/packages/hal/arm/at91/v2_0/misc/redboot_ROMRAM.ecm new file mode 100644 index 00000000..72d89647 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/misc/redboot_ROMRAM.ecm @@ -0,0 +1,69 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware at91 ; + template redboot ; + package -hardware CYGPKG_HAL_ARM v2_0 ; + package -hardware CYGPKG_HAL_ARM_AT91 v2_0 ; + package -hardware CYGPKG_DEVS_FLASH_AT91 v2_0 ; + package -template CYGPKG_HAL v2_0 ; + package -template CYGPKG_INFRA v2_0 ; + package -template CYGPKG_REDBOOT v2_0 ; + package CYGPKG_IO_FLASH v2_0 ; +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 6144 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROMRAM +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGOPT_REDBOOT_FIS { + user_value 0 +}; + +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + user_value 0 +}; + +cdl_option CYGNUM_FLASH_WORKSPACE_SIZE { + user_value 0x00000200 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + user_value 0 +}; diff --git a/packages/hal/arm/at91/v2_0/src/at91_misc.c b/packages/hal/arm/at91/v2_0/src/at91_misc.c new file mode 100644 index 00000000..1bcdd140 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/src/at91_misc.c @@ -0,0 +1,286 @@ +//========================================================================== +// +// at91_misc.c +// +// HAL misc board support code for Atmel AT91/EB40 +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, jskov +// Date: 2001-07-12 +// Purpose: HAL board support +// Description: Implementations of HAL board interfaces +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +#include // base types +#include // tracing macros +#include // assertion macros + +#include // IO macros +#include // Register state info +#include +#include // necessary? +#include +#include // calling interface +#include // helper functions +#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +#include // HAL ISR support +#endif +#include // platform registers + +static cyg_uint32 _period; + +void hal_clock_initialize(cyg_uint32 period) +{ + CYG_ADDRESS timer = AT91_TC+AT91_TC_TC0; + + CYG_ASSERT(period < 0x10000, "Invalid clock period"); + + // Disable counter + HAL_WRITE_UINT32(timer+AT91_TC_CCR, AT91_TC_CCR_CLKDIS); + + // Set registers + HAL_WRITE_UINT32(timer+AT91_TC_CMR, AT91_TC_CMR_CPCTRG | // Reset counter on CPC + AT91_TC_CMR_CLKS_MCK32); // 1 MHz + HAL_WRITE_UINT32(timer+AT91_TC_RC, period); + + // Start timer + HAL_WRITE_UINT32(timer+AT91_TC_CCR, AT91_TC_CCR_TRIG | AT91_TC_CCR_CLKEN); + + // Enable timer 0 interrupt + HAL_WRITE_UINT32(timer+AT91_TC_IER, AT91_TC_IER_CPC); +} + +void hal_clock_reset(cyg_uint32 vector, cyg_uint32 period) +{ + CYG_ADDRESS timer = AT91_TC+AT91_TC_TC0; + cyg_uint32 sr; + + CYG_ASSERT(period < 0x10000, "Invalid clock period"); + + HAL_READ_UINT32(timer+AT91_TC_SR, sr); // Clear interrupt + HAL_INTERRUPT_ACKNOWLEDGE(CYGNUM_HAL_INTERRUPT_RTC); + + if (period != _period) { + hal_clock_initialize(period); + } + _period = period; + +} + +void hal_clock_read(cyg_uint32 *pvalue) +{ + CYG_ADDRESS timer = AT91_TC+AT91_TC_TC0; + cyg_uint32 val; + + HAL_READ_UINT32(timer+AT91_TC_CV, val); + *pvalue = val; +} + +// ------------------------------------------------------------------------- +// +// Delay for some number of micro-seconds +// Use timer #2 in 1MHz mode +// +void hal_delay_us(cyg_int32 usecs) +{ + CYG_ADDRESS timer = AT91_TC+AT91_TC_TC2; + cyg_uint32 stat; + + // Disable counter + HAL_WRITE_UINT32(timer+AT91_TC_CCR, AT91_TC_CCR_CLKDIS); + + // Set registers + HAL_WRITE_UINT32(timer+AT91_TC_CMR, AT91_TC_CMR_CLKS_MCK32); // 1MHz + HAL_WRITE_UINT32(timer+AT91_TC_RA, 0); + HAL_WRITE_UINT32(timer+AT91_TC_RC, usecs); + + // Start timer + HAL_WRITE_UINT32(timer+AT91_TC_CCR, AT91_TC_CCR_TRIG | AT91_TC_CCR_CLKEN); + + // Wait for the compare + do { + HAL_READ_UINT32(timer+AT91_TC_SR, stat); + } while ((stat & AT91_TC_SR_CPC) == 0); +} + +// ------------------------------------------------------------------------- +// Hardware init +void hal_hardware_init(void) +{ + // Set up eCos/ROM interfaces + hal_if_init(); + + // Reset all interrupts + HAL_WRITE_UINT32(AT91_AIC+AT91_AIC_IDCR, 0xFFFFFFFF); + + // Make sure interrupt controller is happy + HAL_WRITE_UINT32(AT91_AIC+AT91_AIC_EOI, 0xFFFFFFFF); +} + +// +// This routine is called to respond to a hardware interrupt (IRQ). It +// should interrogate the hardware and return the IRQ vector number. + +int hal_IRQ_handler(void) +{ + cyg_uint32 irq_num; + cyg_uint32 ipr, imr; + + HAL_READ_UINT32(AT91_AIC+AT91_AIC_IPR, ipr); + HAL_READ_UINT32(AT91_AIC+AT91_AIC_IMR, imr); + ipr &= imr; + for (irq_num = 0; irq_num < 19; irq_num++) { + if (ipr & (1 << irq_num)) { + break; + } + } + + return irq_num; +} + +// +// Interrupt control +// + +void hal_interrupt_mask(int vector) +{ + CYG_ASSERT(vector <= CYGNUM_HAL_ISR_MAX && + vector >= CYGNUM_HAL_ISR_MIN , "Invalid vector"); + + HAL_WRITE_UINT32(AT91_AIC+AT91_AIC_IDCR, (1<= CYGNUM_HAL_ISR_MIN , "Invalid vector"); + + HAL_WRITE_UINT32(AT91_AIC+AT91_AIC_IECR, (1<= CYGNUM_HAL_ISR_MIN , "Invalid vector"); + + HAL_WRITE_UINT32(AT91_AIC+AT91_AIC_ICCR, (1<= CYGNUM_HAL_ISR_MIN , "Invalid vector"); + + if (level) { + if (up) { + mode = AT91_AIC_SMR_LEVEL_HI; + } else { + mode = AT91_AIC_SMR_LEVEL_LOW; + } + } else { + if (up) { + mode = AT91_AIC_SMR_EDGE_POS; + } else { + mode = AT91_AIC_SMR_EDGE_NEG; + } + } + mode |= 7; // Default priority + HAL_WRITE_UINT32(AT91_AIC+(AT91_AIC_SMR0+(vector*4)), mode); +} + +void hal_interrupt_set_level(int vector, int level) +{ + cyg_uint32 mode; + + CYG_ASSERT(vector <= CYGNUM_HAL_ISR_MAX && + vector >= CYGNUM_HAL_ISR_MIN , "Invalid vector"); + CYG_ASSERT(level >= 1 && level <= 7, "Invalid level"); + + HAL_READ_UINT32(AT91_AIC+(AT91_AIC_SMR0+(vector*4)), mode); + mode = (mode & ~AT91_AIC_SMR_PRIORITY) | level; + HAL_WRITE_UINT32(AT91_AIC+(AT91_AIC_SMR0+(vector*4)), mode); +} + +void hal_show_IRQ(int vector, int data, int handler) +{ +// UNDEFINED(__FUNCTION__); // FIXME +} + +// +// Diagnostic LEDs - there are three colored LEDs which can be used +// to send a simple diagnostic value (8 bits) +// + +void +_at91_led(int val) +{ + int i, to; + + HAL_WRITE_UINT32(AT91_PIO+AT91_PIO_CODR, 0x06); // DATA+CLOCK LEDs off + for (to = 0; to < 0x200000; to++) ; + for (i = 0; i < 8; i++) { + HAL_WRITE_UINT32(AT91_PIO+AT91_PIO_SODR, ((val>>(7-i)) & 0x01)<<2); // DATA LED + HAL_WRITE_UINT32(AT91_PIO+AT91_PIO_SODR, 0x02); // CLOCK LED on + for (to = 0; to < 0x80000; to++) ; + HAL_WRITE_UINT32(AT91_PIO+AT91_PIO_CODR, 0x02); // CLOCK LED off + for (to = 0; to < 0x40000; to++) ; + HAL_WRITE_UINT32(AT91_PIO+AT91_PIO_CODR, 0x04); // DATA LED off + } +} + +void +set_leds(int val) +{ + HAL_WRITE_UINT32(AT91_PIO+AT91_PIO_CODR, 0x16); + HAL_WRITE_UINT32(AT91_PIO+AT91_PIO_SODR, val); +} + + +//-------------------------------------------------------------------------- +// EOF hal_misc.c diff --git a/packages/hal/arm/at91/v2_0/src/hal_diag.c b/packages/hal/arm/at91/v2_0/src/hal_diag.c new file mode 100644 index 00000000..30a25f21 --- /dev/null +++ b/packages/hal/arm/at91/v2_0/src/hal_diag.c @@ -0,0 +1,324 @@ +/*============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov, gthomas +// Date: 2001-07-12 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include +#include CYGBLD_HAL_PLATFORM_H + +#include // base types + +#include // SAVE/RESTORE GP macros +#include // IO macros +#include // interface API +#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include // Helper functions +#include // CYG_ISR_HANDLED + +#include // USART registers + +//----------------------------------------------------------------------------- +typedef struct { + cyg_uint8* base; + cyg_int32 msec_timeout; + int isr_vector; +} channel_data_t; + +//----------------------------------------------------------------------------- + +static void +cyg_hal_plf_serial_init_channel(void* __ch_data) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + + // Reset device + HAL_WRITE_UINT32(base+AT91_US_CR, AT91_US_CR_RxRESET | AT91_US_CR_TxRESET); + + // 8-1-no parity. + HAL_WRITE_UINT32(base+AT91_US_MR, + AT91_US_MR_CLOCK_MCK | AT91_US_MR_LENGTH_8 | + AT91_US_MR_PARITY_NONE | AT91_US_MR_STOP_1); + + HAL_WRITE_UINT32(base+AT91_US_BRG, AT91_US_BAUD(CYGNUM_HAL_VIRTUAL_VECTOR_CHANNELS_DEFAULT_BAUD)); + + // Enable RX and TX + HAL_WRITE_UINT32(base+AT91_US_CR, AT91_US_CR_RxENAB | AT91_US_CR_TxENAB); +} + +void +cyg_hal_plf_serial_putc(void *__ch_data, char c) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint32 status, ch; + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT32(base+AT91_US_CSR, status); + } while ((status & AT91_US_CSR_TxRDY) == 0); + + ch = (cyg_uint32)c; + HAL_WRITE_UINT32(base+AT91_US_THR, ch); + + CYGARC_HAL_RESTORE_GP(); +} + +static cyg_bool +cyg_hal_plf_serial_getc_nonblock(void* __ch_data, cyg_uint8* ch) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_uint8* base = chan->base; + cyg_uint32 stat; + cyg_uint32 c; + + HAL_READ_UINT32(base+AT91_US_CSR, stat); + if ((stat & AT91_US_CSR_RxRDY) == 0) + return false; + + HAL_READ_UINT32(base+AT91_US_RHR, c); + *ch = (cyg_uint8)(c & 0xff); + + return true; +} + +cyg_uint8 +cyg_hal_plf_serial_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while(!cyg_hal_plf_serial_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + +static void +cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + cyg_hal_plf_serial_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void +cyg_hal_plf_serial_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + *__buf++ = cyg_hal_plf_serial_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool +cyg_hal_plf_serial_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + int delay_count; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 10; // delay in .1 ms steps + + for(;;) { + res = cyg_hal_plf_serial_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(100); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int +cyg_hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + static int irq_state = 0; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + int ret = 0; + CYGARC_HAL_SAVE_GP(); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + irq_state = 1; + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_WRITE_UINT32(base+AT91_US_IER, AT91_US_IER_RxRDY); + break; + case __COMMCTL_IRQ_DISABLE: + ret = irq_state; + irq_state = 0; + HAL_INTERRUPT_MASK(chan->isr_vector); + HAL_WRITE_UINT32(base+AT91_US_IDR, AT91_US_IER_RxRDY); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + default: + break; + } + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int +cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + int res = 0; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_uint32 c; + cyg_uint8 ch; + cyg_uint32 stat; + CYGARC_HAL_SAVE_GP(); + + *__ctrlc = 0; + HAL_READ_UINT32(chan->base+AT91_US_CSR, stat); + if ( (stat & AT91_US_CSR_RxRDY) != 0 ) { + + HAL_READ_UINT32(chan->base+AT91_US_RHR, c); + ch = (cyg_uint8)(c & 0xff); + if( cyg_hal_is_break( &ch , 1 ) ) + *__ctrlc = 1; + + res = CYG_ISR_HANDLED; + } + + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static channel_data_t at91_ser_channels[2] = { + { (cyg_uint8*)AT91_USART0, 1000, CYGNUM_HAL_INTERRUPT_USART0}, + { (cyg_uint8*)AT91_USART1, 1000, CYGNUM_HAL_INTERRUPT_USART1} +}; + +static void +cyg_hal_plf_serial_init(void) +{ + hal_virtual_comm_table_t* comm; + int cur; + + cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + // Init channels + cyg_hal_plf_serial_init_channel(&at91_ser_channels[0]); +#if CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS > 1 + cyg_hal_plf_serial_init_channel(&at91_ser_channels[1]); +#endif + + // Setup procs in the vector table + + // Set channel 0 + CYGACC_CALL_IF_SET_CONSOLE_COMM(0); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &at91_ser_channels[0]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); + +#if CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS > 1 + // Set channel 1 + CYGACC_CALL_IF_SET_CONSOLE_COMM(1); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &at91_ser_channels[1]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); +#endif + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); +} + +void +cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) + return; + + initialized = 1; + + cyg_hal_plf_serial_init(); +} + +//----------------------------------------------------------------------------- +// End of hal_diag.c diff --git a/packages/hal/arm/sa11x0/ipaq/v2_0/misc/toyota_fullscr.ecm b/packages/hal/arm/sa11x0/ipaq/v2_0/misc/toyota_fullscr.ecm new file mode 100644 index 00000000..9504c1f3 --- /dev/null +++ b/packages/hal/arm/sa11x0/ipaq/v2_0/misc/toyota_fullscr.ecm @@ -0,0 +1,316 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware ipaq ; + template net ; + package -hardware CYGPKG_HAL_ARM v2_0 ; + package -hardware CYGPKG_HAL_ARM_SA11X0 v2_0 ; + package -hardware CYGPKG_HAL_ARM_SA11X0_IPAQ v2_0 ; + package -hardware CYGPKG_IO_SERIAL_ARM_SA11X0 v2_0 ; + package -hardware CYGPKG_DEVS_PCMCIA_IPAQ v2_0 ; + package -hardware CYGPKG_DEVS_FLASH_IPAQ v2_0 ; + package -hardware CYGPKG_DEVS_FLASH_STRATA v2_0 ; + package -hardware CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 v2_0 ; + package -hardware CYGPKG_DEVS_TOUCH_IPAQ v2_0 ; + package -hardware CYGPKG_DEVS_KBD_IPAQ v2_0 ; + package -hardware CYGPKG_DEVS_ETH_CF v2_0 ; + package -hardware CYGPKG_DEVS_ETH_NS_DP83902A v2_0 ; + package -template CYGPKG_HAL v2_0 ; + package -template CYGPKG_IO v2_0 ; + package -template CYGPKG_IO_SERIAL v2_0 ; + package -template CYGPKG_INFRA v2_0 ; + package -template CYGPKG_ISOINFRA v2_0 ; + package -template CYGPKG_KERNEL v2_0 ; + package -template CYGPKG_MEMALLOC v2_0 ; + package -template CYGPKG_LIBC v2_0 ; + package -template CYGPKG_LIBC_TIME v2_0 ; + package -template CYGPKG_LIBC_STDLIB v2_0 ; + package -template CYGPKG_LIBC_STRING v2_0 ; + package -template CYGPKG_LIBC_I18N v2_0 ; + package -template CYGPKG_LIBC_SETJMP v2_0 ; + package -template CYGPKG_LIBC_STARTUP v2_0 ; + package -template CYGPKG_LIBC_STDIO v2_0 ; + package -template CYGPKG_LIBM v2_0 ; + package -template CYGPKG_POSIX v2_0 ; + package -template CYGPKG_IO_WATCHDOG v2_0 ; + package -template CYGPKG_IO_WALLCLOCK v2_0 ; + package -template CYGPKG_ERROR v2_0 ; + package -template CYGPKG_IO_FILEIO v2_0 ; + package -template CYGPKG_NET v2_0 ; + package -template CYGPKG_NET_OPENBSD_STACK v2_0 ; + package -template CYGPKG_NS_DNS v2_0 ; + package -template CYGPKG_IO_ETH_DRIVERS v2_0 ; + package CYGPKG_MICROWINDOWS v2_0 ; + package CYGPKG_FS_JFFS2 v2_0 ; + package CYGPKG_IO_FLASH v2_0 ; + package CYGPKG_COMPRESS_ZLIB v2_0 ; + package CYGPKG_SDL v2_0 ; + package CYGPKG_SMPEG v2_0 ; + package CYGPKG_FS_RAM v2_0 ; +}; + +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + user_value arm-elf +}; + +cdl_option CYGPKG_IO_NFILE { + user_value 32 +}; + +cdl_component CYGPKG_INFRA_DEBUG { + user_value 1 +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DIRENT_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DNS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + inferred_value 1 +}; + +cdl_option CYGIMP_KERNEL_SCHED_SORTED_QUEUES { + inferred_value 1 +}; + +cdl_option CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS { + user_value 2 +}; + +cdl_option CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE { + inferred_value 1 +}; + +cdl_component CYGSEM_KERNEL_SCHED_ASR_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_ASR_GLOBAL { + inferred_value 1 +}; + +cdl_option FOPEN_MAX { + user_value 32 +}; + +cdl_option CYGNUM_FILEIO_NFILE { + user_value 32 +}; + +cdl_option CYGNUM_FILEIO_NFD { + user_value 32 +}; + +cdl_component CYGPKG_IO_FILEIO_INODE { + inferred_value 1 +}; + +cdl_option CYGBLD_MICROWINDOWS_ECOS { + inferred_value 1 +}; + +cdl_option CYGBLD_MICROWINDOWS_NANOWM { + inferred_value 1 +}; + +cdl_option CYGBLD_MICROWINDOWS_NXKBD { + inferred_value 1 +}; + +cdl_option CYGBLD_MICROWINDOWS_NANOX_DEMOS { + inferred_value 1 +}; + +cdl_option CYGPKG_MICROWINDOWS_CFLAGS_ADD { + inferred_value "-I\$(PREFIX)/include/microwin -D__ECOS=1 -DMSDOS=0 -DELKS=0 -D__rtems__=0 -D_MINIX=0 -DNOTYET=0 -DUNIX=1 -DHAVE_FILEIO -DHAVE_BMP_SUPPORT=1 -DHAVE_PNM_SUPPORT=1 -DHAVE_XPM_SUPPORT=1 -DxHAVE_JPEG_SUPPORT=1 -DHAVESELECT=1 -DMWPIXEL_FORMAT=MWPF_TRUECOLOR565" +}; + +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + inferred_value 1 +}; + +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + user_value 0x00200000 +}; + +cdl_option CYGPKG_SDL_CFLAGS_ADD { + inferred_value "-I\$(PREFIX)/include/SDL -I\$(REPOSITORY)/\$(PACKAGE)/src/src -I\$(REPOSITORY)/\$(PACKAGE)/src/src/audio -I\$(REPOSITORY)/\$(PACKAGE)/src/src/events -I\$(REPOSITORY)/\$(PACKAGE)/src/src/joystick -I\$(REPOSITORY)/\$(PACKAGE)/src/src/thread -I\$(REPOSITORY)/\$(PACKAGE)/src/src/thread/ecos -I\$(REPOSITORY)/\$(PACKAGE)/src/src/timer -I\$(REPOSITORY)/\$(PACKAGE)/src/src/video -I\$(REPOSITORY)/\$(PACKAGE)/src/src/video/fbcon -I\$(REPOSITORY)/\$(PACKAGE)/src/src/video/svga -DDISABLE_JOYSTICK -DDISABLE_CDROM -DUSE_INPUT_EVENTS -DSDL_USE_PTHREADS -DPTHREAD_NO_RECURSIVE_MUTEX -D__ECOS=1 -DENABLE_FBCON" +}; + +cdl_option CYGBLD_SMPEG_BUILD_PLAYMPEG { + inferred_value 1 +}; + +cdl_component CYGBLD_SMPEG_BUILD_TOYOTA_DEMO { + user_value 1 +}; + + diff --git a/packages/hal/arm/sa11x0/ipaq/v2_0/misc/toyota_window.ecm b/packages/hal/arm/sa11x0/ipaq/v2_0/misc/toyota_window.ecm new file mode 100644 index 00000000..06f2c4ee --- /dev/null +++ b/packages/hal/arm/sa11x0/ipaq/v2_0/misc/toyota_window.ecm @@ -0,0 +1,324 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware ipaq ; + template net ; + package -hardware CYGPKG_HAL_ARM v2_0 ; + package -hardware CYGPKG_HAL_ARM_SA11X0 v2_0 ; + package -hardware CYGPKG_HAL_ARM_SA11X0_IPAQ v2_0 ; + package -hardware CYGPKG_IO_SERIAL_ARM_SA11X0 v2_0 ; + package -hardware CYGPKG_DEVS_PCMCIA_IPAQ v2_0 ; + package -hardware CYGPKG_DEVS_FLASH_IPAQ v2_0 ; + package -hardware CYGPKG_DEVS_FLASH_STRATA v2_0 ; + package -hardware CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 v2_0 ; + package -hardware CYGPKG_DEVS_TOUCH_IPAQ v2_0 ; + package -hardware CYGPKG_DEVS_KBD_IPAQ v2_0 ; + package -hardware CYGPKG_DEVS_ETH_CF v2_0 ; + package -hardware CYGPKG_DEVS_ETH_NS_DP83902A v2_0 ; + package -template CYGPKG_HAL v2_0 ; + package -template CYGPKG_IO v2_0 ; + package -template CYGPKG_IO_SERIAL v2_0 ; + package -template CYGPKG_INFRA v2_0 ; + package -template CYGPKG_ISOINFRA v2_0 ; + package -template CYGPKG_KERNEL v2_0 ; + package -template CYGPKG_MEMALLOC v2_0 ; + package -template CYGPKG_LIBC v2_0 ; + package -template CYGPKG_LIBC_TIME v2_0 ; + package -template CYGPKG_LIBC_STDLIB v2_0 ; + package -template CYGPKG_LIBC_STRING v2_0 ; + package -template CYGPKG_LIBC_I18N v2_0 ; + package -template CYGPKG_LIBC_SETJMP v2_0 ; + package -template CYGPKG_LIBC_STARTUP v2_0 ; + package -template CYGPKG_LIBC_STDIO v2_0 ; + package -template CYGPKG_LIBM v2_0 ; + package -template CYGPKG_POSIX v2_0 ; + package -template CYGPKG_IO_WATCHDOG v2_0 ; + package -template CYGPKG_IO_WALLCLOCK v2_0 ; + package -template CYGPKG_ERROR v2_0 ; + package -template CYGPKG_IO_FILEIO v2_0 ; + package -template CYGPKG_NET v2_0 ; + package -template CYGPKG_NET_OPENBSD_STACK v2_0 ; + package -template CYGPKG_NS_DNS v2_0 ; + package -template CYGPKG_IO_ETH_DRIVERS v2_0 ; + package CYGPKG_MICROWINDOWS v2_0 ; + package CYGPKG_FS_JFFS2 v2_0 ; + package CYGPKG_IO_FLASH v2_0 ; + package CYGPKG_COMPRESS_ZLIB v2_0 ; + package CYGPKG_SDL v2_0 ; + package CYGPKG_SMPEG v2_0 ; + package CYGPKG_FS_RAM v2_0 ; +}; + +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + user_value arm-elf +}; + +cdl_option CYGPKG_IO_NFILE { + user_value 32 +}; + +cdl_component CYGPKG_INFRA_DEBUG { + user_value 1 +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DIRENT_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DNS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + inferred_value 1 +}; + +cdl_option CYGIMP_KERNEL_SCHED_SORTED_QUEUES { + inferred_value 1 +}; + +cdl_option CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS { + user_value 2 +}; + +cdl_option CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE { + inferred_value 1 +}; + +cdl_component CYGSEM_KERNEL_SCHED_ASR_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_ASR_GLOBAL { + inferred_value 1 +}; + +cdl_option FOPEN_MAX { + user_value 32 +}; + +cdl_option CYGNUM_FILEIO_NFILE { + user_value 32 +}; + +cdl_option CYGNUM_FILEIO_NFD { + user_value 32 +}; + +cdl_component CYGPKG_IO_FILEIO_INODE { + inferred_value 1 +}; + +cdl_option CYGBLD_MICROWINDOWS_ECOS { + inferred_value 1 +}; + +cdl_option CYGBLD_MICROWINDOWS_NANOWM { + inferred_value 1 +}; + +cdl_option CYGBLD_MICROWINDOWS_NXKBD { + inferred_value 1 +}; + +cdl_option CYGBLD_MICROWINDOWS_NANOX_DEMOS { + inferred_value 1 +}; + +cdl_option CYGPKG_MICROWINDOWS_CFLAGS_ADD { + inferred_value "-I\$(PREFIX)/include/microwin -D__ECOS=1 -DMSDOS=0 -DELKS=0 -D__rtems__=0 -D_MINIX=0 -DNOTYET=0 -DUNIX=1 -DHAVE_FILEIO -DHAVE_BMP_SUPPORT=1 -DHAVE_PNM_SUPPORT=1 -DHAVE_XPM_SUPPORT=1 -DxHAVE_JPEG_SUPPORT=1 -DHAVESELECT=1 -DMWPIXEL_FORMAT=MWPF_TRUECOLOR565" +}; + +cdl_component CYGPKG_IO_FLASH_BLOCK_DEVICE { + inferred_value 1 +}; + +cdl_option CYGNUM_IO_FLASH_BLOCK_LENGTH_1 { + user_value 0x00200000 +}; + +cdl_option CYGSEM_SDL_FBCON_FORCEGRAREA { + inferred_value 1 +}; + +cdl_option CYGPKG_SDL_CFLAGS_ADD { + inferred_value "-I\$(PREFIX)/include/SDL -I\$(REPOSITORY)/\$(PACKAGE)/src/src -I\$(REPOSITORY)/\$(PACKAGE)/src/src/audio -I\$(REPOSITORY)/\$(PACKAGE)/src/src/events -I\$(REPOSITORY)/\$(PACKAGE)/src/src/joystick -I\$(REPOSITORY)/\$(PACKAGE)/src/src/thread -I\$(REPOSITORY)/\$(PACKAGE)/src/src/thread/ecos -I\$(REPOSITORY)/\$(PACKAGE)/src/src/timer -I\$(REPOSITORY)/\$(PACKAGE)/src/src/video -I\$(REPOSITORY)/\$(PACKAGE)/src/src/video/fbcon -I\$(REPOSITORY)/\$(PACKAGE)/src/src/video/svga -DDISABLE_JOYSTICK -DDISABLE_CDROM -DUSE_INPUT_EVENTS -DSDL_USE_PTHREADS -DPTHREAD_NO_RECURSIVE_MUTEX -D__ECOS=1 -DENABLE_FBCON" +}; + +cdl_option CYGBLD_SMPEG_BUILD_PLAYMPEG { + inferred_value 1 +}; + +cdl_component CYGBLD_SMPEG_BUILD_TOYOTA_DEMO { + user_value 1 +}; + +cdl_option CYGFUN_SMPEG_BUILD_TOYOTA_DEMO_WINDOWED { + user_value 1 +}; + + diff --git a/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_triteco_stk1.cdl b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_triteco_stk1.cdl new file mode 100755 index 00000000..c5352edc --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_triteco_stk1.cdl @@ -0,0 +1,455 @@ +# ==================================================================== +# +# hal_arm_xscale_triteco_stk1.cdl +# +# Ka-Ro TRITON architectural HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl +# Original data: usteinkohl +# Contributors: +# Date: 10th March 2003 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_ECO_STK1 { + display "Karo Triton XScale evaluation boards" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton.h + include_dir cyg/hal + hardware + description " + The TRITON_ECO_STK1 HAL package provides the support needed to run + eCos on a Karo TRITON ECO board located on a Starter Kit I." + + compile hal_diag.c triton_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON_FLASH16_16" + puts $::cdl_system_header "#define TRITON_DRAM16_16_MOBILE" + puts $::cdl_system_header "#define TRITON_STK 1" + puts $::cdl_system_header "#define TRITON_CS2_8900" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON ECO --STK1-- \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"developed and produced by Ka-Ro electronics GmbH, Germany\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 0 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TRITON board has only one serial port. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + display "XScale TRITON build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + display "XScale TRITON tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_lp_ram" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_lp_roma" : \ + "arm_xscale_triton_lp_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/eco_stk1.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + +# the following causes cyclone specific tests to be built in. +# It might me nice/necessary to modify these for triton +# compile -library=libextras.a diag/diag.c diag/io_utils.c diag/external_timer.c \ +# diag/i557_eep.c diag/interrupts.c \ +# diag/xscale_test.c diag/flash.c diag/lubduart.c \ +# diag/ether_test.c diag/memtest.c diag/test_menu.c \ +# diag/irq.S diff --git a/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritetn_stk1.cdl b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritetn_stk1.cdl new file mode 100755 index 00000000..b39b0a5a --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritetn_stk1.cdl @@ -0,0 +1,454 @@ +# ==================================================================== +# +# hal_arm_xscale_tritetn_stk1.cdl +# +# Ka-Ro TRITON architectural HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl +# Original data: usteinkohl +# Contributors: +# Date: 10th March 2003 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK1 { + display "Karo Triton XScale evaluation boards" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton.h + include_dir cyg/hal + hardware + description " + The TRITON_ETN_STK1 HAL package provides the support needed to run + eCos on a Karo TRITON ETN board located on a Starter Kit I." + + compile hal_diag.c triton_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON_FLASH32_32" + puts $::cdl_system_header "#define TRITON_DRAM32_64" + puts $::cdl_system_header "#define TRITON_STK 1" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON ETN --STK1-- \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"developed and produced by Ka-Ro electronics GmbH, Germany\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 0 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TRITON board has only one serial port. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + display "XScale TRITON build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + display "XScale TRITON tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : \ + "arm_xscale_triton_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/triton_etn_stk1.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + +# the following causes cyclone specific tests to be built in. +# It might me nice/necessary to modify these for triton +# compile -library=libextras.a diag/diag.c diag/io_utils.c diag/external_timer.c \ +# diag/i557_eep.c diag/interrupts.c \ +# diag/xscale_test.c diag/flash.c diag/lubduart.c \ +# diag/ether_test.c diag/memtest.c diag/test_menu.c \ +# diag/irq.S diff --git a/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritetn_stk2.cdl b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritetn_stk2.cdl new file mode 100755 index 00000000..07c8a92c --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritetn_stk2.cdl @@ -0,0 +1,455 @@ +# ==================================================================== +# +# hal_arm_xscale_tritetn_stk2.cdl +# +# Ka-Ro TRITON architectural HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl +# Original data: usteinkohl +# Contributors: +# Date: 2003-03-10 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_STK2 { + display "Karo Triton XScale evaluation boards" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton.h + include_dir cyg/hal + hardware + description " + The TRITON_ETN_STK2 HAL package provides the support needed to run + eCos on a Karo TRITON ETN board located on a Starter Kit II." + + compile hal_diag.c triton_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON_FLASH32_32" + puts $::cdl_system_header "#define TRITON_DRAM32_64" + puts $::cdl_system_header "#define TRITON_CS2_SMSC" + puts $::cdl_system_header "#define TRITON_STK 2" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON ETN --STK2-- \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"developed and produced by Ka-Ro electronics GmbH, Germany\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 0 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TRITON board has only one serial port. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + display "XScale TRITON build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + display "XScale TRITON tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : \ + "arm_xscale_triton_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/etn_stk2.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + +# the following causes cyclone specific tests to be built in. +# It might me nice/necessary to modify these for triton +# compile -library=libextras.a diag/diag.c diag/io_utils.c diag/external_timer.c \ +# diag/i557_eep.c diag/interrupts.c \ +# diag/xscale_test.c diag/flash.c diag/lubduart.c \ +# diag/ether_test.c diag/memtest.c diag/test_menu.c \ +# diag/irq.S diff --git a/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritlp32_stk2.cdl b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritlp32_stk2.cdl new file mode 100755 index 00000000..8de7ed06 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritlp32_stk2.cdl @@ -0,0 +1,456 @@ +# ==================================================================== +# +# hal_arm_xscale_tritlp32_stk2.cdl +# +# Ka-Ro TRITON architectural HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl +# Original data: usteinkohl +# Contributors: +# Date: 31th March 2003 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_LP32_STK2 { + display "Karo Triton XScale evaluation boards" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton.h + include_dir cyg/hal + hardware + description " + The TRITON_LP32_STK2 HAL package provides the support needed to run + eCos on a Karo TRITON LP/32S board located on a Starter Kit II." + + compile hal_diag.c triton_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON_FLASH16_16" + puts $::cdl_system_header "#define TRITON_DRAM16_32_MOBILE" + puts $::cdl_system_header "#define TRITON_STK 2" + puts $::cdl_system_header "#define TRITON_CS2_8900" + puts $::cdl_system_header "#define TRITON_V_CPOWER" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON LP 32 MByte --STK2-- \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"developed and produced by Ka-Ro electronics GmbH, Germany\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 0 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TRITON board has only one serial port. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + display "XScale TRITON build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + display "XScale TRITON tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_lp_ram" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_lp32_roma" : \ + "arm_xscale_triton_lp32_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/lp32_sk2.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + +# the following causes cyclone specific tests to be built in. +# It might me nice/necessary to modify these for triton +# compile -library=libextras.a diag/diag.c diag/io_utils.c diag/external_timer.c \ +# diag/i557_eep.c diag/interrupts.c \ +# diag/xscale_test.c diag/flash.c diag/lubduart.c \ +# diag/ether_test.c diag/memtest.c diag/test_menu.c \ +# diag/irq.S diff --git a/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritlp_stk2.cdl b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritlp_stk2.cdl new file mode 100755 index 00000000..c3b498b8 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_tritlp_stk2.cdl @@ -0,0 +1,456 @@ +# ==================================================================== +# +# hal_arm_xscale_tritlp_stk2.cdl +# +# Ka-Ro TRITON architectural HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl +# Original data: usteinkohl +# Contributors: +# Date: 31th March 2003 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_LP_STK2 { + display "Karo Triton XScale evaluation boards" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton.h + include_dir cyg/hal + hardware + description " + The TRITON_LP_STK2 HAL package provides the support needed to run + eCos on a Karo TRITON LP board located on a Starter Kit II." + + compile hal_diag.c triton_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON_FLASH16_16" + puts $::cdl_system_header "#define TRITON_DRAM16_16_MOBILE" + puts $::cdl_system_header "#define TRITON_STK 2" + puts $::cdl_system_header "#define TRITON_CS2_8900" + puts $::cdl_system_header "#define TRITON_V_CPOWER" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON LP --STK2-- \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"developed and produced by Ka-Ro electronics GmbH, Germany\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 0 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TRITON board has only one serial port. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + display "XScale TRITON build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + display "XScale TRITON tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_lp_ram" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_lp_roma" : \ + "arm_xscale_triton_lp_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/lp_stk2.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + +# the following causes cyclone specific tests to be built in. +# It might me nice/necessary to modify these for triton +# compile -library=libextras.a diag/diag.c diag/io_utils.c diag/external_timer.c \ +# diag/i557_eep.c diag/interrupts.c \ +# diag/xscale_test.c diag/flash.c diag/lubduart.c \ +# diag/ether_test.c diag/memtest.c diag/test_menu.c \ +# diag/irq.S diff --git a/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_triton_stk1.cdl b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_triton_stk1.cdl new file mode 100755 index 00000000..a97ac0c4 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_triton_stk1.cdl @@ -0,0 +1,453 @@ +# ==================================================================== +# +# hal_arm_xscale_tritetn_stk1.cdl +# +# Ka-Ro TRITON architectural HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl +# Original data: usteinkohl +# Contributors: +# Date: 10th March 2003 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_STK1 { + display "Karo Triton XScale evaluation boards" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton.h + include_dir cyg/hal + hardware + description " + The TRITON_STK1 HAL package provides the support needed to run + eCos on a Karo TRITON board located on a Starter Kit I." + + compile hal_diag.c triton_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON_FLASH32_32" + puts $::cdl_system_header "#define TRITON_DRAM32_64" + puts $::cdl_system_header "#define TRITON_STK 1" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON --STK1-- \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"developed and produced by Ka-Ro electronics GmbH, Germany\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"ROM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option chooses which serial port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + display "XScale TRITON build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + display "XScale TRITON tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : \ + "arm_xscale_triton_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/std_stk1.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + +# the following causes cyclone specific tests to be built in. +# It might me nice/necessary to modify these for triton +# compile -library=libextras.a diag/diag.c diag/io_utils.c diag/external_timer.c \ +# diag/i557_eep.c diag/interrupts.c \ +# diag/xscale_test.c diag/flash.c diag/lubduart.c \ +# diag/ether_test.c diag/memtest.c diag/test_menu.c \ +# diag/irq.S diff --git a/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_triton_x.cdl b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_triton_x.cdl new file mode 100755 index 00000000..4ecfedd3 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/cdl/hal_arm_xscale_triton_x.cdl @@ -0,0 +1,457 @@ +# ==================================================================== +# +# hal_arm_xscale_triton_x.cdl +# +# Ka-Ro TRITON architectural HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl +# Original data: usteinkohl +# Contributors: +# Date: 26th November 2003 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON_X { + display "Karo Triton XScale evaluation boards" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton.h + include_dir cyg/hal + hardware + description " + The TRITON_X HAL package provides the support needed to run + eCos on a Karo TRITON X board." + + compile hal_diag.c triton_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON_FLASH32_32" + puts $::cdl_system_header "#define TRITON_DRAM32_64" + puts $::cdl_system_header "#define TRITON_V_CPOWER" + puts $::cdl_system_header "#define TRITON_X_BOARD" + + puts $::cdl_system_header "#define TRITON_STK 2" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON XXS \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"developed and produced by Ka-Ro electronics GmbH, Germany\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The TRITON board has only one serial port. This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON_OPTIONS { + display "XScale TRITON build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON_TESTS { + display "XScale TRITON tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton_ram" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "arm_xscale_triton_roma" : \ + "arm_xscale_triton_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/triton_x.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + +# the following causes cyclone specific tests to be built in. +# It might me nice/necessary to modify these for triton +# compile -library=libextras.a diag/diag.c diag/io_utils.c diag/external_timer.c \ +# diag/i557_eep.c diag/interrupts.c \ +# diag/xscale_test.c diag/flash.c diag/lubduart.c \ +# diag/ether_test.c diag/memtest.c diag/test_menu.c \ +# diag/irq.S diff --git a/packages/hal/arm/xscale/triton/v2_0/include/dprintf.c b/packages/hal/arm/xscale/triton/v2_0/include/dprintf.c new file mode 100755 index 00000000..0208167e --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/dprintf.c @@ -0,0 +1,370 @@ +// Full Function UART +#define FFRBR ( 0x40100000 ) // Receive Buffer Register (read only) +#define FFTHR ( 0x40100000 ) // Transmit Holding Register (write only) +#define FFIER ( 0x40100004 ) // Interrupt Enable Register (read/write) +#define FFIIR ( 0x40100008 ) // Interrupt ID Register (read only) +#define FFFCR ( 0x40100008 ) // FIFO Control Register (write only) +#define FFLCR ( 0x4010000C ) // Line Control Register (read/write) +#define FFMCR ( 0x40100010 ) // Modem Control Register (read/write) +#define FFLSR ( 0x40100014 ) // Line Status Register (read only) +#define FFMSR ( 0x40100018 ) // Modem Status Register (read only) +#define FFSPR ( 0x4010001C ) // Scratch Pad Register (read/write) +#define FFDLL ( 0x40100000 ) // baud divisor lower byte (read/write) +#define FFDLH ( 0x40100004 ) // baud divisor higher byte (read/write) +#define FFISR ( 0x40100020 ) // slow Infrared Select Register (read/write) + + +#define ANY_DISP_SEG 0x8000 // Set if should be displayed as segmented + +#define FALSE 0 +#define TRUE 1 + +typedef unsigned long DWORD; +typedef unsigned short WORD; +typedef unsigned char BYTE; + +typedef int BOOL; + + +typedef void * PVOID; +typedef DWORD * PDWORD; +typedef WORD * PWORD; +typedef BYTE * PBYTE; +typedef BOOL * PBOOL; +typedef char * PSTR; +typedef const char * PCSTR; + +typedef WORD ROMWORD; +typedef DWORD ROMDWORD; +typedef BYTE ROMBYTE; +typedef char ROMCHAR; +typedef PCSTR PROMCHAR; + + +typedef void (* WRITECHAR)(BYTE); + + + +// +// Address structure for printf %la and ScanAddress: +// +typedef struct { + WORD Flags; + WORD MemSpace; + DWORD LinearAddress; + PVOID SegAddress; +} AnyAddress, * FPANYADDRESS; + + +int +tolower( int value) { + if (value >= 'A' && value <='Z') + return (value + 0x20); + else + return value; +} + + + +static void iprintf(char * format, ...); // Internal printf + +static WRITECHAR writechar; + +/* +** define global storage for the sprint routine +*/ +char sprintbuf[1024]; +unsigned short sbindex; + + + + +static void output_char(unsigned char data) { + while(!((*(volatile unsigned long int *)FFLSR) & 0x40)); // wait here for fifo not full + *(volatile unsigned long int *)FFTHR = (unsigned long int) data; +} + + + + +///////////////////////////////////////////////////////////////////////// +// FillSpaces() prints out a given number of spaces or zeroes +// +static void FillSpaces(int Size, BOOL DoIt, BOOL FillZero) +{ + if (DoIt) + while (Size-- >0) + writechar((char) (FillZero ? '0' : ' ')); +} + +///////////////////////////////////////////////////////////////////////// +// HexDigit() returns the correct hexadecimal digit for a number +// +char HexDigit(DWORD value, char UpperLower) +{ + if (value < 10) + return (char)(value + '0'); + + return (char)(value-10 + 'A' + UpperLower - 'X'); +} + +///////////////////////////////////////////////////////////////////////// +// PrintAddress prints a standard (segment:offset) or long address. +// It is an internal routine used by printf. +// +static void PrintAddress(PDWORD param, BOOL Long, WORD StringIndex) +{ + static BYTE string0[] = "%04X:%04lX"; + static BYTE string1[] = "%04x:%04lx"; + static BYTE string2[] = "%01X/%07lX"; + static BYTE string3[] = "%01x/%07lx"; + + static BYTE * strings[] = {string0,string1,string2,string3}; + + FPANYADDRESS a; + + DWORD LinearAddress = param[0]; + DWORD MemSpace = param[1]; + WORD SegValue; + + if (Long) + { + a = (FPANYADDRESS)*((PDWORD)param); + LinearAddress = a->LinearAddress; + MemSpace = a->MemSpace; + SegValue = 0; + + if ((a->Flags & ANY_DISP_SEG) == 0) + StringIndex += 2; + else + { + MemSpace = ((WORD)(LinearAddress >> 4) - SegValue); + MemSpace &= 0xF000; + MemSpace += SegValue; + LinearAddress -= ((DWORD)MemSpace << 4); + } + } + iprintf(strings[StringIndex],MemSpace,LinearAddress); +} + +///////////////////////////////////////////////////////////////////////// +// Minimal printf implementation. Supports: +// % [-] [0] [] [l] [s|c|x|i|d|u] +// +// - == Left justify +// 0 == Fill field with zeroes +// length == Minimum field width +// l == Doubleword for x|i|d|u +// s == string pointer +// c == single character +// x == hex number +// i,d == signed decimal number +// u == unsigned number +// a == address (segment:offset) +// la == long address (AnyAddress type) +// +void vpprintf(WRITECHAR outroutine, PCSTR * ptrptr) +{ + static BYTE Percent[] = "%"; + static BYTE PercentQuery[] = "%???"; + static BYTE NullMsg[] = ""; + + PCSTR ptr = *ptrptr; + PDWORD param = (PDWORD)(ptrptr+1); + BOOL ZeroFill; + int MinWidth; + BOOL Long; + enum {ParseIncomplete, ParseString, ParseNum, ParsePercent, + ParseAddress, ParseNonsense} ParseType; + BOOL LeftJustify; + PSTR sPtr; + WORD NumBase; + BOOL Signed; + char ch; + char NumString[16]; // Holds largest number + + writechar = outroutine; + + for (;;) + { + switch (ch = *(ptr++)) + { + case 0: + return; + case '%': + ZeroFill = FALSE; + MinWidth = 0; + Long = FALSE; + LeftJustify = FALSE; + sPtr = 0; + NumBase = 10; + Signed = FALSE; + ParseType = ParseIncomplete; + while (ParseType == ParseIncomplete) + switch (tolower(ch = *(ptr++))) + { + case 0: + ptr--; + ParseType = ParseNonsense; + break; + case '-': + LeftJustify = TRUE; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + MinWidth = MinWidth*10 + ch - '0'; + if (MinWidth == 0) + ZeroFill = TRUE; + break; + case 'l': + Long = TRUE; + break; + case 'c': + sPtr = (PSTR)(param++); + sPtr[1] = 0; + ParseType = ParseString; + break; + case 's': + sPtr = (PSTR)param[0]; + param ++; + ParseType = ParseString; + break; + case 'x': + NumBase = 16; + ParseType = ParseNum; + break; + case 'd': + case 'i': + Signed = TRUE; + case 'u': + ParseType = ParseNum; + break; + case 'a': + ParseType = ParseAddress; + break; + case '%': + ParseType = ParsePercent; + break; + default: + ParseType = ParseNonsense; + break; + } + switch (ParseType) + { + case ParsePercent: + sPtr = (PSTR)Percent; + break; + case ParseNonsense: + sPtr = (PSTR)PercentQuery; + break; + + case ParseAddress: + MinWidth -= 9; + FillSpaces(MinWidth,!LeftJustify,ZeroFill); + PrintAddress(param,Long,(WORD)(ch=='a')); + sPtr = (PSTR)NullMsg; + param += 2; + break; + + case ParseNum: + { + DWORD value; +/* +** The following modification made to support the Microsoft 32 bit +** compiler (which is required because the MaCraigor API uses a +** DLL, which is only supported by the 32 bit compiler). +** +** The 16 bit compiler aligns stack parameters as 16 bit words. Thus +** a byte value passed as a parameter to the printf will be padded by +** a zero to take up one word on the stack. The else statement below +** would correctly get the byte value and then bump the parameter pointer +** past the pad char to point at the next parameter. +** +** But in the 32 bit compiler, parameters are passed as DWORDs, or unsigned +** longs, and take up 32 bits on the stack. Thus, the if(Long) is +** always true for the purposes of incrementing the param pointer. param +** is of type LPWORD, so one increment moves it by two bytes. +*/ +// if (Long) +// { + value = *((PDWORD)param); + param ++; +// } +// else +// value = *(((LPWORD)param)++); + if (Signed) + { + Signed = (value >= (0x8000UL << (16*Long))); + if (Signed) + { + value = 0-value; + if (!Long) + value &= 0x7FFF; + } + } + + sPtr = &NumString[sizeof(NumString)]; + *(--sPtr) = 0; + do { + *(--sPtr) = HexDigit(value % NumBase,ch); + value /= NumBase; + } while (value > 0); + if (Signed) + *(--sPtr) = '-'; + } + } + MinWidth -= strlen(sPtr); + FillSpaces(MinWidth,!LeftJustify,ZeroFill); + while (*sPtr != 0) + writechar(*(sPtr++)); + FillSpaces(MinWidth,LeftJustify,FALSE); + break; + + default: + writechar(ch); + // if this was a line feed, also add a Carriage return + if(ch == 0xa) writechar(0xd); + break; + } + } +} + +///////////////////////////////////////////////////////////////////////// +// iprintf - Internal printf for recursion, doesn't alter writechar +// +static void iprintf(char * format, ...) +{ + vpprintf(writechar,(PCSTR *)&format); +} + +///////////////////////////////////////////////////////////////////////// +// printf - +// +void dprintf(char * format, ...) +{ + vpprintf(output_char,(PCSTR *)&format); +} + +/* character write routine for sprintf */ +void putspbuf(char data) +{ + sprintbuf[sbindex++] = data; +} +///////////////////////////////////////////////////////////////////////// +// sprintf - +// +void sprintf(char * buffer, char * format, ...) +{ + sbindex = 0; + vpprintf((WRITECHAR)putspbuf,(PCSTR *)&format); + putspbuf(0); + strcpy(buffer,sprintbuf); +} diff --git a/packages/hal/arm/xscale/triton/v2_0/include/hal_cache.h b/packages/hal/arm/xscale/triton/v2_0/include/hal_cache.h new file mode 100755 index 00000000..485a052e --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/hal_cache.h @@ -0,0 +1,272 @@ +#ifndef CYGONCE_HAL_CACHE_H +#define CYGONCE_HAL_CACHE_H + +//============================================================================= +// +// hal_cache.h +// +// HAL cache control API +// +//============================================================================= +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): hmt +// Contributors:hmt +// Date: 1999-07-05 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +//#include + +//----------------------------------------------------------------------------- +// Cache dimensions + +#define HAL_DCACHE_SIZE 0x8000 // Size of data cache in bytes +#define HAL_DCACHE_LINE_SIZE 32 // Size of a data cache line +#define HAL_DCACHE_WAYS 32 // Associativity of the cache +#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) + +#define HAL_ICACHE_SIZE 0x8000 // Size of icache in bytes +#define HAL_ICACHE_LINE_SIZE 32 // Size of ins cache line +#define HAL_ICACHE_WAYS 32 // Associativity of the cache +#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) + +//----------------------------------------------------------------------------- +// Global control of data cache + +// Enable the data cache +#define HAL_DCACHE_ENABLE() \ +CYG_MACRO_START \ + asm volatile ( \ + "mrc p15,0,r1,c7,c10,4;" /* drain write buffer */ \ + "mrc p15,0,r1,c1,c0,0;" \ + "orr r1,r1,#0x0007;" /* enable DCache (also ensures the */ \ + /* MMU and alignment faults are */ \ + /* enabled) */ \ + "mcr p15,0,r1,c1,c0,0;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Disable the data cache (and invalidate it, required semanitcs) +#define HAL_DCACHE_DISABLE() \ +CYG_MACRO_START \ + asm volatile ( \ + "mrc p15,0,r1,c1,c0,0;" \ + "bic r1,r1,#4;" \ + "mcr p15,0,r1,c1,c0,0;" \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + "mcr p15,0,r1,c7,c6,0;" /* invalidate data cache */ \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Invalidate the entire cache (and both TLBs, just in case) +#define HAL_DCACHE_INVALIDATE_ALL() \ +CYG_MACRO_START \ + /* this macro can discard dirty cache lines. */ \ + asm volatile ( \ + "mcr p15,0,r1,c7,c6,0;" /* invalidate data cache */ \ + "mcr p15,0,r1,c8,c7,0;" /* flush I+D TLBs */ \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() \ +CYG_MACRO_START \ + /* The best way to evict a dirty line is by using the */ \ + /* line allocate operation on non-existent memory. */ \ + asm volatile ( \ + "mov r0, #0xa4000000;" /* cache flush region */ \ + "add r1, r0, #0x8000;" /* 32KB cache */ \ + "667: " \ + "mcr p15,0,r0,c7,c2,5;" /* allocate a line */ \ + "add r0, r0, #32;" /* 32 bytes/line */ \ + "teq r1, r0;" \ + "bne 667b;" \ + "mcr p15,0,r0,c7,c6,0;" /* invalidate data cache */ \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + "mcr p15,0,r0,c7,c10,4;" /* and drain the write buffer */ \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + "nop" \ + : \ + : \ + : "r0","r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Query the state of the data cache +#define HAL_DCACHE_IS_ENABLED(_state_) \ +CYG_MACRO_START \ + register int reg; \ + asm volatile ("mrc p15,0,%0,c1,c0,0" \ + : "=r"(reg) \ + : \ + /*:*/ \ + ); \ + (_state_) = (0 != (4 & reg)); /* Bit 2 is DCache enable */ \ +CYG_MACRO_END + +// Set the data cache refill burst size +//#define HAL_DCACHE_BURST_SIZE(_size_) + +// Set the data cache write mode +//#define HAL_DCACHE_WRITE_MODE( _mode_ ) + +#define HAL_DCACHE_WRITETHRU_MODE 0 +#define HAL_DCACHE_WRITEBACK_MODE 1 + +// Get the current writeback mode - or only writeback mode if fixed +#define HAL_DCACHE_QUERY_WRITE_MODE( _mode_ ) CYG_MACRO_START \ + _mode_ = HAL_DCACHE_WRITEBACK_MODE; \ +CYG_MACRO_END + + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() \ +CYG_MACRO_START \ + asm volatile ( \ + "mrc p15,0,r1,c1,c0,0;" \ + "orr r1,r1,#0x1000;" /* enable ICache */ \ + "mcr p15,0,r1,c1,c0,0;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Disable the instruction cache (and invalidate it, required semanitcs) +#define HAL_ICACHE_DISABLE() \ +CYG_MACRO_START \ + asm volatile ( \ + "mrc p15,0,r1,c1,c0,0;" \ + "bic r1,r1,#0x1000;" /* disable Icache */ \ + "mcr p15,0,r1,c1,c0,0;" \ + "mcr p15,0,r1,c7,c5,0;" /* invalidate instruction cache */ \ + "nop;" /* next few instructions may be via cache */ \ + "nop;" \ + "nop;" \ + "nop;" \ + "nop;" \ + "nop" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() \ +CYG_MACRO_START \ + asm volatile ( \ + "mcr p15,0,r1,c7,c5,0;" /* clear instruction cache */ \ + "mcr p15,0,r1,c8,c5,0;" /* flush I TLB only */ \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + "nop;" /* next few instructions may be via cache */ \ + "nop;" \ + "nop;" \ + "nop;" \ + "nop;" \ + "nop" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + + +// Synchronize the contents of the cache with memory. +// (which includes flushing out pending writes) +#define HAL_ICACHE_SYNC() \ +CYG_MACRO_START \ + HAL_DCACHE_SYNC(); /* ensure data gets to RAM */ \ + HAL_ICACHE_INVALIDATE_ALL(); /* forget all we know */ \ +CYG_MACRO_END + +// Query the state of the instruction cache +#define HAL_ICACHE_IS_ENABLED(_state_) \ +CYG_MACRO_START \ + /* SA-110 manual states clearly that the control reg is readable */ \ + register cyg_uint32 reg; \ + asm volatile ("mrc p15,0,%0,c1,c0,0" \ + : "=r"(reg) \ + : \ + /*:*/ \ + ); \ + (_state_) = (0 != (0x1000 & reg)); /* Bit 12 is ICache enable */ \ +CYG_MACRO_END + + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_CACHE_H +// End of hal_cache.h diff --git a/packages/hal/arm/xscale/triton/v2_0/include/hal_diag.h b/packages/hal/arm/xscale/triton/v2_0/include/hal_diag.h new file mode 100755 index 00000000..72a9529d --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/hal_diag.h @@ -0,0 +1,93 @@ +#ifndef CYGONCE_HAL_DIAG_H +#define CYGONCE_HAL_DIAG_H + +/*============================================================================= +// +// hal_diag.h +// +// HAL Support for Kernel Diagnostic Routines +// +//============================================================================= +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, gthomas +// Contributors: nickg, gthomas +// Date: 1998-09-11 +// Purpose: HAL Support for Kernel Diagnostic Routines +// Description: Diagnostic routines for use during kernel development. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include + +#include + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +#include + +#define HAL_DIAG_INIT() hal_if_diag_init() +#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + + +#define HAL_DELAY_US(n) hal_delay_us(n); + +#else // everything by steam + +/*---------------------------------------------------------------------------*/ +/* functions implemented in hal_diag.c */ + +externC void hal_diag_init(void); +externC void hal_diag_write_char(char c); +externC void hal_diag_read_char(char *c); + +/*---------------------------------------------------------------------------*/ + +#define HAL_DIAG_INIT() hal_diag_init() + +#define HAL_DIAG_WRITE_CHAR(_c_) hal_diag_write_char(_c_) + +#define HAL_DIAG_READ_CHAR(_c_) hal_diag_read_char(&_c_) + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +/*---------------------------------------------------------------------------*/ +/* end of hal_diag.h */ +#endif /* CYGONCE_HAL_DIAG_H */ diff --git a/packages/hal/arm/xscale/triton/v2_0/include/hal_platform_ints.h b/packages/hal/arm/xscale/triton/v2_0/include/hal_platform_ints.h new file mode 100755 index 00000000..b73fbc01 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/hal_platform_ints.h @@ -0,0 +1,195 @@ +#ifndef CYGONCE_HAL_PLATFORM_INTS_H +#define CYGONCE_HAL_PLATFORM_INTS_H +//========================================================================== +// +// hal_platform_ints.h +// +// HAL Interrupt and clock support +// +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors: +// Date: 2000-10-10 +// Purpose: Define Interrupt support +// Description: The interrupt details for the INPHINITY are defined here. +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define DEBUG_INT 0 + +// 1st level +// 0-7 Reserved +#define CYGNUM_HAL_INTERRUPT_GPIO0 8 +#define CYGNUM_HAL_INTERRUPT_GPIO1 9 +#define CYGNUM_HAL_INTERRUPT_GPIO 10 +#define CYGNUM_HAL_INTERRUPT_USB 11 +#define CYGNUM_HAL_INTERRUPT_PMU 12 +#define CYGNUM_HAL_INTERRUPT_I2S 13 +#define CYGNUM_HAL_INTERRUPT_AC97 14 +// 15,16 Reserved +#define CYGNUM_HAL_INTERRUPT_LCD 17 +#define CYGNUM_HAL_INTERRUPT_I2C 18 +#define CYGNUM_HAL_INTERRUPT_ICP 19 +#define CYGNUM_HAL_INTERRUPT_STUART 20 +#define CYGNUM_HAL_INTERRUPT_BTUART 21 +#define CYGNUM_HAL_INTERRUPT_FFUART 22 +#define CYGNUM_HAL_INTERRUPT_MMC 23 +#define CYGNUM_HAL_INTERRUPT_SSP 24 +#define CYGNUM_HAL_INTERRUPT_DMA 25 +#define CYGNUM_HAL_INTERRUPT_TIMER0 26 +#define CYGNUM_HAL_INTERRUPT_TIMER1 27 +#define CYGNUM_HAL_INTERRUPT_TIMER2 28 +#define CYGNUM_HAL_INTERRUPT_TIMER3 29 +#define CYGNUM_HAL_INTERRUPT_HZ 30 +#define CYGNUM_HAL_INTERRUPT_ALARM 31 + + + +// 2nd level +#define CYGNUM_HAL_INTERRUPT_GPIO2 (32+2) +#define CYGNUM_HAL_INTERRUPT_GPIO3 (32+3) +#define CYGNUM_HAL_INTERRUPT_GPIO4 (32+4) +#define CYGNUM_HAL_INTERRUPT_GPIO5 (32+5) +#define CYGNUM_HAL_INTERRUPT_GPIO6 (32+6) +#define CYGNUM_HAL_INTERRUPT_GPIO7 (32+7) +#define CYGNUM_HAL_INTERRUPT_GPIO8 (32+8) +#define CYGNUM_HAL_INTERRUPT_GPIO9 (32+9) +#define CYGNUM_HAL_INTERRUPT_GPIO10 (32+10) +#define CYGNUM_HAL_INTERRUPT_GPIO11 (32+11) +#define CYGNUM_HAL_INTERRUPT_GPIO12 (32+12) +#define CYGNUM_HAL_INTERRUPT_GPIO13 (32+13) +#define CYGNUM_HAL_INTERRUPT_GPIO14 (32+14) +#define CYGNUM_HAL_INTERRUPT_GPIO15 (32+15) +#define CYGNUM_HAL_INTERRUPT_GPIO16 (32+16) +#define CYGNUM_HAL_INTERRUPT_GPIO17 (32+17) +#define CYGNUM_HAL_INTERRUPT_GPIO18 (32+18) +#define CYGNUM_HAL_INTERRUPT_GPIO19 (32+19) +#define CYGNUM_HAL_INTERRUPT_GPIO20 (32+20) +#define CYGNUM_HAL_INTERRUPT_GPIO21 (32+21) +#define CYGNUM_HAL_INTERRUPT_GPIO22 (32+22) +#define CYGNUM_HAL_INTERRUPT_GPIO23 (32+23) +#define CYGNUM_HAL_INTERRUPT_GPIO24 (32+24) +#define CYGNUM_HAL_INTERRUPT_GPIO25 (32+25) +#define CYGNUM_HAL_INTERRUPT_GPIO26 (32+26) +#define CYGNUM_HAL_INTERRUPT_GPIO27 (32+27) +#define CYGNUM_HAL_INTERRUPT_GPIO28 (32+28) +#define CYGNUM_HAL_INTERRUPT_GPIO29 (32+29) +#define CYGNUM_HAL_INTERRUPT_GPIO30 (32+30) +#define CYGNUM_HAL_INTERRUPT_GPIO31 (32+31) + +#define CYGNUM_HAL_INTERRUPT_GPIO32 (64+0) +#define CYGNUM_HAL_INTERRUPT_GPIO33 (64+1) +#define CYGNUM_HAL_INTERRUPT_GPIO34 (64+2) +#define CYGNUM_HAL_INTERRUPT_GPIO35 (64+3) +#define CYGNUM_HAL_INTERRUPT_GPIO36 (64+4) +#define CYGNUM_HAL_INTERRUPT_GPIO37 (64+5) +#define CYGNUM_HAL_INTERRUPT_GPIO38 (64+6) +#define CYGNUM_HAL_INTERRUPT_GPIO39 (64+7) +#define CYGNUM_HAL_INTERRUPT_GPIO40 (64+8) +#define CYGNUM_HAL_INTERRUPT_GPIO41 (64+9) +#define CYGNUM_HAL_INTERRUPT_GPIO42 (64+10) +#define CYGNUM_HAL_INTERRUPT_GPIO43 (64+11) +#define CYGNUM_HAL_INTERRUPT_GPIO44 (64+12) +#define CYGNUM_HAL_INTERRUPT_GPIO45 (64+13) +#define CYGNUM_HAL_INTERRUPT_GPIO46 (64+14) +#define CYGNUM_HAL_INTERRUPT_GPIO47 (64+15) +#define CYGNUM_HAL_INTERRUPT_GPIO48 (64+16) +#define CYGNUM_HAL_INTERRUPT_GPIO49 (64+17) +#define CYGNUM_HAL_INTERRUPT_GPIO50 (64+18) +#define CYGNUM_HAL_INTERRUPT_GPIO51 (64+19) +#define CYGNUM_HAL_INTERRUPT_GPIO52 (64+20) +#define CYGNUM_HAL_INTERRUPT_GPIO53 (64+21) +#define CYGNUM_HAL_INTERRUPT_GPIO54 (64+22) +#define CYGNUM_HAL_INTERRUPT_GPIO55 (64+23) +#define CYGNUM_HAL_INTERRUPT_GPIO56 (64+24) +#define CYGNUM_HAL_INTERRUPT_GPIO57 (64+25) +#define CYGNUM_HAL_INTERRUPT_GPIO58 (64+26) +#define CYGNUM_HAL_INTERRUPT_GPIO59 (64+27) +#define CYGNUM_HAL_INTERRUPT_GPIO60 (64+28) +#define CYGNUM_HAL_INTERRUPT_GPIO61 (64+29) +#define CYGNUM_HAL_INTERRUPT_GPIO62 (64+30) +#define CYGNUM_HAL_INTERRUPT_GPIO63 (64+31) + +#define CYGNUM_HAL_INTERRUPT_GPIO64 (96+0) +#define CYGNUM_HAL_INTERRUPT_GPIO65 (96+1) +#define CYGNUM_HAL_INTERRUPT_GPIO66 (96+2) +#define CYGNUM_HAL_INTERRUPT_GPIO67 (96+3) +#define CYGNUM_HAL_INTERRUPT_GPIO68 (96+4) +#define CYGNUM_HAL_INTERRUPT_GPIO69 (96+5) +#define CYGNUM_HAL_INTERRUPT_GPIO70 (96+6) +#define CYGNUM_HAL_INTERRUPT_GPIO71 (96+7) +#define CYGNUM_HAL_INTERRUPT_GPIO72 (96+8) +#define CYGNUM_HAL_INTERRUPT_GPIO73 (96+9) +#define CYGNUM_HAL_INTERRUPT_GPIO74 (96+10) +#define CYGNUM_HAL_INTERRUPT_GPIO75 (96+11) +#define CYGNUM_HAL_INTERRUPT_GPIO76 (96+12) +#define CYGNUM_HAL_INTERRUPT_GPIO77 (96+13) +#define CYGNUM_HAL_INTERRUPT_GPIO78 (96+14) +#define CYGNUM_HAL_INTERRUPT_GPIO79 (96+15) +#define CYGNUM_HAL_INTERRUPT_GPIO80 (96+16) +#define CYGNUM_HAL_INTERRUPT_GPIO81 (96+17) +#define CYGNUM_HAL_INTERRUPT_GPIO82 (96+18) +#define CYGNUM_HAL_INTERRUPT_GPIO83 (96+19) +#define CYGNUM_HAL_INTERRUPT_GPIO84 (96+20) + +externC void cyg_hal_xscale_soft_reset(CYG_ADDRESS); + +#define HAL_PLATFORM_RESET() cyg_hal_xscale_soft_reset(HAL_PLATFORM_RESET_ENTRY) +#define HAL_PLATFORM_RESET_ENTRY 0x00000000 + +// *** remainder are reserved **** +#define CYGNUM_HAL_INT_ + +#define CYGNUM_HAL_ISR_MIN 0 +#define CYGNUM_HAL_ISR_MAX 48 + +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX+1) + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TIMER +//#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_PMU_CCNT_OVFL + +extern void hal_delay_us(cyg_uint32 usecs); + +#define HAL_DELAY_US(n) hal_delay_us(n); + +#endif // CYGONCE_HAL_PLATFORM_INTS_H diff --git a/packages/hal/arm/xscale/triton/v2_0/include/hal_platform_setup.h b/packages/hal/arm/xscale/triton/v2_0/include/hal_platform_setup.h new file mode 100755 index 00000000..1964ab97 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/hal_platform_setup.h @@ -0,0 +1,961 @@ +#ifndef CYGONCE_HAL_PLATFORM_SETUP_H +#define CYGONCE_HAL_PLATFORM_SETUP_H + +/*============================================================================= +// +// hal_platform_setup.h +// +// Platform specific support for HAL (assembly code) +// +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//#####DESCRIPTIONBEGIN#### +// +// Author(s): usteinkohl +// Contributors: +// Date: 14th January 2003 +// Purpose: KaRo TRITON platform specific support routines +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include // System-wide configuration info +#include CYGBLD_HAL_PLATFORM_H // Platform specific configuration +#include // Platform specific hardware definitions +#include // MMU definitions + +// Define macro used to diddle the LEDs during early initialization. +// Can use r0+r1. Argument in \x. +#define CYGHWR_LED_MACRO nop ; + +// The main useful output of this file is PLATFORM_SETUP1: it invokes lots +// of other stuff (may depend on RAM or ROM start). The other stuff is +// divided into further macros to make it easier to manage what's enabled +// when. + +#if defined(CYG_HAL_STARTUP_ROM) +#define PLATFORM_SETUP1 _platform_setup1 +//#define CYGHWR_HAL_ARM_HAS_MMU +#else +#define PLATFORM_SETUP1 +#endif + +#define RAM_BASE 0xa0000000 +#define DRAM_SIZE (64*1024*1024) // max size of available SDRAM +#define DCACHE_SIZE (32*1024) // size of the Dcache +#define DCACHE_FLUSH_AREA (RAM_BASE+DRAM_SIZE) // NB: needs page table support + +#if 0 +#define CPSR_IRQ_DISABLE 0x80 // IRQ disabled when =1 +#define CPSR_FIQ_DISABLE 0x40 // FIQ disabled when =1 +#define CPSR_FIQ_MODE 0x11 +#define CPSR_IRQ_MODE 0x12 +#define CPSR_SUPERVISOR_MODE 0x13 +#define CPSR_UNDEF_MODE 0x1B + +#define CPSR_MODE_BITS 0x1F + +#endif + +#define MMU_Control_BTB 0x800 + +// Reserved area for battery backup SDRAM memory test +// This area is not zeroed out by initialization code +#define SDRAM_BATTERY_TEST_BASE 0xA1FFFFF0 // base address of last 16 memory locations in a 32MB SDRAM + + .macro MEM_TEST + nop + .endm + + // Trigger the logic analyzer by writing a particular + // address, and triggering on that address. + .macro TRIGGER_LA_ON_ADDRESS address, reg0, reg1 + mrc p15, 0, \reg0, c1, c0, 0 // read ARM control register + // CPWAIT \reg0 + ldr \reg1, =\address + str \reg0, [\reg1] + .endm + + // Delay a bit + .macro DELAY_FOR cycles, reg0 + ldr \reg0, =\cycles + subs \reg0, \reg0, #1 + subne pc, pc, #0xc + .endm + + // wait for coprocessor write complete + .macro CPWAIT reg + mrc p15, 0, \reg, c2, c0, 0 + mov \reg, \reg + sub pc, pc, #4 + .endm + + // blink some times on GPIO10 + .macro BLINK10 count + ldr r4, =\count +220961: + ldr r1, =0x00000400 // we use GPIO10 for controlling the debug LED + + ldr r0, =GPCRx + str r1, [r0] // switch the LED on + + ldr r2, =0x00500000 // wait some time + mov r3, #1 +998: + sub r2, r2, r3 + cmp r2, #0 + bne 998b + + ldr r0, =GPSRx // switch the LED off + str r1, [r0] + + ldr r2, =0x00500000 // wait some time + mov r3, #1 +998: + sub r2, r2, r3 + cmp r2, #0 + bne 998b + + sub r4, r4, r3 + cmp r4, #0 + bne 220961b + .endm + + .macro TRITON_SET_REFR_VAL + // TRITON specific, DRAM specific !!!!!!!!!!!!! + // example: + // Refresh period for 4096 rows = 64 ms (47 memory cycles) for 99,5 MHz MCLK + // DRI = 64 ms * 99,5 MHz / (4096 * 32) = 48 + + ldr r3, =MDREFR + ldr r2, [r3] // read MDREFR value + ldr r4, =0xFFF + bic r2, r2, r4 // clear out value in DRI +#ifdef TRITON_DRAM32_64 + // DRI = 64 ms * 99,5 MHz / (8192 * 32) = 24 (0x18) + orr r2, r2, #0x00000018 // put in a valid SDRAM Refresh Interval (DRI) +#endif +#ifdef TRITON_DRAM16_16_MOBILE + // DRI = 64 ms * 99,5 MHz / (4096 * 32) = 48 + orr r2, r2, #0x00000030 // put in a valid SDRAM Refresh Interval (DRI) +#endif +#ifdef TRITON_DRAM16_32_MOBILE + // DRI = 64 ms * 99,5 MHz / (8192 * 32) = 24 + orr r2, r2, #0x00000018 // put in a valid SDRAM Refresh Interval (DRI) +#endif + + str r2, [r3] // store it + + .endm + + .macro TRITON_CONFIG_SDRAM_BANKS + + // Banks configured for 64-Mbit SDRAM devices (12(13) row x 9 col x 4 internal banks) + // CAS latency = 3, 32/16-bit bus width, + + ldr r3, =MDCNFG // sdram config -- sdram should remain disabled !!!!! + +#ifdef TRITON_DRAM32_64 + ldr r2, =0x00000ac8 // 13 rows +#endif +#ifdef TRITON_DRAM16_16_MOBILE + ldr r2, =0x00000aac // 12 rows / 9 col / 4 banks / 16 bit / CL3 +#endif +#ifdef TRITON_DRAM16_32_MOBILE + ldr r2, =0x00000acc // 13 rows / 9 col / 4 banks / 16 bit / CL3 +#endif + + str r2, [r3] + .endm + + // form a first-level section entry + .macro FL_SECTION_ENTRY base,x,ap,p,d,c,b + .word (\base << 20) | (\x << 12) | (\ap << 10) | (\p << 9) |\ + (\d << 5) | (\c << 3) | (\b << 2) | 2 + .endm + + // form a first-level page table entry + .macro FL_PT_ENTRY base,d + // I wanted to use logical operations here, but since I am using symbols later + // to fill in the parameters, I had to use addition to force the assembler to + // do it right + .word \base + (\d << 5) + 1 + .endm + + // form a second level small page entry + .macro SL_SMPAGE_ENTRY base,ap3,ap2,ap1,ap0,c,b + .word (\base << 12) | (\ap3 << 10) | (\ap2 << 8) | (\ap1 << 6) |\ + (\ap0 << 4) | (\c << 3) | (\b << 2) | 2 + .endm + + // form a second level extended small page entry + .macro SL_XSMPAGE_ENTRY base,x,ap,c,b + .word (\base << 12) | (\x << 6) | (\ap << 4) | (\c << 3) | (\b << 2) | 3 + .endm + + // start of platform setup + .macro _platform_setup1 + + // This is where we wind up immediately after reset. On the CYCLONE, we have + // to jump around a hole in flash which runs from 0x00001000 - 0x0001fff. + // We might not have to do this for TRITON + // The start of _platform_setup1 will be below 0x1000 and since we need to + // align the mmu table on a 16k boundary, we just branch around the page + // table which we will locate at FLASH_BASE+0x4000. + b _real_platform_setup + + .p2align 13 + // the following alignment creates the mmu table at address 0x4000. + mmu_table: + + // 1MB of FLASH with i80312 MMRs mapped in using 4K small pages so we can + // set the access permission on flash and memory-mapped registers properly. + FL_PT_ENTRY mmu_table_flashbase, 0 + + // Remaining 63MB of FLASH area (Static Chip select 0) + // rw, cacheable, non-bufferable + .set __base, 1 + .rept 0x040-0x001 + FL_SECTION_ENTRY __base, 0, 3, 0, 0, 1, 0 + .set __base, __base+1 + .endr + + // nothing interesting here, static chip select area 1 (Address Translation) + .rept 0x080 - 0x040 + FL_SECTION_ENTRY __base, 0, 3, 0, 0, 0, 0 + .set __base, __base+1 + .endr + + // nothing interesting here, static chip select area 2 (Address Translation) + .rept 0x0C0 - 0x080 + FL_SECTION_ENTRY __base, 0, 3, 0, 0, 0, 0 + .set __base, __base+1 + .endr + + // nothing interesting here, static chip select area 3 (Address Translation) + .rept 0x100 - 0x0C0 + FL_SECTION_ENTRY __base, 0, 3, 0, 0, 0, 0 + .set __base, __base+1 + .endr + + // nothing interesting here, static chip select area 4 (Address Translation) + .rept 0x140 - 0x100 + FL_SECTION_ENTRY __base, 0, 3, 0, 0, 0, 0 + .set __base, __base+1 + .endr + + // nothing interesting here, static chip select area 5 (Address Translation) + .rept 0x180 - 0x140 + FL_SECTION_ENTRY __base, 0, 3, 0, 0, 0, 0 + .set __base, __base+1 + .endr + + // nothing interesting here (Address Translation) + .rept 0xA00 - 0x180 + FL_SECTION_ENTRY __base, 0, 3, 0, 0, 0, 0 + .set __base, __base+1 + .endr + + // up to 64MB SDRAM + // x=c=b=1 + // first 1MB mapped by second level table + FL_PT_ENTRY mmu_table_rambase, 0 + .set __base, __base+1 + + // remainder of SDRAM mapped 1-to-1 + .rept 0xC00 - 0xA01 + FL_SECTION_ENTRY __base, 1, 3, 1, 0, 1, 1 + .set __base, __base+1 + .endr + + // Cache flush region. + // Don't need physical memory, just a cached area. + .rept 0xD00 - 0xC00 + FL_SECTION_ENTRY __base, 0, 3, 0, 0, 1, 1 + .set __base, __base+1 + .endr + + // Invalid + .rept 0x1000 - 0xD00 + .word 0 + .set __base, __base+1 + .endr + + // Immediately after the above table (at 0x8000) is the + // second level page table which breaks up the lowest 1MB + // of physical memory into 4KB sized virtual pages. + mmu_table_flashbase: + // Virtual address 0 (Flash boot code). + // Map 4k page at 0x00000000 virt --> 0xA0000000 physical + // This allows us to have a writable vector table. + // Read-Write, cacheable, bufferable + SL_XSMPAGE_ENTRY 0xa0000, 1, 3, 1, 1 + + // Virtual address 0x1000 (Memory mapped registers) + // Map 1-to-1, but don't cache or buffer + // Read-Write, non-cacheable, non-bufferable + .set __base, 1 + SL_SMPAGE_ENTRY __base, 3, 3, 3, 3, 0, 0 + .set __base, __base+1 + + // Virtual address 0x2000-0x100000 (remainder of flash1) + // Read-Write, cacheable, non-bufferable + .rept 0x100 - 0x2 + SL_SMPAGE_ENTRY __base, 3, 3, 3, 3, 1, 0 + .set __base, __base+1 + .endr + + // Now is the second level table for the first megabyte + // of DRAM. + mmu_table_rambase: + // Map 4k page at 0xa0000000 virt --> 0x00000000 physical + // Read-Write, cacheable, non-bufferable + SL_SMPAGE_ENTRY 0x00000, 3, 3, 3, 3, 1, 0 + .set __base, __base+1 + + // Map remainder of first meg of SDRAM + // Read-Write, cacheable, non-bufferable + .set __base, 0xA0001 + .rept 0x100 - 0x1 + SL_XSMPAGE_ENTRY __base, 1, 3, 1, 1 + .set __base, __base+1 + .endr + +_real_platform_setup://Angel SDRAM init code follows + + // if we come out of sleep mode, check if there is a pointer + // from the os, and jump to it if so + + ldr r0, =RCSR // check reset source + ldr r1, [r0] + and r1, r1, #4 + cmp r1, #4 + bne 1923f + + ldr r2, =PSPR // check if there is a pointer from the operating system + ldr r1, [r2] + cmp r1, #0 + beq 1923f + + ldr r3, =0x0000000f // reset RCSR + str r3, [r0] + + // get SDRAM out of Self Refresh + TRITON_SET_REFR_VAL + TRITON_CONFIG_SDRAM_BANKS + + ldr r3, =MDREFR + ldr r2, [r3] // read MDREFR value + bic r2, r2, #0x03800000 // clear all Free Running Clocks + orr r2, r2, #0x00010000 // assert MDREFR:K1RUN + bic r2, r2, #0x00020000 // clear MDREFR:K1DB2 -> SDRAM-CLK = MEMCLK + str r2, [r3] // change from "self-refresh and clock-stop" to "self-refresh" + ldr r2, [r3] // read MDREFR value (to make sure the previous value stuck) (this is in Tricia's code) + + bic r2, r2, #0x00400000 // clear self-refresh bit + str r2, [r3] // change from "self-refresh" to "Power Down" + orr r2, r2, #0x00008000 // assert MDREFR:E1PIN + str r2, [r3] // change from "Power Down" to "PWRDWNX" + nop + nop // no write required to change from "PWRDWNX" to "NOP" + + ldr r3, =MDCNFG // sdram config -- sdram enable + ldr r2, [r3] + orr r2, r2, #0x00000001 // enable appropriate banks + str r2, [r3] + + // initialize CPSR (machine state register) + mov r0, #(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_SUPERVISOR_MODE) + msr cpsr, r0 + + /* Set up the stack pointer to a fixed value */ + ldr r3, =0xa0700000 + mov sp, r3 + + ldr r2, =PSPR // get pointer + ldr r1, [r2] + mov r15, r1 // jump to pointer + +1923: + // must set the GPIOs up before any chip selects will work + //GPCRx = 0xffffffff put a 0 on any of the GPIOs (0=unchanged, 1=drive 0) + // reset all first + ldr r0, =GPCRx + ldr r1, =0xffffffff + str r1, [r0] + //GPCRy = 0xffffffff + ldr r0, =GPCRy + ldr r1, =0xffffffff + str r1, [r0] + //GPCRz = 0xffffffff + ldr r0, =GPCRz + ldr r1, =0xffffffff + str r1, [r0] + + // GPSRx = 0x01800000 put a 1 on any of the GPIOs (0=unchanged, 1=drive 1) + ldr r0, =GPSRx + ldr r1, =0x01800000 +#ifdef TRITON_CS2_SMSC + ldr r1, =0x01808000 +#endif + +#ifdef TRITON_CS2_8900 + ldr r1, =0x01808000 +#endif + str r1, [r0] + + //GPSRy = 0x70ff0000 + ldr r0, =GPSRy + ldr r1, =0x70ff0800 +#ifdef TRITON_USE_STUART + ldr r2, =0x00008000 + orr r1, r1, r2 +#endif + str r1, [r0] + + //GPSRz = 0x00000000 + ldr r0, =GPSRz + ldr r1, =0x00000000 + str r1, [r0] + + //GPDRx = 0x01800800 put the GPIOs in the correct direction (0=in, 1=out) + ldr r0, =GPDRx + ldr r1, =0x01800000 //vorher 0x01800400 +#ifdef TRITON_CS2_SMSC + ldr r1, =0x01808800 +#endif +#ifdef TRITON_CS2_8900 + ldr r1, =0x01808000 +#endif +#if (TRITON_STK==1) + orr r1, r1, #0x00000800 +#endif +#ifdef GPIO_10_OUT + orr r1, r1, #0x00000400 +#endif + str r1, [r0] + + //GPDRy = 0x7cff0280 + ldr r0, =GPDRy + ldr r1, =0x7cff0a80 +#ifdef TRITON_USE_STUART + ldr r2, =0x00008000 + orr r1, r1, r2 +#endif + str r1, [r0] + //GPDRz = 0x00000000 + ldr r0, =GPDRz + ldr r1, =0x00000000 + str r1, [r0] + + //GAFR0x = 0x00000000 setup the alternate functions (00=normal, 01=alt fuct 1, etc) + ldr r0, =GAFR0x + ldr r1, =0x00000000 +#ifdef TRITON_CS2_SMSC + ldr r1, =0x80000000 +#endif +#ifdef TRITON_CS2_8900 + ldr r1, =0x80000000 +#endif + str r1, [r0] + + //GAFR1x = 0x00128140 + ldr r0, =GAFR1x + ldr r1, =0x0012814 + str r1, [r0] + + //GAFR0y = 0x00988050 + ldr r0, =GAFR0y + ldr r1, =0x00988050 +#ifdef TRITON_USE_STUART + ldr r2, =0x60000000 + orr r1, r1, r2 +#endif + str r1, [r0] + + //GAFR1y = 0x0005aaaa + ldr r0, =GAFR1y + ldr r1, =0x0005aaaa + str r1, [r0] + + //GAFR0z = 0x00000000 + ldr r0, =GAFR0z + ldr r1, =0x00000000 + str r1, [r0] + + //GAFR1z = 0x00000000 + ldr r0, =GAFR1z + ldr r1, =0x00000000 + str r1, [r0] + + //PSSR = 0x20 clear the RDH and PH bit in the PSSR + ldr r0, =PSSR + ldr r1, =0x30 + str r1, [r0] + + ldr r3, =PCFR // clear PCFR[FS] and PCFR[FP] + ldr r2, [r3] + bic r2, r2, #0x00000006 + str r2, [r3] +#ifdef GPIO_10_OUT + BLINK10 3 +#endif + MRC p15, 0, r0, c0, c0, 0 // read the ID reg .... 0x69052100 + // and display it if possible + // not possible for TRITON + + // turn everything off + mov r0, #0x78 + mcr p15, 0, r0, c1, c0, 0 // caches off -- MMU off or ID map + + mcr p15, 0, R0, c7, c7, 0 // Invalidate the I & D cache, mini- d cache, and BTB + + //MCR p15, 0, r0, c7, c5, 0 // Invalidate the instruction cache and branch target buffer + //MCR p15, 0, r0, c7, c6, 0 // Invalidate the data cache and mini-data cache + + MCR p15, 0, r0, c7, c10, 4 // Drain write buffer -- r0 ignored + + // CPWAIT macro + MRC p15, 0, R0, c2, c0, 0 // arbitrary read of CP15 + MOV R0, R0 // wait for it + SUB PC, PC, #4 // branch to next instruction + + nop + nop + nop + nop +// setup manager access, interrupts, etc. +// grant manager access to all domains + mvn r0, #0 // all 1s + mcr p15, 0, r0, c3, c0, 0 + // all IRQs should be masked to prevent spurious IRQs + ldr r3, =ICMR // pending interrupts are masked from becoming active + mov r2, #0 + str r2, [r3] + + ldr r3, =ICLR // route all interrupts to CPU IRQ ( not to FIQ ) + mov r2, #0 + str r2, [r3] + + ldr r3, =ICCR // only enabled and unmasked interrupts bring core out of idle + mov r2, #1 + str r2, [r3] + +// Turn on the RTC circuit (if you want) + + ldr r1, =OSCC // oscillator config reg + // turn on the 32.768 KHz clock for RTC, etc. + mov r0, #0x2 + str r0, [r1] + + // Wait 200 usec + ldr r3, =OSCR // reset the OS Timer Count to zero + mov r2, #0 + str r2, [r3] + ldr r4, =0x300 // really 0x2E1 is about 200usec, so 0x300 should be plenty + +10: + ldr r2, [r3] + cmp r4, r2 + bgt 10b + +// CS0 : RDF=14(15), RDN=4 , RRR=2, 32 bits Flash +// Suitable for 128-Mbit StrataFlash (Tcyc = 150 ns) and 100MHz MEMCLK + ldr r3, =MSC0 // low - bank 0 Flash +#ifdef TRITON_FLASH32_32 + ldr r2, =0x7ff024d0 +#endif +#ifdef TRITON_FLASH16_16 + ldr r2, =0x7ff024d8 +#endif + +#ifdef TRITON_CS2_SMSC + ldr r4, =0x0000ffff + and r2, r2, r4 + ldr r4, =0x12440000 + orr r2, r2, r4 +#endif +#ifdef TRITON_CS2_8900 + ldr r4, =0x0000ffff + and r2, r2, r4 + ldr r4, =0x12dc0000 + orr r2, r2, r4 +#endif + str r2, [r3] + ldr r2, [r3] // need to read it back to make sure the value latches (see MSC section of manual) + + ldr r3, =MSC1 + ldr r2, =0x7ff07ff0 + str r2, [r3] + ldr r2, [r3] // need to read it back to make sure the value latches (see MSC section of manual) + + ldr r3, =MSC2 + ldr r2, =0x7ff07ff0 + str r2, [r3] + ldr r2, [r3] // need to read it back to make sure the value latches (see MSC section of manual) + + // ******************************************************************** + // Disable (mask) all interrupts at the interrupt controller + + // clear the interrupt level register (use IRQ, not FIQ) + mov r1, #0 + ldr r2, =ICLR + str r1, [r2] + + // mask all interrupts at the controller + ldr r2, =ICMR + str r1, [r2] + + // make sure the DCACHE is off + mov r0, #0x78 // turn everything off + mcr p15, 0, r0, c1, c0, 0 // caches off, MMU off, etc. + + TRITON_SET_REFR_VAL + + ldr r3, =SXCNFG + mov r2, #0x0 // since Triton does not have SMROM, make register = 0 + str r2, [r3] // store it + + ldr r3, =MDREFR + ldr r2, [r3] // read MDREFR value + bic r2, r2, #0x03800000 // clear all Free Running Clocks + orr r2, r2, #0x00010000 // assert MDREFR:K1RUN + bic r2, r2, #0x00020000 // clear MDREFR:K1DB2 -> SDRAM-CLK = MEMCLK + + str r2, [r3] // change from "self-refresh and clock-stop" to "self-refresh" + ldr r2, [r3] // read MDREFR value (to make sure the previous value stuck) (this is in Tricia's code) + + bic r2, r2, #0x00400000 // clear self-refresh bit + str r2, [r3] // change from "self-refresh" to "Power Down" + orr r2, r2, #0x00008000 // assert MDREFR:E1PIN + str r2, [r3] // change from "Power Down" to "PWRDWNX" + nop + nop // no write required to change from "PWRDWNX" to "NOP" + + TRITON_CONFIG_SDRAM_BANKS + + //---- Wait 200 usec + ldr r3, =OSCR // reset the OS Timer Count to zero + mov r2, #0 + str r2, [r3] + ldr r4, =0x300 // really 0x2E1 is about 200usec, so 0x300 should be plenty +10: + ldr r2, [r3] + cmp r4, r2 + bgt 10b + + ldr r3, =SDRAM_B0 + mov r2, #9 // now must do 8 refresh or CBR commands before the first access +10: // no we must do 9 because of errata 116 + str r3, [r3] + subs r2, r2, #1 + bne 10b + + ldr r3, =MDCNFG // sdram config -- sdram enable + ldr r2, [r3] + orr r2, r2, #0x00000001 // enable appropriate banks + str r2, [r3] + + ldr r3, =MDMRS // write the MDMRS + mov r2, #0 // the writable bits will be written as a 0 (Tricia's code writes 0x00320032) + str r2, [r3] +#ifdef TRITON_DRAM16_16_MOBILE + ldr r3, =MDMRSLP + ldr r2, =0x0000a000 + str r2, [r3] +#endif +#ifdef TRITON_DRAM16_32_MOBILE + ldr r3, =MDMRSLP + ldr r2, =0x0000c000 + str r2, [r3] +#endif + //---- Wait 600 usec + ldr r3, =OSCR // reset the OS Timer Count to zero + mov r2, #0 + str r2, [r3] + ldr r4, =0x900 // really 0x2E1 is about 200usec, so 0x300 should be plenty +10: + ldr r2, [r3] + cmp r4, r2 + bgt 10b + + MEM_TEST +#if 0 + /* Set up the stack pointer to a fixed value */ + ldr r3, =0xa0700000 + mov sp, r3 + + // if we come out of sleep mode, check if there is a pointer + // from the os, and jump to it if so + + ldr r0, =RCSR // check reset source + ldr r1, [r0] + and r1, r1, #4 + cmp r1, #4 + bne 1923f + + ldr r2, =PSPR // check if there is a pointer from the operating system + ldr r1, [r2] + cmp r1, #0 + beq 1923f + + ldr r3, =0x0000000f // reset RCSR + str r3, [r0] + + // initialize CPSR (machine state register) + mov r0, #(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_SUPERVISOR_MODE) + msr cpsr, r0 + + mov r15, r1 // jump to pointer +1923: +#endif + +_sdram_init_end: +// +// +// Change Frequency!!! +// +// +#if 0 + ldr r4, =0x145 // PxBus = 165,9 MHz MEM/LCD Clock = 165,9 MHz SDRAM-Clock 83 MHz + ldr r2, =CCCR // Core Clock Config Reg + str r4, [r2] // set speed + + // set to Frequency Change Mode + mov r0, #0x3 + mcr p14, 0, r0, c6, c0, 0 // write to the CCLKCFG coprocessor reg + // no TURBO-mode is set here +#endif + // Enable access to all coprocessor registers + ldr r0, =0x2001 // enable access to all coprocessors + mcr p15, 0, r0, c15, c1, 0 + + mcr p15, 0, r0, c7, c10, 4 // drain the write & fill buffers + CPWAIT r0 + + mcr p15, 0, r0, c7, c7, 0 // flush Icache, Dcache and BTB + CPWAIT r0 + + mcr p15, 0, r0, c8, c7, 0 // flush instuction and data TLBs + CPWAIT r0 + + // Enable the Icache + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #MMU_Control_I + mcr p15, 0, r0, c1, c0, 0 + CPWAIT r0 + + // Set the TTB register + ldr r0, =mmu_table + mcr p15, 0, r0, c2, c0, 0 + + // Enable permission checks in all domains + ldr r0, =0x55555555 + mcr p15, 0, r0, c3, c0, 0 + + // Enable the MMU + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #MMU_Control_M + orr r0, r0, #MMU_Control_R + mcr p15, 0, r0, c1, c0, 0 + CPWAIT r0 + + mcr p15, 0, r0, c7, c10, 4 // drain the write & fill buffers + CPWAIT r0 + + // Enable the Dcache + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #MMU_Control_C + mcr p15, 0, r0, c1, c0, 0 + CPWAIT r0 + + // Enable the BTB + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #MMU_Control_BTB + mcr p15, 0, r0, c1, c0, 0 + CPWAIT r0 + + // clean/drain/flush the main Dcache + mov r1, #DCACHE_FLUSH_AREA // use a CACHEABLE area of + // the memory map above SDRAM + mov r0, #1024 // number of lines in the Dcache +20: + mcr p15, 0, r1, c7, c2, 5 // allocate a Dcache line +/* increment the address to the next cache line */ + add r1, r1, #32 +// decrement the loop count + subs r0, r0, #1 // decrement the loop count + bne 20b + + // clean/drain/flush the mini Dcache + ldr r2, =(DCACHE_FLUSH_AREA+DCACHE_SIZE) // use a CACHEABLE area of + // the memory map above SDRAM + mov r0, #64 // number of lines in the mini Dcache +21: + mcr p15, 0, r2, c7, c2, 5 // allocate a Dcache line + add r2, r2, #32 // increment the address to + // the next cache line + subs r0, r0, #1 // decrement the loop count + bne 21b + + mcr p15, 0, r0, c7, c6, 0 // flush Dcache + CPWAIT r0 + + mcr p15, 0, r0, c7, c10, 4 // drain the write & fill buffers + CPWAIT r0 +#if 1 + mov r0, #0x1000000 +1: + subs r0, r0, #1 + bne 1b +#endif + // Save SDRAM size + ldr r1, =hal_dram_size // [see hal_intr.h] + str r8, [r1] + + // Move mmu tables into RAM so page table walks by the cpu + // don't interfere with FLASH programming. + ldr r0, =mmu_table + mov r4, r0 + add r2, r0, #0x4800 // End of tables + mov r1, #RAM_BASE + orr r1, r1, #0x4000 // RAM tables + mov r5, r1 + + // first, fixup physical address to second level + // table used to map first 1MB of flash. + ldr r3, [r0], #4 + sub r3, r3, r4 + add r3, r3, r5 + str r3, [r1], #4 + // everything else can go as-is +1: + ldr r3, [r0], #4 + str r3, [r1], #4 + cmp r0, r2 + bne 1b + + // go back and fixup physical address to second level + // table used to map first 1MB of SDRAM. + add r1, r5, #(0xA00 * 4) + ldr r0, [r1] // entry for first 1MB of DRAM + sub r0, r0, r4 + add r0, r0, r5 + str r0, [r1] // store it back + + // Flush the cache + mov r0, #DCACHE_FLUSH_AREA /* cache flush region */ + add r1, r0, #0x8000 /* 32KB cache */ +667: + mcr p15, 0, r0, c7, c2, 5 /* allocate a line */ + add r0, r0, #32 /* 32 bytes/line */ + teq r1, r0 + bne 667b + mcr p15, 0, r0, c7, c6, 0 /* invalidate data cache */ + /* cpuwait */ + mrc p15, 0, r1, c2, c0, 0 /* arbitrary read */ + mov r1, r1 + sub pc, pc, #4 + mcr p15, 0, r0, c7, c10, 4 + /* cpuwait */ + mrc p15, 0, r1, c2, c0, 0 /* arbitrary read */ + mov r1, r1 + sub pc, pc, #4 + nop + + // Set the TTB register to DRAM mmu_table + mov r0, r5 + mov r1, #0 + mcr p15, 0, r1, c7, c5, 0 // flush I cache + mcr p15, 0, r1, c7, c10, 4 // drain WB + mcr p15, 0, r0, c2, c0, 0 // load page table pointer + mcr p15, 0, r1, c8, c7, 0 // flush TLBs + CPWAIT r0 + + //Disable software and data breakpoints + mov r0, #0 + mcr p15, 0, r0, c14, c8, 0 // ibcr0 + mcr p15, 0, r0, c14, c9, 0 // ibcr1 + mcr p15, 0, r0, c14, c4, 0 // dbcon + + //Enable all debug functionality + mov r0, #0x80000000 + mcr p14, 0, r0, c10, c0, 0 // dcsr +#if 0 +220961: + ldr r1, =0x00000800 // we use GPIO23 for controlling the debug LED + + ldr r0, =GPCRx + str r1, [r0] // switch the LED on + + ldr r2, =0x00500000 // wait some time + mov r3, #1 +998: + sub r2, r2, r3 + cmp r2, #0 + bne 998b + + ldr r0, =GPSRx // switch the LED off + str r1, [r0] + + ldr r2, =0x00500000 // wait some time + mov r3, #1 +998: + sub r2, r2, r3 + cmp r2, #0 + bne 998b + + b 220961b +#endif + mov r0, #0 + + //---- Wait 200 usec + ldr r3, =OSCR // reset the OS Timer Count to zero + mov r2, #0 + str r2, [r3] + ldr r4, =0x300 // really 0x2E1 is about 200usec, so 0x300 should be plenty +10: + add r0, r0, #1 + ldr r2, [r3] + cmp r4, r2 + bgt 10b + + ldr r2, =0xa0800000 + str r0, [r2] + .endm // _platform_setup1 +/*----------------------------------------------------------------------*/ +/* end of hal_platform_setup.h */ +#endif /* CYGONCE_HAL_PLATFORM_SETUP_H */ diff --git a/packages/hal/arm/xscale/triton/v2_0/include/hal_triton.h b/packages/hal/arm/xscale/triton/v2_0/include/hal_triton.h new file mode 100755 index 00000000..2ba29702 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/hal_triton.h @@ -0,0 +1,605 @@ +#ifndef CYGONCE_HAL_TRITON_H +#define CYGONCE_HAL_TRITON_H + +/*============================================================================= +// +// hal_triton.h +// +// HAL Description of PXA250PXA255 control registers +// and ARM memory control in general. +// +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): usteinkohl +// Contributors: usteinkohl +// Date: 14th January 2003 +// Purpose: Intel PXA250/PXA255 register and Ka-Ro TRITON hardware descriptions +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +/*******************/ +/* TRITON Devices */ +/*******************/ + +#include // System-wide configuration info + +#define BOOT_ROM 0x00000000 /* Boot ROM (Flash) */ +#define SDRAM_B0 0xA0000000 /* 64 MByte of SDRAM Bank 0 */ + +#define BOOTFLASHSIZE 0x2000000 /* BOOT FLASH - 32 Mbytes */ +#define SDRAMBANK0SIZE 0x2000000 /* SDRAM bank 0 - 32 Mbytes */ + +/* On-Board Ethernet (physical addrs) */ +#if (TRITON_STK==2) /* use onboard ethernet controller */ +#define SMC91C111_ETH_IOBASE 0x04000300 /* I/O base */ +#define IRQ_GPIO_ETH CYGNUM_HAL_INTERRUPT_GPIO4 +#elif (TRITON_STK==1) +#define SMC91C111_ETH_IOBASE 0x21800000 /* I/O base */ +#define IRQ_GPIO_ETH CYGNUM_HAL_INTERRUPT_GPIO0 +#else + #error: unknown starter kit type +#endif + +#define I2C_PCF8574_DEVADR (0x40) + +#define CS8900A_ETH_IOBASE 0x04000300 /* I/O base */ +#define IRQ_GPIO_CS8900A CYGNUM_HAL_INTERRUPT_GPIO4 + +#ifndef __ASSEMBLER__ +typedef struct pin_i2c_t_tag { + unsigned char scl_no; + unsigned char sda_no; + } pin_i2c_t; + +#define __REG(x) ((volatile unsigned long *)(x)) + +// i2c function prototypes +void init_i2c(void); +cyg_int32 write_i2c_pcf8574(cyg_uint8 device_adr, cyg_uint8 dat_value); +cyg_int32 read_i2c_pcf8574(cyg_uint8 device_adr); + +void init_i2c_pp(void); /* init i2c par. port */ + +void triton_program_new_stack(void *func); + +void pin_i2c_setup(pin_i2c_t *pin_data); +void bus_out(pin_i2c_t *pin_data, unsigned char pdata); +int bus_in(pin_i2c_t *pin_data); +void i2c_start(pin_i2c_t *pin_data); +void i2c_stop(pin_i2c_t *pin_data); +int i2c_read_ack(pin_i2c_t *pin_data); +void i2c_write_ack(pin_i2c_t *pin_data); +void i2c_write_nack(pin_i2c_t *pin_data); +void i2c_slave_addr(pin_i2c_t *pin_data, unsigned char dev, unsigned char mode); +void i2c_read(pin_i2c_t *pin_data, unsigned char *res); +void i2c_write(pin_i2c_t *pin_data, unsigned char val); + +int se_read(pin_i2c_t *pin_data, unsigned char addr, unsigned char dev_address, unsigned int numb, char *dat); +int se_write(pin_i2c_t *pin_data, unsigned char addr,unsigned char dev_address, unsigned char val); + +int ltc1663_write(pin_i2c_t *pin_data, unsigned char dev_address, unsigned char command, unsigned short val); + +int set_alternate_function(unsigned char gpio_nr, unsigned char function_code); +int set_pin_dir(unsigned char pin_no, unsigned char io_code); /* 0=input 1=output */ +int set_pin(unsigned char pin_no); +int get_pin_status(unsigned char pin_no); +int clear_pin(unsigned char pin_no); +int set_rising_edge(unsigned char pin_no, unsigned char io_code); /* 0= disable 1= enable */ +int set_falling_edge(unsigned char pin_no, unsigned char io_code); /* 0= disable 1= enable */ +int clear_edge(unsigned char pin_no); +int detect_edge(unsigned char pin_no); + +void reset_cp_dac(void); +#else +#define __REG(x) (x) +#endif + +#define NUM_GPIOS 85 + +// Memory Controller 0x48000000 +#define MDCNFG __REG(0x48000000) // SDRAM configuration register 0 +#define MDREFR __REG(0x48000004) // SDRAM refresh control register +#define MSC0 __REG(0x48000008) // Static memory control register 0 +#define MSC1 __REG(0x4800000C) // Static memory control register 1 +#define MSC2 __REG(0x48000010) // Static memory control register 2 +#define MECR __REG(0x48000014) // Expansion memory (PCMCIA / Compact Flash) bus configuration register +#define SXLCR __REG(0x48000018) // LCR value to be written to SDRAM-Timing Synchronous Flash +#define SXCNFG __REG(0x4800001C) // Synchronous static memory control register +#define FLYCNFG __REG(0x48000020) // Fly by DMA DVAL assert and deassert times +#define SXMRS __REG(0x48000024) // MRS value to be written to Synchronous Flash or SMROM +#define MCMEM0 __REG(0x48000028) // Card interface Common Memory Space Socket 0 Timing Configuration +#define MCMEM1 __REG(0x4800002C) // Card interface Common Memory Space Socket 1 Timing Configuration +#define MCATT0 __REG(0x48000030) // Card interface Attribute Space Socket 0 Timing Configuration +#define MCATT1 __REG(0x48000034) // Card interface Attribute Space Socket 1 Timing Configuration +#define MCIO0 __REG(0x48000038) // Card interface I/O Space Socket 0 Timing Configuration +#define MCIO1 __REG(0x4800003C) // Card interface I/O Space Socket 1 Timing Configuration +#define MDMRS __REG(0x48000040) // MRS value to be written to SDRAM +#define MDMRSLP __REG(0x48000058) // extended MRS value to be written to SDRAM + +#define BOOTDEF __REG(0x48000044) // Read-Only Boot-time register. Contains BOOT_SEL and PKG_SEL values. +// LCD Controller 0x44000000 +#define LCCR0 __REG(0x44000000) // LCD controller control register 0 +#define LCCR1 __REG(0x44000004) // LCD controller control register 1 +#define LCCR2 __REG(0x44000008) // LCD controller control register 2 +#define LCCR3 __REG(0x4400000C) // LCD controller control register 3 +#define FDADR0 __REG(0x44000200) // DMA channel 0 frame descriptor address register +#define FSADR0 __REG(0x44000204) // DMA channel 0 frame source address register +#define FIDR0 __REG(0x44000208) // DMA channel 0 frame ID register +#define LDCMD0 __REG(0x4400020C) // DMA channel 0 command register +#define FDADR1 __REG(0x44000210) // DMA channel 1 frame descriptor address register +#define FSADR1 __REG(0x44000214) // DMA channel 1 frame source address register +#define FIDR1 __REG(0x44000218) // DMA channel 1 frame ID register +#define LDCMD1 __REG(0x4400021C) // DMA channel 1 command register +#define FBR0 __REG(0x44000020) // DMA channel 0 frame branch register +#define FBR1 __REG(0x44000024) // DMA channel 1 frame branch register +#define LCSR __REG(0x44000038) // LCD controller status register +#define LIIDR __REG(0x4400003C) // LCD controller interrupt ID register +#define TRGBR __REG(0x44000040) // TMED RGB Seed Register +#define TCR __REG(0x44000044) // TMED Control Register +// DMA Controller 0x40000000 +#define DCSR0 __REG(0x40000000) // DMA Control / Status Register for Channel 0 +#define DCSR1 __REG(0x40000004) // DMA Control / Status Register for Channel 1 +#define DCSR2 __REG(0x40000008) // DMA Control / Status Register for Channel 2 +#define DCSR3 __REG(0x4000000c) // DMA Control / Status Register for Channel 3 +#define DCSR4 __REG(0x40000010) // DMA Control / Status Register for Channel 4 +#define DCSR5 __REG(0x40000014) // DMA Control / Status Register for Channel 5 +#define DCSR6 __REG(0x40000018) // DMA Control / Status Register for Channel 6 +#define DCSR7 __REG(0x4000001c) // DMA Control / Status Register for Channel 7 +#define DCSR8 __REG(0x40000020) // DMA Control / Status Register for Channel 8 +#define DCSR9 __REG(0x40000024) // DMA Control / Status Register for Channel 9 +#define DCSR10 __REG(0x40000028) // DMA Control / Status Register for Channel 10 +#define DCSR11 __REG(0x4000002c) // DMA Control / Status Register for Channel 11 +#define DCSR12 __REG(0x40000030) // DMA Control / Status Register for Channel 12 +#define DCSR13 __REG(0x40000034) // DMA Control / Status Register for Channel 13 +#define DCSR14 __REG(0x40000038) // DMA Control / Status Register for Channel 14 +#define DCSR15 __REG(0x4000003c) // DMA Control / Status Register for Channel 15 +#define DINT __REG(0x400000f0) // DMA Interrupt Register +#define DRCMR0 __REG(0x40000100) // Request to Channel Map Register for DREQ 0 (companion chip request 0) +#define DRCMR1 __REG(0x40000104) // Request to Channel Map Register for DREQ 1 (companion chip request 1) +#define DRCMR2 __REG(0x40000108) // Request to Channel Map Register for I2S receive Request +#define DRCMR3 __REG(0x4000010c) // Request to Channel Map Register for I2S transmit Request +#define DRCMR4 __REG(0x40000110) // Request to Channel Map Register for BTUART receive Request +#define DRCMR5 __REG(0x40000114) // Request to Channel Map Register for BTUART transmit Request. +#define DRCMR6 __REG(0x40000118) // Request to Channel Map Register for FFUART receive Request +#define DRCMR7 __REG(0x4000011c) // Request to Channel Map Register for FFUART transmit Request +#define DRCMR8 __REG(0x40000120) // Request to Channel Map Register for AC97 microphone Request +#define DRCMR9 __REG(0x40000124) // Request to Channel Map Register for AC97 modem receive Request +#define DRCMR10 __REG(0x40000128) // Request to Channel Map Register for AC97 modem transmit Request +#define DRCMR11 __REG(0x4000012c) // Request to Channel Map Register for AC97 audio receive Request +#define DRCMR12 __REG(0x40000130) // Request to Channel Map Register for AC97 audio transmit Request +#define DRCMR13 __REG(0x40000134) // Request to Channel Map Register for SSP receive Request +#define DRCMR14 __REG(0x40000138) // Request to Channel Map Register for SSP transmit Request +#define DRCMR15 __REG(0x4000013c) // Reserved +#define DRCMR16 __REG(0x40000140) // Reserved +#define DRCMR17 __REG(0x40000144) // Request to Channel Map Register for ICP receive Request +#define DRCMR18 __REG(0x40000148) // Request to Channel Map Register for ICP transmit Request +#define DRCMR19 __REG(0x4000014c) // Request to Channel Map Register for STUART receive Request +#define DRCMR20 __REG(0x40000150) // Request to Channel Map Register for STUART transmit Request +#define DRCMR21 __REG(0x40000154) // Request to Channel Map Register for MMC receive Request +#define DRCMR22 __REG(0x40000158) // Request to Channel Map Register for MMC transmit Request +#define DRCMR23 __REG(0x4000015c) // RESERVED +#define DRCMR24 __REG(0x40000160) // RESERVED +#define DRCMR25 __REG(0x40000164) // Request to Channel Map Register for USB endpoint 1 Request +#define DRCMR26 __REG(0x40000168) // Request to Channel Map Register for USB endpoint 2 Request +#define DRCMR27 __REG(0x4000016C) // Request to Channel Map Register for USB endpoint 3 Request +#define DRCMR28 __REG(0x40000170) // Request to Channel Map Register for USB endpoint 4 Request +#define DRCMR29 __REG(0x40000174) // RESERVED +#define DRCMR30 __REG(0x40000178) // Request to Channel Map Register for USB endpoint 6 Request +#define DRCMR31 __REG(0x4000017C) // Request to Channel Map Register for USB endpoint 7 Request +#define DRCMR32 __REG(0x40000180) // Request to Channel Map Register for USB endpoint 8 Request +#define DRCMR33 __REG(0x40000184) // Request to Channel Map Register for USB endpoint 9 Request +#define DRCMR34 __REG(0x40000188) // RESERVED +#define DRCMR35 __REG(0x4000018C) // Request to Channel Map Register for USB endpoint 11 Request +#define DRCMR36 __REG(0x40000190) // Request to Channel Map Register for USB endpoint 12 Request +#define DRCMR37 __REG(0x40000194) // Request to Channel Map Register for USB endpoint 13 Request +#define DRCMR38 __REG(0x40000198) // Request to Channel Map Register for USB endpoint 14 Request +#define DRCMR39 __REG(0x4000019C) // RESERVED +#define DDADR0 __REG(0x40000200) // DMA Descriptor Address Register channel 0 +#define DSADR0 __REG(0x40000204) // DMA Source Address Register channel 0 +#define DTADR0 __REG(0x40000208) // DMA Target Address Register channel 0 +#define DCMD0 __REG(0x4000020C) // DMA Command Address Register channel 0 +#define DDADR1 __REG(0x40000210) // DMA Descriptor Address Register channel 1 +#define DSADR1 __REG(0x40000214) // DMA Source Address Register channel 1 +#define DTADR1 __REG(0x40000218) // DMA Target Address Register channel 1 +#define DCMD1 __REG(0x4000021C) // DMA Command Address Register channel 1 +#define DDADR2 __REG(0x40000220) // DMA Descriptor Address Register channel 2 +#define DSADR2 __REG(0x40000224) // DMA Source Address Register channel 2 +#define DTADR2 __REG(0x40000228) // DMA Target Address Register channel 2 +#define DCMD2 __REG(0x4000022C) // DMA Command Address Register channel 2 +#define DDADR3 __REG(0x40000230) // DMA Descriptor Address Register channel 3 +#define DSADR3 __REG(0x40000234) // DMA Source Address Register channel 3 +#define DTADR3 __REG(0x40000238) // DMA Target Address Register channel 3 +#define DCMD3 __REG(0x4000023C) // DMA Command Address Register channel 3 +#define DDADR4 __REG(0x40000240) // DMA Descriptor Address Register channel 4 +#define DSADR4 __REG(0x40000244) // DMA Source Address Register channel 4 +#define DTADR4 __REG(0x40000248) // DMA Target Address Register channel 4 +#define DCMD4 __REG(0x4000024C) // DMA Command Address Register channel 4 +#define DDADR5 __REG(0x40000250) // DMA Descriptor Address Register channel 5 +#define DSADR5 __REG(0x40000254) // DMA Source Address Register channel 5 +#define DTADR5 __REG(0x40000258) // DMA Target Address Register channel 5 +#define DCMD5 __REG(0x4000025C) // DMA Command Address Register channel 5 +#define DDADR6 __REG(0x40000260) // DMA Descriptor Address Register channel 6 +#define DSADR6 __REG(0x40000264) // DMA Source Address Register channel 6 +#define DTADR6 __REG(0x40000268) // DMA Target Address Register channel 6 +#define DCMD6 __REG(0x4000026C) // DMA Command Address Register channel 6 +#define DDADR7 __REG(0x40000270) // DMA Descriptor Address Register channel 7 +#define DSADR7 __REG(0x40000274) // DMA Source Address Register channel 7 +#define DTADR7 __REG(0x40000278) // DMA Target Address Register channel 7 +#define DCMD7 __REG(0x4000027C) // DMA Command Address Register channel 7 +#define DDADR8 __REG(0x40000280) // DMA Descriptor Address Register channel 8 +#define DSADR8 __REG(0x40000284) // DMA Source Address Register channel 8 +#define DTADR8 __REG(0x40000288) // DMA Target Address Register channel 8 +#define DCMD8 __REG(0x4000028C) // DMA Command Address Register channel 8 +#define DDADR9 __REG(0x40000290) // DMA Descriptor Address Register channel 9 +#define DSADR9 __REG(0x40000294) // DMA Source Address Register channel 9 +#define DTADR9 __REG(0x40000298) // DMA Target Address Register channel 9 +#define DCMD9 __REG(0x4000029C) // DMA Command Address Register channel 9 +#define DDADR10 __REG(0x400002a0) // DMA Descriptor Address Register channel 10 +#define DSADR10 __REG(0x400002a4) // DMA Source Address Register channel 10 +#define DTADR10 __REG(0x400002a8) // DMA Target Address Register channel 10 +#define DCMD10 __REG(0x400002aC) // DMA Command Address Register channel 10 +#define DDADR11 __REG(0x400002b0) // DMA Descriptor Address Register channel 11 +#define DSADR11 __REG(0x400002b4) // DMA Source Address Register channel 11 +#define DTADR11 __REG(0x400002b8) // DMA Target Address Register channel 11 +#define DCMD11 __REG(0x400002bC) // DMA Command Address Register channel 11 +#define DDADR12 __REG(0x400002c0) // DMA Descriptor Address Register channel 12 +#define DSADR12 __REG(0x400002c4) // DMA Source Address Register channel 12 +#define DTADR12 __REG(0x400002c8) // DMA Target Address Register channel 12 +#define DCMD12 __REG(0x400002cC) // DMA Command Address Register channel 12 +#define DDADR13 __REG(0x400002d0) // DMA Descriptor Address Register channel 13 +#define DSADR13 __REG(0x400002d4) // DMA Source Address Register channel 13 +#define DTADR13 __REG(0x400002d8) // DMA Target Address Register channel 13 +#define DCMD13 __REG(0x400002dC) // DMA Command Address Register channel 13 +#define DDADR14 __REG(0x400002e0) // DMA Descriptor Address Register channel 14 +#define DSADR14 __REG(0x400002e4) // DMA Source Address Register channel 14 +#define DTADR14 __REG(0x400002e8) // DMA Target Address Register channel 14 +#define DCMD14 __REG(0x400002eC) // DMA Command Address Register channel 14 +#define DDADR15 __REG(0x400002f0) // DMA Descriptor Address Register channel 15 +#define DSADR15 __REG(0x400002f4) // DMA Source Address Register channel 15 +#define DTADR15 __REG(0x400002f8) // DMA Target Address Register channel 15 +#define DCMD15 __REG(0x400002fC) // DMA Command Address Register channel 15 +// Full Function UART +#define FFRBR __REG(0x40100000) // Receive Buffer Register (read only) +#define FFTHR __REG(0x40100000) // Transmit Holding Register (write only) +#define FFIER __REG(0x40100004) // Interrupt Enable Register (read/write) +#define FFIIR __REG(0x40100008) // Interrupt ID Register (read only) +#define FFFCR __REG(0x40100008) // FIFO Control Register (write only) +#define FFLCR __REG(0x4010000C) // Line Control Register (read/write) +#define FFMCR __REG(0x40100010) // Modem Control Register (read/write) +#define FFLSR __REG(0x40100014) // Line Status Register (read only) +#define FFMSR __REG(0x40100018) // Modem Status Register (read only) +#define FFSPR __REG(0x4010001C) // Scratch Pad Register (read/write) +#define FFDLL __REG(0x40100000) // baud divisor lower byte (read/write) +#define FFDLH __REG(0x40100004) // baud divisor higher byte (read/write) +#define FFISR __REG(0x40100020) // slow Infrared Select Register (read/write) +// Bluetooth UART +#define BTRBR __REG(0x40200000) // Receive Buffer Register (read only) +#define BTTHR __REG(0x40200000) // Transmit Holding Register (write only) +#define BTIER __REG(0x40200004) // Interrupt Enable Register (read/write) +#define BTIIR __REG(0x40200008) // Interrupt ID Register (read only) +#define BTFCR __REG(0x40200008) // FIFO Control Register (write only) +#define BTLCR __REG(0x4020000C) // Line Control Register (read/write) +#define BTMCR __REG(0x40200010) // Modem Control Register (read/write) +#define BTLSR __REG(0x40200014) // Line Status Register (read only) +#define BTMSR __REG(0x40200018) // Modem Status Register (read only) +#define BTSPR __REG(0x4020001C) // Scratch Pad Register (read/write) +#define BTDLL __REG(0x40200000) // baud divisor lower byte (read/write) +#define BTDLH __REG(0x40200004) // baud divisor higher byte (read/write) +#define BTISR __REG(0x40200020) // slow Infrared Select Register (read/write) +// Standard UART +#define STRBR __REG(0x40700000) // Receive Buffer Register (read only) +#define STTHR __REG(0x40700000) // Transmit Holding Register (write only) +#define STIER __REG(0x40700004) // Interrupt Enable Register (read/write) +#define STIIR __REG(0x40700008) // Interrupt ID Register (read only) +#define STFCR __REG(0x40700008) // FIFO Control Register (write only) +#define STLCR __REG(0x4070000C) // Line Control Register (read/write) +#define STMCR __REG(0x40700010) // Modem Control Register (read/write) +#define STLSR __REG(0x40700014) // Line Status Register (read only) +#define STMSR __REG(0x40700018) // Reserved +#define STSPR __REG(0x4070001C) // Scratch Pad Register (read/write) +#define STDLL __REG(0x40700000) // baud divisor lower byte (read/write) +#define STDLH __REG(0x40700004) // baud divisor higher byte (read/write) +#define STISR __REG(0x40700020) // slow Infrared Select Register (read/write) +// I2C +#define IBMR __REG(0x40301680) // I2C Bus Monitor Register - IBMR +#define IDBR __REG(0x40301688) // I2C Data Buffer Register - IDBR +#define ICR __REG(0x40301690) // I2C Control Register - ICR +#define ISR __REG(0x40301698) // I2C Status Register - ISR +#define ISAR __REG(0x403016A0) // I2C Slave Address Register - ISAR +//#define ICCR __REG(0x403016A8) // I2C Clock Count Register - ICCR +// I2S +#define SACR0 __REG(0x40400000) // Global Control Register +#define SACR1 __REG(0x40400004) // Serial Audio I2S/MSB-Justified Control Register +// - 0x4040-0008 ) // Reserved +#define SASR0 __REG(0x4040000C) // Serial Audio I2S/MSB-Justified Interface and FIFO Status Register +// - 0x4040-0010 ) // Reserved +#define SAIMR __REG(0x40400014) // Serial Audio Interrupt Mask Register +#define SAICR __REG(0x40400018) // Serial Audio Interrupt Clear Register +// 0x4040-001C +// through +// Reserved 0x4040-0058 - +#define SAITR __REG(0x4040005C) // Serial Audio Interrupt Test Register +#define SADIV __REG(0x40400060) // "Audio clock divider register. See section Section 12.3, “Serial Audio Clocks and Sampling Frequencies” on page 12-7." +// - 0x4040-0064 Reserved +// through +// Reserved 0x4040-007C - +#define SADR __REG(0x40400080) // Serial Audio Data Register (TX and RX FIFO access register). +// - 0x4040-0084 to 0x404F-FFFF Reserved +// AC97 +#define POCR __REG(0x40500000) // PCM Out Control Register +#define PICR __REG(0x40500004) // PCM In Control Register +#define MCCR __REG(0x40500008) // Mic In Control Register +#define GCR __REG(0x4050000C) // Global Control Register +#define POSR __REG(0x40500010) // PCM Out Status Register +#define PISR __REG(0x40500014) // PCM In Status Register +#define MCSR __REG(0x40500018) // Mic In Status Register +#define GSR __REG(0x4050001C) // Global Status Register +#define CAR __REG(0x40500020) // CODEC Access Register +// - 0x4050-0024 through 0x4050-003C Reserved +#define PCDR __REG(0x40500040) // PCM FIFO Data Register +// - 0x4050-0044 through 0x4050-005C Reserved +#define MCDR __REG(0x40500060) // Mic-in FIFO Data Register +// - 0x4050-0064 through 0x4050-00FC Reserved +#define MOCR __REG(0x40500100) // MODEM Out Control Register +// - 0x4050-0104 Reserved +#define MICR __REG(0x40500108) // MODEM In Control Register +// - 0x4050-010C Reserved +#define MOSR __REG(0x40500110) // MODEM Out Status Register +// - 0x4050-0114 Reserved +#define MISR __REG(0x40500118) // MODEM In Status Register +// - 0x4050-011C through 0x4050-013C Reserved +#define MODR __REG(0x40500140) // MODEM FIFO Data Register +// - 0x4050-0144 through 0x4050-01FC Reserved +// __REG(0x4050-0200 through 0x4050-02FC) +// with all in increments of 0x00004 Primary Audio CODEC registers +// __REG(0x4050-0300 through 0x4050-03FC) +// with all in increments of 0x00004 Secondary Audio CODEC registers +// +// with all in increments of 0x0000-0004 Primary MODEM CODEC registers +// +// with all in increments of 0x00004 Secondary MODEM CODEC registers +// UDC +#define UDCCR __REG(0x40600000) // UDC control register +#define UDCCS0 __REG(0x40600010) // UDC Endpoint 0 Control/Status Register +#define UDCCS1 __REG(0x40600014) // UDC Endpoint 1 (IN) Control/Status Register +#define UDCCS2 __REG(0x40600018) // UDC Endpoint 2 (OUT) Control/Status Register +#define UDCCS3 __REG(0x4060001C) // UDC Endpoint 3 (IN) Control/Status Register +#define UDCCS4 __REG(0x40600020) // UDC Endpoint 4 (OUT) Control/Status Register +#define UDCCS5 __REG(0x40600024) // UDC Endpoint 5 (Interrupt) Control/Status Register +#define UDCCS6 __REG(0x40600028) // UDC Endpoint 6 (IN) Control/Status Register +#define UDCCS7 __REG(0x4060002C) // UDC Endpoint 7 (OUT) Control/Status Register +#define UDCCS8 __REG(0x40600030) // UDC Endpoint 8 (IN) Control/Status Register +#define UDCCS9 __REG(0x40600034) // UDC Endpoint 9 (OUT) Control/Status Register +#define UDCCS10 __REG(0x40600038) // UDC Endpoint 10 (Interrupt) Control/Status Register +#define UDCCS11 __REG(0x4060003C) // UDC Endpoint 11 (IN) Control/Status Register +#define UDCCS12 __REG(0x40600040) // UDC Endpoint 12 (OUT) Control/Status Register +#define UDCCS13 __REG(0x40600044) // UDC Endpoint 13 (IN) Control/Status Register +#define UDCCS14 __REG(0x40600048) // UDC Endpoint 14 (OUT) Control/Status Register +#define UDCCS15 __REG(0x4060004C) // UDC Endpoint 15 (Interrupt) Control/Status Register +#define UFNRH __REG(0x40600060) // UDC Frame Number Register High +#define UFNRL __REG(0x40600064) // UDC Frame Number Register Low +#define UDDR0 __REG(0x40600080) // UDC Endpoint 0 Data Register +#define UDDR1 __REG(0x40600100) // UDC Endpoint 1 Data Register +#define UDDR2 __REG(0x406001C0) // UDC Endpoint 2 Data Register +#define UDDR3 __REG(0x40600200) // UDC Endpoint 3 Data Register +#define UDDR4 __REG(0x40600400) // UDC Endpoint 4 Data Register +#define UDDR5 __REG(0x406000A0) // UDC Endpoint 5 Data Register +#define UDDR6 __REG(0x40600600) // UDC Endpoint 6 Data Register +#define UDDR7 __REG(0x40600680) // UDC Endpoint 7 Data Register +#define UDDR8 __REG(0x40600700) // UDC Endpoint 8 Data Register +#define UDDR9 __REG(0x40600A00) // UDC Endpoint 9 Data Register +#define UDDR10 __REG(0x406000C0) // UDC Endpoint 10 Data Register +#define UDDR11 __REG(0x40600B00) // UDC Endpoint 11 Data Register +#define UDDR12 __REG(0x40600B80) // UDC Endpoint 12 Data Register +#define UDDR13 __REG(0x40600C00) // UDC Endpoint 13 Data Register +#define UDDR14 __REG(0x40600E00) // UDC Endpoint 14 Data Register +#define UDDR15 __REG(0x406000E0) // UDC Endpoint 15 Data Register +#define UICR0 __REG(0x40600050) // UDC Interrupt Control Register 0 +#define UICR1 __REG(0x40600054) // UDC Interrupt Control Register 1 +#define USIR0 __REG(0x40600058) // UDC Status Interrupt Register 0 +#define USIR1 __REG(0x4060005C) // UDC Status Interrupt Register 1 +// ICP +#define ICCR0 __REG(0x40800000) // ICP control register 0 +#define ICCR1 __REG(0x40800004) // ICP control register 1 +#define ICCR2 __REG(0x40800008) // ICP control register 2 +#define ICDR __REG(0x4080000C) // ICP data register +// — 0h 40800010 ) // Reserved +#define ICSR0 __REG(0x40800014) // ICP status register 0 +#define ICSR1 __REG(0x40800018) // ICP status register 1 +// — 0h 4080001C - 0h 4080 FFFF Reserved +// RTC +#define RCNR __REG(0x40900000) //RTC count register +#define RTAR __REG(0x40900004) //RTC alarm register +#define RTSR __REG(0x40900008) //RTC status register +#define RTTR __REG(0x4090000C) //RTC timer trim register + +// OS Timer +#define OSMR0 __REG(0x40A00000) // OS timer match registers<3:0> +#define OSMR1 __REG(0x40A00004) // +#define OSMR2 __REG(0x40A00008) // +#define OSMR3 __REG(0x40A0000C) // +#define OSCR __REG(0x40A00010) // OS timer counter register +#define OSSR __REG(0x40A00014) // OS timer status register +#define OWER __REG(0x40A00018) // OS timer watchdog enable register +#define OIER __REG(0x40A0001C) // OS timer interrupt enable register +// PWM 0 +#define PWMCTRL0 __REG(0x40B00000) // PWM 0 Control Register +#define PWDUTY0 __REG(0x40B00004) // PWM 0 Duty Cycle Register +#define PERVAL0 __REG(0x40B00008) // PWM 0 Period Control Register +// PWM 1 +#define PWMCTRL1 __REG(0x40C00000) // PWM 1 Control Register +#define PWDUTY1 __REG(0x40C00004) // PWM 1 Duty Cycle Register +#define PERVAL1 __REG(0x40C00008) // PWM 1 Period Control Register +// Interrupt Control +#define ICIP __REG(0x40D00000) // Interrupt controller IRQ pending register +#define ICMR __REG(0x40D00004) // Interrupt controller mask register +#define ICLR __REG(0x40D00008) // Interrupt controller level register +#define ICFP __REG(0x40D0000C) // Interrupt controller FIQ pending register +#define ICPR __REG(0x40D00010) // Interrupt controller pending register +#define ICCR __REG(0x40D00014) // Interrupt controller control register +// GPIO +#define GPLRx __REG(0x40E00000) // GPIO pin-level register GPIO<31:0> +#define GPLRy __REG(0x40E00004) // GPIO pin-level register GPIO<63:32> +#define GPLRz __REG(0x40E00008) // GPIO pin-level register GPIO<80:64> +#define GPDRx __REG(0x40E0000C) // GPIO pin direction register GPIO<31:0> +#define GPDRy __REG(0x40E00010) // GPIO pin direction register GPIO<63:32> +#define GPDRz __REG(0x40E00014) // GPIO pin direction register GPIO<80:64> +#define GPSRx __REG(0x40E00018) // GPIO pin output set register GPIO<31:0> +#define GPSRy __REG(0x40E0001C) // GPIO pin output set register GPIO<63:32> +#define GPSRz __REG(0x40E00020) // GPIO pin output set register GPIO<80:64> +#define GPCRx __REG(0x40E00024) // GPIO pin output clear register GPIO<31:0> +#define GPCRy __REG(0x40E00028) // GPIO pin output clear register GPIO <63:32> +#define GPCRz __REG(0x40E0002C) // GPIO pin output clear register GPIO <80:64> +#define GRERx __REG(0x40E00030) // GPIO rising-edge detect register GPIO<31:0> +#define GRERy __REG(0x40E00034) // GPIO rising-edge detect register GPIO<63:32> +#define GRERz __REG(0x40E00038) // GPIO rising-edge detect register GPIO<80:64> +#define GFERx __REG(0x40E0003C) // GPIO falling-edge detect register GPIO<31:0> +#define GFERy __REG(0x40E00040) // GPIO falling-edge detect register GPIO<63:32> +#define GFERz __REG(0x40E00044) // GPIO falling-edge detect register GPIO<80:64> +#define GEDRx __REG(0x40E00048) // GPIO edge detect status register GPIO<31:0> +#define GEDRy __REG(0x40E0004C) // GPIO edge detect status register GPIO<63:32> +#define GEDRz __REG(0x40E00050) // GPIO edge detect status register GPIO<80:64> +#define GAFR0x __REG(0x40E00054) // GPIO alternate function select register GPIO<15:0> +#define GAFR1x __REG(0x40E00058) // GPIO alternate function select register GPIO<31:16> +#define GAFR0y __REG(0x40E0005C) // GPIO alternate function select register GPIO<47:32> +#define GAFR1y __REG(0x40E00060) // GPIO alternate function select register GPIO<63:48> +#define GAFR0z __REG(0x40E00064) // GPIO alternate function select register GPIO<79:64> +#define GAFR1z __REG(0x40E00068) // GPIO alternate function select register GPIO<80:84> + +// Power Manager and Reset Control +#define PMCR __REG(0x40F00000) // Power Manager Control register +#define PSSR __REG(0x40F00004) // Power Manager Sleep Status register +#define PSPR __REG(0x40F00008) // Power Manager Scratch Pad register +#define PWER __REG(0x40F0000C) // Power Manager Wake-up Enable register +#define PRER __REG(0x40F00010) // Power Manager GPIO Rising-edge Detect Enable register +#define PFER __REG(0x40F00014) // Power Manager GPIO Falling-edge Detect Enable register +#define PEDR __REG(0x40F00018) // Power Manager GPIO Edge Detect Status register +#define PCFR __REG(0x40F0001C) // Power Manager General Configuration register +#define PGSRx __REG(0x40F00020) // Power Manager GPIO Sleep State register for GP[31-0] +#define PGSRy __REG(0x40F00024) // Power Manager GPIO Sleep State register for GP[63-32] +#define PGSRz __REG(0x40F00028) // Power Manager GPIO Sleep State register for GP[84-64] +// - 0x40F0002C Reserved +// - 0x40F0002C Reserved +#define RCSR __REG(0x40F00030) // Reset controller status register +// - 0x40F00034 - 0x40FFFFF Reserved +// Clocks Manager +#define CCCR __REG(0x41300000) // Core Clock Configuration Register +#define CKEN __REG(0x41300004) // Clock Enable Register +#define OSCC __REG(0x41300008) // Oscillator Configuration Register +// -- 0x4130000C - 0x413FFFF Reserved +// SSP +#define SSCR0 __REG(0x41000000) // SSP Control Register 0 +#define SSCR1 __REG(0x41000004) // SSP Control Register 1 +#define SSSR __REG(0x41000008) // SSP Status Register +#define SSITR __REG(0x4100000C) // SSP Interrupt Test Register +#define SSDR __REG(0x41000010) // SSP Data Write Register/SSP Data Read Register +// -- 0x41000014 - 0x410F FFFF Reserved +// MMC +#define MMCSTRPCL __REG(0x41100000) // Control to start and stop MMC clock +#define MMCSTAT __REG(0x41100004) // MMC status register (read only) +#define MMCCLKRT __REG(0x41100008) // MMC clock rate +#define MMCSPI __REG(0x4110000c) // SPI mode control bits +#define MMCCMDAT __REG(0x41100010) // Command/response/data sequence control +#define MMCRESTO __REG(0x41100014) // Expected response time out +#define MMCRDTO __REG(0x41100018) // Expected data read time out +#define MMCBLKLEN __REG(0x4110001c) // Block length of data transaction +#define MMCNOB __REG(0x41100020) // "Number of blocks, for block mode" +#define MMCPRTBUF __REG(0x41100024) // Partial MMC_TXFIFO FIFO written +#define MMCIMASK __REG(0x41100028) // Interrupt Mask +#define MMCIREG __REG(0x4110002c) // Interrupt Register (read only) +#define MMCCMD __REG(0x41100030) // Index of current command +#define MMCARGH __REG(0x41100034) // MSW part of the current command argument +#define MMCARGL __REG(0x41100038) // LSW part of the current command argument +#define MMCRES __REG(0x4110003c) // Response FIFO (read only) +#define MMCRXFIFO __REG(0x41100040) // Receive FIFO (read only) +#define MMCTXFIFO __REG(0x41100044) // Transmit FIFO (write only) +// ADC +#define ADCD __REG(0x41200000) // ADC Data Register +#define ADCS __REG(0x41200004) // ADC Control Register +#define ADCE __REG(0x41200008) // ADC Enable Register +#define ADCTSC __REG(0x4120000C) // ADC Touch Screen Control Register +#define ADCTSS1 __REG(0x41200010) // ADC Touch Screen Setup Register 1 +#define ADCTSS2 __REG(0x41200014) // ADC Touch Screen Setup Register 2 +// -- 0x41200018 - 0x412FFFF Reserved + +/* I2C register definitions */ +/* some bit masks of register ICR */ +#define ICR_START 0x00000001 +#define ICR_STOP 0x00000002 +#define ICR_ACKNAK 0x00000004 +#define ICR_TB 0x00000008 +#define ICR_MA 0x00000010 +#define ICR_SCLE 0x00000020 +#define ICR_IUE 0x00000040 +#define ICR_GCD 0x00000080 +#define ICR_ITEIE 0x00000100 +#define ICR_IRFIE 0x00000200 +#define ICR_BEIE 0x00000400 +#define ICR_SSDIE 0x00000800 +#define ICR_ALDIE 0x00001000 +#define ICR_SADIE 0x00002000 +#define ICR_UR 0x00004000 +#define ICR_FM 0x00008000 + +/* some bit masks of register ISR */ +#define ISR_RWM 0x00000001 +#define ISR_ACKNACK 0x00000002 +#define ISR_UB 0x00000004 +#define ISR_IBB 0x00000008 +#define ISR_SSD 0x00000010 +#define ISR_ALD 0x00000020 +#define ISR_ITE 0x00000040 +#define ISR_IRF 0x00000080 +#define ISR_GCAD 0x00000100 +#define ISR_SAD 0x00000200 +#define ISR_BED 0x00000400 + +#define OSSR_TIMER0 (0x1 << 0) +#define OSSR_TIMER1 (0x1 << 1) +#define OSSR_TIMER2 (0x1 << 2) +#define OSSR_TIMER3 (0x1 << 3) + +#define OIER_TIMER0 (0x1 << 0) +#define OIER_TIMER1 (0x1 << 1) +#define OIER_TIMER2 (0x1 << 2) +#define OIER_TIMER3 (0x1 << 3) + +#define OWER_WME (0x1 << 0) +#endif diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_ram.h b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_ram.h new file mode 100755 index 00000000..36118bcf --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_ram.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (32*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_ram.ldi b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_ram.ldi new file mode 100755 index 00000000..a0378bbd --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_ram.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (32*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_rom.h b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_rom.h new file mode 100755 index 00000000..74cadd94 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_rom.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (32*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (0x1000000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_rom.ldi b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_rom.ldi new file mode 100755 index 00000000..9b7c8216 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp32_rom.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = 0x2000000 + rom : ORIGIN = 0x00000000, LENGTH = 0x1000000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_ram.h b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_ram.h new file mode 100755 index 00000000..5964e731 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_ram.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (16*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_ram.ldi b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_ram.ldi new file mode 100755 index 00000000..6e1a2618 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_ram.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (16*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_rom.h b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_rom.h new file mode 100755 index 00000000..61f2c317 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_rom.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (16*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (0x1000000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_rom.ldi b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_rom.ldi new file mode 100755 index 00000000..d86d0f68 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_lp_rom.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = 0x1000000 + rom : ORIGIN = 0x00000000, LENGTH = 0x1000000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_ram.h b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_ram.h new file mode 100755 index 00000000..207b85d6 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_ram.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (0x4000000) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_ram.ldi b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_ram.ldi new file mode 100755 index 00000000..dcf20f2b --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_ram.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = 0x4000000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_rom.h b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_rom.h new file mode 100755 index 00000000..655b2e13 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_rom.h @@ -0,0 +1,22 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (0x2000000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ + + +#endif + diff --git a/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_rom.ldi b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_rom.ldi new file mode 100755 index 00000000..b08fcb11 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/pkgconf/mlt_arm_xscale_triton_stk_rom.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = 0x4000000 + rom : ORIGIN = 0x00000000, LENGTH = 0x2000000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton/v2_0/include/plf_io.h b/packages/hal/arm/xscale/triton/v2_0/include/plf_io.h new file mode 100755 index 00000000..25162681 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/plf_io.h @@ -0,0 +1,135 @@ +#ifndef CYGONCE_PLF_IO_H +#define CYGONCE_PLF_IO_H + +//============================================================================= +// +// plf_io.h +// +// Platform specific IO support +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): usteinkohl +// Contributors: usteinkohl +// Date: 16th January 2003 +// Purpose: Ka-Ro Triton IO support macros +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + + + +unsigned long _fu_phys_address(unsigned long); + + + +#define CYGARC_PHYSICAL_ADDRESS(_x_) (_fu_phys_address((unsigned long)_x_)) + + +#ifdef CYGHWR_REDBOOT_LINUX_ATAG_MEM +#error CYGHWR_REDBOOT_LINUX_ATAG_MEM already defined +#endif +#define CYGHWR_REDBOOT_LINUX_ATAG_MEM(_p_) \ + CYG_MACRO_START \ + /* Next ATAG_MEM. */ \ + _p_->hdr.size = (sizeof(struct tag_mem32) + sizeof(struct tag_header))/sizeof(long); \ + _p_->hdr.tag = ATAG_MEM; \ + /* Round up so there's only one bit set in the memory size. \ + * Don't double it if it's already a power of two, though. \ + */ \ + _p_->u.mem.size = CYGMEM_REGION_ram_SIZE; \ + _p_->u.mem.start = CYGMEM_REGION_ram; \ + CYG_MACRO_END + + + +//----------------------------------------------------------------------------- + +// IDE interface + + +#if (TRITON_STK==2) + #define HAL_HAG_IDE_SKT1_CMD (0x30000000) + #define HAL_HAG_IDE_SKT1_CTL (0x30400000) + #define HAL_HAG_IDE_SKT2_CMD (0x30000000) + #define HAL_HAG_IDE_SKT2_CTL (0x30400000) +#elif (TRITON_STK==1) + #define HAL_HAG_IDE_SKT1_CMD (0x30000000) + #define HAL_HAG_IDE_SKT1_CTL (0x30400000) + #define HAL_HAG_IDE_SKT2_CMD (0x30000000) + #define HAL_HAG_IDE_SKT2_CTL (0x30400000) +#else + #error: unknown starter kit type +#endif + + + + + + +#define HAL_IDE_NUM_CONTROLLERS 1 + +// Initialize the IDE controller(s). +externC void cyg_hal_plf_ide_init(void); +#define HAL_IDE_INIT() cyg_hal_plf_ide_init() + + + +#define __CMD_ADDR(__n) ((__n) ? HAL_HAG_IDE_SKT2_CMD : HAL_HAG_IDE_SKT1_CMD) +#define __CTL_ADDR(__n) ((__n) ? HAL_HAG_IDE_SKT2_CTL : HAL_HAG_IDE_SKT1_CTL) + +#define HAL_IDE_READ_UINT8( __ctlr, __regno , __val ) \ + HAL_READ_UINT8(__CMD_ADDR(__ctlr) + (__regno), (__val)) +#define HAL_IDE_READ_UINT16( __ctlr, __regno, __val ) \ + HAL_READ_UINT16(__CMD_ADDR(__ctlr) + (__regno), (__val)) +#define HAL_IDE_READ_ALTSTATUS( __ctlr, __val ) \ + HAL_READ_UINT16(__CTL_ADDR(__ctlr) + 2, (__val)) + +#define HAL_IDE_WRITE_UINT8( __ctlr, __regno, __val ) \ + HAL_WRITE_UINT8(__CMD_ADDR(__ctlr) + (__regno), (__val)) +#define HAL_IDE_WRITE_UINT16( __ctlr, __regno, __val ) \ + HAL_WRITE_UINT16(__CMD_ADDR(__ctlr) + (__regno), (__val)) +#define HAL_IDE_WRITE_CONTROL( __ctlr, __val ) \ + HAL_WRITE_UINT16(__CTL_ADDR(__ctlr) + 2, (__val)) + + + +// end of plf_io.h +#endif // CYGONCE_PLF_IO_H diff --git a/packages/hal/arm/xscale/triton/v2_0/include/plf_stub.h b/packages/hal/arm/xscale/triton/v2_0/include/plf_stub.h new file mode 100755 index 00000000..eebad7c1 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/plf_stub.h @@ -0,0 +1,102 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors:jskov, gthomas, msalter +// Date: 2000-10-10 +// Purpose: Platform HAL stub support for Ka-Ro TRITON boards. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include // CYG_UNUSED_PARAM + +#include // architecture stub support + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. +#define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//---------------------------------------------------------------------------- +// Reset. +#include // registers +#include // IO macros + +// FIXME - Can we reset the board? +#define HAL_STUB_PLATFORM_RESET() CYG_EMPTY_STATEMENT + +#define HAL_STUB_PLATFORM_RESET_ENTRY 0x00000000 + +extern int cyg_hal_plf_hw_breakpoint(int setflag, void *addr, int len); +extern int cyg_hal_plf_hw_watchpoint(int setflag, void *addr, int len, int type); +extern int cyg_hal_plf_is_stopped_by_hardware(void **paddr); + +#define HAL_STUB_HW_BREAKPOINT(f,a,l) cyg_hal_plf_hw_breakpoint((f),(a),(l)) +#define HAL_STUB_HW_WATCHPOINT(f,a,l,t) cyg_hal_plf_hw_watchpoint((f),(a),(l),(t)) +#define HAL_STUB_IS_STOPPED_BY_HARDWARE(p) cyg_hal_plf_is_stopped_by_hardware(&(p)) + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h diff --git a/packages/hal/arm/xscale/triton/v2_0/include/triton_1w_dev.inl b/packages/hal/arm/xscale/triton/v2_0/include/triton_1w_dev.inl new file mode 100755 index 00000000..6d630bde --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/include/triton_1w_dev.inl @@ -0,0 +1,387 @@ + +#define SNO_WRITE_SCRATCHPAD 0x0f +#define SNO_READ_SCRATCHPAD 0xaa +#define SNO_COPY_SCRATCHPAD 0x55 +#define SNO_READ_MEMORY 0xf0 +#define SNO_WRITE_APPLICATION_REG 0x99 +#define SNO_READ_STATUS_REG 0x66 +#define SNO_READ_APPLICATION_REG 0xc3 +#define SNO_COPY_LOCK 0x5a +#define SNO_READ_ROM 0x33 +#define SNO_MATCH_ROM 0x55 +#define SNO_SKIP_ROM 0xcc +#define SNO_SEARCH_ROM 0xf0 + +int reset_1w(void) +{ + int fu_result; + + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40a00010;" // timer 500 usec + "ldr r6, [r5];" + "ldr r7, =1800;" + "adc r6, r6, r7;" + + "112:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 112b;" + + "ldr r5, =0x40e00018;" // output set register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + "ldr r5, =0x40a00010;" // timer 80 usec + "ldr r6, [r5];" + "ldr r7, =288;" + "adc r6, r6, r7;" + + "113:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 113b;" + + "ldr r5, =0x40e00000;" // pin level register + "ldr r6, [r5];" + "and r6, r6, r4;" + "mov %0, r6, lsr#5;" // shift right by 5 + + "ldr r5, =0x40a00010;" // timer 500 usec + "ldr r6, [r5];" + "ldr r7, =1800;" + "adc r6, r6, r7;" + + "114:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 114b;" + + : "=r"(fu_result) + : + : "r4","r5","r6","r7"); + + return fu_result; +} + +int sno_read(void) +{ + int fu_result; + + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40a00010;" // timer 5 usec + "ldr r6, [r5];" + "adc r6, r6, #18;" + + "112:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 112b;" + + "ldr r5, =0x40e00018;" // output set register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + "ldr r5, =0x40a00010;" // timer 5 usec + "ldr r6, [r5];" + "adc r6, r6, #18;" + + "113:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 113b;" + + "ldr r5, =0x40e00000;" // pin level register + "ldr r6, [r5];" + "and r6, r6, r4;" + "mov %0, r6, lsr#5;" // shift right by 5 + + : "=r"(fu_result) + : + : "r4","r5","r6","r7"); + + return fu_result; +} + +void sno_write_1(void) +{ + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40a00010;" // timer 5 usec + "ldr r6, [r5];" + "adc r6, r6, #18;" + + "112:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 112b;" + + "ldr r5, =0x40e00018;" // output set register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + "ldr r5, =0x40a00010;" // timer 60 usec + "ldr r6, [r5];" + "adc r6, r6, #214;" + + "113:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 113b;" + + : + : + : "r4","r5","r6","r7"); +} + +void sno_write_0(void) +{ + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40a00010;" // timer 67 usec + "ldr r6, [r5];" + "adc r6, r6, #240;" + + "112:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 112b;" + + "ldr r5, =0x40e00018;" // output set register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + : + : + : "r4","r5","r6","r7"); +} + +void sno_write_byte (unsigned char sbyte) +{ + unsigned char mask; + int i; + + mask = 0x01; + for (i = 0; i < 8; i++) { + if (sbyte & mask) { + sno_write_1(); + } else { + sno_write_0(); + } + mask <<= 1; + HAL_DELAY_US(1); + } +} + +unsigned char sno_read_byte (void) +{ + unsigned char mask = 0x01; + unsigned char abyte = 0x00; + unsigned char return_value; + int i; + + for (i = 0; i < 8; i++) { + return_value = sno_read(); + if (return_value) { + abyte |= mask; + } + HAL_DELAY_US(80); + mask <<= 1; + } + return abyte; +} + +unsigned char sno_crc8(unsigned char * data, unsigned long count) +{ + unsigned char look_up_table[256] = { + 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, + 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, + 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, + 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, + 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, + 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, + 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, + 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, + 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, + 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, + 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, + 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, + 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, + 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, + 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, + 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53}; + int i; + unsigned char crc = 0; + + for (i = 0; i < count; i++) { + crc = look_up_table[crc ^ data[i]]; + } + return crc; +} + +int sno_reset(void) +{ + int result; + + result = reset_1w(); + if (!result) { + //diag_printf("presence pulse detected\n"); + return 0; + } else { + diag_printf("NO presence pulse detected\n"); + return 1; + } +} + +cyg_bool get_esa_1w(cyg_uint8 *buffer) +{ + int i; + unsigned char mac_data[8] = {0x00,0x00,0x0c,0xc6,0x00,0x00,0x00,0x00}; + unsigned char crc, status; + + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + "ldr r7, =0x00000040;" // mask for GPIO 6 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "orr r6, r6, r7;" + + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e00018;" // output set register + "str r7, [r5];" // set pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + "ldr r4, =0x00003c00;" + "ldr r5, =0x40e00054;" // alternate function register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to IO function + : + : + : "r4","r5","r6","r7" + ); + + HAL_DELAY_US(2000); // 2 msec recovery time + + // check status of application register + + if (sno_reset()) { + diag_printf("no eeprom device for MAC address found \n"); + return 0; + } + + sno_write_byte(SNO_SKIP_ROM); + sno_write_byte(SNO_READ_STATUS_REG); + sno_write_byte(0x00); // validation key + status = sno_read_byte(); + //diag_printf("Status des Application Registers ist: %02X\n", status); + + if (sno_reset()) { + diag_printf("no eeprom device for MAC address found \n"); + return 0; + } + + if (status & 0x03) { + diag_printf("No information in Application Register !!!!\n"); + diag_printf("using defauft MAC 0x00 : 0x0C : 0xC6 : 0x00 : 0x00 : 0x00\n"); + for (i = 0; i < 6; i++) { + buffer[i] = mac_data[i+1]; + } + return 1; + } + + sno_write_byte(SNO_SKIP_ROM); + sno_write_byte(SNO_READ_APPLICATION_REG); + sno_write_byte(0x00); // register address + for (i = 0; i < 8;i++) { + mac_data[i] = sno_read_byte(); + } + + if (sno_reset()) { + diag_printf("no eeprom device for MAC address found \n"); + return 0; + } + +// diag_printf("\nMAC address read from ROM: "); +// for (i=0; i<8; i++) { +// diag_printf("0x%02X ", mac_data[i]); +// } + diag_printf("\n"); + + crc = sno_crc8(mac_data,7); + + //diag_printf("calculated CRC is: %02X\n", crc ); + + if (crc != mac_data[7]) { + diag_printf("ROM data CRC Checksum Error !!!\n\n"); + return 0; + } + + for (i = 0; i < 6; i++) + buffer[i] = mac_data[i + 1]; + + return 1; +} diff --git a/packages/hal/arm/xscale/triton/v2_0/src/hal_diag.c b/packages/hal/arm/xscale/triton/v2_0/src/hal_diag.c new file mode 100755 index 00000000..8a0df02d --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/src/hal_diag.c @@ -0,0 +1,693 @@ +/*============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors:msalter +// Date: 2000-10-10 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include +#include +#include +#include CYGBLD_HAL_PLATFORM_H + +#include // base types +#include // tracing macros +#include // assertion macros + +#include // basic machine info +#include // interrupt macros +#include // IO macros +#include // calling interface API +#include // helper functions +#include +#include // Hardware definitions +#include // cyg_drv_interrupt_acknowledge + +#define SIO_IER_ERDAI SIO_IER_RAVIE + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) +static void cyg_hal_plf_serial_init(void); + +void resetSRAM(void) +{ + memset((void *)0x0a000000, 0, 1024 * 1024); +} + +void cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) { + return; + } + initialized = 1; + + cyg_hal_plf_serial_init(); + + // cyg_hal_plf_lcd_init(); + resetSRAM(); +} +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +//============================================================================= +// Serial driver +//============================================================================= + +//----------------------------------------------------------------------------- +// There are three serial ports. +#define CYG_DEV_SERIAL_BASE_FF 0x40100000 +#define CYG_DEV_SERIAL_BASE_BT 0x40200000 +#define CYG_DEV_SERIAL_BASE_STD 0x40700000 + +//----------------------------------------------------------------------------- + +// Based on Based on 14.7456 MHz clock +struct baud_config { + cyg_int32 baud_rate; + cyg_uint8 msb; + cyg_uint8 lsb; +}; + +struct baud_config baud_conf[] = { + {9600, 0x00, 0x60}, + {19200, 0x00, 0x30}, + {38400, 0x00, 0x18}, + {57600, 0x00, 0x10}, + {115200, 0x00, 0x08}}; + +// Default baud rate is 115200 +// Based on 14.7456 MHz clock +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==9600 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x60 +#endif +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==19200 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x30 +#endif +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==38400 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x18 +#endif +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==57600 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x10 +#endif +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==115200 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x08 +#endif + +#ifndef CYG_DEV_SERIAL_BAUD_MSB +#error Missing/incorrect serial baud rate defined - CDL error? +#endif + +//----------------------------------------------------------------------------- +// Define the serial registers. The Cogent board is equipped with a 16552 +// serial chip. +#define CYG_DEV_SERIAL_RBR 0x00 // receiver buffer register, read, dlab = 0 +#define CYG_DEV_SERIAL_THR 0x00 // transmitter holding register, write, dlab = 0 +#define CYG_DEV_SERIAL_DLL 0x00 // divisor latch (LS), read/write, dlab = 1 +#define CYG_DEV_SERIAL_IER 0x04 // interrupt enable register, read/write, dlab = 0 +#define CYG_DEV_SERIAL_DLM 0x04 // divisor latch (MS), read/write, dlab = 1 +#define CYG_DEV_SERIAL_IIR 0x08 // interrupt identification register, read, dlab = 0 +#define CYG_DEV_SERIAL_FCR 0x08 // fifo control register, write, dlab = 0 +#define CYG_DEV_SERIAL_LCR 0x0c // line control register, write +#define CYG_DEV_SERIAL_MCR 0x10 // modem control register, write +#define CYG_DEV_SERIAL_LSR 0x14 // line status register, read +#define CYG_DEV_SERIAL_MSR 0x18 // modem status register, read +#define CYG_DEV_SERIAL_SPR 0x1c // scratch pad register +#define CYG_DEV_SERIAL_ISR 0x20 // slow infrared select register (ISR), read/write + +// The interrupt enable register bits. +#define SIO_IER_RAVIE 0x01 // enable received data available irq +#define SIO_IER_TIE 0x02 // enable transmit data request interrupt +#define SIO_IER_RLSE 0x04 // enable receiver line status irq +#define SIO_IER_MIE 0x08 // enable modem status interrupt +#define SIO_IER_RTOIE 0x10 // enable Rx timeout interrupt +#define SIO_IER_NRZE 0x20 // enable NRZ coding +#define SIO_IER_UUE 0x40 // enable the UART unit +#define SIO_IER_DMAE 0x80 // enable DMA requests + +// The interrupt identification register bits. +#define SIO_IIR_IP 0x01 // 0 if interrupt pending +#define SIO_IIR_ID_MASK 0xff // mask for interrupt ID bits +#define ISR_Tx 0x02 +#define ISR_Rx 0x04 + +// The line status register bits. +#define SIO_LSR_DR 0x01 // data ready +#define SIO_LSR_OE 0x02 // overrun error +#define SIO_LSR_PE 0x04 // parity error +#define SIO_LSR_FE 0x08 // framing error +#define SIO_LSR_BI 0x10 // break interrupt +#define SIO_LSR_THRE 0x20 // transmitter holding register empty +#define SIO_LSR_TEMT 0x40 // transmitter holding and Tx shift registers empty +#define SIO_LSR_ERR 0x80 // any error condition (FIFOE) + +// The modem status register bits. +#define SIO_MSR_DCTS 0x01 // delta clear to send +#define SIO_MSR_DDSR 0x02 // delta data set ready +#define SIO_MSR_TERI 0x04 // trailing edge ring indicator +#define SIO_MSR_DDCD 0x08 // delta data carrier detect +#define SIO_MSR_CTS 0x10 // clear to send +#define SIO_MSR_DSR 0x20 // data set ready +#define SIO_MSR_RI 0x40 // ring indicator +#define SIO_MSR_DCD 0x80 // data carrier detect + +// The line control register bits. +#define SIO_LCR_WLS0 0x01 // word length select bit 0 +#define SIO_LCR_WLS1 0x02 // word length select bit 1 +#define SIO_LCR_STB 0x04 // number of stop bits +#define SIO_LCR_PEN 0x08 // parity enable +#define SIO_LCR_EPS 0x10 // even parity select +#define SIO_LCR_SP 0x20 // stick parity +#define SIO_LCR_SB 0x40 // set break +#define SIO_LCR_DLAB 0x80 // divisor latch access bit + +// The FIFO control register +#define SIO_FCR_FCR0 0x01 // enable xmit and rcvr fifos +#define SIO_FCR_FCR1 0x02 // clear RCVR FIFO +#define SIO_FCR_FCR2 0x04 // clear XMIT FIFO +#define SIO_FCR_ITL0 0x40 // Interrupt trigger level (ITL) bit 0 +#define SIO_FCR_ITL1 0x80 // Interrupt trigger level (ITL) bit 1 +#define SIO_FCR_ITL_1BYTE 0x00 // 1 byte triggers interrupt + +//----------------------------------------------------------------------------- +typedef struct { + cyg_uint8* base; + cyg_int32 msec_timeout; + int isr_vector; + cyg_int32 baud_rate; +} channel_data_t; + +//----------------------------------------------------------------------------- + +static int set_baud(channel_data_t *chan) +{ + cyg_uint8* base = chan->base; + cyg_uint8 i; + + for (i=0; i<(sizeof(baud_conf)/sizeof(baud_conf[0])); i++) { + if (chan->baud_rate == baud_conf[i].baud_rate) { + cyg_uint8 lcr; + HAL_READ_UINT8(base + CYG_DEV_SERIAL_LCR, lcr); + HAL_WRITE_UINT8(base + CYG_DEV_SERIAL_LCR, lcr|SIO_LCR_DLAB); + HAL_WRITE_UINT8(base + CYG_DEV_SERIAL_DLL, baud_conf[i].lsb); + HAL_WRITE_UINT8(base + CYG_DEV_SERIAL_DLM, baud_conf[i].msb); + HAL_WRITE_UINT8(base + CYG_DEV_SERIAL_LCR, lcr); + return 1; + } + } + return -1; +} + +static void init_serial_channel(channel_data_t* chan) +{ + cyg_uint8* base = chan->base; + + // 8-1-no parity. + HAL_WRITE_UINT8(base+CYG_DEV_SERIAL_LCR, SIO_LCR_WLS0 | SIO_LCR_WLS1); + + chan->baud_rate = CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD; + set_baud(chan); + + // Enable & clear FIFOs + // set Interrupt Trigger Level to be 1 byte + HAL_WRITE_UINT8(base+CYG_DEV_SERIAL_FCR, (SIO_FCR_FCR0 | SIO_FCR_FCR1 | SIO_FCR_FCR2)); // Enable & clear FIFO + + // Configure NRZ, disable DMA requests and enable UART + HAL_WRITE_UINT8(base+CYG_DEV_SERIAL_IER, SIO_IER_UUE); +} + +static cyg_bool cyg_hal_plf_serial_getc_nonblock(void *__ch_data, cyg_uint8 *ch) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 lsr; + + HAL_READ_UINT8(base+CYG_DEV_SERIAL_LSR, lsr); + if ((lsr & SIO_LSR_DR) == 0) + return false; + + HAL_READ_UINT8(base+CYG_DEV_SERIAL_RBR, *ch); + + return true; +} + +cyg_uint8 cyg_hal_plf_serial_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while (!cyg_hal_plf_serial_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + +void cyg_hal_plf_serial_putc(void* __ch_data, cyg_uint8 c) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 lsr; + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT8(base+CYG_DEV_SERIAL_LSR, lsr); + } while ((lsr & SIO_LSR_THRE) == 0); + + HAL_WRITE_UINT8(base+CYG_DEV_SERIAL_THR, c); + // Hang around until the character has been safely sent. + do { + HAL_READ_UINT8(base+CYG_DEV_SERIAL_LSR, lsr); + } while ((lsr & SIO_LSR_THRE) == 0); + + CYGARC_HAL_RESTORE_GP(); +} + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) +static channel_data_t channels[3] = { + { (cyg_uint8*)CYG_DEV_SERIAL_BASE_FF, 1000, CYGNUM_HAL_INTERRUPT_FFUART, 38400 }, + { (cyg_uint8*)CYG_DEV_SERIAL_BASE_BT, 1000, CYGNUM_HAL_INTERRUPT_BTUART, 38400 }, + { (cyg_uint8*)CYG_DEV_SERIAL_BASE_STD, 1000, CYGNUM_HAL_INTERRUPT_STUART, 38400 }, +}; + +static void cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while (__len-- > 0) { + cyg_hal_plf_serial_putc(__ch_data, *__buf++); + } + CYGARC_HAL_RESTORE_GP(); +} + +static void cyg_hal_plf_serial_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while (__len-- > 0) { + *__buf++ = cyg_hal_plf_serial_getc(__ch_data); + } + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool cyg_hal_plf_serial_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + int delay_count; + channel_data_t* chan = __ch_data; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 10; // delay in .1 ms steps + for(;;) { + res = cyg_hal_plf_serial_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(100); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int cyg_hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + static int irq_state = 0; + channel_data_t* chan = __ch_data; + cyg_uint8 ier; + int ret = 0; + CYGARC_HAL_SAVE_GP(); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_INTERRUPT_SET_LEVEL(chan->isr_vector, 1); + HAL_READ_UINT8(chan->base+CYG_DEV_SERIAL_IER, ier); + ier |= SIO_IER_ERDAI; + HAL_WRITE_UINT8(chan->base+CYG_DEV_SERIAL_IER, ier); + irq_state = 1; + break; + case __COMMCTL_IRQ_DISABLE: + ret = irq_state; + irq_state = 0; + HAL_INTERRUPT_MASK(chan->isr_vector); + HAL_READ_UINT8(chan->base+CYG_DEV_SERIAL_IER, ier); + ier &= ~SIO_IER_ERDAI; + HAL_WRITE_UINT8(chan->base+CYG_DEV_SERIAL_IER, ier); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + case __COMMCTL_GETBAUD: + ret = chan->baud_rate; + break; + case __COMMCTL_SETBAUD: + { + va_list ap; + va_start(ap, __func); + chan->baud_rate = va_arg(ap, cyg_int32); + va_end(ap); + ret = set_baud(chan); + break; + } + default: + break; + } + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + channel_data_t* chan = __ch_data; + cyg_uint8 _iir; + int res = 0; + CYGARC_HAL_SAVE_GP(); + + HAL_READ_UINT8(chan->base+CYG_DEV_SERIAL_IIR, _iir); + _iir &= SIO_IIR_ID_MASK; + + *__ctrlc = 0; + if (ISR_Rx == _iir) { + cyg_uint8 c, lsr; + HAL_READ_UINT8(chan->base + CYG_DEV_SERIAL_LSR, lsr); + if (lsr & SIO_LSR_DR) { + HAL_READ_UINT8(chan->base + CYG_DEV_SERIAL_RBR, c); + + if (cyg_hal_is_break(&c, 1)) { + *__ctrlc = 1; + } + } + + // Acknowledge the interrupt + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + res = CYG_ISR_HANDLED; + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static void cyg_hal_plf_serial_init(void) +{ + hal_virtual_comm_table_t* comm; + int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + // Disable interrupts. + HAL_INTERRUPT_MASK(channels[0].isr_vector); + HAL_INTERRUPT_MASK(channels[1].isr_vector); + HAL_INTERRUPT_MASK(channels[2].isr_vector); + + // Init channels + init_serial_channel((channel_data_t *)&channels[0]); + init_serial_channel((channel_data_t *)&channels[1]); + init_serial_channel((channel_data_t *)&channels[2]); + + // Setup procs in the vector table + // Set channel 0 + CYGACC_CALL_IF_SET_CONSOLE_COMM(0); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &channels[0]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); + + // Set channel 1 + CYGACC_CALL_IF_SET_CONSOLE_COMM(1); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &channels[1]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); + + // Set channel 2 + CYGACC_CALL_IF_SET_CONSOLE_COMM(2); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &channels[2]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); +} +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +//============================================================================= +// Compatibility with older stubs +//============================================================================= + +#ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +#include +#include // cyg_hal_gdb_interrupt +#endif + +// Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. +// totally stand-alone) system. + +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL) +#define HAL_DIAG_USES_HARDWARE +#endif + +/*---------------------------------------------------------------------------*/ +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL==0 +// This is the base address of the FF-channel +#define CYG_DEV_SERIAL_BASE CYG_DEV_SERIAL_BASE_FF +#define CYG_DEV_SERIAL_INT CYGNUM_HAL_INTERRUPT_FFUART +#elif CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL==1 +// This is the base address of the BT-channel +#define CYG_DEV_SERIAL_BASE CYG_DEV_SERIAL_BASE_BT +#define CYG_DEV_SERIAL_INT CYGNUM_HAL_INTERRUPT_BTUART +else +// This is the base address of the STD-channel +#define CYG_DEV_SERIAL_BASE CYG_DEV_SERIAL_BASE_STD +#define CYG_DEV_SERIAL_INT CYGNUM_HAL_INTERRUPT_STUART +#endif + +static channel_data_t ser_channel = { (cyg_uint8*)CYG_DEV_SERIAL_BASE, 0, 0}; + +#ifdef HAL_DIAG_USES_HARDWARE +void hal_diag_init(void) +{ + static int init = 0; + char *msg = "\n\rARM eCos\n\r"; + + if (init++) return; + + init_serial_channel(&ser_channel); + + while (*msg) hal_diag_write_char(*msg++); +} + +#ifdef DEBUG_DIAG +#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) +#define DIAG_BUFSIZE 32 +#else +#define DIAG_BUFSIZE 2048 +#endif +static char diag_buffer[DIAG_BUFSIZE]; +static int diag_bp = 0; +#endif + +void hal_diag_write_char(char c) +{ + cyg_uint8 lsr; + + hal_diag_init(); + + cyg_hal_plf_serial_putc(&ser_channel, c); + +#ifdef DEBUG_DIAG + diag_buffer[diag_bp++] = c; + if (diag_bp == DIAG_BUFSIZE) { + while (1) ; + diag_bp = 0; + } +#endif +} + +void hal_diag_read_char(char *c) +{ + *c = cyg_hal_plf_serial_getc(&ser_channel); +} + +#else // HAL_DIAG relies on GDB + +// Initialize diag port - assume GDB channel is already set up +void hal_diag_init(void) +{ + if (0) init_serial_channel(&ser_channel); // avoid warning +} + +// Actually send character down the wire +static void hal_diag_write_char_serial(char c) +{ + cyg_hal_plf_serial_putc(&ser_channel, c); +} + +static bool hal_diag_read_serial(char *c) +{ + long timeout = 1000000000; // A long time... + + while (!cyg_hal_plf_serial_getc_nonblock(&ser_channel, c)) { + if (0 == --timeout) return false; + } + return true; +} + +void hal_diag_read_char(char *c) +{ + while (!hal_diag_read_serial(c)); +} + +void hal_diag_write_char(char c) +{ + static char line[100]; + static int pos = 0; + + // No need to send CRs + if (c == '\r') return; + + line[pos++] = c; + + if (c == '\n' || pos == sizeof(line)) { + CYG_INTERRUPT_STATE old; + + // Disable interrupts. This prevents GDB trying to interrupt us + // while we are in the middle of sending a packet. The serial + // receive interrupt will be seen when we re-enable interrupts + // later. + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); +#else + HAL_DISABLE_INTERRUPTS(old); +#endif + while (1) { + static char hex[] = "0123456789ABCDEF"; + cyg_uint8 csum = 0; + int i; + char c1; + + hal_diag_write_char_serial('$'); + hal_diag_write_char_serial('O'); + csum += 'O'; + for( i = 0; i < pos; i++ ) { + char ch = line[i]; + char h = hex[(ch>>4)&0xF]; + char l = hex[ch&0xF]; + hal_diag_write_char_serial(h); + hal_diag_write_char_serial(l); + csum += h; + csum += l; + } + hal_diag_write_char_serial('#'); + hal_diag_write_char_serial(hex[(csum>>4)&0xF]); + hal_diag_write_char_serial(hex[csum&0xF]); + + // Wait for the ACK character '+' from GDB here and handle + // receiving a ^C instead. This is the reason for this clause + // being a loop. + if (!hal_diag_read_serial(&c1)) { + continue; // No response - try sending packet again + } + if (c1 == '+') { + break; // a good acknowledge + } +#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + cyg_drv_interrupt_acknowledge(CYG_DEV_SERIAL_INT); + if (c1 == 3) { + // Ctrl-C: breakpoint. + cyg_hal_gdb_interrupt(__builtin_return_address(0)); + break; + } +#endif + // otherwise, loop round again + } + pos = 0; + + // And re-enable interrupts +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); +#else + HAL_RESTORE_INTERRUPTS(old); +#endif + } +} +#endif + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +/*---------------------------------------------------------------------------*/ +/* End of hal_diag.c */ diff --git a/packages/hal/arm/xscale/triton/v2_0/src/redboot_cmds.c b/packages/hal/arm/xscale/triton/v2_0/src/redboot_cmds.c new file mode 100755 index 00000000..f9f73f39 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/src/redboot_cmds.c @@ -0,0 +1,334 @@ +//========================================================================== +// +// redboot_cmds.c +// +// TRITON [platform] specific RedBoot commands +// +//========================================================================== +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Richard Panton +// Date: 2001-02-24 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#include +#include +#include + +// Exported CLI function(s) + + + +#define CCCR_MEMCLK_99 0x00000001 +#define CCCR_MEMCLK_117 0x00000002 +#define CCCR_MEMCLK_132 0x00000003 +#define CCCR_MEMCLK_147 0x00000004 +#define CCCR_MEMCLK_165 0x00000005 + +#define CCCR_RUN_EQ_MEM 0x00000020 +#define CCCR_RUN_2T_MEM 0x00000040 + +#define CCCR_TURBO_10 0x00000100 +#define CCCR_TURBO_15 0x00000180 +#define CCCR_TURBO_20 0x00000200 +#define CCCR_TURBO_30 0x00000300 + + + +RedBoot_cmd("mem", + "Set a memory location", + "[-h|-b] [-a
] ", + do_mem + ); + +void do_mem(int argc, char *argv[]) +{ + struct option_info opts[3]; + bool mem_half_word, mem_byte; + volatile cyg_uint32 *address = NULL; + cyg_uint32 value; + + init_opts(&opts[0], 'b', false, OPTION_ARG_TYPE_FLG, + (void *)&mem_byte, 0, "write a byte"); + init_opts(&opts[1], 'h', false, OPTION_ARG_TYPE_FLG, + (void *)&mem_half_word, 0, "write a half-word"); + init_opts(&opts[2], 'a', true, OPTION_ARG_TYPE_NUM, + (void *)&address, NULL, "address to write at"); + if (!scan_opts(argc, argv, 1, opts, 3, (void *)&value, OPTION_ARG_TYPE_NUM, "address to set")) + return; + if (mem_byte && mem_half_word) { + diag_printf("*ERR: Should not specify both byte and half-word access\n"); + } else if (mem_byte) { + *(cyg_uint8*)address = (cyg_uint8)(value & 255); + diag_printf(" Set 0x%08X to 0x%02X (result 0x%02X)\n", address, value & 255, (int)*(cyg_uint8*)address); + } else if (mem_half_word) { + if ((unsigned long)address & 1) { + diag_printf("*ERR: Badly aligned address 0x%08X for half-word store\n", address); + } else { + *(cyg_uint16*)address = (cyg_uint16)(value & 0xffff); + diag_printf(" Set 0x%08X to 0x%04X (result 0x%04X)\n", address, value & 0xffff, (int)*(cyg_uint16*)address); + } + } else { + if ((unsigned long)address & 3) { + diag_printf("*ERR: Badly aligned address 0x%08X for word store\n", address); + } else { + *address = value; + diag_printf(" Set 0x%08X to 0x%08X (result 0x%08X)\n", address, value, + *address); + } + } +} + +RedBoot_cmd("clock", + "Set/Query the system clock speed", + "[-s ]", + do_clock + ); + +int get_clock_rate(void) { + + unsigned long CCCR_reg, CCLKCFG_reg; + + + asm volatile ( + "ldr r1, =0x41300000;" // Core Clock Config Reg + "ldr %0, [r1];" + "mrc p14, 0, %1, c6, c0, 0;" // read CCLKCFG register + : "=r"(CCCR_reg), "=r"(CCLKCFG_reg) + : + : "r1" + ); + + CCCR_reg &= 0x3ff; // blank reserved bits + + if (!(CCLKCFG_reg & 1)) { // we do not stay in turbo mode + CCCR_reg &= 0x7f; // delete turbo information + switch (CCCR_reg) { + case (CCCR_MEMCLK_99 | CCCR_RUN_EQ_MEM): + return 100; + break; + case (CCCR_MEMCLK_99 | CCCR_RUN_2T_MEM): + return 200; + break; + default: + return 0; + } + } else { // we stay in turbo mode + switch (CCCR_reg) { + case (CCCR_MEMCLK_99 | CCCR_RUN_2T_MEM | CCCR_TURBO_15): + return 300; + break; + case (CCCR_MEMCLK_99 | CCCR_RUN_2T_MEM | CCCR_TURBO_20): + return 400; + break; + default: + return 0; + } + } +} +void do_clock(int argc, char *argv[]) +{ + int new_clock, ret; + bool new_clock_set, clock_ok; + struct option_info opts[1]; +//#ifdef CYGSEM_REDBOOT_FLASH_CONFIG +// struct config_option opt; +//#endif + unsigned long reg; + + init_opts(&opts[0], 's', true, OPTION_ARG_TYPE_NUM, + (void *)&new_clock, (bool *)&new_clock_set, "new clock speed"); + if (!scan_opts(argc, argv, 1, opts, 1, 0, 0, "")) { + return; + } + + if (new_clock_set) { + diag_printf("Clock speed will be changed to %d MHz\n", new_clock); + + clock_ok = 1; + + switch (new_clock) { + case 100: + reg = CCCR_MEMCLK_99 | CCCR_RUN_EQ_MEM | CCCR_TURBO_10; + asm volatile ( + "mov r1, %0;" + "ldr r2, =0x41300000;" // Core Clock Config Reg + "str r1, [r2];" // set speed + "mov r1, #0x2;" // no turbo mode + "mcr p14, 0, r1, c6, c0, 0;" // frequency change sequence + : + : "r"(reg) + : "r1", "r2" + ); + break; + case 200: + reg = CCCR_MEMCLK_99 | CCCR_RUN_2T_MEM | CCCR_TURBO_10; + asm volatile ( + "mov r1, %0;" + "ldr r2, =0x41300000;" // Core Clock Config Reg + "str r1, [r2];" // set speed + "mov r1, #0x2;" // no turbo mode + "mcr p14, 0, r1, c6, c0, 0;" // frequency change sequence + : + : "r"(reg) + : "r1", "r2" + ); + break; + case 300: + reg = CCCR_MEMCLK_99 | CCCR_RUN_2T_MEM | CCCR_TURBO_15; + asm volatile ( + "mov r1, %0;" + "ldr r2, =0x41300000;" // Core Clock Config Reg + "str r1, [r2];" // set speed + "mov r1, #0x3;" // set turbo mode + "mcr p14, 0, r1, c6, c0, 0;" // frequency change sequence + : + : "r"(reg) + : "r1", "r2" + ); + break; + case 400: + reg = CCCR_MEMCLK_99 | CCCR_RUN_2T_MEM | CCCR_TURBO_20; + asm volatile ( + "mov r1, %0;" + "ldr r2, =0x41300000;" // Core Clock Config Reg + "str r1, [r2];" // set speed + "mov r1, #0x3;" // set turbo mode + "mcr p14, 0, r1, c6, c0, 0;" // frequency change sequence + : + : "r"(reg) + : "r1", "r2" + ); + break; + default: + clock_ok = 0; + diag_printf("\ndon't know how to install %d MHz, keeping clock speed at %d MHz\n\n", new_clock, get_clock_rate()); + } + if (clock_ok) { + diag_printf("\nclock speed set to %d MHz ...\n", new_clock); + } + +//#ifdef CYGSEM_REDBOOT_FLASH_CONFIG +// opt.type = CONFIG_INT; +// opt.enable = (char *)0; +// opt.enable_sense = 1; +// opt.key = "console_baud_rate"; +// opt.dflt = new_rate; +// flash_add_config(&opt, true); +//#endif + } else { + ret = get_clock_rate(); + diag_printf("Clock = "); + if (ret == 0) { + diag_printf("unknown\n"); + } else { + diag_printf("%d\n", ret); + } + } +} + +RedBoot_cmd("run", + "Execute code at a location", + "[-w ] [entry]", + do_run + ); + +void do_run(int argc, char *argv[]) +{ + typedef void code_fun(void); + unsigned long entry; + unsigned long oldints; + code_fun *fun; + bool wait_time_set; + int wait_time, res; + struct option_info opts[1]; + char line[8]; + + entry = entry_address; // Default from last 'load' operation + init_opts(&opts[0], 'w', true, OPTION_ARG_TYPE_NUM, + (void *)&wait_time, (bool *)&wait_time_set, "wait timeout"); + if (!scan_opts(argc, argv, 1, opts, 1, (void *)&entry, OPTION_ARG_TYPE_NUM, + "starting address")) { + entry = 0xa0100000; + diag_printf("starting run at address 0x%08X ...\n", entry); + } + if (wait_time_set) { + int script_timeout_ms = wait_time * 1000; +#ifdef CYGSEM_REDBOOT_FLASH_CONFIG + unsigned char *hold_script = script; + script = (unsigned char *)0; +#endif + diag_printf("About to start execution at %p - abort with ^C within %d seconds\n", + (void *)entry, wait_time); + while (script_timeout_ms >= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT) { + res = _rb_gets(line, sizeof(line), CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT); + if (res == _GETS_CTRLC) { +#ifdef CYGSEM_REDBOOT_FLASH_CONFIG + script = hold_script; // Re-enable script +#endif + return; + } + script_timeout_ms -= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT; + } + } + fun = (code_fun *)entry; + HAL_DISABLE_INTERRUPTS(oldints); + HAL_DCACHE_SYNC(); + HAL_ICACHE_DISABLE(); + HAL_DCACHE_DISABLE(); + HAL_DCACHE_SYNC(); + HAL_ICACHE_INVALIDATE_ALL(); + HAL_DCACHE_INVALIDATE_ALL(); +#ifdef HAL_ARCH_PROGRAM_NEW_STACK + HAL_ARCH_PROGRAM_NEW_STACK(fun); +#else + (*fun)(); +#endif + HAL_ICACHE_ENABLE(); + HAL_DCACHE_ENABLE(); + HAL_RESTORE_INTERRUPTS(oldints); +} diff --git a/packages/hal/arm/xscale/triton/v2_0/src/triton_misc.c b/packages/hal/arm/xscale/triton/v2_0/src/triton_misc.c new file mode 100755 index 00000000..64888a69 --- /dev/null +++ b/packages/hal/arm/xscale/triton/v2_0/src/triton_misc.c @@ -0,0 +1,1843 @@ +//========================================================================== +// +// triton_misc.c +// +// HAL misc board support code for XScale TRITON +// +//========================================================================== +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter, usteinkohl +// Contributors: msalter, usteinkohl +// Date: 14th January 2003 (last modification) +// Purpose: HAL board support +// Description: Implementations of HAL board interfaces +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ +#include +#include + +#include +#include +#include CYGBLD_HAL_PLATFORM_H +#include CYGHWR_MEMORY_LAYOUT_H + +#include // base types +#include // tracing macros +#include // assertion macros + +#include // IO macros +#include // Stub macros +#include // calling interface API +#include // Register state info +#include +#include // Interrupt names +#include +#include // Hardware definitions +#include // CYG_ISR_HANDLED + +extern int printf(char *fmt, ...); + +inline unsigned long _fu_phys_address(unsigned long _x_) +{ + switch (_x_>>12) { + case 0x0: + return _x_ + 0xa0000000; + case 0xa0000: + return _x_ & 0xfffffff; + default: + return _x_; + } +} + +/*------------------------------------------------------------------------*/ +/* IDE support */ + +void cyg_hal_plf_ide_init(void) +{ +} + +#ifdef CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_HAE +// settings for display +// +// +// + +#define LCCR0_ENB (0) // enable LCD controlle, we do this later +#define LCCR0_CMS (0) // color operation enabled +#define LCCR0_SDS (0) // Single Panel Display +#define LCCR0_LDM (1) // LCD disable done does not generate interrupts +#define LCCR0_SFM (1) // Start of Frame does not generate interrupts +#define LCCR0_IUM (1) // FIFO underrun errors do not generate interrupts +#define LCCR0_EFM (1) // end of frame condition does not generate interrupts +#define LCCR0_PAS (1) // active TFT +#define LCCR0_DPD (0) // no double pixel data +#define LCCR0_DIS (0) // not disabled +#define LCCR0_QDM (1) // quick disable does not generate an interrupt +#define LCCR0_PDD (0) // no palette DMA request delay +#define LCCR0_BM (1) // Branch Start does not generate an interrupt +#define LCCR0_OUM (1) // FIFO underrun does not generate interrupts + +#define LCCR1_PPL (800-1) // pixels per line -1 (must be a multiple of 8 for 4 bit pixels) +#define LCCR1_HSW (30-1) // Horizontal Sync pulse Width -1 +#define LCCR1_ELW (100-1) // End of Line Wait -1 +#define LCCR1_BLW (180-1) // Beginning of Line Wait -1 + +#define LCCR2_LPP (600-1) // lines per channel -1 +#define LCCR2_VSW (5-1) // vertical sync pulse with -1 22 +#define LCCR2_EFW (13-1) // End of Frame line clock wait count -1 +#define LCCR2_BFW (14-1) // Beginning of frame line clock wait count -1 + +#define LCCR3_PCD (1) // Pixel clock divisor +// Internal PixClock = 99,5 MHz / 2*(PCD+1) +// Note: with DPC=1, double clock is twice of internal +// PCD = 0 -> Internal Pixel Clock = 49,75 MHz +// PCD = 1 -> Internal Pixel Clock = 24,88 MHz +// PCD = 2 -> Internal Pixel Clock = 16,58 MHz +// PCD = 3 -> Internal Pixel Clock = 12,44 MHz +// PCD = 4 -> Internal Pixel Clock = 9,95 MHz +// PCD = 5 -> Internal Pixel Clock = 8,29 MHz +// PCD = 6 -> Internal Pixel Clock = 7,11 MHz +// PCD = 7 -> Internal Pixel Clock = 6,22 MHz +// PCD = 8 -> Internal Pixel Clock = 5,53 MHz +// PCD = 9 -> Internal Pixel Clock = 4,98 MHz +// PCD = 10 -> Internal Pixel Clock = 4,52 MHz +// PCD = 20 -> Internal Pixel Clock = 2,37 MHz +// PCD = 30 -> Internal Pixel Clock = 1,61 MHz + +#define LCCR3_ACB (0) // AC bias pin frequency, not used in active mode +#define LCCR3_API (0) // AC bias Pin transitions per interrupt, not used in active mode +#define LCCR3_VSP (1) // vertical sync polarity - > active low +#define LCCR3_HSP (1) // horizontal sync polarity -> active low +#define LCCR3_PCP (0) // pixel clock polarity -> pixels sampled with falling edge +#define LCCR3_OEP (0) // Blank polarity -> active high +#define LCCR3_BPP (0) // bits per pixel -> 1 bits +#define LCCR3_DPC (0) // Double pixel clock disabled +#endif + +void coldstart(void) +{ +#ifdef CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_HAE + static unsigned long __attribute__ ((aligned (16))) descriptor[4] = { + descriptor, 0, 0, 800 * 600 / 8, + }; + static unsigned long value; + + set_pin_dir(11, 0); + set_alternate_function(11, 0); + + set_pin_dir(23, 0); + set_alternate_function(23, 0); + + set_pin_dir(24, 0); + set_alternate_function(24, 0); + + set_pin_dir(25, 0); + set_alternate_function(25, 0); + + set_pin_dir(26, 0); + set_alternate_function(26, 0); + + set_pin_dir(33, 0); + set_alternate_function(33, 0); + + set_pin_dir(58, 1); // LDD00 + set_pin_dir(59, 1); // LDD01 + set_pin_dir(60, 1); // LDD02 + set_pin_dir(61, 1); // LDD03 + set_pin_dir(62, 1); // LDD04 + set_pin_dir(63, 1); // LDD05 + set_pin_dir(64, 1); // LDD06 + set_pin_dir(65, 1); // LDD07 + set_pin_dir(66, 1); // LDD08 + set_pin_dir(67, 1); // LDD09 + set_pin_dir(68, 1); // LDD10 + set_pin_dir(69, 1); // LDD11 + set_pin_dir(70, 1); // LDD12 + set_pin_dir(71, 1); // LDD13 + set_pin_dir(72, 1); // LDD14 + set_pin_dir(73, 1); // LDD15 + set_pin_dir(74, 1); // FCLK + set_pin_dir(75, 1); // LCLK + set_pin_dir(76, 1); // PCLK + set_pin_dir(77, 1); // DE + + clear_pin(58); // LDD00 + clear_pin(59); // LDD01 + clear_pin(60); // LDD02 + clear_pin(61); // LDD03 + clear_pin(62); // LDD04 + clear_pin(63); // LDD05 + clear_pin(64); // LDD06 + clear_pin(65); // LDD07 + clear_pin(66); // LDD08 + clear_pin(67); // LDD09 + clear_pin(68); // LDD10 + clear_pin(69); // LDD11 + clear_pin(70); // LDD12 + clear_pin(71); // LDD13 + clear_pin(72); // LDD14 + clear_pin(73); // LDD15 + set_pin(74); // FCLK + set_pin(75); // LCLK + clear_pin(76); // PCLK + clear_pin(77); // DE + + set_alternate_function(74,2); // FCLK + set_alternate_function(75,2); // LCLK + set_alternate_function(76,2); // PCLK + set_alternate_function(77,2); // BIAS + + set_pin_dir(78, 0); + set_alternate_function(78, 0); + + set_pin_dir(79, 0); + set_alternate_function(79, 0); + + set_pin_dir(80, 0); + set_alternate_function(80, 0); + + HAL_WRITE_UINT32(LCCR0, (LCCR0_ENB | + (LCCR0_CMS << 1) | + (LCCR0_SDS << 2) | + (LCCR0_LDM <<3) | + (LCCR0_SFM << 4) | + (LCCR0_IUM << 5) | + (LCCR0_EFM << 6) | + (LCCR0_PAS <<7) | + (LCCR0_DPD << 9) | + (LCCR0_DIS <<10) | + (LCCR0_QDM <<11) | + (LCCR0_PDD <<12) | + (LCCR0_BM << 20) | + (LCCR0_OUM <<21))); + + HAL_WRITE_UINT32(LCCR1, (LCCR1_PPL | + (LCCR1_HSW << 10) | + (LCCR1_ELW << 16) | + (LCCR1_BLW << 24))); + HAL_WRITE_UINT32(LCCR2, (LCCR2_LPP | + (LCCR2_VSW << 10) | + (LCCR2_EFW << 16) | + (LCCR2_BFW << 24))); + HAL_WRITE_UINT32(LCCR3, (LCCR3_PCD | + (LCCR3_ACB << 8) | + (LCCR3_API << 16) | + (LCCR3_VSP << 20) | + (LCCR3_HSP << 21) | + (LCCR3_PCP << 22) | + (LCCR3_OEP << 23) | + (LCCR3_BPP << 24) | + (LCCR3_DPC << 27))); + + HAL_WRITE_UINT32(FDADR0, (unsigned long)descriptor); +#endif + HAL_WRITE_UINT32(OSCR, 0); // initialize os timer counter + HAL_WRITE_UINT32(RCNR, 0); // initialize rtc counter + HAL_WRITE_UINT32(RTTR, 0x7FFF); // divide RTC to get 1hz output + // + // initialize interrupt registers + // + HAL_WRITE_UINT32(ICMR, 0); // Pending Interrupts are masked from becoming active + HAL_WRITE_UINT32(ICLR, 0); // Route all Interrupts to CPU IRQ (none to FIQ) + HAL_WRITE_UINT32(ICCR, 1); // Only enabled and unmasked interrupt bring core out of idle + + // + // setup general purpose I/Os (specific to TRITON board) + // must set GPSR/GPCR, then set GPDR, then set GPAFR + // + // this is already done in the assembly code. + + // setup the edge detect registers + + HAL_WRITE_UINT32(GRERx, 0x11); // rising edge detect registers + HAL_WRITE_UINT32(GRERy, 0); + HAL_WRITE_UINT32(GRERz, 0); + HAL_WRITE_UINT32(GFERx, 0); // falling edge detect registers + HAL_WRITE_UINT32(GFERy, 0); + HAL_WRITE_UINT32(GFERz, 0); + + // clear all edge detect status bits + + HAL_WRITE_UINT32(GEDRx, 0xffffffff); // clear all bits + HAL_WRITE_UINT32(GEDRy, 0xffffffff); + HAL_WRITE_UINT32(GEDRz, 0xffffffff); + + // setup PCMCIA timing parameters (should be optimized (usteinkohl) + // + // this is TRITON specific + // + // for about 100 MHz MEMCLK: + // command setup: 70 nsec + // command minimum duration: 170 nsec + // command hold: 50 nsec + + HAL_WRITE_UINT32(MCIO0, 0x0000c205); + HAL_WRITE_UINT32(MCIO1, 0x0000c205); + + HAL_WRITE_UINT32(MCMEM0, 0x0000c205); + HAL_WRITE_UINT32(MCMEM1, 0x0000c205); + + HAL_WRITE_UINT32(MCATT0, 0x0000c205); + HAL_WRITE_UINT32(MCATT1, 0x0000c205); + + HAL_WRITE_UINT32(MECR, 0x3); // set CIT and NOS +} + +void reset_cp_dac(void) +{ +#define LTC1663_SY 1 +#define LTC1663_SD 2 +#define LTC1663_BG 4 + +#ifdef TRITON_X_BOARD + pin_i2c_t dac_pins = {4, 5}; +#else + pin_i2c_t dac_pins = {13, 14}; +#endif + pin_i2c_setup(&dac_pins); + ltc1663_write(&dac_pins, 0x40, LTC1663_BG, 384); +} + +void init_i2c_pp(void) +{ + init_i2c(); + write_i2c_pcf8574(0x40, 0xf3); + HAL_DELAY_US(10000); + write_i2c_pcf8574(0x40, 0xf7); +} + +void hal_hardware_init(void) +{ + cyg_uint32 cken; + cyg_uint32 val; +#ifdef CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_HAE + unsigned long value; +#endif + + HAL_READ_UINT32(CKEN, cken); + // enable FFUART clock and BTUART clock and STUART + HAL_WRITE_UINT32(CKEN, cken | 0xe0); + + // Let the "OS" counter run + coldstart(); + + // Set up eCos/ROM interfaces + hal_if_init(); //ecos, not platform, specifc. Common to all. Do not change. +#ifdef TRITON_V_CPOWER + reset_cp_dac(); +#endif +#if 0 +#if TRITON_STK==2 + init_i2c_pp(); +#endif +#endif + // Enable caches + HAL_DCACHE_ENABLE(); //leave this + HAL_ICACHE_ENABLE(); //leave this + + //diag_printf("CKEN register: 0x%08X\n", cken); + + // check if we restart from sleep mode + HAL_READ_UINT32(RCSR, val); + //HAL_WRITE_UINT32(RCSR, 0xf); // clear all bits + if (val & 0x0f) { + const char *sep = " "; + diag_printf("\nReset caused by:"); + if (val & 1) { + diag_printf("%shardware reset pin", sep); + sep = " + "; + } + if (val & 0x02) { + diag_printf("%swatchdog reset", sep); + sep = " + "; + } + if (val & 0x08) { + diag_printf("%sGPIO reset\n", sep); + sep = " + "; + } + if (val & 0x04) { + diag_printf("%ssleep reset", sep); + sep = " + "; + HAL_READ_UINT32(PSPR, val); + if (!val) { + diag_printf("\nwarning, NULL pointer detected in PSPR register\n"); + } else { + diag_printf("\nrestarting operating system ...\n"); + asm volatile ( + "mov pc, %0;" // jump to pointer + : + : "r"(val) + ); + } + } + diag_printf("\n"); + } else { + diag_printf("\nwarning, unknown reset source !!!!\n"); + diag_printf("RCSR register: 0x%08X\n", val); + } + +#ifdef CYGPKG_HAL_ARM_XSCALE_TRITON_ETN_HAE + HAL_READ_UINT32(LCCR0, value); + value |= 1; // enable LCD controller + HAL_WRITE_UINT32(LCCR0, value); +#endif +} + +#include CYGHWR_MEMORY_LAYOUT_H +typedef void code_fun(void); +void triton_program_new_stack(void *func) +{ + register CYG_ADDRESS stack_ptr asm("sp"); + register CYG_ADDRESS old_stack asm("r4"); + register code_fun *new_func asm("r0"); + + old_stack = stack_ptr; + + stack_ptr = CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - sizeof(CYG_ADDRESS); + new_func = (code_fun*)func; + new_func(); + + stack_ptr = old_stack; +} + +#if 0 + asm volatile ( + "ldr r1,=0x00000800;" // we use GPIO23 for controlling the debug LED + + "250961:;" + "ldr r0,=0x40E00024;" // GPCR0 + "str r1, [r0];" // switch the LED on + + "ldr r2,=0x00a00000;" // wait some time + "mov r3,#1 ;" + "998:;" + "sub r2, r2, r3;" + "cmp r2,#0;" + "bne 998b;" + + "ldr r0,=0x40E00018;" // GPSR0 + "str r1, [r0];" // switch the LED off + + "ldr r2,=0x00a00000;" // wait some time + "mov r3,#1;" + "998:;" + "sub r2, r2, r3;" + "cmp r2,#0;" + "bne 998b;" + + "b 250961b;" + : + : + : "r0","r1","r2","r3" + ); +#endif + +// Initialize the clock +static cyg_uint32 clock_period; + +void hal_clock_initialize(cyg_uint32 period) +{ + cyg_uint32 oier; + + // Load match value + HAL_WRITE_UINT32(OSMR0, period); + clock_period = period; + + // Start the counter + HAL_WRITE_UINT32(OSCR, 0); + // Clear any pending interrupt + HAL_WRITE_UINT32(OSSR, OSSR_TIMER0); + // Enable timer 0 interrupt + HAL_READ_UINT32(OIER, oier); + HAL_WRITE_UINT32(OIER, oier | OIER_TIMER0); + + // Unmask timer 0 interrupt + HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_TIMER0); +} + +// This routine is called during a clock interrupt. +void hal_clock_reset(cyg_uint32 vector, cyg_uint32 period) +{ + cyg_uint32 oscr; + + // Load new match value + HAL_READ_UINT32(OSCR, oscr); + HAL_WRITE_UINT32(OSMR0, oscr + period); + // Clear any pending interrupt + HAL_WRITE_UINT32(OSSR, OSSR_TIMER0); +} + +// Read the current value of the clock, returning the number of hardware +// "ticks" that have occurred (i.e. how far away the current value is from +// the start) + +// Note: The "contract" for this function is that the value is the number +// of hardware clocks that have happened since the last interrupt (i.e. +// when it was reset). This value is used to measure interrupt latencies. +// However, since the hardware counter runs freely, this routine computes +// the difference between the current clock period and the number of hardware +// ticks left before the next timer interrupt. +void hal_clock_read(cyg_uint32 *pvalue) +{ + int orig; + cyg_uint32 oscr; + cyg_uint32 osmr0; + + HAL_DISABLE_INTERRUPTS(orig); + HAL_READ_UINT32(OSCR, oscr); + HAL_READ_UINT32(OSMR0, osmr0); + *pvalue = clock_period + oscr - osmr0; + HAL_RESTORE_INTERRUPTS(orig); +} + +// Delay for some number of micro-seconds +void hal_delay_us(cyg_uint32 time) +{ +#if 1 + cyg_uint32 val = 0; + cyg_uint32 ctr; + + HAL_READ_UINT32(OSCR, ctr); + while (time-- > 0) { + do { + cyg_uint32 oscr; + + HAL_READ_UINT32(OSCR, oscr); + if (ctr != oscr) { + val += 271267; // 271267ps (3.6864Mhz -> 271.267ns) + ++ctr; + } + } while (val < 1000000); + val -= 1000000; + } +#else + cyg_uint32 timer_value; + + if (time < 100000) { + timer_value = time * 3686; + timer_value = timer_value / 1000; + } else { + timer_value = time / 1000; + timer_value = timer_value * 3686; + } + + if (timer_value < 20) { + timer_value = 20; + } + asm volatile ( + "ldr r5, =0x40a0001C;" // OIER + "mov r7, #1;" + "str r7, [r5];" // enable match 0 + + "ldr r5, =0x40a00010;" // OSCR + "ldr r6, [r5];" + "add r6, r6, %0;" + "ldr r5, =0x40a00000;" // OS Timer Match Register 0 + "str r6, [r5];" + + "ldr r5, =0x40a00014;" // OSSR + "mov r7, #1;" + "str r7, [r5];" // clear status + + "1902:;" + + "ldr r7, [r5];" // read OSSR + "and r7, r7, #1;" + "cmp r7, #1;" + "bne 1902b;" + : + : "r"(timer_value) + : "r5","r6","r7" + ); +#endif +} + +typedef cyg_uint32 cyg_ISR(cyg_uint32 vector, CYG_ADDRWORD data); + +extern void cyg_interrupt_post_dsr(CYG_ADDRWORD intr_obj); + +static inline cyg_uint32 hal_call_isr(cyg_uint32 vector) +{ + return 0; +} + +// Interrupt handling + +// This routine is called to respond to a hardware interrupt (IRQ). It +// should interrogate the hardware and return the IRQ vector number. +int hal_IRQ_handler(void) +{ + cyg_uint32 sources, index; + +#ifdef HAL_EXTENDED_IRQ_HANDLER + // Use platform specific IRQ handler, if defined + // Note: this macro should do a 'return' with the appropriate + // interrupt number if such an extended interrupt exists. The + // assumption is that the line after the macro starts 'normal' processing. + HAL_EXTENDED_IRQ_HANDLER(index); +#endif + + HAL_READ_UINT32(ICIP, sources); + if (sources & 0xff0000) { + index = 16; + } else if (sources & 0xff00) { + index = 8; + } else if (sources & 0xff) { + index = 0; + } else { + index = 24; + } + do { + if ((1 << index) & sources) { + if (index == CYGNUM_HAL_INTERRUPT_GPIO) { + // Special case of GPIO cascade. Search for lowest set bit + HAL_READ_UINT32(GEDRx, sources); + index = 0; + do { + if (sources & (1 << index)) { + return index + 32; + } + index++; + } while (index < 32); + HAL_READ_UINT32(GEDRy, sources); + index = 0; + do { + if (sources & (1 << index)) { + return index + 64; + } + index++; + } while (index < 32); + HAL_READ_UINT32(GEDRz, sources); + index = 0; + do { + if (sources & (1 << index)) { + return index + 96; + } + index++; + } while (index < 22); // GPIOs 64..85 + + } + return index; + } + index++; + } while (index & 7); + + return CYGNUM_HAL_INTERRUPT_NONE; // This shouldn't happen! +} + +void hal_interrupt_mask(int vector) +{ + cyg_uint32 icmr; + +#ifdef HAL_EXTENDED_INTERRUPT_MASK + // Use platform specific handling, if defined + // Note: this macro should do a 'return' for "extended" values of 'vector' + // Normal vectors are handled by code subsequent to the macro call. + HAL_EXTENDED_INTERRUPT_MASK(vector); +#endif + if (vector >= CYGNUM_HAL_INTERRUPT_GPIO2) { + vector = CYGNUM_HAL_INTERRUPT_GPIO; + } + HAL_READ_UINT32(ICMR, icmr); + HAL_WRITE_UINT32(ICMR, icmr & ~(1 << vector)); +} + +void hal_interrupt_unmask(int vector) +{ + cyg_uint32 icmr; + +#ifdef HAL_EXTENDED_INTERRUPT_UNMASK + // Use platform specific handling, if defined + // Note: this macro should do a 'return' for "extended" values of 'vector' + // Normal vectors are handled by code subsequent to the macro call. + HAL_EXTENDED_INTERRUPT_UNMASK(vector); +#endif + + if (vector >= CYGNUM_HAL_INTERRUPT_GPIO2) { + vector = CYGNUM_HAL_INTERRUPT_GPIO; + } + HAL_READ_UINT32(ICMR, icmr); + HAL_WRITE_UINT32(ICMR, icmr | (1 << vector)); +} + +void hal_interrupt_acknowledge(int vector) +{ + cyg_uint32 rtsr; + +#if DEBUG_INT + diag_printf("void hal_interrupt_acknowledge(int vector) entered ...\n"); + diag_printf("vector = %d \n", vector); +#endif + switch (vector) { + case CYGNUM_HAL_INTERRUPT_ALARM: + HAL_READ_UINT32(RTSR, rtsr); + HAL_WRITE_UINT32(RTSR, (rtsr & ~0x2553) | 0x1); + break; + case CYGNUM_HAL_INTERRUPT_HZ: + HAL_READ_UINT32(RTSR, rtsr); + HAL_WRITE_UINT32(RTSR, (rtsr & ~0x2553) | 0x2); + break; + case CYGNUM_HAL_INTERRUPT_TIMER3: + HAL_WRITE_UINT32(OSSR, 0x08); + break; + case CYGNUM_HAL_INTERRUPT_TIMER2: + HAL_WRITE_UINT32(OSSR, 0x04); + break; + case CYGNUM_HAL_INTERRUPT_TIMER1: + HAL_WRITE_UINT32(OSSR, 0x02); + break; + case CYGNUM_HAL_INTERRUPT_TIMER0: + HAL_WRITE_UINT32(OSSR, 0x01); + break; + case CYGNUM_HAL_INTERRUPT_DMA: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_SSP: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_MMC: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_FFUART: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_BTUART: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_STUART: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_ICP: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_I2S: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_LCD: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_AC97: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_I2C: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_PMU: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_USB: + // user specific code here + break; + // GPIO interrupts are driven by an edge detection mechanism. This + // is latching so these interrupts must be acknowledged directly. + // All other interrupts simply go away when the interrupting unit + // has been serviced by the ISR. + case CYGNUM_HAL_INTERRUPT_GPIO1: + HAL_WRITE_UINT32(GEDRx, 0x2); + break; + case CYGNUM_HAL_INTERRUPT_GPIO0: + HAL_WRITE_UINT32(GEDRx, 0x1); + break; + default: // the rest is second level GPIO + if (vector >= CYGNUM_HAL_INTERRUPT_GPIO64) { + HAL_WRITE_UINT32(GEDRz, (1 << (vector - 96))); + } else if (vector >= CYGNUM_HAL_INTERRUPT_GPIO32) { + HAL_WRITE_UINT32(GEDRy, (1 << (vector - 64))); + } else if (vector >= CYGNUM_HAL_INTERRUPT_GPIO2) { + HAL_WRITE_UINT32(GEDRx, (1 << (vector - 32))); + } + break; + } + return; +} + +void hal_interrupt_configure(int vector, int level, int up) +{ +#if DEBUG_INT + diag_printf("void hal_interrupt_configure(int vector, int level, int up) entered ...\n"); + diag_printf("vector = %d level = %d up = %d \n", vector, level, up); +#endif +#if 0 +#ifdef HAL_EXTENDED_INTERRUPT_CONFIGURE + // Use platform specific handling, if defined + // Note: this macro should do a 'return' for "extended" values of 'vector' + // Normal vectors are handled by code subsequent to the macro call. + HAL_EXTENDED_INTERRUPT_CONFIGURE(vector, level, up); +#endif + if (vector >= CYGNUM_HAL_INTERRUPT_GPIO64) { + if (level) { + if (up) { + // Enable both edges + *(unsigned long*)GRERz |= (1 << (vector - 96)); + *(unsigned long*)GFERz |= (1 << (vector - 96)); + } else { + // Disable both edges + *(unsigned long*)GRERz &= ~(1 << (vector - 96)); + *(unsigned long*)GFERz &= ~(1 << (vector - 96)); + } + } else { + // Only interested in one edge + if (up) { + // Set rising edge detect and clear falling edge detect. + *(unsigned long*)GRERz |= (1 << (vector - 96)); + *(unsigned long*)GFERz &= ~(1 << (vector - 96)); + } else { + // Set falling edge detect and clear rising edge detect. + *(unsigned long*)GFERz |= (1 << (vector - 96)); + *(unsigned long*)GRERz &= ~(1 << (vector - 96)); + } + } + } else if (vector >= CYGNUM_HAL_INTERRUPT_GPIO32) { + if (level) { + if (up) { + // Enable both edges + *(unsigned long*)GRERy |= (1 << (vector - 64)); + *(unsigned long*)GFERy |= (1 << (vector - 64)); + } else { + // Disable both edges + *(unsigned long*)GRERy &= ~(1 << (vector - 64)); + *(unsigned long*)GFERy &= ~(1 << (vector - 64)); + } + } else { + // Only interested in one edge + if (up) { + // Set rising edge detect and clear falling edge detect. + *(unsigned long*)GRERy |= (1 << (vector - 64)); + *(unsigned long*)GFERy &= ~(1 << (vector - 64)); + } else { + // Set falling edge detect and clear rising edge detect. + *(unsigned long*)GFERy |= (1 << (vector - 64)); + *(unsigned long*)GRERy &= ~(1 << (vector - 64)); + } + } + } else if (vector >= CYGNUM_HAL_INTERRUPT_GPIO2) { + if (level) { + if (up) { + // Enable both edges + *(unsigned long*)GRERx |= (1 << (vector - 32)); + *(unsigned long*)GFERx |= (1 << (vector - 32)); + } else { + // Disable both edges + *(unsigned long*)GRERx &= ~(1 << (vector - 32)); + *(unsigned long*)GFERx &= ~(1 << (vector - 32)); + } + } else { + // Only interested in one edge + if (up) { + // Set rising edge detect and clear falling edge detect. + *(unsigned long*)GRERx |= (1 << (vector - 32)); + *(unsigned long*)GFERx &= ~(1 << (vector - 32)); + } else { + // Set falling edge detect and clear rising edge detect. + *(unsigned long*)GFERx |= (1 << (vector - 32)); + *(unsigned long*)GRERx &= ~(1 << (vector - 32)); + } + } + } else if (vector == CYGNUM_HAL_INTERRUPT_GPIO0 || vector == CYGNUM_HAL_INTERRUPT_GPIO1) { + if (level) { + if (up) { + // Enable both edges + *(unsigned long*)GRERx |= (1 << (vector - 8)); + *(unsigned long*)GFERx |= (1 << (vector - 8)); + } else { + // Disable both edges + *(unsigned long*)GRERx &= ~(1 << (vector - 8)); + *(unsigned long*)GFERx &= ~(1 << (vector - 8)); + } + } else { + // Only interested in one edge + if (up) { + // Set rising edge detect and clear falling edge detect. + *(unsigned long*)GRERx |= (1 << (vector - 8)); + *(unsigned long*)GFERx &= ~(1 << (vector - 8)); + } else { + // Set falling edge detect and clear rising edge detect. + *(unsigned long*)GFERx |= (1 << (vector - 8)); + *(unsigned long*)GRERx &= ~(1 << (vector - 8)); + } + } + } +#endif +} + +void hal_interrupt_set_level(int vector, int level) +{ +} + +/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ +/* Command and code to reset the hardware by issuing the reset vector */ +/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ +void cyg_hal_xscale_soft_reset(CYG_ADDRESS entry) +{ +#if 0 + unsigned long oldints; + + // clear reset status + HAL_WRITE_UINT32(RCSR, 0x0f); + + HAL_DISABLE_INTERRUPTS(oldints); + HAL_DCACHE_SYNC(); + HAL_ICACHE_DISABLE(); + HAL_DCACHE_DISABLE(); + HAL_DCACHE_SYNC(); + HAL_ICACHE_INVALIDATE_ALL(); + HAL_DCACHE_INVALIDATE_ALL(); + + asm volatile( + "mcr p15,0,r0,c7,c10,4;" //drain write buffer + "mcr p15,0,r0,c7,c7,0;" //invalidate I&D cache BTB + "mrc p15,0,r0,c1,c0,0;" //read ARM control register + "bic r0,r0,#0xd;" //disable data cache and mmu + "bic r0,r0,#0x1000;" //disable instruction cache + "mcr p15,0,r0,c1,c0,0;" + "mov pc,#0x0;" + : + : + : "r0" + ); +#else + unsigned long value; + + diag_printf("\nDoing software reset now"); + + // clear reset status + HAL_WRITE_UINT32(RCSR, 0x0f); + + HAL_READ_UINT32(OSCR, value); + value += 325000; + HAL_WRITE_UINT32(OSMR3, value); + HAL_WRITE_UINT32(OWER, 1); + while (1) { // wait here for watchdog reset + diag_printf("."); + HAL_DELAY_US(10 * 1000); + } +#endif +} + +void do_triton_reset(int argc, char *argv[]) +{ + HAL_PLATFORM_RESET(); +} + +RedBoot_cmd("reset", + "Reset the board/hardware", + "", + do_triton_reset + ); + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +/*------------------------------------------------------------------------*/ +// HW Debug support + +static inline void set_ibcr0(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c8,0" : : "r"(x)); +} + +static inline unsigned get_ibcr0(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c8,0" : "=r"(x) :); + return x; +} + +static inline void set_ibcr1(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c9,0" : : "r"(x)); +} + +static inline unsigned get_ibcr1(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c9,0" : "=r"(x) :); + return x; +} + +static inline void set_dbr0(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c0,0" : : "r"(x)); +} + +static inline unsigned get_dbr0(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c0,0" : "=r"(x) :); + return x; +} + +static inline void set_dbr1(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c3,0" : : "r"(x)); +} + +static inline unsigned get_dbr1(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c3,0" : "=r"(x) :); + return x; +} + +static inline void set_dbcon(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c4,0" : : "r"(x)); +} + +static inline unsigned get_dbcon(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c4,0" : "=r"(x) :); + return x; +} + +static inline void set_dcsr(unsigned x) +{ + asm volatile ("mcr p14,0,%0,c10,c0,0" : : "r"(x)); +} + +static inline unsigned get_dcsr(void) +{ + unsigned x; + asm volatile ("mrc p14,0,%0,c10,c0,0" : "=r"(x) :); + return x; +} + +int cyg_hal_plf_hw_breakpoint(int setflag, void *vaddr, int len) +{ + unsigned int addr = (unsigned)vaddr; + + if (setflag) { + if (!(get_ibcr0() & 1)) + set_ibcr0(addr | 1); + else if (!(get_ibcr1() & 1)) + set_ibcr1(addr | 1); + else + return -1; + } else { + unsigned x = (addr | 1); + if (get_ibcr0() == x) + set_ibcr0(0); + else if (get_ibcr0() == x) + set_ibcr1(0); + else + return -1; + } + return 0; +} + +int cyg_hal_plf_hw_watchpoint(int setflag, void *vaddr, int len, int type) +{ + unsigned int mask, bit_nr, mode, addr = (unsigned)vaddr; + unsigned dbcon = get_dbcon(); + + mask = 0x80000000; + bit_nr = 31; + while (bit_nr) { + if (len & mask) + break; + bit_nr--; + mask >>= 1; + } + mask = ~(0xffffffff << bit_nr); + + if (setflag) { + /* set a watchpoint */ + if (type == 2) + mode = 1; // break on write + else if (type == 3) + mode = 3; // break on read + else if (type == 4) + mode = 2; // break on any access + else + return 1; + + if (!(dbcon & 3)) { + set_dbr0(addr); + set_dbr1(mask); + set_dbcon(dbcon | mode | 0x100); + } else + return 1; + } else { + /* clear a watchpoint */ + if (dbcon & 3) + set_dbcon(dbcon & ~3); + else + return 1; + } + return 0; +} + +// Return indication of whether or not we stopped because of a +// watchpoint or hardware breakpoint. If stopped by a watchpoint, +// also set '*data_addr_p' to the data address which triggered the +// watchpoint. +int cyg_hal_plf_is_stopped_by_hardware(void **data_addr_p) +{ + unsigned fsr, dcsr, dbcon, kind = 0; + + // Check for debug event + asm volatile ("mrc p15,0,%0,c5,c0,0" : "=r"(fsr) :); + if ((fsr & 0x200) == 0) + return HAL_STUB_HW_STOP_NONE; + + // There was a debug event. Check the MOE for details + dcsr = get_dcsr(); + switch ((dcsr >> 2) & 7) { + case 1: // HW breakpoint + return HAL_STUB_HW_STOP_BREAK; + case 2: // Watchpoint + dbcon = get_dbcon(); + if (dbcon & 0x100) { + // dbr1 is used as address mask + kind = dbcon & 3; + *data_addr_p = (void *)get_dbr0(); + } + if (kind == 1) + return HAL_STUB_HW_STOP_WATCH; + if (kind == 2) + return HAL_STUB_HW_STOP_AWATCH; + if (kind == 3) + return HAL_STUB_HW_STOP_RWATCH; + // should never get here + break; + } + return HAL_STUB_HW_STOP_NONE; +} +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#define SCL_LOW (unsigned char)0x00 +#define SCL_HIGH (unsigned char)0x01 +#define SDA_LOW (unsigned char)0x00 +#define SDA_HIGH (unsigned char)0x02 +#define I2C_WRITE (unsigned char)0x00 +#define I2C_READ (unsigned char)0x01 + +#define WRITE_REG32(__regadr, __val) ((__regadr) = (__val)) +#define READ_REG32(__regadr) (__regadr) + +#define PXA250_AFREG_BASE 0x40e00054 +#define PXA250_PINDIR_BASE 0x40e0000c +#define PXA250_PINSET_BASE 0x40e00018 +#define PXA250_PINCLEAR_BASE 0x40e00024 +#define PXA250_REDGE_BASE 0x40e00030 +#define PXA250_FEDGE_BASE 0x40e0003c +#define PXA250_DEDGE_BASE 0x40e00048 +#define PXA250_PINLEVEL_BASE 0x40e00000 + +void pin_i2c_setup(pin_i2c_t *pin_data) +{ + // configure pins as GPIO function + set_alternate_function((unsigned char)pin_data->scl_no, 0); + set_alternate_function((unsigned char)pin_data->sda_no, 0); + + // set both pins to input + set_pin_dir((unsigned char)pin_data->scl_no, 0); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 0); /* 0=input 1=output */ + + // clear all output registers + clear_pin((unsigned char)pin_data->scl_no); + clear_pin((unsigned char)pin_data->sda_no); +} + +void bus_out(pin_i2c_t *pin_data, unsigned char pdata) +{ + switch (pdata & 0x03) { + case 0: + set_pin_dir((unsigned char)pin_data->scl_no, 1); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 1); /* 0=input 1=output */ + break; + case 1: + set_pin_dir((unsigned char)pin_data->scl_no, 0); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 1); /* 0=input 1=output */ + break; + case 2: + set_pin_dir((unsigned char)pin_data->scl_no, 1); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 0); /* 0=input 1=output */ + break; + case 3: + set_pin_dir((unsigned char)pin_data->scl_no, 0); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 0); /* 0=input 1=output */ + break; + } + return; +} + +int bus_in(pin_i2c_t *pin_data) +{ + int result; + + result = get_pin_status((unsigned char)pin_data->sda_no); + if (result < 0) { + //dprintf("get_pin_status returned error \n"); + return 1; + } else { + return result; + } +} + +void i2c_start(pin_i2c_t *pin_data) +{ + //dprintf("pin status is %d\n", get_pin_status((unsigned char)pin_data->sda_no)); + + bus_out(pin_data, SCL_HIGH | SDA_LOW); + HAL_DELAY_US(10); + + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); + + bus_out(pin_data, SCL_HIGH | SDA_LOW); + HAL_DELAY_US(10); + + bus_out(pin_data, SCL_LOW | SDA_LOW); + HAL_DELAY_US(10); +} + +void i2c_stop(pin_i2c_t *pin_data) +{ + bus_out(pin_data, SCL_LOW | SDA_LOW); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_LOW); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); +} + +int i2c_read_ack(pin_i2c_t *pin_data) +{ + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); + if (bus_in(pin_data)) { + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + return -2; + } else { + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + return 0; + } +} + +void i2c_write_ack(pin_i2c_t *pin_data) +{ + bus_out(pin_data, SCL_LOW | SDA_LOW); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_LOW); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_LOW | SDA_LOW); + HAL_DELAY_US(10); +} + +void i2c_write_nack(pin_i2c_t *pin_data) +{ + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); +} + +void i2c_slave_addr(pin_i2c_t *pin_data, unsigned char dev, unsigned char mode) +{ + i2c_write(pin_data, dev | mode); +} + +void i2c_read(pin_i2c_t *pin_data, unsigned char *res) +{ + unsigned char in = 0; + unsigned char bit = 0x80; + + while (bit) { + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); + if (bus_in(pin_data)) + in |= bit; + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + bit >>= 1; + } + *res = in; +} + +void i2c_write(pin_i2c_t *pin_data, unsigned char val) +{ + unsigned char out; + unsigned char bit = 0x80; + + while (bit) { + out = (bit & val) ? SDA_HIGH : SDA_LOW; + bus_out(pin_data, SCL_LOW | out); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | out); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_LOW | out); + HAL_DELAY_US(10); + bit >>= 1; + } +} + +/* ================================================================ */ +/* + function: se_read + + paramters: unsigned char addr start address in ser. EEPROM + unsigned int numb number of bytes to be read + char *dat pointer to data buffer + + ret. val.: int = 0, every thing ok + else, device not av., or not ready + +*/ +int se_read(pin_i2c_t *pin_data, unsigned char addr, unsigned char dev_address, + unsigned int numb, char *dat) +{ + unsigned int i; + + i2c_start(pin_data); + i2c_slave_addr(pin_data, dev_address, I2C_WRITE); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, addr); /* read from start address */ + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + + i2c_start(pin_data); + i2c_slave_addr(pin_data, dev_address, I2C_READ); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + + for (i = 0; i < numb - 1; i++) { + i2c_read(pin_data, dat++); + i2c_write_ack(pin_data); + } + i2c_read(pin_data, dat); + i2c_stop(pin_data); + + return 0; +} + +/* ================================================================ */ +/* + function: se_write + + paramters: unsigned char addr start address in ser. EEPROM + unsigned char val value to write + + ret. val.: int = 0, every thing ok + else, device not av., or not ready + +*/ +int se_write(pin_i2c_t *pin_data, unsigned char addr,unsigned char dev_address, unsigned char val) +{ + i2c_start(pin_data); + i2c_slave_addr(pin_data, dev_address, I2C_WRITE); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, addr); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, val); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_stop(pin_data); + HAL_DELAY_US(10000); + return 0; +} + +/* ================================================================ */ +/* + function: ltc1663_pwrite + + paramters: unsigned dev_address device address of chip + unsigned char command command byte + unsigned short val value to write + + ret. val.: int = 0, every thing ok + else, device not av., or not ready + +*/ +int ltc1663_write(pin_i2c_t *pin_data, unsigned char dev_address, unsigned char command, + unsigned short val) +{ + i2c_start(pin_data); + i2c_slave_addr(pin_data, dev_address, I2C_WRITE); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, command); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, (unsigned char)val&0xff); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, (unsigned char)((val&0xff00)>>8)); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_stop(pin_data); + HAL_DELAY_US(100); + return 0; +} + +// ----------------------------------------------------------------------- +int set_alternate_function(unsigned char gpio_number, unsigned char function_code) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + if (function_code > 3) { + //dprintf("GPIO alternate function code %d is out of range\n", function_code); + return 0; + } + + register_offset = gpio_number / 16; + + bit_offset = gpio_number % 16; + mask = 3 << (bit_offset*2); + + reg_adr = PXA250_AFREG_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (function_code << (bit_offset*2)); + + WRITE_REG32(reg_adr, new_value); + return 1; +} + +int set_pin_dir(unsigned char gpio_number, unsigned char dir_code) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + if (dir_code > 1) { + //dprintf("GPIO alternate function code %d is out of range\n", dir_code); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_PINDIR_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (dir_code << (bit_offset)); + + WRITE_REG32(reg_adr, new_value); + return 1; +} + +int set_rising_edge(unsigned char gpio_number, unsigned char edge_code) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + if (edge_code > 1) { + //dprintf("rising edge value sould be 0 or 1, not %d\n", edge_code); + return 0; + } + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_REDGE_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (edge_code << (bit_offset)); + WRITE_REG32(reg_adr, new_value); + return 1; +} + +int set_falling_edge(unsigned char gpio_number, unsigned char edge_code) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + if (edge_code > 1) { + //dprintf("falling edge value sould be 0 or 1, not %d\n", edge_code); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_FEDGE_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (edge_code << (bit_offset)); + WRITE_REG32(reg_adr, new_value); + return 1; +} + +int set_pin(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_PINSET_BASE + register_offset * 4; + + org_value = 0; + + new_value = (org_value & (~mask)) | (1 << (bit_offset)); + + WRITE_REG32(reg_adr, new_value); + return 1; + +} + +int clear_pin(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_PINCLEAR_BASE + register_offset * 4; + + org_value = 0; + + new_value = (org_value & (~mask)) | (1 << (bit_offset)); + + WRITE_REG32(reg_adr, new_value); + return 1; + +} + +int get_pin_status(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long return_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return -1; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_PINLEVEL_BASE + register_offset * 4; + + return_value = (READ_REG32(reg_adr) & mask) >> bit_offset; + + return return_value; +} + +int clear_edge(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_DEDGE_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (1 << (bit_offset)); + WRITE_REG32(reg_adr, new_value); + + return 1; +} + +int detect_edge(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_DEDGE_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + return !!(org_value & mask); +} + +void init_i2c(void) +{ + HAL_WRITE_UINT32(ICR, ICR_UR); // reset i2c_unit; + HAL_WRITE_UINT32(ICR, ICR_IUE | ICR_SCLE | ICR_GCD); +} + +//FIXME: insert timeout into while loop +cyg_int32 write_i2c_pcf8574(cyg_uint8 device_adr, cyg_uint8 dat_value) +{ + cyg_uint32 value; + unsigned int retries; + +// write device address now + HAL_WRITE_UINT32(IDBR, (device_adr & 0xfe)); + HAL_READ_UINT32(ICR, value); + value = value & ~(ICR_STOP | ICR_ALDIE); + HAL_WRITE_UINT32(ICR, value | ICR_START | ICR_TB); + + HAL_READ_UINT32(ISR, value); + value &= ISR_ITE; + while (!value) { // wait for Transmit Empty + HAL_READ_UINT32(ISR, value); + value &= ISR_ITE; + } + HAL_READ_UINT32(ISR, value); + if (value & ISR_BED) { + + //diag_printf("I2C: bus error, status after write device address is: %06X\n", value); + HAL_READ_UINT32(ICR, value); + HAL_WRITE_UINT32(ICR, value | ICR_MA); // send master abort + HAL_DELAY_US(10000); + HAL_WRITE_UINT32(ICR, value & ~ICR_MA); + return -1; + } + HAL_WRITE_UINT32(ISR, ISR_ITE); // clear ITE status + +// write data now + HAL_WRITE_UINT32(IDBR, (dat_value & 0xff)); + HAL_READ_UINT32(ICR, value); + value &= ~ICR_START; + HAL_WRITE_UINT32(ICR, value | ICR_TB | ICR_STOP); + + HAL_READ_UINT32(ISR, value); + retries = 1000000; + while (!(value & ISR_ITE)) { // wait for Transmit Empty + HAL_READ_UINT32(ISR, value); + } + if (!(value & ISR_ITE)) { + diag_printf("I2C: timeout waiting for ITE\n"); + return -1; + } + if (value & ISR_BED) { + //diag_printf("I2C: bus error, status after write device address is: %06X\n", value); + HAL_READ_UINT32(ICR, value); + HAL_WRITE_UINT32(ICR, value | ICR_MA); // send master abort + HAL_DELAY_US(10000); + HAL_WRITE_UINT32(ICR, value & ~ICR_MA); + return -1; + } + HAL_WRITE_UINT32(ISR, ISR_ITE); // clear ITE status + + HAL_READ_UINT32(ICR, value); + value = value & ~(ICR_STOP | ICR_START | ICR_TB); + HAL_WRITE_UINT32(ICR, value); + + return 0; +} + +//FIXME: insert timeout into while loop +cyg_int32 read_i2c_pcf8574(cyg_uint8 device_adr) +{ + cyg_uint32 value; + unsigned int retries; + + // write device address now + HAL_WRITE_UINT32(IDBR, (device_adr | 0x01)); + + HAL_READ_UINT32(ICR, value); + value &= ~ICR_STOP; + HAL_WRITE_UINT32(ICR, value | ICR_START | ICR_TB); + + HAL_READ_UINT32(ISR, value); + retries = 1000000; + while (!(value & ISR_ITE)) { // wait for Transmit Empty + HAL_READ_UINT32(ISR, value); + } + if (!(value & ISR_ITE)) { + diag_printf("I2C: timeout waiting for ITE\n"); + return -1; + } + if (value & ISR_BED) { + //diag_printf("I2C: bus error, status after write device address is: %06X\n", value); + HAL_READ_UINT32(ICR, value); + HAL_WRITE_UINT32(ICR, value | ICR_MA); // send master abort + HAL_DELAY_US(10000); + HAL_WRITE_UINT32(ICR, value & ~ICR_MA); + return -1; + } + HAL_WRITE_UINT32(ISR, ISR_ITE); // clear ITE status + + // read data now + HAL_READ_UINT32(ICR, value); + value &= ~ICR_START; + HAL_WRITE_UINT32(ICR, value |ICR_TB | ICR_STOP | ICR_ACKNAK); + + HAL_READ_UINT32(ISR, value); + value &= ISR_IRF; + while (!value) { // wait for Receive Buffer full + HAL_READ_UINT32(ISR, value); + value &= ISR_IRF; + } + + HAL_WRITE_UINT32(ISR, ISR_IRF); // clear ITE status + + HAL_READ_UINT32(ICR, value); + value = value & ~(ICR_STOP | ICR_START | ICR_TB | ICR_ACKNAK); + HAL_WRITE_UINT32(ICR, value); + + HAL_READ_UINT32(IDBR, value); + + return value & 0xff; +} +/*------------------------------------------------------------------------*/ +// EOF triton_misc.c diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3.cdl new file mode 100755 index 00000000..fda2760f --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3.cdl @@ -0,0 +1,453 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3 { + display "KARO TRITON270 SK3" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " +### puts $::cdl_system_header "#define TEST_PLATFORM" + puts $::cdl_system_header "#define TRITON270_FLASH16_16" + puts $::cdl_system_header "#define TRITON270_DRAM32_64" + puts $::cdl_system_header "#define DRAM_TEST64" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c + compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/tr270sk3.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_32mb.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_32mb.cdl new file mode 100755 index 00000000..ef4ad5e4 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_32mb.cdl @@ -0,0 +1,453 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32MB { + display "KARO TRITON270 SK3 32 MB" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " +### puts $::cdl_system_header "#define TEST_PLATFORM" + puts $::cdl_system_header "#define TRITON270_FLASH16_16" + puts $::cdl_system_header "#define TRITON270_DRAM16_32" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_32mb" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_32mb" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/tr270_32.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16.cdl new file mode 100755 index 00000000..23fce432 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16.cdl @@ -0,0 +1,453 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F { + display "KARO TRITON270 SK3 64 MB DRAM / 16 MB Flash" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3 with 16MB Flash and 64MB DRAM." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " +### puts $::cdl_system_header "#define TEST_PLATFORM" + puts $::cdl_system_header "#define TRITON270_FLASH16_16_P30" + puts $::cdl_system_header "#define TRITON270_DRAM32_64" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 16 MByte Flash \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_16f" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/t270_f16.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16S128.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16S128.cdl new file mode 100755 index 00000000..cdd906d9 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16S128.cdl @@ -0,0 +1,452 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F128S { + display "KARO TRITON270 SK3 128 MB SDRAM / 16 MB P30 Flash" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3 with 16MB Flash and 128MB DRAM." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON270_FLASH16_16_P30" + puts $::cdl_system_header "#define TRITON270_DRAM32_128" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 16 MByte P30 Flash 128 MByte SDRAM\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f128s" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_16f128s" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/t27_5040.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16S32.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16S32.cdl new file mode 100755 index 00000000..921d485c --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16S32.cdl @@ -0,0 +1,452 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F32S { + display "KARO TRITON270 SK3 32 MB SDRAM / 16 MB P30 Flash" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3 with 16MB Flash and 64MB DRAM." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON270_FLASH16_16_P30" + puts $::cdl_system_header "#define TRITON270_DRAM16_32" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 16 MByte P30 Flash 32 MByte SDRAM\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f32s" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_16f32s" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/t27_3032.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16S64.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16S64.cdl new file mode 100755 index 00000000..7c1ee593 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F16S64.cdl @@ -0,0 +1,452 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_16F64S { + display "KARO TRITON270 SK3 64 MB SDRAM / 16 MB P30 Flash" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3 with 16MB Flash and 64MB DRAM." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON270_FLASH16_16_P30" + puts $::cdl_system_header "#define TRITON270_DRAM32_64" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 16 MByte P30 Flash 64 MByte SDRAM\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_16f64s" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_16f64s" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/t27_3052.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F32.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F32.cdl new file mode 100755 index 00000000..b99240ed --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F32.cdl @@ -0,0 +1,453 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F { + display "KARO TRITON270 SK3 64 MB DRAM / 32 MB Flash" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3 with 32MB Flash and 64MB DRAM." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " +### puts $::cdl_system_header "#define TEST_PLATFORM" + puts $::cdl_system_header "#define TRITON270_FLASH16_32" + puts $::cdl_system_header "#define TRITON270_DRAM32_64" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 32 MByte Flash \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_32f" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_32f" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/t270_f32.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F32S32.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F32S32.cdl new file mode 100755 index 00000000..7d2e7e66 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F32S32.cdl @@ -0,0 +1,447 @@ +# ==================================================================== +# +# triton_pxa270_sk3_f32s32.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_32F32S { + display "KARO TRITON270 SK3 32 MB DRAM (16 bit) / 32 MB P30 Flash " + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3 with 32MB Flash and 64MB DRAM." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " +### puts $::cdl_system_header "#define TEST_PLATFORM" + puts $::cdl_system_header "#define TRITON270_FLASH16_32" + puts $::cdl_system_header "#define TRITON270_DRAM16_32" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 32 MByte Flash P30 32 MByte SDRAM\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_32f32s" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_32f32s" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/t27_3030.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F64.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F64.cdl new file mode 100755 index 00000000..e76ffb01 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F64.cdl @@ -0,0 +1,453 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F { + display "KARO TRITON270 SK3 64 MB DRAM / 64 MB Flash" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3 with 64MB Flash and 64MB DRAM." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " +### puts $::cdl_system_header "#define TEST_PLATFORM" + puts $::cdl_system_header "#define TRITON270_FLASH16_64" + puts $::cdl_system_header "#define TRITON270_DRAM32_64" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 64MByte Flash \"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_64f" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_64f" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/t270_f64.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F64S128.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F64S128.cdl new file mode 100755 index 00000000..8e4c0c87 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_F64S128.cdl @@ -0,0 +1,452 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_64F128S { + display "KARO TRITON270 SK3 128 MB SDRAM / 64 MB P30 Flash" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3 with 64MB Flash and 128MB DRAM." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_system_header "#define TRITON270_FLASH16_64" + puts $::cdl_system_header "#define TRITON270_DRAM32_128" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 64 MByte P30 Flash 128 MByte SDRAM\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_64f128s" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_64f128s" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/t27_5041.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_S128F32.cdl b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_S128F32.cdl new file mode 100755 index 00000000..32c62f37 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/cdl/triton_pxa270_sk3_S128F32.cdl @@ -0,0 +1,453 @@ +# ==================================================================== +# +# triton_pxa270_sk3.cdl +# +# KARO TRITON PXA270 HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): usteinkohl (karo electronics) +# Original data: usteinkohl +# Contributors: +# Date: 20th August 2004 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_XSCALE_TRITON270_SK3_128S32F { + display "KARO TRITON270 SK3 128 MB DRAM / 32 MB Flash" + parent CYGPKG_HAL_ARM + define_header hal_arm_xscale_triton270.h + include_dir cyg/hal + hardware + description " + The KARO TRITON270 HAL package provides the support needed to run + eCos on a TRITON270 SK3 with 32MB Flash and 128MB DRAM." + + compile hal_diag.c triton270_misc.c hal_initio.S + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_ARM_ARCH_XSCALE + implements CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT + implements CYGINT_HAL_PLF_IF_IDE + + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " +### puts $::cdl_system_header "#define TEST_PLATFORM" + puts $::cdl_system_header "#define TRITON270_FLASH16_32" + puts $::cdl_system_header "#define TRITON270_DRAM32_128" + puts $::cdl_system_header "#define DRAM_TEST32" + puts $::cdl_system_header "#define TRITON270_CS2_8900" + puts $::cdl_system_header "#define TRITON270_USE_STUART" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"TRITON PXA270 32 MByte Flash 128 MByte SDRAM\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"Ka-RO electronics GmbH\"" + puts $::cdl_header "#define HAL_ARCH_PROGRAM_NEW_STACK triton270_program_new_stack" + puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 190" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the KARO TRITON270 eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Selection of 'stubs' is for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGSEM_HAL_ARM__XSCALE_TRITON270_ARMBOOT { + display "Coexist with ARM bootloader" + flavor bool + default_value 0 + description " + Enable this option if the ARM bootloader is programmed into + the FLASH boot sector on the board." + } + + + + + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 3 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 2 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the GDB port." + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated 330000 ;# External timer is 33MHz + } + } + + + + + 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 { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 } + define_proc { + puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xa0001f00" + } + } + + + + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "xscale-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -ffunction-sections -fdata-sections -fno-builtin -fno-exceptions -finit-priority -mapcs-frame" } +# default_value { "-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -fno-rtti -fno-exceptions -fvtable-gc -finit-priority -mapcs-frame" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + /bin/gdb_module.bin : /bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + + +# cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { +# display "Number of breakpoints supported by the HAL." +# flavor data +# default_value 32 +# description " +# This option determines the number of breakpoints supported by the HAL." +# } + + cdl_component CYGPKG_HAL_ARM_XSCALE_TRITON270_OPTIONS { + display "XScale TRITON270 build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are used + in addition to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the XScale TRITON270 HAL. These flags are + removed from the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_XSCALE_TRITON270_TESTS { + display "XScale TRITON270 tests" + flavor data + no_define + calculated { "" } + description " + This option specifies the set of tests for the XScale TRITON270 HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_xscale_triton270_ram_128s32f" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "arm_xscale_triton270_roma" : \ + "arm_xscale_triton270_rom_128s32f" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "" : \ + CYGSEM_HAL_ARM_XSCALE_TRITON270_ARMBOOT ? "" : \ + "" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 1 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL 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." + + + compile -library=libextras.a redboot_cmds.c +# compile -library=libextras.a sdcard.c + + + + +# cdl_option CYGSEM_REDBOOT_LINUX_BOOT { +# display "Support booting Linux via RedBoot" +# flavor bool +# default_value 1 +# description " +# This option enables RedBoot to support booting of a Linux kernel." +# +# compile -library=libextras.a redboot_linux_exec.c +# } +# + + + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/Ts128f32.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ +#>>> Lothar_2002_08_05 + $(COMMAND_PREFIX)nm $< | awk 'NF == 3 {print}' | sort > $(<:.elf=.map) +#<<< Lothar_2002_08_05 + } + } + } + +} + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/hal_cache.h b/packages/hal/arm/xscale/triton270/v2_0/include/hal_cache.h new file mode 100755 index 00000000..485a052e --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/hal_cache.h @@ -0,0 +1,272 @@ +#ifndef CYGONCE_HAL_CACHE_H +#define CYGONCE_HAL_CACHE_H + +//============================================================================= +// +// hal_cache.h +// +// HAL cache control API +// +//============================================================================= +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): hmt +// Contributors:hmt +// Date: 1999-07-05 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +//#include + +//----------------------------------------------------------------------------- +// Cache dimensions + +#define HAL_DCACHE_SIZE 0x8000 // Size of data cache in bytes +#define HAL_DCACHE_LINE_SIZE 32 // Size of a data cache line +#define HAL_DCACHE_WAYS 32 // Associativity of the cache +#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) + +#define HAL_ICACHE_SIZE 0x8000 // Size of icache in bytes +#define HAL_ICACHE_LINE_SIZE 32 // Size of ins cache line +#define HAL_ICACHE_WAYS 32 // Associativity of the cache +#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) + +//----------------------------------------------------------------------------- +// Global control of data cache + +// Enable the data cache +#define HAL_DCACHE_ENABLE() \ +CYG_MACRO_START \ + asm volatile ( \ + "mrc p15,0,r1,c7,c10,4;" /* drain write buffer */ \ + "mrc p15,0,r1,c1,c0,0;" \ + "orr r1,r1,#0x0007;" /* enable DCache (also ensures the */ \ + /* MMU and alignment faults are */ \ + /* enabled) */ \ + "mcr p15,0,r1,c1,c0,0;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Disable the data cache (and invalidate it, required semanitcs) +#define HAL_DCACHE_DISABLE() \ +CYG_MACRO_START \ + asm volatile ( \ + "mrc p15,0,r1,c1,c0,0;" \ + "bic r1,r1,#4;" \ + "mcr p15,0,r1,c1,c0,0;" \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + "mcr p15,0,r1,c7,c6,0;" /* invalidate data cache */ \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Invalidate the entire cache (and both TLBs, just in case) +#define HAL_DCACHE_INVALIDATE_ALL() \ +CYG_MACRO_START \ + /* this macro can discard dirty cache lines. */ \ + asm volatile ( \ + "mcr p15,0,r1,c7,c6,0;" /* invalidate data cache */ \ + "mcr p15,0,r1,c8,c7,0;" /* flush I+D TLBs */ \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() \ +CYG_MACRO_START \ + /* The best way to evict a dirty line is by using the */ \ + /* line allocate operation on non-existent memory. */ \ + asm volatile ( \ + "mov r0, #0xa4000000;" /* cache flush region */ \ + "add r1, r0, #0x8000;" /* 32KB cache */ \ + "667: " \ + "mcr p15,0,r0,c7,c2,5;" /* allocate a line */ \ + "add r0, r0, #32;" /* 32 bytes/line */ \ + "teq r1, r0;" \ + "bne 667b;" \ + "mcr p15,0,r0,c7,c6,0;" /* invalidate data cache */ \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + "mcr p15,0,r0,c7,c10,4;" /* and drain the write buffer */ \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + "nop" \ + : \ + : \ + : "r0","r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Query the state of the data cache +#define HAL_DCACHE_IS_ENABLED(_state_) \ +CYG_MACRO_START \ + register int reg; \ + asm volatile ("mrc p15,0,%0,c1,c0,0" \ + : "=r"(reg) \ + : \ + /*:*/ \ + ); \ + (_state_) = (0 != (4 & reg)); /* Bit 2 is DCache enable */ \ +CYG_MACRO_END + +// Set the data cache refill burst size +//#define HAL_DCACHE_BURST_SIZE(_size_) + +// Set the data cache write mode +//#define HAL_DCACHE_WRITE_MODE( _mode_ ) + +#define HAL_DCACHE_WRITETHRU_MODE 0 +#define HAL_DCACHE_WRITEBACK_MODE 1 + +// Get the current writeback mode - or only writeback mode if fixed +#define HAL_DCACHE_QUERY_WRITE_MODE( _mode_ ) CYG_MACRO_START \ + _mode_ = HAL_DCACHE_WRITEBACK_MODE; \ +CYG_MACRO_END + + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() \ +CYG_MACRO_START \ + asm volatile ( \ + "mrc p15,0,r1,c1,c0,0;" \ + "orr r1,r1,#0x1000;" /* enable ICache */ \ + "mcr p15,0,r1,c1,c0,0;" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Disable the instruction cache (and invalidate it, required semanitcs) +#define HAL_ICACHE_DISABLE() \ +CYG_MACRO_START \ + asm volatile ( \ + "mrc p15,0,r1,c1,c0,0;" \ + "bic r1,r1,#0x1000;" /* disable Icache */ \ + "mcr p15,0,r1,c1,c0,0;" \ + "mcr p15,0,r1,c7,c5,0;" /* invalidate instruction cache */ \ + "nop;" /* next few instructions may be via cache */ \ + "nop;" \ + "nop;" \ + "nop;" \ + "nop;" \ + "nop" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() \ +CYG_MACRO_START \ + asm volatile ( \ + "mcr p15,0,r1,c7,c5,0;" /* clear instruction cache */ \ + "mcr p15,0,r1,c8,c5,0;" /* flush I TLB only */ \ + /* cpuwait */ \ + "mrc p15,0,r1,c2,c0,0;" /* arbitrary read */ \ + "mov r1,r1;" \ + "sub pc,pc,#4;" \ + "nop;" /* next few instructions may be via cache */ \ + "nop;" \ + "nop;" \ + "nop;" \ + "nop;" \ + "nop" \ + : \ + : \ + : "r1" /* Clobber list */ \ + ); \ +CYG_MACRO_END + + +// Synchronize the contents of the cache with memory. +// (which includes flushing out pending writes) +#define HAL_ICACHE_SYNC() \ +CYG_MACRO_START \ + HAL_DCACHE_SYNC(); /* ensure data gets to RAM */ \ + HAL_ICACHE_INVALIDATE_ALL(); /* forget all we know */ \ +CYG_MACRO_END + +// Query the state of the instruction cache +#define HAL_ICACHE_IS_ENABLED(_state_) \ +CYG_MACRO_START \ + /* SA-110 manual states clearly that the control reg is readable */ \ + register cyg_uint32 reg; \ + asm volatile ("mrc p15,0,%0,c1,c0,0" \ + : "=r"(reg) \ + : \ + /*:*/ \ + ); \ + (_state_) = (0 != (0x1000 & reg)); /* Bit 12 is ICache enable */ \ +CYG_MACRO_END + + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_CACHE_H +// End of hal_cache.h diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/hal_diag.h b/packages/hal/arm/xscale/triton270/v2_0/include/hal_diag.h new file mode 100755 index 00000000..72a9529d --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/hal_diag.h @@ -0,0 +1,93 @@ +#ifndef CYGONCE_HAL_DIAG_H +#define CYGONCE_HAL_DIAG_H + +/*============================================================================= +// +// hal_diag.h +// +// HAL Support for Kernel Diagnostic Routines +// +//============================================================================= +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, gthomas +// Contributors: nickg, gthomas +// Date: 1998-09-11 +// Purpose: HAL Support for Kernel Diagnostic Routines +// Description: Diagnostic routines for use during kernel development. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include + +#include + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +#include + +#define HAL_DIAG_INIT() hal_if_diag_init() +#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + + +#define HAL_DELAY_US(n) hal_delay_us(n); + +#else // everything by steam + +/*---------------------------------------------------------------------------*/ +/* functions implemented in hal_diag.c */ + +externC void hal_diag_init(void); +externC void hal_diag_write_char(char c); +externC void hal_diag_read_char(char *c); + +/*---------------------------------------------------------------------------*/ + +#define HAL_DIAG_INIT() hal_diag_init() + +#define HAL_DIAG_WRITE_CHAR(_c_) hal_diag_write_char(_c_) + +#define HAL_DIAG_READ_CHAR(_c_) hal_diag_read_char(&_c_) + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +/*---------------------------------------------------------------------------*/ +/* end of hal_diag.h */ +#endif /* CYGONCE_HAL_DIAG_H */ diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/hal_platform_ints.h b/packages/hal/arm/xscale/triton270/v2_0/include/hal_platform_ints.h new file mode 100755 index 00000000..80f5e7c0 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/hal_platform_ints.h @@ -0,0 +1,254 @@ +#ifndef CYGONCE_HAL_PLATFORM_INTS_H +#define CYGONCE_HAL_PLATFORM_INTS_H +//========================================================================== +// +// hal_platform_ints.h +// +// HAL Interrupt and clock support +// +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors: +// Date: 2000-10-10 +// Purpose: Define Interrupt support +// Description: The interrupt details for the INPHINITY are defined here. +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + + +#define DEBUG_INT 0 + +// 1st level +// +#define CYGNUM_HAL_INTERRUPT_SSP3 0 +#define CYGNUM_HAL_INTERRUPT_MSL 1 +#define CYGNUM_HAL_INTERRUPT_USBH2 2 +#define CYGNUM_HAL_INTERRUPT_USBH1 3 +#define CYGNUM_HAL_INTERRUPT_KEY 4 +#define CYGNUM_HAL_INTERRUPT_MSTICK 5 +#define CYGNUM_HAL_INTERRUPT_PI2C 6 +#define CYGNUM_HAL_INTERRUPT_UTIMER 7 + + +#define CYGNUM_HAL_INTERRUPT_GPIO0 8 +#define CYGNUM_HAL_INTERRUPT_GPIO1 9 +#define CYGNUM_HAL_INTERRUPT_GPIO 10 +#define CYGNUM_HAL_INTERRUPT_USB 11 +#define CYGNUM_HAL_INTERRUPT_PMU 12 +#define CYGNUM_HAL_INTERRUPT_I2S 13 +#define CYGNUM_HAL_INTERRUPT_AC97 14 +#define CYGNUM_HAL_INTERRUPT_USIM 15 +#define CYGNUM_HAL_INTERRUPT_SSP2 16 + + + + + +#define CYGNUM_HAL_INTERRUPT_LCD 17 +#define CYGNUM_HAL_INTERRUPT_I2C 18 +#define CYGNUM_HAL_INTERRUPT_ICP 19 +#define CYGNUM_HAL_INTERRUPT_STUART 20 +#define CYGNUM_HAL_INTERRUPT_BTUART 21 +#define CYGNUM_HAL_INTERRUPT_FFUART 22 +#define CYGNUM_HAL_INTERRUPT_MMC 23 +#define CYGNUM_HAL_INTERRUPT_SSP 24 +#define CYGNUM_HAL_INTERRUPT_DMA 25 +#define CYGNUM_HAL_INTERRUPT_TIMER0 26 +#define CYGNUM_HAL_INTERRUPT_TIMER1 27 +#define CYGNUM_HAL_INTERRUPT_TIMER2 28 +#define CYGNUM_HAL_INTERRUPT_TIMER3 29 +#define CYGNUM_HAL_INTERRUPT_HZ 30 +#define CYGNUM_HAL_INTERRUPT_ALARM 31 + +// 2nd level +#define CYGNUM_HAL_INTERRUPT_GPIO2 (32+2) +#define CYGNUM_HAL_INTERRUPT_GPIO3 (32+3) +#define CYGNUM_HAL_INTERRUPT_GPIO4 (32+4) +#define CYGNUM_HAL_INTERRUPT_GPIO5 (32+5) +#define CYGNUM_HAL_INTERRUPT_GPIO6 (32+6) +#define CYGNUM_HAL_INTERRUPT_GPIO7 (32+7) +#define CYGNUM_HAL_INTERRUPT_GPIO8 (32+8) +#define CYGNUM_HAL_INTERRUPT_GPIO9 (32+9) +#define CYGNUM_HAL_INTERRUPT_GPIO10 (32+10) +#define CYGNUM_HAL_INTERRUPT_GPIO11 (32+11) +#define CYGNUM_HAL_INTERRUPT_GPIO12 (32+12) +#define CYGNUM_HAL_INTERRUPT_GPIO13 (32+13) +#define CYGNUM_HAL_INTERRUPT_GPIO14 (32+14) +#define CYGNUM_HAL_INTERRUPT_GPIO15 (32+15) +#define CYGNUM_HAL_INTERRUPT_GPIO16 (32+16) +#define CYGNUM_HAL_INTERRUPT_GPIO17 (32+17) +#define CYGNUM_HAL_INTERRUPT_GPIO18 (32+18) +#define CYGNUM_HAL_INTERRUPT_GPIO19 (32+19) +#define CYGNUM_HAL_INTERRUPT_GPIO20 (32+20) +#define CYGNUM_HAL_INTERRUPT_GPIO21 (32+21) +#define CYGNUM_HAL_INTERRUPT_GPIO22 (32+22) +#define CYGNUM_HAL_INTERRUPT_GPIO23 (32+23) +#define CYGNUM_HAL_INTERRUPT_GPIO24 (32+24) +#define CYGNUM_HAL_INTERRUPT_GPIO25 (32+25) +#define CYGNUM_HAL_INTERRUPT_GPIO26 (32+26) +#define CYGNUM_HAL_INTERRUPT_GPIO27 (32+27) +#define CYGNUM_HAL_INTERRUPT_GPIO28 (32+28) +#define CYGNUM_HAL_INTERRUPT_GPIO29 (32+29) +#define CYGNUM_HAL_INTERRUPT_GPIO30 (32+30) +#define CYGNUM_HAL_INTERRUPT_GPIO31 (32+31) + +#define CYGNUM_HAL_INTERRUPT_GPIO32 (64+0) +#define CYGNUM_HAL_INTERRUPT_GPIO33 (64+1) +#define CYGNUM_HAL_INTERRUPT_GPIO34 (64+2) +#define CYGNUM_HAL_INTERRUPT_GPIO35 (64+3) +#define CYGNUM_HAL_INTERRUPT_GPIO36 (64+4) +#define CYGNUM_HAL_INTERRUPT_GPIO37 (64+5) +#define CYGNUM_HAL_INTERRUPT_GPIO38 (64+6) +#define CYGNUM_HAL_INTERRUPT_GPIO39 (64+7) +#define CYGNUM_HAL_INTERRUPT_GPIO40 (64+8) +#define CYGNUM_HAL_INTERRUPT_GPIO41 (64+9) +#define CYGNUM_HAL_INTERRUPT_GPIO42 (64+10) +#define CYGNUM_HAL_INTERRUPT_GPIO43 (64+11) +#define CYGNUM_HAL_INTERRUPT_GPIO44 (64+12) +#define CYGNUM_HAL_INTERRUPT_GPIO45 (64+13) +#define CYGNUM_HAL_INTERRUPT_GPIO46 (64+14) +#define CYGNUM_HAL_INTERRUPT_GPIO47 (64+15) +#define CYGNUM_HAL_INTERRUPT_GPIO48 (64+16) +#define CYGNUM_HAL_INTERRUPT_GPIO49 (64+17) +#define CYGNUM_HAL_INTERRUPT_GPIO50 (64+18) +#define CYGNUM_HAL_INTERRUPT_GPIO51 (64+19) +#define CYGNUM_HAL_INTERRUPT_GPIO52 (64+20) +#define CYGNUM_HAL_INTERRUPT_GPIO53 (64+21) +#define CYGNUM_HAL_INTERRUPT_GPIO54 (64+22) +#define CYGNUM_HAL_INTERRUPT_GPIO55 (64+23) +#define CYGNUM_HAL_INTERRUPT_GPIO56 (64+24) +#define CYGNUM_HAL_INTERRUPT_GPIO57 (64+25) +#define CYGNUM_HAL_INTERRUPT_GPIO58 (64+26) +#define CYGNUM_HAL_INTERRUPT_GPIO59 (64+27) +#define CYGNUM_HAL_INTERRUPT_GPIO60 (64+28) +#define CYGNUM_HAL_INTERRUPT_GPIO61 (64+29) +#define CYGNUM_HAL_INTERRUPT_GPIO62 (64+30) +#define CYGNUM_HAL_INTERRUPT_GPIO63 (64+31) + +#define CYGNUM_HAL_INTERRUPT_GPIO64 (96+0) +#define CYGNUM_HAL_INTERRUPT_GPIO65 (96+1) +#define CYGNUM_HAL_INTERRUPT_GPIO66 (96+2) +#define CYGNUM_HAL_INTERRUPT_GPIO67 (96+3) +#define CYGNUM_HAL_INTERRUPT_GPIO68 (96+4) +#define CYGNUM_HAL_INTERRUPT_GPIO69 (96+5) +#define CYGNUM_HAL_INTERRUPT_GPIO70 (96+6) +#define CYGNUM_HAL_INTERRUPT_GPIO71 (96+7) +#define CYGNUM_HAL_INTERRUPT_GPIO72 (96+8) +#define CYGNUM_HAL_INTERRUPT_GPIO73 (96+9) +#define CYGNUM_HAL_INTERRUPT_GPIO74 (96+10) +#define CYGNUM_HAL_INTERRUPT_GPIO75 (96+11) +#define CYGNUM_HAL_INTERRUPT_GPIO76 (96+12) +#define CYGNUM_HAL_INTERRUPT_GPIO77 (96+13) +#define CYGNUM_HAL_INTERRUPT_GPIO78 (96+14) +#define CYGNUM_HAL_INTERRUPT_GPIO79 (96+15) +#define CYGNUM_HAL_INTERRUPT_GPIO80 (96+16) +#define CYGNUM_HAL_INTERRUPT_GPIO81 (96+17) +#define CYGNUM_HAL_INTERRUPT_GPIO82 (96+18) +#define CYGNUM_HAL_INTERRUPT_GPIO83 (96+19) +#define CYGNUM_HAL_INTERRUPT_GPIO84 (96+20) +#define CYGNUM_HAL_INTERRUPT_GPIO85 (96+21) +#define CYGNUM_HAL_INTERRUPT_GPIO86 (96+22) +#define CYGNUM_HAL_INTERRUPT_GPIO87 (96+23) +#define CYGNUM_HAL_INTERRUPT_GPIO88 (96+24) +#define CYGNUM_HAL_INTERRUPT_GPIO89 (96+25) +#define CYGNUM_HAL_INTERRUPT_GPIO90 (96+26) +#define CYGNUM_HAL_INTERRUPT_GPIO91 (96+27) +#define CYGNUM_HAL_INTERRUPT_GPIO92 (96+28) +#define CYGNUM_HAL_INTERRUPT_GPIO93 (96+29) +#define CYGNUM_HAL_INTERRUPT_GPIO94 (96+30) +#define CYGNUM_HAL_INTERRUPT_GPIO95 (96+31) + +#define CYGNUM_HAL_INTERRUPT_GPIO96 (128+0) +#define CYGNUM_HAL_INTERRUPT_GPIO97 (128+1) +#define CYGNUM_HAL_INTERRUPT_GPIO98 (128+2) +#define CYGNUM_HAL_INTERRUPT_GPIO99 (128+3) +#define CYGNUM_HAL_INTERRUPT_GPIO100 (128+4) +#define CYGNUM_HAL_INTERRUPT_GPIO101 (128+5) +#define CYGNUM_HAL_INTERRUPT_GPIO102 (128+6) +#define CYGNUM_HAL_INTERRUPT_GPIO103 (128+7) +#define CYGNUM_HAL_INTERRUPT_GPIO104 (128+8) +#define CYGNUM_HAL_INTERRUPT_GPIO105 (128+9) +#define CYGNUM_HAL_INTERRUPT_GPIO106 (128+10) +#define CYGNUM_HAL_INTERRUPT_GPIO107 (128+11) +#define CYGNUM_HAL_INTERRUPT_GPIO108 (128+12) +#define CYGNUM_HAL_INTERRUPT_GPIO109 (128+13) +#define CYGNUM_HAL_INTERRUPT_GPIO110 (128+14) +#define CYGNUM_HAL_INTERRUPT_GPIO111 (128+15) +#define CYGNUM_HAL_INTERRUPT_GPIO112 (128+16) +#define CYGNUM_HAL_INTERRUPT_GPIO113 (128+17) +#define CYGNUM_HAL_INTERRUPT_GPIO114 (128+18) +#define CYGNUM_HAL_INTERRUPT_GPIO115 (128+19) +#define CYGNUM_HAL_INTERRUPT_GPIO116 (128+20) +#define CYGNUM_HAL_INTERRUPT_GPIO117 (128+21) +#define CYGNUM_HAL_INTERRUPT_GPIO118 (128+22) +#define CYGNUM_HAL_INTERRUPT_GPIO119 (128+23) +#define CYGNUM_HAL_INTERRUPT_GPIO120 (128+24) +#define CYGNUM_HAL_INTERRUPT_GPIO121 (128+25) +#define CYGNUM_HAL_INTERRUPT_GPIO122 (128+26) +#define CYGNUM_HAL_INTERRUPT_GPIO123 (128+27) +#define CYGNUM_HAL_INTERRUPT_GPIO124 (128+28) +#define CYGNUM_HAL_INTERRUPT_GPIO125 (128+29) +#define CYGNUM_HAL_INTERRUPT_GPIO126 (128+30) +#define CYGNUM_HAL_INTERRUPT_GPIO127 (128+31) + +externC void cyg_hal_xscale_soft_reset(CYG_ADDRESS); +#define HAL_PLATFORM_RESET() cyg_hal_xscale_soft_reset(HAL_PLATFORM_RESET_ENTRY); + +#define HAL_PLATFORM_RESET_ENTRY 0x00000000 + +// *** remainder are reserved **** +#define CYGNUM_HAL_INT_ + +#define CYGNUM_HAL_ISR_MIN 0 +#define CYGNUM_HAL_ISR_MAX 48 + +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX + 1) + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TIMER +//#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_PMU_CCNT_OVFL + +extern void hal_delay_us(cyg_uint32 usecs); + +#define HAL_DELAY_US(n) hal_delay_us(n); + +#endif // CYGONCE_HAL_PLATFORM_INTS_H diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/hal_platform_setup.h b/packages/hal/arm/xscale/triton270/v2_0/include/hal_platform_setup.h new file mode 100755 index 00000000..1b32bb05 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/hal_platform_setup.h @@ -0,0 +1,1540 @@ +#ifndef CYGONCE_HAL_PLATFORM_SETUP_H +#define CYGONCE_HAL_PLATFORM_SETUP_H + +/*============================================================================= +// +// hal_platform_setup.h +// +// Platform specific support for HAL (assembly code) +// +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//#####DESCRIPTIONBEGIN#### +// +// Author(s): usteinkohl +// Contributors: +// Date: 23th August 2004 +// Purpose: KaRo TRITON 270 platform specific support routines +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include // System-wide configuration info +#include CYGBLD_HAL_PLATFORM_H // Platform specific configuration +#include // Platform specific hardware definitions +#include // MMU definitions + + +// Define macro used to diddle the LEDs during early initialization. +// Can use r0+r1. Argument in \x. +#define CYGHWR_LED_MACRO nop ; + + + +// The main useful output of this file is PLATFORM_SETUP1: it invokes lots +// of other stuff (may depend on RAM or ROM start). The other stuff is +// divided into further macros to make it easier to manage what's enabled +// when. + +#if defined(CYG_HAL_STARTUP_ROM) +#define PLATFORM_SETUP1 _platform_setup1 +//#define CYGHWR_HAL_ARM_HAS_MMU +#else +#define PLATFORM_SETUP1 +#endif + + +#define RAM_BASE 0xa0000000 +#define DRAM_SIZE (64*1024*1024) // max size of available SDRAM +#define DCACHE_SIZE (32*1024) // size of the Dcache +#define DCACHE_FLUSH_AREA (RAM_BASE+DRAM_SIZE) // NB: needs page table support + +#if 0 +#define CPSR_IRQ_DISABLE 0x80 // IRQ disabled when =1 +#define CPSR_FIQ_DISABLE 0x40 // FIQ disabled when =1 +#define CPSR_FIQ_MODE 0x11 +#define CPSR_IRQ_MODE 0x12 +#define CPSR_SUPERVISOR_MODE 0x13 +#define CPSR_UNDEF_MODE 0x1B + +#define CPSR_MODE_BITS 0x1F + +#endif + + + +#define MMU_Control_BTB 0x800 + +// Reserved area for battery backup SDRAM memory test +// This area is not zeroed out by initialization code +#define SDRAM_BATTERY_TEST_BASE 0xA1FFFFF0 // base address of last 16 memory locations in a 32MB SDRAM + + + + .macro MEM_TEST + nop + .endm + + + + + // macro to print a string + // modifies r9-r12 + .macro PRINT_STRING_STD address + ldr r9, =\address // print our welcome string + ldr r10, =STLSR + ldr r11, =STTHR + + +12: + ldr r12, [r10] // LSR + and r12, r12, #32 + cmp r12, #32 + bne 12b + + ldrb r12, [r9], #1 + str r12, [r11] + cmp r12, #0 + bne 12b + .endm + + + + + + + + // Trigger the logic analyzer by writing a particular + // address, and triggering on that address. + .macro TRIGGER_LA_ON_ADDRESS address, reg0, reg1 + mrc p15, 0, \reg0, c1, c0, 0 // read ARM control register + // CPWAIT \reg0 + ldr \reg1, =\address + str \reg0, [\reg1] + .endm + + // Delay a bit + .macro DELAY_FOR cycles, reg0 + ldr \reg0, =\cycles + subs \reg0, \reg0, #1 + subne pc, pc, #0xc + .endm + + // wait for coprocessor write complete + .macro CPWAIT reg + mrc p15,0,\reg,c2,c0,0 + mov \reg,\reg + sub pc,pc,#4 + .endm + + // blink some times on GPIO0 + .macro BLINK0 count + ldr r4, =\count + + + 220961: + ldr r1,=0x00000001 // we use GPIO0 for controlling the debug LED + + + ldr r0,=GPCRa + str r1, [r0] // switch the LED on + + + ldr r2,=0x005 // wait some time + mov r3,#1 + 998: + sub r2, r2, r3 + cmp r2,#0 + bne 998b + + ldr r0,=GPSRa // switch the LED off + str r1, [r0] + + + ldr r2,=0x005 // wait some time + mov r3,#1 + 998: + sub r2, r2, r3 + cmp r2,#0 + bne 998b + + sub r4, r4, r3 + cmp r4, #0 + bne 220961b + + .endm + + + + + + + + .macro TRITON270_SET_REFR_VAL + // TRITON270 specific, DRAM specific !!!!!!!!!!!!! + + + + + + ldr r3, =MDREFR + ldr r2, [r3] // read MDREFR value + ldr r4, =0xFFF + bic r2, r2, r4 + // clear out value in DRI + + + + + #ifdef TRITON270_DRAM32_64 + // DRI = (64 ms * 99,5 MHz / 8192 - 31) / 32 = 23 (0x17) + orr r2, r2, #0x00000017 // put in a valid SDRAM Refresh Interval (DRI) + #endif + + #ifdef TRITON270_DRAM16_32 + // DRI = (64 ms * 99,5 MHz / 8192 - 31) / 32 = 23 (0x17) + orr r2, r2, #0x00000017 // put in a valid SDRAM Refresh Interval (DRI) + #endif + + + + #ifdef TRITON270_DRAM32_128 + // DRI = (64 ms * 99,5 MHz / 8192 - 31) / 32 = 23 (0x17) + orr r2, r2, #0x00000017 // put in a valid SDRAM Refresh Interval (DRI) + #endif + + + str r2, [r3] // store it + + + .endm + + + + + + + .macro TRITON270_CONFIG_SDRAM_BANKS + + + + + ldr r3, =MDCNFG // sdram config -- sdram should remain disabled !!!!! + + + + + + + + + + #ifdef TRITON270_DRAM32_64 + ldr r2, =0x08000bc8 // 13 rows / 9 col / 2 bank / 32 bit / CL3 + + #endif + + + #ifdef TRITON270_DRAM16_32 + ldr r2, =0x08000bcc // 13 rows / 9 col / 2 bank / 16 bit / CL3 + + #endif + + + + + #ifdef TRITON270_DRAM16_64 + ldr r2, =0x08000bcC // 13 rows / 9 col / 2 bank / 32 bit / CL3 + + #endif + + + + #ifdef TRITON270_DRAM32_128 + ldr r2, =0x88000bd0 // 13 rows / 10 col / 2 bank / 32 bit / CL3 / 1 GB Memory map + + #endif + + + + str r2, [r3] + .endm + + + + + + + + + // form a first-level section entry + .macro FL_SECTION_ENTRY base,x,ap,p,d,c,b + .word (\base << 20) | (\x << 12) | (\ap << 10) | (\p << 9) |\ + (\d << 5) | (\c << 3) | (\b << 2) | 2 + .endm + + // form a first-level page table entry + .macro FL_PT_ENTRY base,d + // I wanted to use logical operations here, but since I am using symbols later + // to fill in the parameters, I had to use addition to force the assembler to + // do it right + .word \base + (\d << 5) + 1 + .endm + + // form a second level small page entry + .macro SL_SMPAGE_ENTRY base,ap3,ap2,ap1,ap0,c,b + .word (\base << 12) | (\ap3 << 10) | (\ap2 << 8) | (\ap1 << 6) |\ + (\ap0 << 4) | (\c << 3) | (\b << 2) | 2 + .endm + + // form a second level extended small page entry + .macro SL_XSMPAGE_ENTRY base,x,ap,c,b + .word (\base << 12) | (\x << 6) | (\ap << 4) | (\c << 3) | (\b << 2) | 3 + .endm + + + // start of platform setup + .macro _platform_setup1 + + // This is where we wind up immediately after reset. On the CYCLONE, we have + // to jump around a hole in flash which runs from 0x00001000 - 0x0001fff. + // The start of _platform_setup1 will be below 0x1000 and since we need to + // align the mmu table on a 16k boundary, we just branch around the page + // table which we will locate at FLASH_BASE+0x4000. + b _real_platform_setup + + .p2align 13 + // the following alignment creates the mmu table at address 0x4000. + mmu_table: + + // 1MB of FLASH with i80312 MMRs mapped in using 4K small pages so we can + // set the access permission on flash and memory-mapped registers properly. + FL_PT_ENTRY mmu_table_flashbase,0 + + // Remaining 63MB of FLASH area (Static Chip select 0) + // rw, cacheable, non-bufferable + .set __base,1 + .rept 0x040-0x001 + FL_SECTION_ENTRY __base,0,3,0,0,1,0 + .set __base,__base+1 + .endr + + + // nothing interesting here, static chip select area 1 (Address Translation) + .rept 0x080 - 0x040 + FL_SECTION_ENTRY __base,0,3,0,0,0,0 + .set __base,__base+1 + .endr + + + // nothing interesting here, static chip select area 2 (Address Translation) + .rept 0x0C0 - 0x080 + FL_SECTION_ENTRY __base,0,3,0,0,0,0 + .set __base,__base+1 + .endr + + + // nothing interesting here, static chip select area 3 (Address Translation) + .rept 0x100 - 0x0C0 + FL_SECTION_ENTRY __base,0,3,0,0,0,0 + .set __base,__base+1 + .endr + + // nothing interesting here, static chip select area 4 (Address Translation) + .rept 0x140 - 0x100 + FL_SECTION_ENTRY __base,0,3,0,0,0,0 + .set __base,__base+1 + .endr + + // nothing interesting here, static chip select area 5 (Address Translation) + .rept 0x180 - 0x140 + FL_SECTION_ENTRY __base,0,3,0,0,0,0 + .set __base,__base+1 + .endr + + + + // nothing interesting here (Address Translation) + .rept 0xA00 - 0x180 + FL_SECTION_ENTRY __base,0,3,0,0,0,0 + .set __base,__base+1 + .endr + + + + + + + + // up to 64MB SDRAM + // x=c=b=1 + // first 1MB mapped by second level table + FL_PT_ENTRY mmu_table_rambase,0 + .set __base,__base+1 + + + + + // remainder of SDRAM mapped 1-to-1 + .rept 0xC00 - 0xA01 + FL_SECTION_ENTRY __base,1,3,1,0,1,1 + .set __base,__base+1 + .endr + + + + + + + + + + + + + + // Cache flush region. + // Don't need physical memory, just a cached area. + .rept 0xD00 - 0xC00 + FL_SECTION_ENTRY __base,0,3,0,0,1,1 + .set __base,__base+1 + .endr + + // Invalid + .rept 0x1000 - 0xD00 + .word 0 + .set __base,__base+1 + .endr + + + // Immediately after the above table (at 0x8000) is the + // second level page table which breaks up the lowest 1MB + // of physical memory into 4KB sized virtual pages. + mmu_table_flashbase: + // Virtual address 0 (Flash boot code). + // Map 4k page at 0x00000000 virt --> 0xA0000000 physical + // This allows us to have a writable vector table. + // Read-Write, cacheable, bufferable + SL_XSMPAGE_ENTRY 0xa0000,1,3,1,1 + + // Virtual address 0x1000 (Memory mapped registers) + // Map 1-to-1, but don't cache or buffer + // Read-Write, non-cacheable, non-bufferable + .set __base,1 + SL_SMPAGE_ENTRY __base,3,3,3,3,0,0 + .set __base,__base+1 + + // Virtual address 0x2000-0x100000 (remainder of flash1) + // Read-Write, cacheable, non-bufferable + .rept 0x100 - 0x2 + SL_SMPAGE_ENTRY __base,3,3,3,3,1,0 + .set __base,__base+1 + .endr + + // Now is the second level table for the first megabyte + // of DRAM. + mmu_table_rambase: + // Map 4k page at 0xa0000000 virt --> 0x00000000 physical + // Read-Write, cacheable, non-bufferable + SL_SMPAGE_ENTRY 0x00000,3,3,3,3,1,0 + .set __base,__base+1 + + // Map remainder of first meg of SDRAM + // Read-Write, cacheable, non-bufferable + .set __base,0xA0001 + .rept 0x100 - 0x1 + SL_XSMPAGE_ENTRY __base,1,3,1,1 + .set __base,__base+1 + .endr + + + +_real_platform_setup://Angel SDRAM init code follows + + + + mov r6, #0 + ldr r0, =CKEN + ldr r1, = 0x81ffffff + str r1, [r0] + + + // if we come out of sleep mode, check if there is a pointer + // from the os, and jump to it if so + + ldr r0, =RCSR // check reset source + ldr r1, [r0] + and r1, r1, #4 + cmp r1, #4 + bne 1923f + + + + ldr r2, =PSPR // check if there is a pointer from the operating system + ldr r1, [r2] + cmp r1, #0 + beq 1922f // wake up from deep sleep + + //ldr r3, =0x0000000f // reset RCSR + //str r3, [r0] + + +#if 0 + ldr r0, =CKEN + ldr r1, [r0] + orr r1, r1, #(1<<22) // enable memory controller + str r1, [r0] +#endif + + // get SDRAM out of Self Refresh + TRITON270_SET_REFR_VAL + TRITON270_CONFIG_SDRAM_BANKS + + + ldr r3, =MDREFR + ldr r2, [r3] // read MDREFR value + bic r2, r2, #0x03800000 // clear all Free Running Clocks + orr r2, r2, #0x00010000 // assert MDREFR:K1RUN + ldr r4, =0x20020000 + orr r2, r2, r4 // set K0DB4, K1DB2 + str r2, [r3] // change from "self-refresh and clock-stop" to "self-refresh" + ldr r2, [r3] // read MDREFR value + + bic r2, r2, #0x00400000 // clear self-refresh bit + str r2, [r3] // change from "self-refresh" to "Power Down" + orr r2, r2, #0x00008000 // assert MDREFR:E1PIN + str r2, [r3] // change from "Power Down" to "PWRDWNX" + nop + nop // no write required to change from "PWRDWNX" to "NOP" + + + + + ldr r3, =MDCNFG // sdram config -- sdram enable + ldr r2, [r3] + orr r2, r2, #0x00000001 // enable appropriate banks + str r2, [r3] + + + + + // initialize CPSR (machine state register) + mov r0,#(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_SUPERVISOR_MODE) + msr cpsr,r0 + + + b __setup_stack + + .rept 32 + .word 0 + .endr + +__setup_stack: + + /* Set up the stack pointer to a fixed value */ + ldr r3, =__setup_stack + sub r3, r3, #4 + mov sp, r3 + + + ldr r2, =PSPR // get pointer + ldr r1, [r2] + mov r15, r1 // jump to pointer + + + + + 1922: + + mov r6, #1 + + + ldr r0, =CKEN + ldr r1, = 0x81ffffff + str r1, [r0] + + + 1923: + + + + bl __hal_initio // init the IO pins + + //BLINK0 10 + + + //PSSR = 0x20 clear the RDH and PH bit in the PSSR + ldr r0, =PSSR + ldr r1, =0x30 + str r1, [r0] + + + + + + ldr r3, =PCFR // clear PCFR[FS] and PCFR[FP] + ldr r2, [r3] + bic r2, r2, #0x00000006 + str r2, [r3] + + + +#ifdef GPIO_10_OUT + BLINK10 3 +#endif + + + + + + MRC p15, 0, r0, c0, c0, 0 // read the ID reg .... 0x69052100 + // and display it if possible + // not possible TRITON270 SK3 + + + +// turn everything off + mov r0, #0x78 + mcr p15, 0, r0, c1, c0, 0 // caches off -- MMU off or ID map + + mcr p15, 0, R0, c7, c7, 0 // Invalidate the I & D cache, mini- d cache, and BTB + + + MCR p15, 0, r0, c7, c10, 4 // Drain write buffer -- r0 ignored + + // CPWAIT macro + MRC p15, 0, R0, c2, c0, 0 // arbitrary read of CP15 + MOV R0, R0 // wait for it + SUB PC, PC, #4 // branch to next instruction + + nop + nop + nop + nop + + + + +// setup manager access, interrupts, etc. + +// grant manager access to all domains + mvn r0, #0 // all 1s + mcr p15, 0, r0, c3, c0, 0 + + + // all IRQs should be masked to prevent spurious IRQs + ldr r3, =ICMR // pending interrupts are masked from becoming active + mov r2, #0 + str r2, [r3] + ldr r3, =ICMR2 + str r2, [r3] + + + ldr r3, =ICLR // route all interrupts to CPU IRQ ( not to FIQ ) + mov r2, #0 + str r2, [r3] + ldr r3, =ICLR2 + str r2, [r3] + + ldr r3, =ICCR // only enabled and unmasked interrupts bring core out of idle + mov r2, #1 + str r2, [r3] + + + + + + + + + +// Turn on the RTC circuit (if you want) + + + + ldr r1, =OSCC // oscillator config reg + // turn on the 32.768 KHz clock for RTC, etc. + mov r0, #0x2 + str r0, [r1] + + + + + // Wait 200 usec + ldr r3, =OSCR // reset the OS Timer Count to zero + mov r2, #0 + str r2, [r3] + ldr r4, =0x300 // really 0x2E1 is about 200usec, so 0x300 should be plenty + + 10: + ldr r2, [r3] + cmp r4, r2 + bgt 10b + + + +// CS0 : RDF=8, RDN=8 , RRR=2, 16 bits Flash +// Suitable for Flash (Tcyc = 85 ns) and 200 MHz MEMCLK + + + + ldr r3, =MSC0 // low - bank 0 Flash CS0 / CS1 + ldr r2, =0x7ff04ff8 // 16 Bit Flash + str r2, [r3] + ldr r2, [r3] // need to read it back to make sure the value latches (see MSC section of manual) + + + + + + + + ldr r3, =MSC1 // CS3 / CS2 + ldr r2, =0x7ff07ff0 + str r2, [r3] + ldr r2, [r3] // need to read it back to make sure the value latches (see MSC section of manual) + + + + ldr r3, =MSC2 // CS5 / CS4 + ldr r2, =0x28847ff0 // + str r2, [r3] + ldr r2, [r3] // need to read it back to make sure the value latches (see MSC section of manual) + + + + + + + // ******************************************************************** + // Disable (mask) all interrupts at the interrupt controller + + + // clear the interrupt level register (use IRQ, not FIQ) + + mov r1, #0 + ldr r2, =ICLR + str r1, [r2] + ldr r2, =ICLR2 + str r1, [r2] + + // mask all interrupts at the controller + + ldr r2, =ICMR + str r1, [r2] + ldr r2, =ICMR2 + str r1, [r2] + + + + + // make sure the DCACHE is off + mov r0, #0x78 // turn everything off + mcr p15, 0, r0, c1, c0, 0 // caches off, MMU off, etc. + + + + + + + + + + TRITON270_SET_REFR_VAL + + + + ldr r3, =SXCNFG + mov r2, #0x0 // configure the synchrounous flash memory later + str r2, [r3] // + + + + + + + ldr r3, =MDREFR + ldr r2, [r3] // read MDREFR value + bic r2, r2, #0x03800000 // clear all Free Running Clocks + orr r2, r2, #0x00010000 // assert MDREFR:K1RUN + ldr r4, =0x20020000 + orr r2, r2, r4 // set K0DB4, K1DB2 + + str r2, [r3] // change from "self-refresh and clock-stop" to "self-refresh" + ldr r2, [r3] // read MDREFR value (to make sure the previous value stuck) (this is in Tricia's code) + + bic r2, r2, #0x00400000 // clear self-refresh bit + str r2, [r3] // change from "self-refresh" to "Power Down" + orr r2, r2, #0x00008000 // assert MDREFR:E1PIN + str r2, [r3] // change from "Power Down" to "PWRDWNX" + nop + nop // no write required to change from "PWRDWNX" to "NOP" + + + + + + + + TRITON270_CONFIG_SDRAM_BANKS + + + + + + + //---- Wait 200 usec + ldr r3, =OSCR // reset the OS Timer Count to zero + mov r2, #0 + str r2, [r3] + ldr r4, =0x300 // really 0x2E1 is about 200usec, so 0x300 should be plenty + 10: + ldr r2, [r3] + cmp r4, r2 + bgt 10b + + + + + + + + ldr r3, =SDRAM_B0 + mov r2, #8 // now must do 8 refresh or CBR commands before the first access + 10: // + str r3, [r3] + subs r2, r2, #1 + bne 10b + + + + ldr r3, =MDCNFG // sdram config -- sdram enable + ldr r2, [r3] + orr r2, r2, #0x00000001 // enable appropriate banks + str r2, [r3] + + + + + + + + + ldr r3, =MDMRS // write the MDMRS + ldr r2, =0x00000032 + str r2, [r3] + + + + + + + //---- Wait 600 usec + ldr r3, =OSCR // reset the OS Timer Count to zero + mov r2, #0 + str r2, [r3] + ldr r4, =0x900 // really 0x2E1 is about 200usec, so 0x300 should be plenty + 10: + ldr r2, [r3] + cmp r4, r2 + bgt 10b + + + + + MEM_TEST + + + + + + + +_sdram_init_end: + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// Memory Test // +// // +//////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#if 0 + + b 70f + +__string_a: + + .ascii "\r\n\r\nchecking SDRAM size now \0" + + + +__string_b: + + .ascii "\r\nfailed\r\nerror, did not found the expected 32 MBytes\r\n\0" + + + +__string_b64: + + .ascii "\r\nfailed\r\nerror, did not found the expected 64 MBytes\r\n\0" + + + + + +__string_c: + + .ascii "\r\npassed, 32 MBytes found\r\n\0" + + +__string_c64: + + .ascii "\r\npassed, 64 MBytes found\r\n\0" + + + +__string_dot: + + .ascii ".\0" + + + .align 3 + + +70: + + + ldr r0, =CKEN + ldr r1, = 0x81ffffff + orr r1, r1, #0x20 // enable STUART + str r1, [r0] + + +// setup the standard UART +// +// 38400 baud 8N1 +// +// + ldr r0, = STLCR + ldr r1, = 0x83 // enable Divisor Latch Access + str r1, [r0] + + ldr r0, = STDLH + ldr r1, = 0x00 // + str r1, [r0] + + ldr r0, = STDLL + ldr r1, = 24 // 38400 Baud + str r1, [r0] + + ldr r0, = STLCR + ldr r1, = 0x03 // set 8N1 + str r1, [r0] + + + ldr r0, = STFCR // enable FIFOs + ldr r1, =0x03 +// str r1, [r0] + + + + + ldr r0, =STIER + ldr r1, =0x40 // enable UART + str r1, [r0] + + + + + + + + + + +#if 1 + b 938f +__string_dsleep: + + .ascii "\r\nwaking up from deep sleep mode ... \r\n\0" + .align 3 + +938: + cmp r6, #0 + beq 939f + PRINT_STRING_STD __string_dsleep + +#endif + +939: + + + + + + + + + +#ifdef DRAM_TEST32 + + PRINT_STRING_STD __string_a + + ldr r0, =0xa0000000 // base address + ldr r1, =32 // counter + ldr r2, =0x12345678 + ldr r3, =0x100000 + +88: + mov r4, r0 + str r4, [r0], #4 + str r2, [r0] + add r0, r0, r3 + sub r0, r0, #4 + sub r1, r1, #1 + cmp r1, #0 + bne 88b + + + + // test now + + ldr r0, =0xa0000000 // base address + ldr r1, =0 // counter + ldr r2, =0x12345678 + ldr r3, =0x100000 + +89: + mov r4, r0 + ldr r5, [r0], #4 + cmp r5, r4 + bne 99f // no match + ldr r5, [r0] + cmp r5, r2 + bne 99f // no match + PRINT_STRING_STD __string_dot + add r0, r0, r3 + sub r0, r0, #4 + add r1, r1, #1 + cmp r1, #32 + bne 89b + + +99: + cmp r1, #32 + beq 100f + + PRINT_STRING_STD __string_b + +__halt_system001: + nop + nop + b __halt_system001 + +100: + + PRINT_STRING_STD __string_c + + +101: + +#endif + +#ifdef DRAM_TEST64 + + + + + PRINT_STRING_STD __string_a + + ldr r0, =0xa0000000 // base address + ldr r1, =64 // counter + ldr r2, =0x12345678 + ldr r3, =0x100000 + +88: + mov r4, r0 + str r4, [r0], #4 + str r2, [r0] + add r0, r0, r3 + sub r0, r0, #4 + sub r1, r1, #1 + cmp r1, #0 + bne 88b + + + + // test now + + ldr r0, =0xa0000000 // base address + ldr r1, =0 // counter + ldr r2, =0x12345678 + ldr r3, =0x100000 + +89: + mov r4, r0 + ldr r5, [r0], #4 + cmp r5, r4 + bne 99f // no match + ldr r5, [r0] + cmp r5, r2 + bne 99f // no match + PRINT_STRING_STD __string_dot + add r0, r0, r3 + sub r0, r0, #4 + add r1, r1, #1 + cmp r1, #64 + bne 89b + + +99: + cmp r1, #64 + beq 100f + + PRINT_STRING_STD __string_b64 + +__halt_system001: + nop + nop + b __halt_system001 + +100: + + PRINT_STRING_STD __string_c64 + + +101: + + +#endif //#ifdef DRAM_TEST64 + + + + + + + +#endif //#if 1 + + +#if 0 + + + + b 170f + +__string_a1: + + .ascii "\r\n\r\ntesting first 64 kbytes of SDRAM now ... \0" + + +__string_a_ok: + + .ascii "ok\r\n\r\n\0" + + +__string_a_failed: + + .ascii "failed\r\n\r\n\0" + + .align 3 + + +170: + + + PRINT_STRING_STD __string_a1 + + ldr r0, =0xa0000000 // base address + ldr r1, =0x10000 // counter + ldr r2, =0x12345678 + +188: + str r2, [r0], #4 + add r2, r2, #3 + sub r1, r1, #1 + cmp r1, #0 + bne 188b + + + + // test now + + ldr r0, =0xa0000000 // base address + ldr r1, =0x10000 // counter + ldr r2, =0x12345678 + +189: + ldr r3, [r0], #4 + cmp r3, r2 + beq 190f + + + + PRINT_STRING_STD __string_a_failed +191: + nop + nop + b 191b + + + +190: + add r2, r2, #3 + sub r1, r1, #1 + cmp r1, #0 + bne 189b + + + PRINT_STRING_STD __string_a_ok + + +199: + + +#endif + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// +// Change Frequency!!! +// +// RUN=208 TURBO=208 SystemBus=208 MEMClk=208 SDRAM=104 Flash=52 LCD=104 +// +// CCCR: L=16 2N=2 A=1 CLKCFG: T=1 HT=0 B=1 +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#if 0 + + ldr r1, =0x02000110 + ldr r2, =CCCR + str r1, [r2] // set speed + mov r1, #0xb // set turbo mode, set fast bus , set frequency change + mov r3, r1 // save value + mcr p14, 0, r1, c6, c0, 0 // frequency change sequence + ldr r1, [r2] // dummy read from CCCR +100: + mrc p14, 0, r1, c6, c0, 0 // read CLKCFG + cmp r3, r1 // compare it with value written + bne 100b + + +#endif + + + + + // Enable access to all coprocessor registers + ldr r0, =0x2001 // enable access to all coprocessors + mcr p15, 0, r0, c15, c1, 0 + + mcr p15, 0, r0, c7, c10, 4 // drain the write & fill buffers + CPWAIT r0 + + mcr p15, 0, r0, c7, c7, 0 // flush Icache, Dcache and BTB + CPWAIT r0 + + mcr p15, 0, r0, c8, c7, 0 // flush instuction and data TLBs + CPWAIT r0 + + + + + // Enable the Icache + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #MMU_Control_I + mcr p15, 0, r0, c1, c0, 0 + CPWAIT r0 + + + + // Set the TTB register + ldr r0, =mmu_table + mcr p15, 0, r0, c2, c0, 0 + + // Enable permission checks in all domains + ldr r0, =0x55555555 + mcr p15, 0, r0, c3, c0, 0 + + // Enable the MMU + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #MMU_Control_M + orr r0, r0, #MMU_Control_R + mcr p15, 0, r0, c1, c0, 0 + CPWAIT r0 + + mcr p15, 0, r0, c7, c10, 4 // drain the write & fill buffers + CPWAIT r0 + + + + + + // Enable the Dcache + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #MMU_Control_C + mcr p15, 0, r0, c1, c0, 0 + CPWAIT r0 + + // Enable the BTB + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #MMU_Control_BTB + mcr p15, 0, r0, c1, c0, 0 + CPWAIT r0 + + + // clean/drain/flush the main Dcache + mov r1, #DCACHE_FLUSH_AREA // use a CACHEABLE area of + // the memory map above SDRAM + mov r0, #1024 // number of lines in the Dcache + 20: + mcr p15, 0, r1, c7, c2, 5 // allocate a Dcache line +/* increment the address to the next cache line */ + add r1, r1, #32 +// decrement the loop count + subs r0, r0, #1 // decrement the loop count + bne 20b + + + + // clean/drain/flush the mini Dcache + ldr r2, =(DCACHE_FLUSH_AREA+DCACHE_SIZE) // use a CACHEABLE area of + // the memory map above SDRAM + mov r0, #64 // number of lines in the mini Dcache + 21: + mcr p15, 0, r2, c7, c2, 5 // allocate a Dcache line + add r2, r2, #32 // increment the address to + // the next cache line + subs r0, r0, #1 // decrement the loop count + bne 21b + + + mcr p15, 0, r0, c7, c6, 0 // flush Dcache + CPWAIT r0 + + mcr p15, 0, r0, c7, c10, 4 // drain the write & fill buffers + CPWAIT r0 + + + + + + + + + + + + + + + + + + // !!!!!!!!!!!!!!!!!!!!!!! what is in r8 (usteinkohl) + // Save SDRAM size + //we made it to here ok + ldr r1, =hal_dram_size // [see hal_intr.h] + str r8, [r1] + + + + + + // Move mmu tables into RAM so page table walks by the cpu + // don't interfere with FLASH programming. + ldr r0,=mmu_table + mov r4, r0 + add r2, r0, #0x4800 // End of tables + mov r1, #RAM_BASE + orr r1, r1, #0x4000 // RAM tables + mov r5, r1 + + + + + // first, fixup physical address to second level + // table used to map first 1MB of flash. + ldr r3, [r0], #4 + sub r3, r3, r4 + add r3, r3, r5 + str r3, [r1], #4 + // everything else can go as-is + 1: + ldr r3, [r0], #4 + str r3, [r1], #4 + cmp r0, r2 + bne 1b + + + + + + + + + // go back and fixup physical address to second level + // table used to map first 1MB of SDRAM. + add r1, r5, #(0xA00 * 4) + ldr r0, [r1] // entry for first 1MB of DRAM + sub r0, r0, r4 + add r0, r0, r5 + str r0, [r1] // store it back +//we made it to here ok + + + + + + + + + + + // Flush the cache + mov r0, #DCACHE_FLUSH_AREA /* cache flush region */ + add r1, r0, #0x8000 /* 32KB cache */ + 667: + mcr p15,0,r0,c7,c2,5 /* allocate a line */ + add r0, r0, #32 /* 32 bytes/line */ + teq r1, r0 + bne 667b + mcr p15,0,r0,c7,c6,0 /* invalidate data cache */ + /* cpuwait */ + mrc p15,0,r1,c2,c0,0 /* arbitrary read */ + mov r1,r1 + sub pc,pc,#4 + mcr p15,0,r0,c7,c10,4 + /* cpuwait */ + mrc p15,0,r1,c2,c0,0 /* arbitrary read */ + mov r1,r1 + sub pc,pc,#4 + nop +//we make it here ok + + + + + + + // Set the TTB register to DRAM mmu_table + mov r0, r5 + mov r1, #0 + mcr p15, 0, r1, c7, c5, 0 // flush I cache + mcr p15, 0, r1, c7, c10, 4 // drain WB + mcr p15, 0, r0, c2, c0, 0 // load page table pointer + mcr p15, 0, r1, c8, c7, 0 // flush TLBs + CPWAIT r0 + + + + + + + //Disable software and data breakpoints + mov r0,#0 + mcr p15,0,r0,c14,c8,0 // ibcr0 + mcr p15,0,r0,c14,c9,0 // ibcr1 + mcr p15,0,r0,c14,c4,0 // dbcon + + //Enable all debug functionality + mov r0,#0x80000000 + mcr p14,0,r0,c10,c0,0 // dcsr + + +// + + mov r0, #0 + + //---- Wait 200 usec + ldr r3, =OSCR // reset the OS Timer Count to zero + mov r2, #0 + str r2, [r3] + ldr r4, =0x300 // really 0x2E1 is about 200usec, so 0x300 should be plenty + 10: + add r0, r0, #1 + ldr r2, [r3] + cmp r4, r2 + bgt 10b + + + + + + + + /* deactivate reset of SMC91C111 (GPIO10) */ + ldr r3, =GPCRa + ldr r2, =0x00000400 + str r2, [r3] + + +#if 0 + b 930f +__string_good_1: + + .ascii "\r\nup to now, it is ok \r\n\0" + .align 3 + +930: + PRINT_STRING_STD __string_good_1 + +#endif + + .endm // _platform_setup1 + + + +/*---------------------------------------------------------------------------*/ +/* end of hal_platform_setup.h */ +#endif /* CYGONCE_HAL_PLATFORM_SETUP_H */ + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/hal_triton270.h b/packages/hal/arm/xscale/triton270/v2_0/include/hal_triton270.h new file mode 100755 index 00000000..687fb53b --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/hal_triton270.h @@ -0,0 +1,667 @@ +#ifndef CYGONCE_HAL_TRITON270_H +#define CYGONCE_HAL_TRITON270_H + +/*============================================================================= +// +// hal_triton270.h +// +// HAL Description of PXA27x control registers +// and ARM memory control in general. +// +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): usteinkohl +// Contributors: usteinkohl +// Date: 14th January 2003 +// Purpose: Intel PXA27x register and Ka-Ro TRITON270 hardware descriptions +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +/*******************/ +/* TRITON270 Devices */ +/*******************/ + +#include // System-wide configuration info + +#define BOOT_ROM 0x00000000 /* Boot ROM (Flash) */ +#define SDRAM_B0 0xA0000000 /* 64 MByte of SDRAM Bank 0 */ + +#define SMC91C111_ETH_IOBASE 0x14000300 /* I/O base connected to CS5# */ +#define IRQ_GPIO_ETH CYGNUM_HAL_INTERRUPT_GPIO52 + +#ifndef __ASSEMBLER__ +#define __REG(x) ((volatile unsigned long *)(x)) + +typedef struct pin_i2c_t_tag { + unsigned char scl_no; + unsigned char sda_no; +} pin_i2c_t; + +// i2c function prototypes + +void init_i2c(void); +cyg_int32 write_i2c_pcf8574(cyg_uint8 device_adr, cyg_uint8 dat_value); +cyg_int32 read_i2c_pcf8574(cyg_uint8 device_adr); + +void init_i2c_pp(void); /* init i2c par. port */ + +void triton270_program_new_stack(void *func); + +void pin_i2c_setup(pin_i2c_t *pin_data); +void bus_out(pin_i2c_t *pin_data, unsigned char pdata); +int bus_in(pin_i2c_t *pin_data); +void i2c_start(pin_i2c_t *pin_data); +void i2c_stop(pin_i2c_t *pin_data); +int i2c_read_ack(pin_i2c_t *pin_data); +void i2c_write_ack(pin_i2c_t *pin_data); +void i2c_write_nack(pin_i2c_t *pin_data); +void i2c_slave_addr(pin_i2c_t *pin_data, unsigned char dev, unsigned char mode); +void i2c_read(pin_i2c_t *pin_data, unsigned char *res); +void i2c_write(pin_i2c_t *pin_data, unsigned char val); + +int se_read(pin_i2c_t *pin_data, unsigned char addr, unsigned char dev_address, unsigned int numb, char *dat); +int se_write(pin_i2c_t *pin_data, unsigned char addr,unsigned char dev_address, unsigned char val); + +int ltc1663_write(pin_i2c_t *pin_data, unsigned char dev_address, unsigned char command, unsigned short val); + +int set_alternate_function(unsigned char gpio_nr, unsigned char function_code); +int set_pin_dir(unsigned char pin_no, unsigned char io_code); /* 0=input 1=output */ +int set_pin(unsigned char pin_no); +int get_pin_status(unsigned char pin_no); +int clear_pin(unsigned char pin_no); +int set_rising_edge(unsigned char pin_no, unsigned char io_code); /* 0= disable 1= enable */ +int set_falling_edge(unsigned char pin_no, unsigned char io_code); /* 0= disable 1= enable */ +int clear_edge(unsigned char pin_no); +int detect_edge(unsigned char pin_no); + +void reset_cp_dac(void); + +cyg_int32 write_i2c_pwr(cyg_uint8 device_adr, cyg_uint8 dat_value); +void change_core_voltage(unsigned char ind); +void change_clock(unsigned char ind); +int get_clock_table_index(int clock); + +typedef struct clock_param_s { + unsigned short t_clock; + unsigned short sys_clock; + unsigned short mem_clock; + unsigned short SDRAM_clock; + unsigned short LCD_clock; + unsigned char CCCR_A; + unsigned char CCCR_L; + unsigned char CCCR_2N; + unsigned char CLKCFG_T; + unsigned char CLKCFG_HT; + unsigned char CLKCFG_B; + unsigned short VOLTAGE_VAL; + unsigned char DAC_VAL; + unsigned char MDREFR_K0DB4; + unsigned char MDREFR_K0DB2; + +} clock_param_t; + +extern clock_param_t pclktab[]; +#else +#define __REG(x) (x) +#endif + +#define NUM_GPIOS 128 + +// Memory Controller 0x48000000 +#define MDCNFG __REG(0x48000000) // SDRAM configuration register 0 +#define MDREFR __REG(0x48000004) // SDRAM refresh control register +#define MSC0 __REG(0x48000008) // Static memory control register 0 +#define MSC1 __REG(0x4800000C) // Static memory control register 1 +#define MSC2 __REG(0x48000010) // Static memory control register 2 +#define MECR __REG(0x48000014) // Expansion memory (PCMCIA / Compact Flash) bus configuration register +#define SXLCR __REG(0x48000018) // LCR value to be written to SDRAM-Timing Synchronous Flash +#define SXCNFG __REG(0x4800001C) // Synchronous static memory control register +#define FLYCNFG __REG(0x48000020) // Fly by DMA DVAL assert and deassert times +#define SXMRS __REG(0x48000024) // MRS value to be written to Synchronous Flash or SMROM +#define MCMEM0 __REG(0x48000028) // Card interface Common Memory Space Socket 0 Timing Configuration +#define MCMEM1 __REG(0x4800002C) // Card interface Common Memory Space Socket 1 Timing Configuration +#define MCATT0 __REG(0x48000030) // Card interface Attribute Space Socket 0 Timing Configuration +#define MCATT1 __REG(0x48000034) // Card interface Attribute Space Socket 1 Timing Configuration +#define MCIO0 __REG(0x48000038) // Card interface I/O Space Socket 0 Timing Configuration +#define MCIO1 __REG(0x4800003C) // Card interface I/O Space Socket 1 Timing Configuration +#define MDMRS __REG(0x48000040) // MRS value to be written to SDRAM +#define BOOTDEF __REG(0x48000044) // Read-Only Boot-time register. Contains BOOT_SEL and PKG_SEL values. +// LCD Controller 0x44000000 +#define LCCR0 __REG(0x44000000) // LCD controller control register 0 +#define LCCR1 __REG(0x44000004) // LCD controller control register 1 +#define LCCR2 __REG(0x44000008) // LCD controller control register 2 +#define LCCR3 __REG(0x4400000C) // LCD controller control register 3 +#define FDADR0 __REG(0x44000200) // DMA channel 0 frame descriptor address register +#define FSADR0 __REG(0x44000204) // DMA channel 0 frame source address register +#define FIDR0 __REG(0x44000208) // DMA channel 0 frame ID register +#define LDCMD0 __REG(0x4400020C) // DMA channel 0 command register +#define FDADR1 __REG(0x44000210) // DMA channel 1 frame descriptor address register +#define FSADR1 __REG(0x44000214) // DMA channel 1 frame source address register +#define FIDR1 __REG(0x44000218) // DMA channel 1 frame ID register +#define LDCMD1 __REG(0x4400021C) // DMA channel 1 command register +#define FBR0 __REG(0x44000020) // DMA channel 0 frame branch register +#define FBR1 __REG(0x44000024) // DMA channel 1 frame branch register +#define LCSR __REG(0x44000038) // LCD controller status register +#define LIIDR __REG(0x4400003C) // LCD controller interrupt ID register +#define TRGBR __REG(0x44000040) // TMED RGB Seed Register +#define TCR __REG(0x44000044) // TMED Control Register +// DMA Controller 0x40000000 +#define DCSR0 __REG(0x40000000) // DMA Control / Status Register for Channel 0 +#define DCSR1 __REG(0x40000004) // DMA Control / Status Register for Channel 1 +#define DCSR2 __REG(0x40000008) // DMA Control / Status Register for Channel 2 +#define DCSR3 __REG(0x4000000c) // DMA Control / Status Register for Channel 3 +#define DCSR4 __REG(0x40000010) // DMA Control / Status Register for Channel 4 +#define DCSR5 __REG(0x40000014) // DMA Control / Status Register for Channel 5 +#define DCSR6 __REG(0x40000018) // DMA Control / Status Register for Channel 6 +#define DCSR7 __REG(0x4000001c) // DMA Control / Status Register for Channel 7 +#define DCSR8 __REG(0x40000020) // DMA Control / Status Register for Channel 8 +#define DCSR9 __REG(0x40000024) // DMA Control / Status Register for Channel 9 +#define DCSR10 __REG(0x40000028) // DMA Control / Status Register for Channel 10 +#define DCSR11 __REG(0x4000002c) // DMA Control / Status Register for Channel 11 +#define DCSR12 __REG(0x40000030) // DMA Control / Status Register for Channel 12 +#define DCSR13 __REG(0x40000034) // DMA Control / Status Register for Channel 13 +#define DCSR14 __REG(0x40000038) // DMA Control / Status Register for Channel 14 +#define DCSR15 __REG(0x4000003c) // DMA Control / Status Register for Channel 15 +#define DCSR16 __REG(0x40000040) // DMA Control / Status Register for Channel 16 +#define DCSR17 __REG(0x40000044) // DMA Control / Status Register for Channel 17 +#define DCSR18 __REG(0x40000048) // DMA Control / Status Register for Channel 18 +#define DCSR19 __REG(0x4000004c) // DMA Control / Status Register for Channel 19 +#define DCSR20 __REG(0x40000050) // DMA Control / Status Register for Channel 20 +#define DCSR21 __REG(0x40000054) // DMA Control / Status Register for Channel 21 +#define DCSR22 __REG(0x40000058) // DMA Control / Status Register for Channel 22 +#define DCSR23 __REG(0x4000005c) // DMA Control / Status Register for Channel 23 +#define DCSR24 __REG(0x40000060) // DMA Control / Status Register for Channel 24 +#define DCSR25 __REG(0x40000064) // DMA Control / Status Register for Channel 25 +#define DCSR26 __REG(0x40000068) // DMA Control / Status Register for Channel 26 +#define DCSR27 __REG(0x4000006c) // DMA Control / Status Register for Channel 27 +#define DCSR28 __REG(0x40000070) // DMA Control / Status Register for Channel 28 +#define DCSR29 __REG(0x40000074) // DMA Control / Status Register for Channel 29 +#define DCSR30 __REG(0x40000078) // DMA Control / Status Register for Channel 30 +#define DCSR31 __REG(0x4000007c) // DMA Control / Status Register for Channel 31 + +#define DALGN __REG(0x400000A0) // Alignment Register + +#define DINT __REG(0x400000f0) // DMA Interrupt Register +#define DRCMR0 __REG(0x40000100) // Request to Channel Map Register for DREQ 0 (companion chip request 0) +#define DRCMR1 __REG(0x40000104) // Request to Channel Map Register for DREQ 1 (companion chip request 1) +#define DRCMR2 __REG(0x40000108) // Request to Channel Map Register for I2S receive Request +#define DRCMR3 __REG(0x4000010c) // Request to Channel Map Register for I2S transmit Request +#define DRCMR4 __REG(0x40000110) // Request to Channel Map Register for BTUART receive Request +#define DRCMR5 __REG(0x40000114) // Request to Channel Map Register for BTUART transmit Request. +#define DRCMR6 __REG(0x40000118) // Request to Channel Map Register for FFUART receive Request +#define DRCMR7 __REG(0x4000011c) // Request to Channel Map Register for FFUART transmit Request +#define DRCMR8 __REG(0x40000120) // Request to Channel Map Register for AC97 microphone Request +#define DRCMR9 __REG(0x40000124) // Request to Channel Map Register for AC97 modem receive Request +#define DRCMR10 __REG(0x40000128) // Request to Channel Map Register for AC97 modem transmit Request +#define DRCMR11 __REG(0x4000012c) // Request to Channel Map Register for AC97 audio receive Request +#define DRCMR12 __REG(0x40000130) // Request to Channel Map Register for AC97 audio transmit Request +#define DRCMR13 __REG(0x40000134) // Request to Channel Map Register for SSP receive Request +#define DRCMR14 __REG(0x40000138) // Request to Channel Map Register for SSP transmit Request +#define DRCMR15 __REG(0x4000013c) // Reserved +#define DRCMR16 __REG(0x40000140) // Reserved +#define DRCMR17 __REG(0x40000144) // Request to Channel Map Register for ICP receive Request +#define DRCMR18 __REG(0x40000148) // Request to Channel Map Register for ICP transmit Request +#define DRCMR19 __REG(0x4000014c) // Request to Channel Map Register for STUART receive Request +#define DRCMR20 __REG(0x40000150) // Request to Channel Map Register for STUART transmit Request +#define DRCMR21 __REG(0x40000154) // Request to Channel Map Register for MMC receive Request +#define DRCMR22 __REG(0x40000158) // Request to Channel Map Register for MMC transmit Request +#define DRCMR23 __REG(0x4000015c) // RESERVED +#define DRCMR24 __REG(0x40000160) // RESERVED +#define DRCMR25 __REG(0x40000164) // Request to Channel Map Register for USB endpoint 1 Request +#define DRCMR26 __REG(0x40000168) // Request to Channel Map Register for USB endpoint 2 Request +#define DRCMR27 __REG(0x4000016C) // Request to Channel Map Register for USB endpoint 3 Request +#define DRCMR28 __REG(0x40000170) // Request to Channel Map Register for USB endpoint 4 Request +#define DRCMR29 __REG(0x40000174) // RESERVED +#define DRCMR30 __REG(0x40000178) // Request to Channel Map Register for USB endpoint 6 Request +#define DRCMR31 __REG(0x4000017C) // Request to Channel Map Register for USB endpoint 7 Request +#define DRCMR32 __REG(0x40000180) // Request to Channel Map Register for USB endpoint 8 Request +#define DRCMR33 __REG(0x40000184) // Request to Channel Map Register for USB endpoint 9 Request +#define DRCMR34 __REG(0x40000188) // RESERVED +#define DRCMR35 __REG(0x4000018C) // Request to Channel Map Register for USB endpoint 11 Request +#define DRCMR36 __REG(0x40000190) // Request to Channel Map Register for USB endpoint 12 Request +#define DRCMR37 __REG(0x40000194) // Request to Channel Map Register for USB endpoint 13 Request +#define DRCMR38 __REG(0x40000198) // Request to Channel Map Register for USB endpoint 14 Request +#define DRCMR39 __REG(0x4000019C) // RESERVED +#define DDADR0 __REG(0x40000200) // DMA Descriptor Address Register channel 0 +#define DSADR0 __REG(0x40000204) // DMA Source Address Register channel 0 +#define DTADR0 __REG(0x40000208) // DMA Target Address Register channel 0 +#define DCMD0 __REG(0x4000020C) // DMA Command Address Register channel 0 +#define DDADR1 __REG(0x40000210) // DMA Descriptor Address Register channel 1 +#define DSADR1 __REG(0x40000214) // DMA Source Address Register channel 1 +#define DTADR1 __REG(0x40000218) // DMA Target Address Register channel 1 +#define DCMD1 __REG(0x4000021C) // DMA Command Address Register channel 1 +#define DDADR2 __REG(0x40000220) // DMA Descriptor Address Register channel 2 +#define DSADR2 __REG(0x40000224) // DMA Source Address Register channel 2 +#define DTADR2 __REG(0x40000228) // DMA Target Address Register channel 2 +#define DCMD2 __REG(0x4000022C) // DMA Command Address Register channel 2 +#define DDADR3 __REG(0x40000230) // DMA Descriptor Address Register channel 3 +#define DSADR3 __REG(0x40000234) // DMA Source Address Register channel 3 +#define DTADR3 __REG(0x40000238) // DMA Target Address Register channel 3 +#define DCMD3 __REG(0x4000023C) // DMA Command Address Register channel 3 +#define DDADR4 __REG(0x40000240) // DMA Descriptor Address Register channel 4 +#define DSADR4 __REG(0x40000244) // DMA Source Address Register channel 4 +#define DTADR4 __REG(0x40000248) // DMA Target Address Register channel 4 +#define DCMD4 __REG(0x4000024C) // DMA Command Address Register channel 4 +#define DDADR5 __REG(0x40000250) // DMA Descriptor Address Register channel 5 +#define DSADR5 __REG(0x40000254) // DMA Source Address Register channel 5 +#define DTADR5 __REG(0x40000258) // DMA Target Address Register channel 5 +#define DCMD5 __REG(0x4000025C) // DMA Command Address Register channel 5 +#define DDADR6 __REG(0x40000260) // DMA Descriptor Address Register channel 6 +#define DSADR6 __REG(0x40000264) // DMA Source Address Register channel 6 +#define DTADR6 __REG(0x40000268) // DMA Target Address Register channel 6 +#define DCMD6 __REG(0x4000026C) // DMA Command Address Register channel 6 +#define DDADR7 __REG(0x40000270) // DMA Descriptor Address Register channel 7 +#define DSADR7 __REG(0x40000274) // DMA Source Address Register channel 7 +#define DTADR7 __REG(0x40000278) // DMA Target Address Register channel 7 +#define DCMD7 __REG(0x4000027C) // DMA Command Address Register channel 7 +#define DDADR8 __REG(0x40000280) // DMA Descriptor Address Register channel 8 +#define DSADR8 __REG(0x40000284) // DMA Source Address Register channel 8 +#define DTADR8 __REG(0x40000288) // DMA Target Address Register channel 8 +#define DCMD8 __REG(0x4000028C) // DMA Command Address Register channel 8 +#define DDADR9 __REG(0x40000290) // DMA Descriptor Address Register channel 9 +#define DSADR9 __REG(0x40000294) // DMA Source Address Register channel 9 +#define DTADR9 __REG(0x40000298) // DMA Target Address Register channel 9 +#define DCMD9 __REG(0x4000029C) // DMA Command Address Register channel 9 +#define DDADR10 __REG(0x400002a0) // DMA Descriptor Address Register channel 10 +#define DSADR10 __REG(0x400002a4) // DMA Source Address Register channel 10 +#define DTADR10 __REG(0x400002a8) // DMA Target Address Register channel 10 +#define DCMD10 __REG(0x400002aC) // DMA Command Address Register channel 10 +#define DDADR11 __REG(0x400002b0) // DMA Descriptor Address Register channel 11 +#define DSADR11 __REG(0x400002b4) // DMA Source Address Register channel 11 +#define DTADR11 __REG(0x400002b8) // DMA Target Address Register channel 11 +#define DCMD11 __REG(0x400002bC) // DMA Command Address Register channel 11 +#define DDADR12 __REG(0x400002c0) // DMA Descriptor Address Register channel 12 +#define DSADR12 __REG(0x400002c4) // DMA Source Address Register channel 12 +#define DTADR12 __REG(0x400002c8) // DMA Target Address Register channel 12 +#define DCMD12 __REG(0x400002cC) // DMA Command Address Register channel 12 +#define DDADR13 __REG(0x400002d0) // DMA Descriptor Address Register channel 13 +#define DSADR13 __REG(0x400002d4) // DMA Source Address Register channel 13 +#define DTADR13 __REG(0x400002d8) // DMA Target Address Register channel 13 +#define DCMD13 __REG(0x400002dC) // DMA Command Address Register channel 13 +#define DDADR14 __REG(0x400002e0) // DMA Descriptor Address Register channel 14 +#define DSADR14 __REG(0x400002e4) // DMA Source Address Register channel 14 +#define DTADR14 __REG(0x400002e8) // DMA Target Address Register channel 14 +#define DCMD14 __REG(0x400002eC) // DMA Command Address Register channel 14 +#define DDADR15 __REG(0x400002f0) // DMA Descriptor Address Register channel 15 +#define DSADR15 __REG(0x400002f4) // DMA Source Address Register channel 15 +#define DTADR15 __REG(0x400002f8) // DMA Target Address Register channel 15 +#define DCMD15 __REG(0x400002fC) // DMA Command Address Register channel 15 +// Full Function UART +#define FFRBR __REG(0x40100000) // Receive Buffer Register (read only) +#define FFTHR __REG(0x40100000) // Transmit Holding Register (write only) +#define FFIER __REG(0x40100004) // Interrupt Enable Register (read/write) +#define FFIIR __REG(0x40100008) // Interrupt ID Register (read only) +#define FFFCR __REG(0x40100008) // FIFO Control Register (write only) +#define FFLCR __REG(0x4010000C) // Line Control Register (read/write) +#define FFMCR __REG(0x40100010) // Modem Control Register (read/write) +#define FFLSR __REG(0x40100014) // Line Status Register (read only) +#define FFMSR __REG(0x40100018) // Modem Status Register (read only) +#define FFSPR __REG(0x4010001C) // Scratch Pad Register (read/write) +#define FFDLL __REG(0x40100000) // baud divisor lower byte (read/write) +#define FFDLH __REG(0x40100004) // baud divisor higher byte (read/write) +#define FFISR __REG(0x40100020) // slow Infrared Select Register (read/write) +// Bluetooth UART +#define BTRBR __REG(0x40200000) // Receive Buffer Register (read only) +#define BTTHR __REG(0x40200000) // Transmit Holding Register (write only) +#define BTIER __REG(0x40200004) // Interrupt Enable Register (read/write) +#define BTIIR __REG(0x40200008) // Interrupt ID Register (read only) +#define BTFCR __REG(0x40200008) // FIFO Control Register (write only) +#define BTLCR __REG(0x4020000C) // Line Control Register (read/write) +#define BTMCR __REG(0x40200010) // Modem Control Register (read/write) +#define BTLSR __REG(0x40200014) // Line Status Register (read only) +#define BTMSR __REG(0x40200018) // Modem Status Register (read only) +#define BTSPR __REG(0x4020001C) // Scratch Pad Register (read/write) +#define BTDLL __REG(0x40200000) // baud divisor lower byte (read/write) +#define BTDLH __REG(0x40200004) // baud divisor higher byte (read/write) +#define BTISR __REG(0x40200020) // slow Infrared Select Register (read/write) +// Standard UART +#define STRBR __REG(0x40700000) // Receive Buffer Register (read only) +#define STTHR __REG(0x40700000) // Transmit Holding Register (write only) +#define STIER __REG(0x40700004) // Interrupt Enable Register (read/write) +#define STIIR __REG(0x40700008) // Interrupt ID Register (read only) +#define STFCR __REG(0x40700008) // FIFO Control Register (write only) +#define STLCR __REG(0x4070000C) // Line Control Register (read/write) +#define STMCR __REG(0x40700010) // Modem Control Register (read/write) +#define STLSR __REG(0x40700014) // Line Status Register (read only) +#define STMSR __REG(0x40700018) // Reserved +#define STSPR __REG(0x4070001C) // Scratch Pad Register (read/write) +#define STDLL __REG(0x40700000) // baud divisor lower byte (read/write) +#define STDLH __REG(0x40700004) // baud divisor higher byte (read/write) +#define STISR __REG(0x40700020) // slow Infrared Select Register (read/write) +// I2C +#define IBMR __REG(0x40301680) // I2C Bus Monitor Register - IBMR +#define IDBR __REG(0x40301688) // I2C Data Buffer Register - IDBR +#define ICR __REG(0x40301690) // I2C Control Register - ICR +#define ISR __REG(0x40301698) // I2C Status Register - ISR +#define ISAR __REG(0x403016A0) // I2C Slave Address Register - ISAR +//#define ICCR __REG(0x403016A8) // I2C Clock Count Register - ICCR +// I2S +#define SACR0 __REG(0x40400000) // Global Control Register +#define SACR1 __REG(0x40400004) // Serial Audio I2S/MSB-Justified Control Register +// - 0x4040-0008 ) // Reserved +#define SASR0 __REG(0x4040000C) // Serial Audio I2S/MSB-Justified Interface and FIFO Status Register +// - 0x4040-0010 ) // Reserved +#define SAIMR __REG(0x40400014) // Serial Audio Interrupt Mask Register +#define SAICR __REG(0x40400018) // Serial Audio Interrupt Clear Register +// 0x4040-001C +// through +// Reserved __REG(0x4040)-0058 - +#define SAITR __REG(0x4040005C) // Serial Audio Interrupt Test Register +#define SADIV __REG(0x40400060) // Audio clock divider register. See section Section 12.3, "Serial Audio Clocks and Sampling Frequencies" on page 12-7. +// - 0x4040-0064 Reserved +// through +// Reserved __REG(0x4040)-007C - +#define SADR __REG(0x40400080) // Serial Audio Data Register (TX and RX FIFO access register). +// - 0x4040-0084 to 0x404F-FFFF Reserved +// AC97 +#define POCR __REG(0x40500000) // PCM Out Control Register +#define PICR __REG(0x40500004) // PCM In Control Register +#define MCCR __REG(0x40500008) // Mic In Control Register +#define GCR __REG(0x4050000C) // Global Control Register +#define POSR __REG(0x40500010) // PCM Out Status Register +#define PISR __REG(0x40500014) // PCM In Status Register +#define MCSR __REG(0x40500018) // Mic In Status Register +#define GSR __REG(0x4050001C) // Global Status Register +#define CAR __REG(0x40500020) // CODEC Access Register +// - 0x4050-0024 through 0x4050-003C Reserved +#define PCDR __REG(0x40500040) // PCM FIFO Data Register +// - 0x4050-0044 through 0x4050-005C Reserved +#define MCDR __REG(0x40500060) // Mic-in FIFO Data Register +// - 0x4050-0064 through 0x4050-00FC Reserved +#define MOCR __REG(0x40500100) // MODEM Out Control Register +// - 0x4050-0104 Reserved +#define MICR __REG(0x40500108) // MODEM In Control Register +// - 0x4050-010C Reserved +#define MOSR __REG(0x40500110) // MODEM Out Status Register +// - 0x4050-0114 Reserved +#define MISR __REG(0x40500118) // MODEM In Status Register +// - 0x4050-011C through 0x4050-013C Reserved +#define MODR __REG(0x40500140) // MODEM FIFO Data Register +// - 0x4050-0144 through 0x4050-01FC Reserved +// (0x4050-0200 through 0x4050-02FC) +// with all in increments of 0x00004 Primary Audio CODEC registers +// (0x4050-0300 through 0x4050-03FC) +// with all in increments of 0x00004 Secondary Audio CODEC registers +// +// with all in increments of 0x0000-0004 Primary MODEM CODEC registers +// +// with all in increments of 0x00004 Secondary MODEM CODEC registers +// UDC +#define UDCCR __REG(0x40600000) // UDC control register +#define UDCCS0 __REG(0x40600010) // UDC Endpoint 0 Control/Status Register +#define UDCCS1 __REG(0x40600014) // UDC Endpoint 1 (IN) Control/Status Register +#define UDCCS2 __REG(0x40600018) // UDC Endpoint 2 (OUT) Control/Status Register +#define UDCCS3 __REG(0x4060001C) // UDC Endpoint 3 (IN) Control/Status Register +#define UDCCS4 __REG(0x40600020) // UDC Endpoint 4 (OUT) Control/Status Register +#define UDCCS5 __REG(0x40600024) // UDC Endpoint 5 (Interrupt) Control/Status Register +#define UDCCS6 __REG(0x40600028) // UDC Endpoint 6 (IN) Control/Status Register +#define UDCCS7 __REG(0x4060002C) // UDC Endpoint 7 (OUT) Control/Status Register +#define UDCCS8 __REG(0x40600030) // UDC Endpoint 8 (IN) Control/Status Register +#define UDCCS9 __REG(0x40600034) // UDC Endpoint 9 (OUT) Control/Status Register +#define UDCCS10 __REG(0x40600038) // UDC Endpoint 10 (Interrupt) Control/Status Register +#define UDCCS11 __REG(0x4060003C) // UDC Endpoint 11 (IN) Control/Status Register +#define UDCCS12 __REG(0x40600040) // UDC Endpoint 12 (OUT) Control/Status Register +#define UDCCS13 __REG(0x40600044) // UDC Endpoint 13 (IN) Control/Status Register +#define UDCCS14 __REG(0x40600048) // UDC Endpoint 14 (OUT) Control/Status Register +#define UDCCS15 __REG(0x4060004C) // UDC Endpoint 15 (Interrupt) Control/Status Register +#define UFNRH __REG(0x40600060) // UDC Frame Number Register High +#define UFNRL __REG(0x40600064) // UDC Frame Number Register Low +#define UDDR0 __REG(0x40600080) // UDC Endpoint 0 Data Register +#define UDDR1 __REG(0x40600100) // UDC Endpoint 1 Data Register +#define UDDR2 __REG(0x406001C0) // UDC Endpoint 2 Data Register +#define UDDR3 __REG(0x40600200) // UDC Endpoint 3 Data Register +#define UDDR4 __REG(0x40600400) // UDC Endpoint 4 Data Register +#define UDDR5 __REG(0x406000A0) // UDC Endpoint 5 Data Register +#define UDDR6 __REG(0x40600600) // UDC Endpoint 6 Data Register +#define UDDR7 __REG(0x40600680) // UDC Endpoint 7 Data Register +#define UDDR8 __REG(0x40600700) // UDC Endpoint 8 Data Register +#define UDDR9 __REG(0x40600A00) // UDC Endpoint 9 Data Register +#define UDDR10 __REG(0x406000C0) // UDC Endpoint 10 Data Register +#define UDDR11 __REG(0x40600B00) // UDC Endpoint 11 Data Register +#define UDDR12 __REG(0x40600B80) // UDC Endpoint 12 Data Register +#define UDDR13 __REG(0x40600C00) // UDC Endpoint 13 Data Register +#define UDDR14 __REG(0x40600E00) // UDC Endpoint 14 Data Register +#define UDDR15 __REG(0x406000E0) // UDC Endpoint 15 Data Register +#define UICR0 __REG(0x40600050) // UDC Interrupt Control Register 0 +#define UICR1 __REG(0x40600054) // UDC Interrupt Control Register 1 +#define USIR0 __REG(0x40600058) // UDC Status Interrupt Register 0 +#define USIR1 __REG(0x4060005C) // UDC Status Interrupt Register 1 +// ICP +#define ICCR0 __REG(0x40800000) // ICP control register 0 +#define ICCR1 __REG(0x40800004) // ICP control register 1 +#define ICCR2 __REG(0x40800008) // ICP control register 2 +#define ICDR __REG(0x4080000C) // ICP data register +// - 0x40800010 Reserved +#define ICSR0 __REG(0x40800014) // ICP status register 0 +#define ICSR1 __REG(0x40800018) // ICP status register 1 +// - 0x4080001C - 0x4080FFFF Reserved +// RTC +#define RCNR __REG(0x40900000) //RTC count register +#define RTAR __REG(0x40900004) //RTC alarm register +#define RTSR __REG(0x40900008) //RTC status register +#define RTTR __REG(0x4090000C) //RTC timer trim register + +// OS Timer +#define OSMR0 __REG(0x40A00000) // OS timer match registers<3:0> +#define OSMR1 __REG(0x40A00004) // +#define OSMR2 __REG(0x40A00008) // +#define OSMR3 __REG(0x40A0000C) // +#define OSCR __REG(0x40A00010) // OS timer counter register +#define OSSR __REG(0x40A00014) // OS timer status register +#define OWER __REG(0x40A00018) // OS timer watchdog enable register +#define OIER __REG(0x40A0001C) // OS timer interrupt enable register +// PWM 0 +#define PWMCTRL0 __REG(0x40B00000) // PWM 0 Control Register +#define PWDUTY0 __REG(0x40B00004) // PWM 0 Duty Cycle Register +#define PERVAL0 __REG(0x40B00008) // PWM 0 Period Control Register +// PWM 1 +#define PWMCTRL1 __REG(0x40C00000) // PWM 1Control Register +#define PWDUTY1 __REG(0x40C00004) // PWM 1 Duty Cycle Register +#define PERVAL1 __REG(0x40C00008) // PWM 1 Period Control Register +// Interrupt Control +#define ICIP __REG(0x40D00000) // Interrupt controller IRQ pending register +#define ICIP2 __REG(0x40D0009c) // Interrupt controller IRQ pending register + +#define ICMR __REG(0x40D00004) // Interrupt controller mask register +#define ICMR2 __REG(0x40D000a0) // Interrupt controller mask register + +#define ICLR __REG(0x40D00008) // Interrupt controller level register +#define ICLR2 __REG(0x40D000a4) // Interrupt controller level register + +#define ICFP __REG(0x40D0000C) // Interrupt controller FIQ pending register +#define ICFP2 __REG(0x40D000a8) // Interrupt controller FIQ pending register + +#define ICPR __REG(0x40D00010) // Interrupt controller pending register +#define ICPR2 __REG(0x40D000ac) // Interrupt controller pending register + +#define ICCR __REG(0x40D00014) // Interrupt controller control register + +// GPIO +#define GPLRa __REG(0x40E00000) // GPIO pin-level register GPIO<31:0> +#define GPLRb __REG(0x40E00004) // GPIO pin-level register GPIO<63:32> +#define GPLRc __REG(0x40E00008) // GPIO pin-level register GPIO<95:64> +#define GPLRd __REG(0x40E00100) // GPIO pin-level register GPIO<120:95> + +#define GPDRa __REG(0x40E0000C) // GPIO pin direction register GPIO<31:0> +#define GPDRb __REG(0x40E00010) // GPIO pin direction register GPIO<63:32> +#define GPDRc __REG(0x40E00014) // GPIO pin direction register GPIO<95:64> +#define GPDRd __REG(0x40E0010c) // GPIO pin direction register GPIO<120:96> + +#define GPSRa __REG(0x40E00018) // GPIO pin output set register GPIO<31:0> +#define GPSRb __REG(0x40E0001C) // GPIO pin output set register GPIO<63:32> +#define GPSRc __REG(0x40E00020) // GPIO pin output set register GPIO<80:95> +#define GPSRd __REG(0x40E00118) // GPIO pin output set register GPIO<120:96> + +#define GPCRa __REG(0x40E00024) // GPIO pin output clear register GPIO<31:0> +#define GPCRb __REG(0x40E00028) // GPIO pin output clear register GPIO <63:32> +#define GPCRc __REG(0x40E0002C) // GPIO pin output clear register GPIO <80:95> +#define GPCRd __REG(0x40E00124) // GPIO pin output clear register GPIO <120:96> + +#define GRERa __REG(0x40E00030) // GPIO rising-edge detect register GPIO<31:0> +#define GRERb __REG(0x40E00034) // GPIO rising-edge detect register GPIO<63:32> +#define GRERc __REG(0x40E00038) // GPIO rising-edge detect register GPIO<95:64> +#define GRERd __REG(0x40E00130) // GPIO rising-edge detect register GPIO<120:96> + +#define GFERa __REG(0x40E0003C) // GPIO falling-edge detect register GPIO<31:0> +#define GFERb __REG(0x40E00040) // GPIO falling-edge detect register GPIO<63:32> +#define GFERc __REG(0x40E00044) // GPIO falling-edge detect register GPIO<95:64> +#define GFERd __REG(0x40E0013c) // GPIO falling-edge detect register GPIO<120:96> + +#define GEDRa __REG(0x40E00048) // GPIO edge detect status register GPIO<31:0> +#define GEDRb __REG(0x40E0004C) // GPIO edge detect status register GPIO<63:32> +#define GEDRc __REG(0x40E00050) // GPIO edge detect status register GPIO<95:64> +#define GEDRd __REG(0x40E00148) // GPIO edge detect status register GPIO<120:96> + +#define GAFR0a __REG(0x40E00054) // GPIO alternate function select register GPIO<15:0> +#define GAFR1a __REG(0x40E00058) // GPIO alternate function select register GPIO<31:16> +#define GAFR0b __REG(0x40E0005C) // GPIO alternate function select register GPIO<47:32> +#define GAFR1b __REG(0x40E00060) // GPIO alternate function select register GPIO<63:48> +#define GAFR0c __REG(0x40E00064) // GPIO alternate function select register GPIO<79:64> +#define GAFR1c __REG(0x40E00068) // GPIO alternate function select register GPIO<95:80> +#define GAFR0d __REG(0x40E0006c) // GPIO alternate function select register GPIO<111:96> +#define GAFR1d __REG(0x40E00070) // GPIO alternate function select register GPIO<120:112> + +// Power Manager and Reset Control +#define PMCR __REG(0x40F00000) // Power Manager Control register +#define PSSR __REG(0x40F00004) // Power Manager Sleep Status register +#define PSPR __REG(0x40F00008) // Power Manager Scratch Pad register +#define PWER __REG(0x40F0000C) // Power Manager Wake-up Enable register +#define PRER __REG(0x40F00010) // Power Manager GPIO Rising-edge Detect Enable register +#define PFER __REG(0x40F00014) // Power Manager GPIO Falling-edge Detect Enable register +#define PEDR __REG(0x40F00018) // Power Manager GPIO Edge Detect Status register +#define PCFR __REG(0x40F0001C) // Power Manager General Configuration register +#define PGSRx __REG(0x40F00020) // Power Manager GPIO Sleep State register for GP[31-0] +#define PGSRy __REG(0x40F00024) // Power Manager GPIO Sleep State register for GP[63-32] +#define PGSRz __REG(0x40F00028) // Power Manager GPIO Sleep State register for GP[84-64] +// - 0x40F0002C Reserved +// - 0x40F0002C Reserved +#define RCSR __REG(0x40F00030) // Reset controller status register +// - 0x40F00034 - 0x40F0017F Reserved +#define PWRIBMR __REG(0x40f00180) // Power I2C Bus Monitor Register +#define PWRIDBR __REG(0x40f00188) // Power I2C Data Buffer Register +#define PWRICR __REG(0x40f00190) // Power I2C Control Register +#define PWRISR __REG(0x40f00198) // Power I2C Status Register +#define PWRISAR __REG(0x40f001A0) // Power I2C Slave Address Register +// - 0x40F001A4 - 0x40FFFFFF Reserved + +// Clocks Manager +#define CCCR __REG(0x41300000) // Core Clock Configuration Register +#define CKEN __REG(0x41300004) // Clock Enable Register +#define OSCC __REG(0x41300008) // Oscillator Configuration Register +// - 0x4130000C - 0x413FFFFF Reserved +// SSP +#define SSCR0 __REG(0x41000000) // SSP Control Register 0 +#define SSCR1 __REG(0x41000004) // SSP Control Register 1 +#define SSSR __REG(0x41000008) // SSP Status Register +#define SSITR __REG(0x4100000C) // SSP Interrupt Test Register +#define SSDR __REG(0x41000010) // SSP Data Write Register/SSP Data Read Register +// - 0x41000014 - 0x410FFFFF Reserved +// MMC +#define MMCSTRPCL __REG(0x41100000) // Control to start and stop MMC clock +#define MMCSTAT __REG(0x41100004) // MMC status register (read only) +#define MMCCLKRT __REG(0x41100008) // MMC clock rate +#define MMCSPI __REG(0x4110000c) // SPI mode control bits +#define MMCCMDAT __REG(0x41100010) // Command/response/data sequence control +#define MMCRESTO __REG(0x41100014) // Expected response time out +#define MMCRDTO __REG(0x41100018) // Expected data read time out +#define MMCBLKLEN __REG(0x4110001c) // Block length of data transaction +#define MMCNOB __REG(0x41100020) // "Number of blocks, for block mode" +#define MMCPRTBUF __REG(0x41100024) // Partial MMC_TXFIFO FIFO written +#define MMCIMASK __REG(0x41100028) // Interrupt Mask +#define MMCIREG __REG(0x4110002c) // Interrupt Register (read only) +#define MMCCMD __REG(0x41100030) // Index of current command +#define MMCARGH __REG(0x41100034) // MSW part of the current command argument +#define MMCARGL __REG(0x41100038) // LSW part of the current command argument +#define MMCRES __REG(0x4110003c) // Response FIFO (read only) +#define MMCRXFIFO __REG(0x41100040) // Receive FIFO (read only) +#define MMCTXFIFO __REG(0x41100044) // Transmit FIFO (write only) +// ADC +#define ADCD __REG(0x41200000) // ADC Data Register +#define ADCS __REG(0x41200004) // ADC Control Register +#define ADCE __REG(0x41200008) // ADC Enable Register +#define ADCTSC __REG(0x4120000C) // ADC Touch Screen Control Register +#define ADCTSS1 __REG(0x41200010) // ADC Touch Screen Setup Register 1 +#define ADCTSS2 __REG(0x41200014) // ADC Touch Screen Setup Register 2 +// -- 0x41200018 - 0x412FFFF Reserved + +/* I2C register definitions */ +/* some bit masks of register ICR */ +#define ICR_START 0x00000001 +#define ICR_STOP 0x00000002 +#define ICR_ACKNAK 0x00000004 +#define ICR_TB 0x00000008 +#define ICR_MA 0x00000010 +#define ICR_SCLE 0x00000020 +#define ICR_IUE 0x00000040 +#define ICR_GCD 0x00000080 +#define ICR_ITEIE 0x00000100 +#define ICR_IRFIE 0x00000200 +#define ICR_BEIE 0x00000400 +#define ICR_SSDIE 0x00000800 +#define ICR_ALDIE 0x00001000 +#define ICR_SADIE 0x00002000 +#define ICR_UR 0x00004000 +#define ICR_FM 0x00008000 + +/* some bit masks of register ISR */ +#define ISR_RWM 0x00000001 +#define ISR_ACKNACK 0x00000002 +#define ISR_UB 0x00000004 +#define ISR_IBB 0x00000008 +#define ISR_SSD 0x00000010 +#define ISR_ALD 0x00000020 +#define ISR_ITE 0x00000040 +#define ISR_IRF 0x00000080 +#define ISR_GCAD 0x00000100 +#define ISR_SAD 0x00000200 +#define ISR_BED 0x00000400 + +#define OSSR_TIMER0 (0x1 << 0) +#define OSSR_TIMER1 (0x1 << 1) +#define OSSR_TIMER2 (0x1 << 2) +#define OSSR_TIMER3 (0x1 << 3) + +#define OIER_TIMER0 (0x1 << 0) +#define OIER_TIMER1 (0x1 << 1) +#define OIER_TIMER2 (0x1 << 2) +#define OIER_TIMER3 (0x1 << 3) + +#define OWER_WME (0x1 << 0) +#endif diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram.h new file mode 100755 index 00000000..90f533c6 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram.ldi new file mode 100755 index 00000000..1b0f2f9e --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_128s32f.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_128s32f.h new file mode 100755 index 00000000..08319f38 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_128s32f.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (128*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_128s32f.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_128s32f.ldi new file mode 100755 index 00000000..99e740d2 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_128s32f.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (128*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f.h new file mode 100755 index 00000000..90f533c6 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f.ldi new file mode 100755 index 00000000..1b0f2f9e --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f128s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f128s.h new file mode 100755 index 00000000..08319f38 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f128s.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (128*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f128s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f128s.ldi new file mode 100755 index 00000000..99e740d2 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f128s.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (128*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f32s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f32s.h new file mode 100755 index 00000000..36118bcf --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f32s.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (32*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f32s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f32s.ldi new file mode 100755 index 00000000..a0378bbd --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f32s.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (32*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f64s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f64s.h new file mode 100755 index 00000000..90f533c6 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f64s.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f64s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f64s.ldi new file mode 100755 index 00000000..1b0f2f9e --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_16f64s.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f.h new file mode 100755 index 00000000..90f533c6 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f.ldi new file mode 100755 index 00000000..1b0f2f9e --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f32s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f32s.h new file mode 100755 index 00000000..36118bcf --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f32s.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (32*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f32s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f32s.ldi new file mode 100755 index 00000000..a0378bbd --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32f32s.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (32*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32mb.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32mb.h new file mode 100755 index 00000000..36118bcf --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32mb.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (32*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32mb.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32mb.ldi new file mode 100755 index 00000000..a0378bbd --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_32mb.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (32*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f.h new file mode 100755 index 00000000..90f533c6 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f.ldi new file mode 100755 index 00000000..1b0f2f9e --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f128s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f128s.h new file mode 100755 index 00000000..08319f38 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f128s.h @@ -0,0 +1,18 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (128*1024*1024) +#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 (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__pci_window) []; +#endif + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f128s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f128s.ldi new file mode 100755 index 00000000..99e740d2 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_ram_64f128s.ldi @@ -0,0 +1,26 @@ + +#include + +MEMORY +{ + vrom : ORIGIN = 0x00000000, LENGTH = 0x1000 + ram : ORIGIN = 0xA0000000, LENGTH = (128*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (vrom, 0x20, LMA_EQ_VMA) // virtual ROM addr, but really in physical ram + SECTION_rom_vectors (ram, 0xa0020000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom.h new file mode 100755 index 00000000..b42d4d96 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (16*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom.ldi new file mode 100755 index 00000000..4c0de2dc --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (16*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_128s32f.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_128s32f.h new file mode 100755 index 00000000..01fac329 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_128s32f.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (128*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (32*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_128s32f.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_128s32f.ldi new file mode 100755 index 00000000..28849554 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_128s32f.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (128*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (32*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f.h new file mode 100755 index 00000000..b42d4d96 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (16*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f.ldi new file mode 100755 index 00000000..4c0de2dc --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (16*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f128s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f128s.h new file mode 100755 index 00000000..af814c5b --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f128s.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (128*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (16*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f128s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f128s.ldi new file mode 100755 index 00000000..b1616987 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f128s.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (128*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (16*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f32s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f32s.h new file mode 100755 index 00000000..c36f1cfc --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f32s.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (32*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (16*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f32s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f32s.ldi new file mode 100755 index 00000000..50d11039 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f32s.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (32*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (16*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f64s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f64s.h new file mode 100755 index 00000000..b42d4d96 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f64s.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (16*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f64s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f64s.ldi new file mode 100755 index 00000000..4c0de2dc --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_16f64s.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (16*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f.h new file mode 100755 index 00000000..9cb04c49 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (32*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f.ldi new file mode 100755 index 00000000..26164977 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (32*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f32s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f32s.h new file mode 100755 index 00000000..f9dfaa40 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f32s.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (32*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (32*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f32s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f32s.ldi new file mode 100755 index 00000000..29717529 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32f32s.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (32*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (32*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32mb.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32mb.h new file mode 100755 index 00000000..c36f1cfc --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32mb.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (32*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (16*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32mb.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32mb.ldi new file mode 100755 index 00000000..50d11039 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_32mb.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (32*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (16*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f.h new file mode 100755 index 00000000..3147410a --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (64*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (64*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f.ldi new file mode 100755 index 00000000..9b08f7da --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (64*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (64*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f128s.h b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f128s.h new file mode 100755 index 00000000..6d2d5ca3 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f128s.h @@ -0,0 +1,25 @@ + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0xA0000000) +#define CYGMEM_REGION_ram_SIZE (128*1024*1024) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x00000000) +#define CYGMEM_REGION_rom_SIZE (64*1024*1024) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - 0x100000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +#endif + + + + + + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f128s.ldi b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f128s.ldi new file mode 100755 index 00000000..157cbbc3 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/pkgconf/mlt_arm_xscale_triton270_rom_64f128s.ldi @@ -0,0 +1,32 @@ +#include + +MEMORY +{ + ram : ORIGIN = 0xA0000000, LENGTH = (128*1024*1024) + rom : ORIGIN = 0x00000000, LENGTH = (64*1024*1024) +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (ram, 0xA0000000, AT(0x00000000)) // vector page gets remapped from ROM to RAM + SECTION_text (rom, 0x00002000, LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (rom, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0xA000A000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} + + + +/* + SECTION_config (ram, 0xA0001000, LMA_EQ_VMA) +*/ + diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/plf_io.h b/packages/hal/arm/xscale/triton270/v2_0/include/plf_io.h new file mode 100755 index 00000000..15cbbcd2 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/plf_io.h @@ -0,0 +1,126 @@ +#ifndef CYGONCE_PLF_IO_H +#define CYGONCE_PLF_IO_H + +//============================================================================= +// +// plf_io.h +// +// Platform specific IO support +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): usteinkohl +// Contributors: usteinkohl +// Date: 16th January 2003 +// Purpose: TRITON270 SK3 IO support macros +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + + + +unsigned long _fu_phys_address(unsigned long); + + + +#define CYGARC_PHYSICAL_ADDRESS(_x_) (_fu_phys_address((unsigned long)_x_)) + + +#ifdef CYGHWR_REDBOOT_LINUX_ATAG_MEM +#error CYGHWR_REDBOOT_LINUX_ATAG_MEM already defined +#endif +#define CYGHWR_REDBOOT_LINUX_ATAG_MEM(_p_) \ + CYG_MACRO_START \ + /* Next ATAG_MEM. */ \ + _p_->hdr.size = (sizeof(struct tag_mem32) + sizeof(struct tag_header))/sizeof(long); \ + _p_->hdr.tag = ATAG_MEM; \ + /* Round up so there's only one bit set in the memory size. \ + * Don't double it if it's already a power of two, though. \ + */ \ + _p_->u.mem.size = CYGMEM_REGION_ram_SIZE; \ + _p_->u.mem.start = CYGMEM_REGION_ram; \ + CYG_MACRO_END + + + +//----------------------------------------------------------------------------- + +// IDE interface + + +#define HAL_HAG_IDE_SKT1_CMD (0x20000000) +#define HAL_HAG_IDE_SKT1_CTL (0x20400000) +#define HAL_HAG_IDE_SKT2_CMD (0x20000000) +#define HAL_HAG_IDE_SKT2_CTL (0x20400000) + + + + + + +#define HAL_IDE_NUM_CONTROLLERS 1 + +// Initialize the IDE controller(s). +externC void cyg_hal_plf_ide_init(void); +#define HAL_IDE_INIT() cyg_hal_plf_ide_init() + + + +#define __CMD_ADDR(__n) ((__n) ? HAL_HAG_IDE_SKT2_CMD : HAL_HAG_IDE_SKT1_CMD) +#define __CTL_ADDR(__n) ((__n) ? HAL_HAG_IDE_SKT2_CTL : HAL_HAG_IDE_SKT1_CTL) + +#define HAL_IDE_READ_UINT8( __ctlr, __regno , __val ) \ + HAL_READ_UINT8(__CMD_ADDR(__ctlr) + (__regno), (__val)) +#define HAL_IDE_READ_UINT16( __ctlr, __regno, __val ) \ + HAL_READ_UINT16(__CMD_ADDR(__ctlr) + (__regno), (__val)) +#define HAL_IDE_READ_ALTSTATUS( __ctlr, __val ) \ + HAL_READ_UINT16(__CTL_ADDR(__ctlr) + 2, (__val)) + +#define HAL_IDE_WRITE_UINT8( __ctlr, __regno, __val ) \ + HAL_WRITE_UINT8(__CMD_ADDR(__ctlr) + (__regno), (__val)) +#define HAL_IDE_WRITE_UINT16( __ctlr, __regno, __val ) \ + HAL_WRITE_UINT16(__CMD_ADDR(__ctlr) + (__regno), (__val)) +#define HAL_IDE_WRITE_CONTROL( __ctlr, __val ) \ + HAL_WRITE_UINT16(__CTL_ADDR(__ctlr) + 2, (__val)) + + + +// end of plf_io.h +#endif // CYGONCE_PLF_IO_H diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/plf_stub.h b/packages/hal/arm/xscale/triton270/v2_0/include/plf_stub.h new file mode 100755 index 00000000..988fa7d4 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/plf_stub.h @@ -0,0 +1,102 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors:jskov, gthomas, msalter +// Date: 2000-10-10 +// Purpose: Platform HAL stub support for Ka-Ro TRITON27x boards. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include // CYG_UNUSED_PARAM + +#include // architecture stub support + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. +#define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//---------------------------------------------------------------------------- +// Reset. +#include // registers +#include // IO macros + +// FIXME - Can we reset the board? +#define HAL_STUB_PLATFORM_RESET() CYG_EMPTY_STATEMENT + +#define HAL_STUB_PLATFORM_RESET_ENTRY 0x00000000 + +extern int cyg_hal_plf_hw_breakpoint(int setflag, void *addr, int len); +extern int cyg_hal_plf_hw_watchpoint(int setflag, void *addr, int len, int type); +extern int cyg_hal_plf_is_stopped_by_hardware(void **paddr); + +#define HAL_STUB_HW_BREAKPOINT(f,a,l) cyg_hal_plf_hw_breakpoint((f),(a),(l)) +#define HAL_STUB_HW_WATCHPOINT(f,a,l,t) cyg_hal_plf_hw_watchpoint((f),(a),(l),(t)) +#define HAL_STUB_IS_STOPPED_BY_HARDWARE(p) cyg_hal_plf_is_stopped_by_hardware(&(p)) + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h diff --git a/packages/hal/arm/xscale/triton270/v2_0/include/triton270_1w_dev.inl b/packages/hal/arm/xscale/triton270/v2_0/include/triton270_1w_dev.inl new file mode 100755 index 00000000..6d630bde --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/include/triton270_1w_dev.inl @@ -0,0 +1,387 @@ + +#define SNO_WRITE_SCRATCHPAD 0x0f +#define SNO_READ_SCRATCHPAD 0xaa +#define SNO_COPY_SCRATCHPAD 0x55 +#define SNO_READ_MEMORY 0xf0 +#define SNO_WRITE_APPLICATION_REG 0x99 +#define SNO_READ_STATUS_REG 0x66 +#define SNO_READ_APPLICATION_REG 0xc3 +#define SNO_COPY_LOCK 0x5a +#define SNO_READ_ROM 0x33 +#define SNO_MATCH_ROM 0x55 +#define SNO_SKIP_ROM 0xcc +#define SNO_SEARCH_ROM 0xf0 + +int reset_1w(void) +{ + int fu_result; + + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40a00010;" // timer 500 usec + "ldr r6, [r5];" + "ldr r7, =1800;" + "adc r6, r6, r7;" + + "112:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 112b;" + + "ldr r5, =0x40e00018;" // output set register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + "ldr r5, =0x40a00010;" // timer 80 usec + "ldr r6, [r5];" + "ldr r7, =288;" + "adc r6, r6, r7;" + + "113:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 113b;" + + "ldr r5, =0x40e00000;" // pin level register + "ldr r6, [r5];" + "and r6, r6, r4;" + "mov %0, r6, lsr#5;" // shift right by 5 + + "ldr r5, =0x40a00010;" // timer 500 usec + "ldr r6, [r5];" + "ldr r7, =1800;" + "adc r6, r6, r7;" + + "114:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 114b;" + + : "=r"(fu_result) + : + : "r4","r5","r6","r7"); + + return fu_result; +} + +int sno_read(void) +{ + int fu_result; + + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40a00010;" // timer 5 usec + "ldr r6, [r5];" + "adc r6, r6, #18;" + + "112:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 112b;" + + "ldr r5, =0x40e00018;" // output set register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + "ldr r5, =0x40a00010;" // timer 5 usec + "ldr r6, [r5];" + "adc r6, r6, #18;" + + "113:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 113b;" + + "ldr r5, =0x40e00000;" // pin level register + "ldr r6, [r5];" + "and r6, r6, r4;" + "mov %0, r6, lsr#5;" // shift right by 5 + + : "=r"(fu_result) + : + : "r4","r5","r6","r7"); + + return fu_result; +} + +void sno_write_1(void) +{ + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40a00010;" // timer 5 usec + "ldr r6, [r5];" + "adc r6, r6, #18;" + + "112:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 112b;" + + "ldr r5, =0x40e00018;" // output set register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + "ldr r5, =0x40a00010;" // timer 60 usec + "ldr r6, [r5];" + "adc r6, r6, #214;" + + "113:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 113b;" + + : + : + : "r4","r5","r6","r7"); +} + +void sno_write_0(void) +{ + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40a00010;" // timer 67 usec + "ldr r6, [r5];" + "adc r6, r6, #240;" + + "112:;" + "ldr r7, [r5];" + "cmp r7, r6;" + "bls 112b;" + + "ldr r5, =0x40e00018;" // output set register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + : + : + : "r4","r5","r6","r7"); +} + +void sno_write_byte (unsigned char sbyte) +{ + unsigned char mask; + int i; + + mask = 0x01; + for (i = 0; i < 8; i++) { + if (sbyte & mask) { + sno_write_1(); + } else { + sno_write_0(); + } + mask <<= 1; + HAL_DELAY_US(1); + } +} + +unsigned char sno_read_byte (void) +{ + unsigned char mask = 0x01; + unsigned char abyte = 0x00; + unsigned char return_value; + int i; + + for (i = 0; i < 8; i++) { + return_value = sno_read(); + if (return_value) { + abyte |= mask; + } + HAL_DELAY_US(80); + mask <<= 1; + } + return abyte; +} + +unsigned char sno_crc8(unsigned char * data, unsigned long count) +{ + unsigned char look_up_table[256] = { + 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, + 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, + 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, + 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, + 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, + 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, + 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, + 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, + 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, + 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, + 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, + 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, + 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, + 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, + 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, + 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53}; + int i; + unsigned char crc = 0; + + for (i = 0; i < count; i++) { + crc = look_up_table[crc ^ data[i]]; + } + return crc; +} + +int sno_reset(void) +{ + int result; + + result = reset_1w(); + if (!result) { + //diag_printf("presence pulse detected\n"); + return 0; + } else { + diag_printf("NO presence pulse detected\n"); + return 1; + } +} + +cyg_bool get_esa_1w(cyg_uint8 *buffer) +{ + int i; + unsigned char mac_data[8] = {0x00,0x00,0x0c,0xc6,0x00,0x00,0x00,0x00}; + unsigned char crc, status; + + asm volatile ( + "ldr r4, =0x00000020;" // mask for GPIO 5 + "ldr r7, =0x00000040;" // mask for GPIO 6 + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "orr r6, r6, r4;" + "orr r6, r6, r7;" + + "str r6, [r5];" // set GPIO to output + + "ldr r5, =0x40e00024;" // output clear register + "str r4, [r5];" // reset pin + + "ldr r5, =0x40e00018;" // output set register + "str r7, [r5];" // set pin + + "ldr r5, =0x40e0000c;" // pin dir register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to input + + "ldr r4, =0x00003c00;" + "ldr r5, =0x40e00054;" // alternate function register + "ldr r6, [r5];" + "bic r6, r6, r4;" + "str r6, [r5];" // set GPIO to IO function + : + : + : "r4","r5","r6","r7" + ); + + HAL_DELAY_US(2000); // 2 msec recovery time + + // check status of application register + + if (sno_reset()) { + diag_printf("no eeprom device for MAC address found \n"); + return 0; + } + + sno_write_byte(SNO_SKIP_ROM); + sno_write_byte(SNO_READ_STATUS_REG); + sno_write_byte(0x00); // validation key + status = sno_read_byte(); + //diag_printf("Status des Application Registers ist: %02X\n", status); + + if (sno_reset()) { + diag_printf("no eeprom device for MAC address found \n"); + return 0; + } + + if (status & 0x03) { + diag_printf("No information in Application Register !!!!\n"); + diag_printf("using defauft MAC 0x00 : 0x0C : 0xC6 : 0x00 : 0x00 : 0x00\n"); + for (i = 0; i < 6; i++) { + buffer[i] = mac_data[i+1]; + } + return 1; + } + + sno_write_byte(SNO_SKIP_ROM); + sno_write_byte(SNO_READ_APPLICATION_REG); + sno_write_byte(0x00); // register address + for (i = 0; i < 8;i++) { + mac_data[i] = sno_read_byte(); + } + + if (sno_reset()) { + diag_printf("no eeprom device for MAC address found \n"); + return 0; + } + +// diag_printf("\nMAC address read from ROM: "); +// for (i=0; i<8; i++) { +// diag_printf("0x%02X ", mac_data[i]); +// } + diag_printf("\n"); + + crc = sno_crc8(mac_data,7); + + //diag_printf("calculated CRC is: %02X\n", crc ); + + if (crc != mac_data[7]) { + diag_printf("ROM data CRC Checksum Error !!!\n\n"); + return 0; + } + + for (i = 0; i < 6; i++) + buffer[i] = mac_data[i + 1]; + + return 1; +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/src/hal_diag.c b/packages/hal/arm/xscale/triton270/v2_0/src/hal_diag.c new file mode 100755 index 00000000..bcfb4cc9 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/src/hal_diag.c @@ -0,0 +1,697 @@ +/*============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors:msalter +// Date: 2000-10-10 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include +#include +#include +#include CYGBLD_HAL_PLATFORM_H + +#include // base types +#include // tracing macros +#include // assertion macros + +#include // basic machine info +#include // interrupt macros +#include // IO macros +#include // calling interface API +#include // helper functions +#include +#include // Hardware definitions +#include // cyg_drv_interrupt_acknowledge + +#define SIO_IER_ERDAI SIO_IER_RAVIE + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) +static void cyg_hal_plf_serial_init(void); + +void resetSRAM(void) +{ + memset((void *)0x0a000000, 0, 1024 * 1024); +} + +void cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) { + return; + } + initialized = 1; + + cyg_hal_plf_serial_init(); + + // cyg_hal_plf_lcd_init(); + resetSRAM(); +} +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +//============================================================================= +// Serial driver +//============================================================================= + +//----------------------------------------------------------------------------- +// There are three serial ports. +#define CYG_DEV_SERIAL_BASE_FF 0x40100000 +#define CYG_DEV_SERIAL_BASE_BT 0x40200000 +#define CYG_DEV_SERIAL_BASE_STD 0x40700000 + +//----------------------------------------------------------------------------- + +// Based on Based on 14.7456 MHz clock +struct baud_config { + cyg_int32 baud_rate; + cyg_uint8 msb; + cyg_uint8 lsb; +}; + +struct baud_config baud_conf[] = { + {9600, 0x00, 0x60}, + {19200, 0x00, 0x30}, + {38400, 0x00, 0x18}, + {57600, 0x00, 0x10}, + {115200, 0x00, 0x08}}; + +// Default baud rate is 115200 +// Based on 14.7456 MHz clock +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==9600 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x60 +#endif +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==19200 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x30 +#endif +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==38400 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x18 +#endif +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==57600 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x10 +#endif +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD==115200 +#define CYG_DEV_SERIAL_BAUD_MSB 0x00 +#define CYG_DEV_SERIAL_BAUD_LSB 0x08 +#endif + +#ifndef CYG_DEV_SERIAL_BAUD_MSB +#error Missing/incorrect serial baud rate defined - CDL error? +#endif + +//----------------------------------------------------------------------------- +// Define the serial registers. The Cogent board is equipped with a 16552 +// serial chip. +#define CYG_DEV_SERIAL_RBR 0x00 // receiver buffer register, read, dlab = 0 +#define CYG_DEV_SERIAL_THR 0x00 // transmitter holding register, write, dlab = 0 +#define CYG_DEV_SERIAL_DLL 0x00 // divisor latch (LS), read/write, dlab = 1 +#define CYG_DEV_SERIAL_IER 0x04 // interrupt enable register, read/write, dlab = 0 +#define CYG_DEV_SERIAL_DLM 0x04 // divisor latch (MS), read/write, dlab = 1 +#define CYG_DEV_SERIAL_IIR 0x08 // interrupt identification register, read, dlab = 0 +#define CYG_DEV_SERIAL_FCR 0x08 // fifo control register, write, dlab = 0 +#define CYG_DEV_SERIAL_LCR 0x0c // line control register, write +#define CYG_DEV_SERIAL_MCR 0x10 // modem control register, write +#define CYG_DEV_SERIAL_LSR 0x14 // line status register, read +#define CYG_DEV_SERIAL_MSR 0x18 // modem status register, read +#define CYG_DEV_SERIAL_SPR 0x1c // scratch pad register +#define CYG_DEV_SERIAL_ISR 0x20 // slow infrared select register (ISR), read/write + +// The interrupt enable register bits. +#define SIO_IER_RAVIE 0x01 // enable received data available irq +#define SIO_IER_TIE 0x02 // enable transmit data request interrupt +#define SIO_IER_RLSE 0x04 // enable receiver line status irq +#define SIO_IER_MIE 0x08 // enable modem status interrupt +#define SIO_IER_RTOIE 0x10 // enable Rx timeout interrupt +#define SIO_IER_NRZE 0x20 // enable NRZ coding +#define SIO_IER_UUE 0x40 // enable the UART unit +#define SIO_IER_DMAE 0x80 // enable DMA requests + +// The interrupt identification register bits. +#define SIO_IIR_IP 0x01 // 0 if interrupt pending +#define SIO_IIR_ID_MASK 0xff // mask for interrupt ID bits +#define ISR_Tx 0x02 +#define ISR_Rx 0x04 + +// The line status register bits. +#define SIO_LSR_DR 0x01 // data ready +#define SIO_LSR_OE 0x02 // overrun error +#define SIO_LSR_PE 0x04 // parity error +#define SIO_LSR_FE 0x08 // framing error +#define SIO_LSR_BI 0x10 // break interrupt +#define SIO_LSR_THRE 0x20 // transmitter holding register empty +#define SIO_LSR_TEMT 0x40 // transmitter holding and Tx shift registers empty +#define SIO_LSR_ERR 0x80 // any error condition (FIFOE) + +// The modem status register bits. +#define SIO_MSR_DCTS 0x01 // delta clear to send +#define SIO_MSR_DDSR 0x02 // delta data set ready +#define SIO_MSR_TERI 0x04 // trailing edge ring indicator +#define SIO_MSR_DDCD 0x08 // delta data carrier detect +#define SIO_MSR_CTS 0x10 // clear to send +#define SIO_MSR_DSR 0x20 // data set ready +#define SIO_MSR_RI 0x40 // ring indicator +#define SIO_MSR_DCD 0x80 // data carrier detect + +// The line control register bits. +#define SIO_LCR_WLS0 0x01 // word length select bit 0 +#define SIO_LCR_WLS1 0x02 // word length select bit 1 +#define SIO_LCR_STB 0x04 // number of stop bits +#define SIO_LCR_PEN 0x08 // parity enable +#define SIO_LCR_EPS 0x10 // even parity select +#define SIO_LCR_SP 0x20 // stick parity +#define SIO_LCR_SB 0x40 // set break +#define SIO_LCR_DLAB 0x80 // divisor latch access bit + +// The FIFO control register +#define SIO_FCR_FCR0 0x01 // enable xmit and rcvr fifos +#define SIO_FCR_FCR1 0x02 // clear RCVR FIFO +#define SIO_FCR_FCR2 0x04 // clear XMIT FIFO +#define SIO_FCR_ITL0 0x40 // Interrupt trigger level (ITL) bit 0 +#define SIO_FCR_ITL1 0x80 // Interrupt trigger level (ITL) bit 1 +#define SIO_FCR_ITL_1BYTE 0x00 // 1 byte triggers interrupt + +//----------------------------------------------------------------------------- +typedef struct { + cyg_uint8* base; + cyg_int32 msec_timeout; + int isr_vector; + cyg_int32 baud_rate; +} channel_data_t; + +//----------------------------------------------------------------------------- + +static int set_baud(channel_data_t *chan) +{ + cyg_uint8* base = chan->base; + cyg_uint8 i; + + for (i=0; i<(sizeof(baud_conf)/sizeof(baud_conf[0])); i++) { + if (chan->baud_rate == baud_conf[i].baud_rate) { + cyg_uint8 lcr; + HAL_READ_UINT8(base + CYG_DEV_SERIAL_LCR, lcr); + HAL_WRITE_UINT8(base + CYG_DEV_SERIAL_LCR, lcr|SIO_LCR_DLAB); + HAL_WRITE_UINT8(base + CYG_DEV_SERIAL_DLL, baud_conf[i].lsb); + HAL_WRITE_UINT8(base + CYG_DEV_SERIAL_DLM, baud_conf[i].msb); + HAL_WRITE_UINT8(base + CYG_DEV_SERIAL_LCR, lcr); + return 1; + } + } + return -1; +} + +static void init_serial_channel(channel_data_t* chan) +{ + cyg_uint8* base = chan->base; + + // 8-1-no parity. + HAL_WRITE_UINT8(base+CYG_DEV_SERIAL_LCR, SIO_LCR_WLS0 | SIO_LCR_WLS1); + + chan->baud_rate = CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD; + set_baud(chan); + + // Enable & clear FIFOs + // set Interrupt Trigger Level to be 1 byte + HAL_WRITE_UINT8(base+CYG_DEV_SERIAL_FCR, (SIO_FCR_FCR0 | SIO_FCR_FCR1 | SIO_FCR_FCR2)); // Enable & clear FIFO + + // Configure NRZ, disable DMA requests and enable UART + HAL_WRITE_UINT8(base+CYG_DEV_SERIAL_IER, SIO_IER_UUE); +} + +static cyg_bool cyg_hal_plf_serial_getc_nonblock(void *__ch_data, cyg_uint8 *ch) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 lsr; + + HAL_READ_UINT8(base+CYG_DEV_SERIAL_LSR, lsr); + if ((lsr & SIO_LSR_DR) == 0) + return false; + + HAL_READ_UINT8(base+CYG_DEV_SERIAL_RBR, *ch); + + return true; +} + +cyg_uint8 cyg_hal_plf_serial_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while (!cyg_hal_plf_serial_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + +void cyg_hal_plf_serial_putc(void* __ch_data, cyg_uint8 c) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 lsr; + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT8(base+CYG_DEV_SERIAL_LSR, lsr); + } while ((lsr & SIO_LSR_THRE) == 0); + + HAL_WRITE_UINT8(base+CYG_DEV_SERIAL_THR, c); + // Hang around until the character has been safely sent. + do { + HAL_READ_UINT8(base+CYG_DEV_SERIAL_LSR, lsr); + } while ((lsr & SIO_LSR_THRE) == 0); + + CYGARC_HAL_RESTORE_GP(); +} + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) +static channel_data_t channels[3] = { + { (cyg_uint8*)CYG_DEV_SERIAL_BASE_FF, 1000, CYGNUM_HAL_INTERRUPT_FFUART, 38400 }, + { (cyg_uint8*)CYG_DEV_SERIAL_BASE_BT, 1000, CYGNUM_HAL_INTERRUPT_BTUART, 38400 }, + { (cyg_uint8*)CYG_DEV_SERIAL_BASE_STD, 1000, CYGNUM_HAL_INTERRUPT_STUART, 38400 }, +}; + +static void cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while (__len-- > 0) { + cyg_hal_plf_serial_putc(__ch_data, *__buf++); + } + CYGARC_HAL_RESTORE_GP(); +} + +static void cyg_hal_plf_serial_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while (__len-- > 0) { + *__buf++ = cyg_hal_plf_serial_getc(__ch_data); + } + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool cyg_hal_plf_serial_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + int delay_count; + channel_data_t* chan = __ch_data; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 10; // delay in .1 ms steps + for(;;) { + res = cyg_hal_plf_serial_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(100); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int cyg_hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + static int irq_state = 0; + channel_data_t* chan = __ch_data; + cyg_uint8 ier; + int ret = 0; + CYGARC_HAL_SAVE_GP(); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_INTERRUPT_SET_LEVEL(chan->isr_vector, 1); + HAL_READ_UINT8(chan->base+CYG_DEV_SERIAL_IER, ier); + ier |= SIO_IER_ERDAI; + HAL_WRITE_UINT8(chan->base+CYG_DEV_SERIAL_IER, ier); + irq_state = 1; + break; + case __COMMCTL_IRQ_DISABLE: + ret = irq_state; + irq_state = 0; + HAL_INTERRUPT_MASK(chan->isr_vector); + HAL_READ_UINT8(chan->base+CYG_DEV_SERIAL_IER, ier); + ier &= ~SIO_IER_ERDAI; + HAL_WRITE_UINT8(chan->base+CYG_DEV_SERIAL_IER, ier); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + case __COMMCTL_GETBAUD: + ret = chan->baud_rate; + break; + case __COMMCTL_SETBAUD: + { + va_list ap; + va_start(ap, __func); + chan->baud_rate = va_arg(ap, cyg_int32); + va_end(ap); + ret = set_baud(chan); + break; + } + default: + break; + } + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + channel_data_t* chan = __ch_data; + cyg_uint8 _iir; + int res = 0; + CYGARC_HAL_SAVE_GP(); + + HAL_READ_UINT8(chan->base+CYG_DEV_SERIAL_IIR, _iir); + _iir &= SIO_IIR_ID_MASK; + + *__ctrlc = 0; + if (ISR_Rx == _iir) { + cyg_uint8 c, lsr; + HAL_READ_UINT8(chan->base + CYG_DEV_SERIAL_LSR, lsr); + if (lsr & SIO_LSR_DR) { + HAL_READ_UINT8(chan->base + CYG_DEV_SERIAL_RBR, c); + + if (cyg_hal_is_break(&c, 1)) { + *__ctrlc = 1; + } + } + + // Acknowledge the interrupt + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + res = CYG_ISR_HANDLED; + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static void cyg_hal_plf_serial_init(void) +{ + hal_virtual_comm_table_t* comm; + int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + // Disable interrupts. + HAL_INTERRUPT_MASK(channels[0].isr_vector); + HAL_INTERRUPT_MASK(channels[1].isr_vector); + HAL_INTERRUPT_MASK(channels[2].isr_vector); + + // Init channels + init_serial_channel((channel_data_t *)&channels[0]); + init_serial_channel((channel_data_t *)&channels[1]); + init_serial_channel((channel_data_t *)&channels[2]); + + // Setup procs in the vector table + // Set channel 0 + CYGACC_CALL_IF_SET_CONSOLE_COMM(0); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &channels[0]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); + + // Set channel 1 + CYGACC_CALL_IF_SET_CONSOLE_COMM(1); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &channels[1]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); + + // Set channel 2 + CYGACC_CALL_IF_SET_CONSOLE_COMM(2); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &channels[2]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); +} +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +//============================================================================= +// Compatibility with older stubs +//============================================================================= + +#ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +#include +#include // cyg_hal_gdb_interrupt +#endif + +// Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e. +// totally stand-alone) system. + +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL) +#define HAL_DIAG_USES_HARDWARE +#endif + +/*---------------------------------------------------------------------------*/ +#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL==0 +// This is the base address of the FF-channel +#define CYG_DEV_SERIAL_BASE CYG_DEV_SERIAL_BASE_FF +#define CYG_DEV_SERIAL_INT CYGNUM_HAL_INTERRUPT_FFUART +#elif CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL==1 +// This is the base address of the BT-channel +#define CYG_DEV_SERIAL_BASE CYG_DEV_SERIAL_BASE_BT +#define CYG_DEV_SERIAL_INT CYGNUM_HAL_INTERRUPT_BTUART +elif CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL==2 +// This is the base address of the STD-channel +#define CYG_DEV_SERIAL_BASE CYG_DEV_SERIAL_BASE_STD +#define CYG_DEV_SERIAL_INT CYGNUM_HAL_INTERRUPT_STUART +#elif !defined(CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL) +#error CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL undefined +#else +#error Bad CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL definition +#endif + +static channel_data_t ser_channel = { (cyg_uint8*)CYG_DEV_SERIAL_BASE, 0, 0}; + +#ifdef HAL_DIAG_USES_HARDWARE +void hal_diag_init(void) +{ + static int init = 0; + char *msg = "\n\rARM eCos\n\r"; + + if (init++) return; + + init_serial_channel(&ser_channel); + + while (*msg) hal_diag_write_char(*msg++); +} + +#ifdef DEBUG_DIAG +#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) +#define DIAG_BUFSIZE 32 +#else +#define DIAG_BUFSIZE 2048 +#endif +static char diag_buffer[DIAG_BUFSIZE]; +static int diag_bp = 0; +#endif + +void hal_diag_write_char(char c) +{ + cyg_uint8 lsr; + + hal_diag_init(); + + cyg_hal_plf_serial_putc(&ser_channel, c); + +#ifdef DEBUG_DIAG + diag_buffer[diag_bp++] = c; + if (diag_bp == DIAG_BUFSIZE) { + while (1) ; + diag_bp = 0; + } +#endif +} + +void hal_diag_read_char(char *c) +{ + *c = cyg_hal_plf_serial_getc(&ser_channel); +} + +#else // HAL_DIAG relies on GDB + +// Initialize diag port - assume GDB channel is already set up +void hal_diag_init(void) +{ + if (0) init_serial_channel(&ser_channel); // avoid warning +} + +// Actually send character down the wire +static void hal_diag_write_char_serial(char c) +{ + cyg_hal_plf_serial_putc(&ser_channel, c); +} + +static bool hal_diag_read_serial(char *c) +{ + long timeout = 1000000000; // A long time... + + while (!cyg_hal_plf_serial_getc_nonblock(&ser_channel, c)) { + if (0 == --timeout) return false; + } + return true; +} + +void hal_diag_read_char(char *c) +{ + while (!hal_diag_read_serial(c)); +} + +void hal_diag_write_char(char c) +{ + static char line[100]; + static int pos = 0; + + // No need to send CRs + if (c == '\r') return; + + line[pos++] = c; + + if (c == '\n' || pos == sizeof(line)) { + CYG_INTERRUPT_STATE old; + + // Disable interrupts. This prevents GDB trying to interrupt us + // while we are in the middle of sending a packet. The serial + // receive interrupt will be seen when we re-enable interrupts + // later. + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); +#else + HAL_DISABLE_INTERRUPTS(old); +#endif + while (1) { + static char hex[] = "0123456789ABCDEF"; + cyg_uint8 csum = 0; + int i; + char c1; + + hal_diag_write_char_serial('$'); + hal_diag_write_char_serial('O'); + csum += 'O'; + for( i = 0; i < pos; i++ ) { + char ch = line[i]; + char h = hex[(ch>>4)&0xF]; + char l = hex[ch&0xF]; + hal_diag_write_char_serial(h); + hal_diag_write_char_serial(l); + csum += h; + csum += l; + } + hal_diag_write_char_serial('#'); + hal_diag_write_char_serial(hex[(csum>>4)&0xF]); + hal_diag_write_char_serial(hex[csum&0xF]); + + // Wait for the ACK character '+' from GDB here and handle + // receiving a ^C instead. This is the reason for this clause + // being a loop. + if (!hal_diag_read_serial(&c1)) { + continue; // No response - try sending packet again + } + if (c1 == '+') { + break; // a good acknowledge + } +#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + cyg_drv_interrupt_acknowledge(CYG_DEV_SERIAL_INT); + if (c1 == 3) { + // Ctrl-C: breakpoint. + cyg_hal_gdb_interrupt(__builtin_return_address(0)); + break; + } +#endif + // otherwise, loop round again + } + pos = 0; + + // And re-enable interrupts +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); +#else + HAL_RESTORE_INTERRUPTS(old); +#endif + } +} +#endif + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +/*---------------------------------------------------------------------------*/ +/* End of hal_diag.c */ diff --git a/packages/hal/arm/xscale/triton270/v2_0/src/hal_initio.S b/packages/hal/arm/xscale/triton270/v2_0/src/hal_initio.S new file mode 100755 index 00000000..46198d32 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/src/hal_initio.S @@ -0,0 +1,879 @@ + + + + +#define PTR(name) \ +.##name: .word name + + + + + + + + .file "hal_initio.S" + + +#include // Platform specific hardware definitions + + + + + .code 32 + + .global __hal_initio +__hal_initio: + + + b 1924f + +pin_state_table: + + .equ GPIO_DIR_INPUT, 0 + .equ GPIO_DIR_OUTPUT, 1 + .equ GPIO_AF0, 0 + .equ GPIO_AF1, 1 + .equ GPIO_AF2, 2 + .equ GPIO_AF3, 3 + .equ GPIO_LOW, 0 + .equ GPIO_HIGH, 1 + .equ GPIO_REDGE, 0x80 + .equ GPIO_FEDGE, 0x40 + .equ GPIO_NOEDGE, 0 + + .balign 4 + +/*GPIO 0 */ .byte 0, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 1 */ .byte 1, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 2 */ .byte 2, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 3 */ .byte 3, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 4 */ .byte 4, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 5 */ .byte 5, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 6 */ .byte 6, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 7 */ .byte 7, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 8 */ .byte 8, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 9 */ .byte 9, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 10 */ .byte 10, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF0 /* ETN Reset */ +/*GPIO 11 */ .byte 11, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 12 */ .byte 12, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 13 */ .byte 13, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 14 */ .byte 14, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 /* Backlight enable */ +/*GPIO 15 */ .byte 15, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF1 /* PCE1# */ +/*GPIO 16 */ .byte 16, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 17 */ .byte 17, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 18 */ .byte 18, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* RDY pin */ +/*GPIO 19 */ .byte 19, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 20 */ .byte 20, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 21 */ .byte 21, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF0 /* USB pull up */ +/*GPIO 22 */ .byte 22, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 23 */ .byte 23, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 24 */ .byte 24, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 25 */ .byte 25, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 26 */ .byte 26, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 27 */ .byte 27, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 28 */ .byte 28, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* AC97_BITCLK */ +/*GPIO 29 */ .byte 29, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* AC97_SDATA_IN0 */ +/*GPIO 30 */ .byte 30, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* AC97_SDATA_OUT */ +/*GPIO 31 */ .byte 31, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* AC97_SYNC */ + + +/*GPIO 32 */ .byte 32, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* MMCLK */ +/*GPIO 33 */ .byte 33, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* CS5# -> CSETN# */ +/*GPIO 34 */ .byte 34, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* FFRxD */ +/*GPIO 35 */ .byte 35, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* FFCTS */ +/*GPIO 36 */ .byte 36, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* FFDCD */ +/*GPIO 37 */ .byte 37, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* FFDSR */ +/*GPIO 38 */ .byte 38, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* FFRI */ +/*GPIO 39 */ .byte 39, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* FFTxD */ +/*GPIO 40 */ .byte 40, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* FFDTR */ +/*GPIO 41 */ .byte 41, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* FFRTS */ +/*GPIO 42 */ .byte 42, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* BTRxD */ +/*GPIO 43 */ .byte 43, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* BTTxD */ +/*GPIO 44 */ .byte 44, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* BTCTS */ +/*GPIO 45 */ .byte 45, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* BTRTS */ +/*GPIO 46 */ .byte 46, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* STDRxD */ +/*GPIO 47 */ .byte 47, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF1 /* STDTxD */ +/*GPIO 48 */ .byte 48, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* POE# */ +/*GPIO 49 */ .byte 49, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* PWE# */ +/*GPIO 50 */ .byte 50, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* PIOR# */ +/*GPIO 51 */ .byte 51, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* PIOW# */ +/*GPIO 52 */ .byte 52, GPIO_DIR_INPUT, GPIO_REDGE | GPIO_LOW, GPIO_AF0 /* ETNINT */ +/*GPIO 53 */ .byte 53, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF0 /* MMC-Card CD# */ +/*GPIO 54 */ .byte 54, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF0 /* MMC-Card WP# */ +/*GPIO 55 */ .byte 55, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* PREG# */ +/*GPIO 56 */ .byte 56, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* PWAIT */ +/*GPIO 57 */ .byte 57, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* IOS16 */ +/*GPIO 58 */ .byte 58, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD0 */ +/*GPIO 59 */ .byte 59, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD1 */ +/*GPIO 60 */ .byte 60, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD2 */ +/*GPIO 61 */ .byte 61, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD3 */ +/*GPIO 62 */ .byte 62, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD4 */ +/*GPIO 63 */ .byte 63, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD5 */ + + +/*GPIO 64 */ .byte 64, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD6 */ +/*GPIO 65 */ .byte 65, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD7 */ +/*GPIO 66 */ .byte 66, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD8 */ +/*GPIO 67 */ .byte 67, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD9 */ +/*GPIO 68 */ .byte 68, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD10 */ +/*GPIO 69 */ .byte 69, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD11 */ +/*GPIO 70 */ .byte 70, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD12 */ +/*GPIO 71 */ .byte 71, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD13 */ +/*GPIO 72 */ .byte 72, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD14 */ +/*GPIO 73 */ .byte 73, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD15 */ +/*GPIO 74 */ .byte 74, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* FCLK */ +/*GPIO 75 */ .byte 75, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LCLK */ +/*GPIO 76 */ .byte 76, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* PCLK */ +/*GPIO 77 */ .byte 77, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LCD_DEN */ +/*GPIO 78 */ .byte 78, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF1 /* PCE2# */ +/*GPIO 79 */ .byte 79, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* PSKTSEL */ +/*GPIO 80 */ .byte 80, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF0 /* Display enable or CS*/ +/*GPIO 81 */ .byte 81, GPIO_DIR_INPUT, GPIO_REDGE | GPIO_LOW, GPIO_AF0 /*CF IRQ */ +/*GPIO 82 */ .byte 82, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 /*CF Card Detect# */ +/*GPIO 83 */ .byte 83, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF0 /*CF RESET */ +/*GPIO 84 */ .byte 84, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 /*CF BVD2# */ +/*GPIO 85 */ .byte 85, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 /*CF BVD1# */ +/*GPIO 86 */ .byte 86, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD16 */ +/*GPIO 87 */ .byte 87, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* LDD17 */ +/*GPIO 88 */ .byte 88, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* USBHPWR1 USB Host power Status*/ +/*GPIO 89 */ .byte 89, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_HIGH, GPIO_AF2 /* USBHPEN1 USB Host power Enable (set to off) */ +/*GPIO 90 */ .byte 90, GPIO_DIR_INPUT, GPIO_REDGE | GPIO_LOW, GPIO_AF0 /* UCB1400 IRQ */ +/*GPIO 91 */ .byte 91, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 92 */ .byte 92, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* MMDAT0 */ +/*GPIO 93 */ .byte 93, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 94 */ .byte 94, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 95 */ .byte 95, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 + + + +/*GPIO 96 */ .byte 96, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 97 */ .byte 97, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 98 */ .byte 98, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 99 */ .byte 99, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 100 */ .byte 100, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 101 */ .byte 101, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 102 */ .byte 102, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 103 */ .byte 103, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 104 */ .byte 104, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 105 */ .byte 105, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 106 */ .byte 106, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 107 */ .byte 107, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 108 */ .byte 108, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 109 */ .byte 109, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* MMDAT1 */ +/*GPIO 110 */ .byte 110, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* MMDAT2 */ +/*GPIO 111 */ .byte 111, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* MMDAT3 */ +/*GPIO 112 */ .byte 112, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF1 /* MMCMD */ +/*GPIO 113 */ .byte 113, GPIO_DIR_OUTPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF2 /* AC97_RESET# */ +/*GPIO 114 */ .byte 114, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 115 */ .byte 115, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 116 */ .byte 116, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 117 */ .byte 117, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 118 */ .byte 118, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 119 */ .byte 119, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 120 */ .byte 120, GPIO_DIR_INPUT, GPIO_NOEDGE | GPIO_LOW, GPIO_AF0 +/*GPIO 121 */ .byte 121, 0, 0, 0 +/*GPIO 122 */ .byte 122, 0, 0, 0 +/*GPIO 123 */ .byte 123, 0, 0, 0 +/*GPIO 124 */ .byte 124, 0, 0, 0 +/*GPIO 125 */ .byte 125, 0, 0, 0 +/*GPIO 126 */ .byte 126, 0, 0, 0 +/*GPIO 127 */ .byte 127, 0, 0, 0 + + + + + + + + + + + + + + + + + 1924: + + + + + + + + + // must set the GPIOs up before any chip selects will work + + + + //GPCRa = 0xffffffff put a 0 on any of the GPIOs (0=unchanged, 1=drive 0) + // reset all first + ldr r0, =GPCRa + ldr r1, =0xffffffff + str r1, [r0] + //GPCRb = 0xffffffff + ldr r0, =GPCRb + ldr r1, =0xffffffff + str r1, [r0] + //GPCRc = 0xffffffff + ldr r0, =GPCRc + ldr r1, =0xffffffff + str r1, [r0] + //GPCRd = 0xffffffff + ldr r0, =GPCRd + ldr r1, =0xffffffff + str r1, [r0] + + + +// ************************************************************************************* +// extract value for Output Set Register GPSRa from table +// ************************************************************************************* + ldr r0, =pin_state_table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGPSRa0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00010000 + beq _exGPSRa1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGPSRa1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGPSRa0 + + ldr r0, =GPSRa + str r2, [r0] + + +// ************************************************************************************* +// extract value for Output Set Register GPSRb from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #128 // use second third of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGPSRb0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00010000 + beq _exGPSRb1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGPSRb1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGPSRb0 + + ldr r0, =GPSRb + str r2, [r0] + + + +// ************************************************************************************* +// extract value for Output Set Register GPSRc from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #256 // use last third of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGPSRc0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00010000 + beq _exGPSRc1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGPSRc1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGPSRc0 + + ldr r0, =GPSRc + str r2, [r0] + + + + +// ************************************************************************************* +// extract value for Output Set Register GPSRd from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #384 // use last quarter of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGPSRd0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00010000 + beq _exGPSRd1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGPSRd1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGPSRd0 + + ldr r0, =GPSRd + str r2, [r0] + + + + + + + + + +// ************************************************************************************* +// extract value for Direction Register GPDRa from table +// ************************************************************************************* + ldr r0, =pin_state_table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGPDRa0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00000100 + beq _exGPDRa1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGPDRa1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGPDRa0 + + ldr r0, =GPDRa + ldr r5, =0x1e4 + bic r2, r2, r5 // reserved bits + str r2, [r0] + + + + + + + + + + +// ************************************************************************************* +// extract value for Direction Register GPDRb from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #128 // use second quarter of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGPDRb0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00000100 + beq _exGPDRb1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGPDRb1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGPDRb0 + + ldr r0, =GPDRb + str r2, [r0] + + + +// ************************************************************************************* +// extract value for Direction Register GPDRc from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #256 // use third quarter of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGPDRc0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00000100 + beq _exGPDRc1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGPDRc1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGPDRc0 + + ldr r0, =GPDRc + str r2, [r0] + + + + +// ************************************************************************************* +// extract value for Direction Register GPDRd from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #384 // use last quarter of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGPDRd0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00000100 + beq _exGPDRd1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGPDRd1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGPDRd0 + + ldr r0, =GPDRd + str r2, [r0] + + + + + + + + + + + + + +// ************************************************************************************* +// extract value for Alternate Function Register GAFR0a from table +// ************************************************************************************* + ldr r0, =pin_state_table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGAFR0a0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r4, r3, #0x01000000 + beq _exGAFR0a1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR0a1: + mov r1, r1, ASL #1 // shift mask bit + ands r4, r3, #0x02000000 + beq _exGAFR0a2 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR0a2: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGAFR0a0 + + ldr r0, =GAFR0a + str r2, [r0] + + +// ************************************************************************************* +// extract value for Alternate Function Register GAFR1a from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #64 + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGAFR1a0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r4, r3, #0x01000000 + beq _exGAFR1a1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR1a1: + mov r1, r1, ASL #1 // shift mask bit + ands r4, r3, #0x02000000 + beq _exGAFR1a2 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR1a2: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGAFR1a0 + + ldr r0, =GAFR1a + str r2, [r0] + + + + + +// ************************************************************************************* +// extract value for Alternate Function Register GAFR0b from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #128 + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGAFR0b0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r4, r3, #0x01000000 + beq _exGAFR0b1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR0b1: + mov r1, r1, ASL #1 // shift mask bit + ands r4, r3, #0x02000000 + beq _exGAFR0b2 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR0b2: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGAFR0b0 + + ldr r0, =GAFR0b + str r2, [r0] + + +// ************************************************************************************* +// extract value for Alternate Function Register GAFR1b from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #192 + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGAFR1b0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r4, r3, #0x01000000 + beq _exGAFR1b1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR1b1: + mov r1, r1, ASL #1 // shift mask bit + ands r4, r3, #0x02000000 + beq _exGAFR1b2 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR1b2: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGAFR1b0 + + ldr r0, =GAFR1b + str r2, [r0] + + + + +// ************************************************************************************* +// extract value for Alternate Function Register GAFR0c from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #256 + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGAFR0c0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r4, r3, #0x01000000 + beq _exGAFR0c1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR0c1: + mov r1, r1, ASL #1 // shift mask bit + ands r4, r3, #0x02000000 + beq _exGAFR0c2 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR0c2: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGAFR0c0 + + ldr r0, =GAFR0c + str r2, [r0] + + +// ************************************************************************************* +// extract value for Alternate Function Register GAFR1c from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #320 + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGAFR1c0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r4, r3, #0x01000000 + beq _exGAFR1c1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR1c1: + mov r1, r1, ASL #1 // shift mask bit + ands r4, r3, #0x02000000 + beq _exGAFR1c2 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR1c2: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGAFR1c0 + + ldr r0, =GAFR1c + str r2, [r0] + + + + + + +// ************************************************************************************* +// extract value for Alternate Function Register GAFR0d from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #384 + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGAFR0d0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r4, r3, #0x01000000 + beq _exGAFR0d1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR0d1: + mov r1, r1, ASL #1 // shift mask bit + ands r4, r3, #0x02000000 + beq _exGAFR0d2 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR0d2: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGAFR0d0 + + ldr r0, =GAFR0d + str r2, [r0] + + +// ************************************************************************************* +// extract value for Alternate Function Register GAFR1d from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #448 + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGAFR1d0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r4, r3, #0x01000000 + beq _exGAFR1d1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR1d1: + mov r1, r1, ASL #1 // shift mask bit + ands r4, r3, #0x02000000 + beq _exGAFR1d2 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGAFR1d2: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGAFR1d0 + + ldr r0, =GAFR1d + str r2, [r0] + + + + + + + + + + + + + + + + + + + + + + + + + + +// ************************************************************************************* +// extract value for Rising Edge Register GRERa from table +// ************************************************************************************* + ldr r0, =pin_state_table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGRERa0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00800000 + beq _exGRERa1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGRERa1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGRERa0 + + ldr r0, =GRERa + str r2, [r0] + + +// ************************************************************************************* +// extract value for Rising Edge Register GRERb from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #128 // use second third of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGRERb0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00800000 + beq _exGRERb1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGRERb1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGRERb0 + + ldr r0, =GRERb + str r2, [r0] + + + + +// ************************************************************************************* +// extract value for Rising Edge Register GRERc from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #256 // use last third of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGRERc0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00800000 + beq _exGRERc1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGRERc1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGRERc0 + + ldr r0, =GRERc + str r2, [r0] + + +// ************************************************************************************* +// extract value for Rising Edge Register GRERd from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #384 // use last third of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGRERd0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00800000 + beq _exGRERd1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGRERd1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGRERd0 + + ldr r0, =GRERd + str r2, [r0] + + + + + + +// ************************************************************************************* +// extract value for Falling Edge Register GFERa from table +// ************************************************************************************* + ldr r0, =pin_state_table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGFERa0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00400000 + beq _exGFERa1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGFERa1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGFERa0 + + ldr r0, =GFERa + str r2, [r0] + + +// ************************************************************************************* +// extract value for Falling Edge Register GFERb from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #128 // use second third of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGFERb0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00400000 + beq _exGFERb1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGFERb1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGFERb0 + + ldr r0, =GFERb + str r2, [r0] + + + +// ************************************************************************************* +// extract value for Falling Edge Register GFERc from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #256 // use last third of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGFERc0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00400000 + beq _exGFERc1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGFERc1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGFERc0 + + ldr r0, =GFERc + str r2, [r0] + + +// ************************************************************************************* +// extract value for Falling Edge Register GFERd from table +// ************************************************************************************* + ldr r0, =pin_state_table + add r0, r0, #384 // use last quarter of table + mov r1, #1 // mask register + mov r2, #0 // this is the register where the value is composed + +_exGFERd0: + ldr r3, [r0], #4 // load table entry, increase pointer + ands r3, r3, #0x00400000 + beq _exGFERd1 // ZERO flag is set + orr r2, r2, r1 // OR mask bit to value +_exGFERd1: + mov r1, r1, ASL #1 // shift mask bit + cmp r1, #0 + bne _exGFERd0 + + ldr r0, =GFERd + str r2, [r0] + + + + + + + mov r15, r14 // return + + + + + + +// -------------------------------------------------------------------------- +// end of hal_initio.S diff --git a/packages/hal/arm/xscale/triton270/v2_0/src/redboot_cmds.c b/packages/hal/arm/xscale/triton270/v2_0/src/redboot_cmds.c new file mode 100755 index 00000000..892d2357 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/src/redboot_cmds.c @@ -0,0 +1,467 @@ +//========================================================================== +// +// redboot_cmds.c +// +// KaRo TRITON270 [platform] specific RedBoot commands +// +//========================================================================== +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Richard Panton +// Date: 2001-02-24 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#include +#include +#include + +#include // IO macros + +RedBoot_cmd("mem", + "Set a memory location", + "[-h|-b] [-a
] ", + do_mem + ); + +void do_mem(int argc, char *argv[]) +{ + struct option_info opts[3]; + bool mem_half_word, mem_byte; + volatile cyg_uint32 *address = NULL; + cyg_uint32 value; + + init_opts(&opts[0], 'b', false, OPTION_ARG_TYPE_FLG, + (void *)&mem_byte, 0, "write a byte"); + init_opts(&opts[1], 'h', false, OPTION_ARG_TYPE_FLG, + (void *)&mem_half_word, 0, "write a half-word"); + init_opts(&opts[2], 'a', true, OPTION_ARG_TYPE_NUM, + (void *)&address, NULL, "address to write at"); + if (!scan_opts(argc, argv, 1, opts, 3, (void*)&value, OPTION_ARG_TYPE_NUM, "address to set")) + return; + if (mem_byte && mem_half_word) { + diag_printf("*ERR: Should not specify both byte and half-word access\n"); + } else if (mem_byte) { + *(cyg_uint8*)address = (cyg_uint8)(value & 255); + diag_printf(" Set 0x%08X to 0x%02X (result 0x%02X)\n", address, value & 255, (int)*(cyg_uint8*)address); + } else if (mem_half_word) { + if ((unsigned long)address & 1) { + diag_printf("*ERR: Badly aligned address 0x%08X for half-word store\n", address); + } else { + *(cyg_uint16*)address = (cyg_uint16)(value & 0xffff); + diag_printf(" Set 0x%08X to 0x%04X (result 0x%04X)\n", address, value & 0xffff, (int)*(cyg_uint16*)address); + } + } else { + if ((unsigned long)address & 3) { + diag_printf("*ERR: Badly aligned address 0x%08X for word store\n", address); + } else { + *address = value; + diag_printf(" Set 0x%08X to 0x%08X (result 0x%08X)\n", address, value, + *address); + } + } +} + +RedBoot_cmd("clock", + "Set/Query the system clock speed", + "[-s (200/300/400/500/600)]", + do_clock + ); + +clock_param_t pclktab[] = { + {91, 45, 91, 45, 91, 0, 7, 2, 0, 0, 0, 950, 0x02, 1, 1}, + {104, 104, 104, 104, 52, 1, 8, 2, 1, 0, 1, 950, 0x02, 0, 1}, + {156, 104, 104, 104, 52, 1, 8, 6, 1, 1, 1, 1150, 0x06, 0, 1}, + {208, 208, 208, 104, 104, 1, 16, 2, 1, 0, 1, 1150, 0x06, 1, 1}, + {312, 208, 208, 104, 104, 1, 16, 3, 1, 0, 1, 1250, 0x08, 1, 1}, + {416, 208, 208, 104, 104, 1, 16, 4, 1, 0, 1, 1350, 0x0a, 1, 1}, + {520, 208, 208, 104, 104, 1, 16, 5, 1, 0, 1, 1450, 0x0c, 1, 1}, + {624, 208, 208, 104, 104, 1, 16, 6, 1, 0, 1, 1550, 0x0e, 1, 1}, +}; +clock_param_t *get_clock_rate(void); + +int get_clock_table_index(int clock) +{ + int i = 0; + int deltan; + int deltap; + int rindex = 1; + int maxindex; + + maxindex = sizeof(pclktab) / sizeof(clock_param_t) - 1; + if (clock < pclktab[0].t_clock) { + clock = 91; + rindex = 0; + } else if (clock > pclktab[maxindex].t_clock) { + clock = 624; + rindex = maxindex; + } else { + while (i <= maxindex) { + if (pclktab[i].t_clock < clock) { + i++; + } else { + if (i == maxindex){ + rindex = maxindex; + } else { + deltan = pclktab[i].t_clock - clock; + deltap = pclktab[i + 1].t_clock - clock; + if (deltan < deltap) { + rindex = i; + } else { + rindex = i + 1; + } + } + break; + } + } + } + + return rindex; +} + +void change_core_voltage(unsigned char ind) +{ + unsigned long value; + + // enable Power I2C + HAL_READ_UINT32(PCFR, value); + value |= 0x40; + HAL_WRITE_UINT32(PCFR, value); + + diag_printf("Core voltage will be set to %d.%d Volts", + pclktab[ind].VOLTAGE_VAL / 1000, pclktab[ind].VOLTAGE_VAL % 1000); + write_i2c_pwr(0x18, pclktab[ind].DAC_VAL | 0x20); + diag_printf(".\n"); + + // disable Power I2C + HAL_READ_UINT32(PCFR, value); + value &= (~0x40); + HAL_WRITE_UINT32(PCFR, value); +} + +clock_param_t *get_clock_rate(void) +{ + unsigned long CCCR_reg, CLKCFG_reg; + unsigned char clkcfg_t, clkcfg_ht, clkcfg_b; + unsigned char cccr_l, cccr_2n, cccr_a; + int i; + clock_param_t *match = NULL; + + asm volatile ( + "ldr r1, =0x41300000;" // Core Clock Config Reg + "ldr %0, [r1];" + "mrc p14, 0, %1, c6, c0, 0;" // read CCLKCFG register + : "=r"(CCCR_reg), "=r"(CLKCFG_reg) + : + : "r1" + ); + + clkcfg_t = CLKCFG_reg & 0x01; + clkcfg_ht = (CLKCFG_reg & 0x04) >> 2; + clkcfg_b = (CLKCFG_reg & 0x08) >> 3; + + cccr_l = (CCCR_reg & 0x0000001f) >> 0; + cccr_2n = (CCCR_reg & 0x00000780) >> 7; + cccr_a = (CCCR_reg & 0x02000000) >> 25; +#if 0 + diag_printf("clkcfg_t = %d \n", clkcfg_t); + diag_printf("clkcfg_ht = %d \n", clkcfg_ht); + diag_printf("clkcfg_b = %d \n", clkcfg_b); + diag_printf("cccr_l = %d \n", cccr_l); + diag_printf("cccr_2n = %d \n", cccr_2n); + diag_printf("cccr_a = %d \n", cccr_a); +#endif + for (i = 0; i < sizeof(pclktab) / sizeof(clock_param_t); i++) { + if (clkcfg_t == pclktab[i].CLKCFG_T && + clkcfg_ht == pclktab[i].CLKCFG_HT && + clkcfg_b == pclktab[i].CLKCFG_B && + cccr_l == pclktab[i].CCCR_L && + cccr_2n == pclktab[i].CCCR_2N && + cccr_a == pclktab[i].CCCR_A) { + match = &pclktab[i]; + break; + } + } + + if (match == NULL) { + //diag_printf("error, unknown clock configuration\n"); + } + return match; +} + +void change_clock(unsigned char ind) +{ + clock_param_t *cpara; + unsigned long CCCR_reg, CLKCFG_reg; + + diag_printf("Clock speed will be changed to %d MHz", pclktab[ind].t_clock); + CCCR_reg = pclktab[ind].CCCR_L | + ((pclktab[ind].CCCR_2N) << 7) | + ((pclktab[ind].CCCR_A) << 25); + CLKCFG_reg = pclktab[ind].CLKCFG_T | + ((pclktab[ind].CLKCFG_HT) << 2) | + ((pclktab[ind].CLKCFG_B) << 3); + asm volatile ( + "mov r1, %0;" + "ldr r2, =0x41300000;" // Core Clock Config Reg + "ldr r3, [r2];" // read the register + "ldr r4, =0xcc000000;" // mask bits to preserve + "and r3, r3, r4;" + "orr r3, r3, r1;" // write speed values + "str r3, [r2];" // set speed + "mov r1, %1;" // set turbo mode, set fast bus + "orr r1, r1, #0x2;" // set change frequency + "mov r3, r1;" // save value + "mcr p14, 0, r1, c6, c0, 0;" // frequency change sequence + "ldr r1, [r2];" // dummy read from CCCR + "100:;" + "mrc p14, 0, r1, c6, c0, 0;" // read CLKCFG + "cmp r3, r1;" // compare it with value written + "bne 100b;" + : + : "r"(CCCR_reg), "r"(CLKCFG_reg) + : "r1", "r2", "r3", "r4" + ); + cpara = get_clock_rate(); + diag_printf("\nclock speed set to %d MHz ...\n", cpara->t_clock); +} + +void do_clock(int argc, char *argv[]) +{ + int new_clock, ind; + bool new_clock_set, clock_ok; + struct option_info opts[1]; +//#ifdef CYGSEM_REDBOOT_FLASH_CONFIG +// struct config_option opt; +//#endif + unsigned long value; + clock_param_t *cpara, *old_clock; + + init_opts(&opts[0], 's', true, OPTION_ARG_TYPE_NUM, + (void *)&new_clock, (bool *)&new_clock_set, "new clock speed"); + if (!scan_opts(argc, argv, 1, opts, 1, 0, 0, "")) { + return; + } + + get_clock_table_index(new_clock); + + if (new_clock_set) { + clock_ok = 1; + + old_clock = get_clock_rate(); + if (old_clock == 0) { + diag_printf("error decoding clock settings, clock unknown\n"); + return; + } + ind = get_clock_table_index(new_clock); + + HAL_READ_UINT32(MDREFR, value); + value |= 0x20000000; // set K0DB4 + HAL_WRITE_UINT32(MDREFR, value); + + if (pclktab[ind].t_clock > old_clock->t_clock) { + change_core_voltage(ind); + change_clock(ind); + } else { + change_clock(ind); + change_core_voltage(ind); + } + + if (pclktab[ind].MDREFR_K0DB2) { + HAL_READ_UINT32(MDREFR, value); // set K0DB2 + value |= 0x00004000; + } else { + HAL_READ_UINT32(MDREFR, value); // reset K0DB0 + value &= (~0x00004000); + } + HAL_WRITE_UINT32(MDREFR, value); + + if (pclktab[ind].MDREFR_K0DB4) { + HAL_READ_UINT32(MDREFR, value); // set K0DB2 + value |= 0x20000000; + } else { + HAL_READ_UINT32(MDREFR, value); // reset K0DB2 + value &= (~0x20000000); + } + HAL_WRITE_UINT32(MDREFR, value); + } else { + cpara = get_clock_rate(); + if (cpara == 0) { + diag_printf("error decoding clock settings, clock unknown\n"); + } else { + diag_printf("Actual Processor Clock: %d MHz System Bus Clock %d MHz MEM Clock %d MHz SDRAM Clock %d MHz LCD Clock %d MHz\n", + cpara->t_clock, cpara->sys_clock, cpara->mem_clock, cpara->SDRAM_clock, cpara->LCD_clock); + } + } +} + +RedBoot_cmd("run", + "Execute code at a location", + "[-w ] [entry]", + do_run + ); + +void do_run(int argc, char *argv[]) +{ + typedef void code_fun(void); + unsigned long entry; + unsigned long oldints; + code_fun *fun; + bool wait_time_set; + int wait_time, res; + struct option_info opts[1]; + char line[8]; + + entry = entry_address; // Default from last 'load' operation + init_opts(&opts[0], 'w', true, OPTION_ARG_TYPE_NUM, + (void *)&wait_time, (bool *)&wait_time_set, "wait timeout"); + if (!scan_opts(argc, argv, 1, opts, 1, (void *)&entry, OPTION_ARG_TYPE_NUM, + "starting address")) { + entry = 0xa0100000; + diag_printf("starting run at address 0x%08X ...\n", entry); + } + if (wait_time_set) { + int script_timeout_ms = wait_time * 1000; +#ifdef CYGSEM_REDBOOT_FLASH_CONFIG + unsigned char *hold_script = script; + script = (unsigned char *)0; +#endif + diag_printf("About to start execution at %p - abort with ^C within %d seconds\n", + (void *)entry, wait_time); + while (script_timeout_ms >= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT) { + res = _rb_gets(line, sizeof(line), CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT); + if (res == _GETS_CTRLC) { +#ifdef CYGSEM_REDBOOT_FLASH_CONFIG + script = hold_script; // Re-enable script +#endif + return; + } + script_timeout_ms -= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT; + } + } + fun = (code_fun *)entry; + HAL_DISABLE_INTERRUPTS(oldints); + HAL_DCACHE_SYNC(); + HAL_ICACHE_DISABLE(); + HAL_DCACHE_DISABLE(); + HAL_DCACHE_SYNC(); + HAL_ICACHE_INVALIDATE_ALL(); + HAL_DCACHE_INVALIDATE_ALL(); +#ifdef HAL_ARCH_PROGRAM_NEW_STACK + HAL_ARCH_PROGRAM_NEW_STACK(fun); +#else + (*fun)(); +#endif + HAL_ICACHE_ENABLE(); + HAL_DCACHE_ENABLE(); + HAL_RESTORE_INTERRUPTS(oldints); +} + +cyg_int32 write_i2c_pwr(cyg_uint8 device_adr, cyg_uint8 dat_value) +{ + cyg_uint32 value; + unsigned int retries; + + // write device address now + + HAL_WRITE_UINT32(PWRIDBR, (device_adr & 0xfe)); + HAL_READ_UINT32(PWRICR, value); + value = value & ~(ICR_STOP | ICR_ALDIE); + HAL_WRITE_UINT32(PWRICR, value | ICR_START | ICR_TB); + + HAL_READ_UINT32(PWRISR, value); + retries = 1000000; + while (!(value & ISR_ITE) && retries--) { // wait for Transmit Empty + HAL_READ_UINT32(PWRISR, value); + } + if (!(value & ISR_ITE)) { + diag_printf("I2C: timeout waiting for ITE\n"); + return -1; + } + + HAL_READ_UINT32(PWRISR, value); + if (value & ISR_BED) { + //diag_printf("I2C: bus error, status after write device address is: %06X\n", value); + HAL_READ_UINT32(PWRICR, value); + HAL_WRITE_UINT32(PWRICR, value | ICR_MA); // send master abort + HAL_DELAY_US(10000); + HAL_WRITE_UINT32(PWRICR, value & ~ICR_MA); + return -1; + } + HAL_WRITE_UINT32(PWRISR, ISR_ITE); // clear ITE status + + // write data now + HAL_WRITE_UINT32(PWRIDBR, dat_value & 0xff); + HAL_READ_UINT32(PWRICR, value); + value &= ~ICR_START; + HAL_WRITE_UINT32(PWRICR, value | (ICR_TB | ICR_STOP)); + + HAL_READ_UINT32(PWRISR, value); + retries = 1000000; + while (!(value & ISR_ITE) && retries--) { // wait for Transmit Empty + HAL_READ_UINT32(PWRISR, value); + } + if (!(value & ISR_ITE)) { + diag_printf("I2C: timeout waiting for ITE\n"); + return -1; + } + HAL_READ_UINT32(PWRISR, value); + if (value & ISR_BED) { + //diag_printf("I2C: bus error, status after write device address is: %06X\n", value); + HAL_READ_UINT32(PWRICR, value); + HAL_WRITE_UINT32(PWRICR, value | ICR_MA); // send master abort + HAL_DELAY_US(10000); + HAL_WRITE_UINT32(PWRICR, value & ~ICR_MA); + return -1; + } + HAL_WRITE_UINT32(PWRISR, ISR_ITE); // clear ITE status + + HAL_READ_UINT32(PWRICR, value); + value = value & ~(ICR_STOP | ICR_START | ICR_TB); + HAL_WRITE_UINT32(PWRICR, value); + + return 0; +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/src/sdcard.c b/packages/hal/arm/xscale/triton270/v2_0/src/sdcard.c new file mode 100755 index 00000000..1ba69478 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/src/sdcard.c @@ -0,0 +1,1899 @@ +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): usteinkohl +// Contributors: usteinkohl +// Uwe Steinkohl +// Date: 2005-05-24 +// Purpose: +// Description: +// +// This code is to handle the SD-Card +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#include +#include +#include + +#include // IO macros + +#define DMA_ACCESS 1 + +#define SDCARD_DEBUG 0 +#define FAT16_ONLY 0 + +#define MMCCLKRT_19M5 0 +#define MMCCLKRT_9M75 1 +#define MMCCLKRT_4M88 2 +#define MMCCLKRT_2M44 3 +#define MMCCLKRT_1M22 4 +#define MMCCLKRT_0M609 5 +#define MMCCLKRT_0M304 6 + +#define MMCSTAT_TIME_OUT_READ 0x00000001 +#define MMCSTAT_TIME_OUT_RES 0x00000002 +#define MMCSTAT_CRC_WR_ERR 0x00000004 +#define MMCSTAT_CRC_RD_ERR 0x00000008 +#define MMCSTAT_DAT_ERR_TOKEN 0x00000010 +#define MMCSTAT_RES_CRC_ERR 0x00000020 + +#define MMCSTAT_CLK_EN 0x00000100 +#define MMCSTAT_FLASH_ERR 0x00000200 +#define MMCSTAT_SPI_WR_ERR 0x00000400 +#define MMCSTAT_DATA_TRAN_DONE 0x00000800 + +#define MMCSTAT_PRG_DONE 0x00001000 +#define MMCSTAT_END_CMD_RES 0x00002000 +#define MMCSTAT_RD_STALLED 0x00004000 +#define MMCSTAT_SDIO_INT 0x00008000 + +#define MMCSTAT_SDIO_SUSPEND_ACK 0x00010000 + +#define CMD_RES_TYPE_NORESP 0 +#define CMD_RES_TYPE_R1 1 +#define CMD_RES_TYPE_R6 1 +#define CMD_RES_TYPE_R2 2 +#define CMD_RES_TYPE_R3 3 + +#define SD_CMD0 0 +#define SD_CMD2 2 +#define SD_CMD3 3 +#define SD_CMD4 4 +#define SD_CMD7 7 +#define SD_CMD9 9 +#define SD_CMD10 10 +#define SD_CMD12 12 +#define SD_CMD13 13 +#define SD_CMD15 15 +#define SD_CMD16 16 +#define SD_CMD17 17 +#define SD_CMD18 18 +#define SD_CMD55 55 + +#define SD_ACMD6 (6 + 128) +#define SD_ACMD41 (41 + 128) + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned long u32; + +typedef struct command_parameter_struct { + unsigned char command_number; + unsigned short rca; + unsigned short command_parameter_low; + unsigned short command_parameter_high; + unsigned char res_type; + unsigned char data_en; + unsigned char dma_en; + unsigned char data_write; + unsigned char stream_blk; + unsigned char busy; + unsigned char init; + unsigned char sd_4dat; + unsigned char *rbuffer; // pointer to response buffer + unsigned char *dbuffer; // pointer to data buffer + int isWinceImage; +} COMPAR; + +typedef struct drive_spec_t { + u32 partition_size; + u32 partition_offset; + u8 partition_type; + u16 number_of_cylinders; + u16 number_of_heads; + u16 number_of_sectors_per_track; + u16 bytes_per_sector; + u8 sectors_per_cluster; + u16 reserved_sectors; + u8 number_of_copies_of_fat; + u16 maximum_root_entries; + u16 sectors_per_fat; + u32 fat_start_block; + u32 root_dir_start_block; + u32 data_area_start_block; + u16 number_of_files; + int fat16; +} drive_spec; + +typedef struct dir_data_t { + char dir_fname[13]; + u16 dir_start_cluster; + u32 dir_fsize; + u16 dir_year; + u8 dir_month; + u8 dir_day; + u8 dir_second; + u8 dir_minute; + u8 dir_hour; +} dir_data; + +int init_sdcard(COMPAR *pp); +void enable_sdcard_power(void); +int chk_sd_status(COMPAR *pp); +int send_command(COMPAR *pp); +int wait4cmd_end(void); +int read_single_block(COMPAR *pp, unsigned long address); +void dump_buf(unsigned char *address, unsigned short length); +int get_dir_data(drive_spec *ds, COMPAR *pp); +void dump_dir(dir_data *dird, drive_spec *ds); +int get_dir_entry(dir_data *dentry, drive_spec *ds, COMPAR *pp, unsigned char *filename); +void kill_space(char *string); +int read_multiple_block(COMPAR *pp, unsigned long address, unsigned long blocks); + +int read_file(dir_data *dird, drive_spec *ds, unsigned long *address, COMPAR *pp); +int get_next_cluster(dir_data *dird, drive_spec *ds, COMPAR *pp, unsigned short last_cluster); + +int isprint(int character); + +RedBoot_cmd("sdcard", + "read from SD-Card", + "[-d] [-f ] [-b res_type & 0x3) << 0) | + ((pp->data_en & 0x1) << 2) | + ((pp->data_write & 0x1) << 3) | + ((pp->stream_blk & 0x1) << 4) | + ((pp->busy & 0x1) << 5) | + ((pp->init & 0x1) << 6) | + ((pp->dma_en & 0x1) << 7) | + ((pp->sd_4dat & 0x1) << 8)); + return cvalue; +} + +void do_sdcard(int argc, char *argv[]) +{ + struct option_info opts[3]; + bool dflag_set, base_address_set, filename_set; + unsigned char *fn_buffer; + unsigned long base_address; + int dflag; + static COMPAR cpar; + static unsigned char rbuffer[32]; + static unsigned char dbuffer[512]; + drive_spec my_drive; + drive_spec *ds = &my_drive; + u16 *p16 = (u16 *)dbuffer; + int valid_partition; + dir_data dentry; + int i; + + init_opts(&opts[0], 'd', false, OPTION_ARG_TYPE_FLG, (void *)&dflag, + &dflag_set, "directory"); + init_opts(&opts[1], 'b', true, OPTION_ARG_TYPE_NUM, (void *)&base_address, + &base_address_set, "base address to load file contents"); + init_opts(&opts[2], 'f', true, OPTION_ARG_TYPE_STR, (void *)&fn_buffer, + &filename_set, "filename"); + + if (!scan_opts(argc, argv, 1, opts, 3, 0, 0, "")) { + return; + } + if (dflag & base_address_set) { + diag_printf("warning, -b parameter is ignored\n"); + } + + if (dflag & filename_set) { + diag_printf("warning, -f parameter is ignored\n"); + } + +#ifdef CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT + // Do not check for the base address now since + // possibly we are about to load a wince .BIN image. + // We will validate it latter instead. + + if (!dflag && !filename_set) { + diag_printf("error, filename must be specified with -f parameter\n"); + return; + } + + if (!base_address_set) { + base_address = 0; + } +#else + if (base_address_set & !filename_set) { + diag_printf("error, filename must be specified with -f parameter\n"); + return; + } + + if (!base_address_set & filename_set) { + diag_printf("error, base address must be specified with -b parameter\n"); + return; + } +#endif + cpar.rbuffer = rbuffer; // specify buffer for command response + cpar.dbuffer = dbuffer; // specify buffer for data transfer + + if (dflag) { + if (chk_sd_status(&cpar) < 0) { + return; + } +#if SDCARD_DEBUG + diag_printf("\n\nreading master boot record now\n"); +#endif + if (read_single_block(&cpar, 0) < 0) { + diag_printf("read single block command failed!\n"); + return; + } +#if SDCARD_DEBUG + diag_printf("\n\n"); + dump_buf(dbuffer, 512); +#endif + if (*(p16 + 255) != 0xaa55) { + diag_printf("warning: no patition table found on drive\n"); + diag_printf("exiting command\n"); + return; + } + + //search for first FAT16 partition + valid_partition = 0; + for (i = 0; i < 4; i++) { + ds->partition_size = dbuffer[446 + i * 16 + 12] + + (dbuffer[446 + i * 16 + 13] << 8) + + (dbuffer[446 + i * 16 + 14] << 16) + + (dbuffer[446 + i * 16 + 15] << 24); + + ds->partition_offset = dbuffer[446 + i * 16 + 8] + + (dbuffer[446 + i * 16 + 9] << 8) + + (dbuffer[446 + i * 16 + 10] << 16) + + (dbuffer[446 + i * 16 + 11] << 24); + + ds->partition_type = dbuffer[446 + i * 16 + 4]; + + if ((ds->partition_type != 0x01 && + ds->partition_type != 0x04 && + ds->partition_type != 0x05 && + ds->partition_type != 0x06) || + ds->partition_size == 0 || ds->partition_offset == 0) { + continue; + } else { + valid_partition = i + 1; + break; + } + } + + if (!valid_partition) { + diag_printf("warning, no valid partiton table found\n"); + ds->partition_offset = 0; + } else { +#if SDCARD_DEBUG + diag_printf("Partition Size: 0x%08X\n", ds->partition_size); + diag_printf("Partition Offset: 0x%08X\n", ds->partition_offset); + diag_printf("Partition Type: 0x%08X\n", ds->partition_type); +#endif + } + + if (read_single_block(&cpar, ds->partition_offset * 512) < 0) { + diag_printf("read single block command failed!\n"); + return; + } +#if SDCARD_DEBUG + diag_printf("\n\nreading FAT boot record now:\n"); + dump_buf(dbuffer, 512); +#endif +#if !FAT16_ONLY + if (dbuffer[0x36] =='F' && + dbuffer[0x37] == 'A' && + dbuffer[0x38] == 'T' && + dbuffer[0x39] == '1' && + (dbuffer[0x3A] == '2' || dbuffer[0x3A] == '6')) { + if (dbuffer[0x3A] == '6') { +#if SDCARD_DEBUG + diag_printf("FAT16 found\n"); +#endif + ds->fat16 = 1; + } else { + diag_printf("FAT12 found\n"); + ds->fat16 = 0; + } + } else { + diag_printf("no valid FAT entry found\n"); + while (1); + } +#else + ds->fat16 = 1; +#endif + ds->bytes_per_sector = dbuffer[0x0b] + (dbuffer[0x0c] << 8); + ds->sectors_per_cluster = dbuffer[0x0d]; + ds->reserved_sectors = dbuffer[0x0e] + (dbuffer[0x0f] << 8); + ds->number_of_copies_of_fat = dbuffer[0x10]; + ds->maximum_root_entries = dbuffer[0x11] + (dbuffer[0x12] << 8); + ds->sectors_per_fat = dbuffer[0x16] + (dbuffer[0x17] << 8); + + ds->fat_start_block = ds->partition_offset + ds->reserved_sectors; + ds->root_dir_start_block = ds->fat_start_block + ds->sectors_per_fat * ds->number_of_copies_of_fat; + ds->data_area_start_block = ds->root_dir_start_block + ds->maximum_root_entries * 32 / ds->bytes_per_sector; + ds->number_of_files = 0; +#if SDCARD_DEBUG + diag_printf("partition size is: .................... %lu blocks\n", + ds->partition_size); + diag_printf("partition offset is: .................. %lu blocks\n", + ds->partition_offset); + + diag_printf("bytes per sector ...................... %d\n", + ds->bytes_per_sector); + diag_printf("sectors per cluster ................... %d\n", + ds->sectors_per_cluster); + diag_printf("reserved sectors found ................ %d\n", + ds->reserved_sectors); + diag_printf("number of FAT copies .................. %d\n", + ds->number_of_copies_of_fat); + diag_printf("maximum entries in root file system ... %d\n", + ds->maximum_root_entries); + diag_printf("sectors per fat ....................... %d\n", + ds->sectors_per_fat); + + diag_printf("FAT starts at block ................... %lu\n", + ds->fat_start_block); + diag_printf("Root DIR starts at block .............. %lu\n", + ds->root_dir_start_block); + diag_printf("Data (Cluster 2) starts at block ...... %lu\n", + ds->data_area_start_block); +#endif + if (get_dir_data(ds, &cpar) < 0) { + diag_printf("failed to read directory entries !\n"); + return; + } + diag_printf("\n\n%d files found in directory\n", ds->number_of_files); + } + + if (filename_set) { + if (chk_sd_status(&cpar) < 0) { + return; + } +#if SDCARD_DEBUG + diag_printf("\n\nreading master boot record now\n"); +#endif + if (read_single_block(&cpar, 0) < 0) { + diag_printf("read single block command failed!\n"); + return; + } +#if SDCARD_DEBUG + diag_printf("\n\n"); + dump_buf(dbuffer, 512); +#endif + if (*(p16 + 255) != 0xaa55) { + diag_printf("warning: no patition table found on drive\n"); + return; + } + + //search for first FAT16 partition + valid_partition = 0; + for (i = 0; i < 4; i++) { + ds->partition_size = dbuffer[446 + i * 16 + 12] + (dbuffer[446 + i * 16 + 13] << 8) + + (dbuffer[446 + i * 16 + 14] << 16) + (dbuffer[446 + i * 16 + 15] << 24); + + ds->partition_offset = dbuffer[446 + i * 16 + 8] + (dbuffer[446 + i * 16 + 9] << 8) + + (dbuffer[446 + i * 16 + 10] << 16) + (dbuffer[446 + i * 16 + 11] << 24); + + ds->partition_type = dbuffer[446 + i * 16 + 4]; + + if ((ds->partition_type != 0x01 && + ds->partition_type != 0x04 && + ds->partition_type != 0x05 && + ds->partition_type != 0x06) || + ds->partition_size == 0 || ds->partition_offset == 0) { + continue; + } else { + valid_partition = i + 1; + break; + } + } + if (!valid_partition) { + diag_printf("warning, no valid partiton table found\n"); + ds->partition_offset = 0; + } + if (read_single_block(&cpar, ds->partition_offset * 512) < 0) { + diag_printf("read single block command failed!\n"); + return; + } +#if SDCARD_DEBUG + diag_printf("\n\nreading FAT boot record now:\n"); + dump_buf(dbuffer, 512); +#endif +#if !FAT16_ONLY + if (dbuffer[0x36] == 'F' && + dbuffer[0x37] == 'A' && + dbuffer[0x38] == 'T' && + dbuffer[0x39] == '1' && + (dbuffer[0x3A] == '2' || dbuffer[0x3A] == '6')) { + if (dbuffer[0x3A] == '6') { +#if SDCARD_DEBUG + diag_printf("FAT16 found\n"); +#endif + ds->fat16 = 1; + } else { + diag_printf("FAT12 found\n"); + ds->fat16 = 0; + } + } else { + diag_printf("no valid FAT entry found\n"); + while (1); + } +#else + ds->fat16 = 1; +#endif + ds->bytes_per_sector = dbuffer[0x0b] + (dbuffer[0x0c] << 8); + ds->sectors_per_cluster = dbuffer[0x0d]; + ds->reserved_sectors = dbuffer[0x0e] + (dbuffer[0x0f] << 8); + ds->number_of_copies_of_fat = dbuffer[0x10]; + ds->maximum_root_entries = dbuffer[0x11] + (dbuffer[0x12] << 8); + ds->sectors_per_fat = dbuffer[0x16] + (dbuffer[0x17] << 8); + + ds->fat_start_block = ds->partition_offset + ds->reserved_sectors; + ds->root_dir_start_block = ds->fat_start_block + ds->sectors_per_fat * ds->number_of_copies_of_fat; + ds->data_area_start_block = ds->root_dir_start_block + ds->maximum_root_entries * 32 / ds->bytes_per_sector; + ds->number_of_files = 0; +#if SDCARD_DEBUG + diag_printf("partition size is: .................... %lu blocks\n", + ds->partition_size); + diag_printf("partition offset is: .................. %lu blocks\n", + ds->partition_offset); + + diag_printf("bytes per sector ...................... %d\n", + ds->bytes_per_sector); + diag_printf("sectors per cluster ................... %d\n", + ds->sectors_per_cluster); + diag_printf("reserved sectors found ................ %d\n", + ds->reserved_sectors); + diag_printf("number of FAT copies .................. %d\n", + ds->number_of_copies_of_fat); + diag_printf("maximum entries in root file system ... %d\n", + ds->maximum_root_entries); + diag_printf("sectors per fat ....................... %d\n", + ds->sectors_per_fat); + + diag_printf("FAT starts at block ................... %lu\n", + ds->fat_start_block); + diag_printf("Root DIR starts at block .............. %lu\n", + ds->root_dir_start_block); + diag_printf("Data (Cluster 2) starts at block ...... %lu\n", + ds->data_area_start_block); +#endif + if (get_dir_entry(&dentry, ds, &cpar, fn_buffer) < 0) { + diag_printf("file %s not found !\n", dentry.dir_fname); + return; + } + + if (read_file(&dentry, ds, (unsigned long *)base_address, &cpar) < 0) { + diag_printf("failed to read file %s\n", dentry.dir_fname); + return; + } +#ifdef CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT + if (!cpar.isWinceImage) { + diag_printf("\n%s loaded address: 0x%08X size: %10lu bytes\n\n", + dentry.dir_fname, base_address, dentry.dir_fsize); + } +#else + diag_printf("\n%s loaded address: 0x%08X size: %10lu bytes\n\n", + dentry.dir_fname, base_address, dentry.dir_fsize); +#endif + return; + } +} + +int chk_sd_status(COMPAR *pp) +{ + unsigned char rbuffer[32]; +#if SDCARD_DEBUG + int i; +#endif + + pp->command_number = SD_CMD13; + if (send_command(pp) < 0) { + diag_printf("initialising SD-Card interface\n"); + if (init_sdcard(pp) < 0) { + diag_printf("card initialisation failed !\n"); + return -1; + } else { + return 0; + } + } +#if SDCARD_DEBUG + diag_printf("Response got from CMD13: "); + for (i = 0; i < 6; i++) { + diag_printf("%02X ", rbuffer[i]); + } + diag_printf("\n\n\n"); +#endif + if (rbuffer[3] != 0x09 && (rbuffer[2] & 0x01) != 0x00) { + diag_printf("warning, Card is not in the Transfer state as expected !\n"); + diag_printf("initialising SD-Card interface\n"); + if (init_sdcard(pp) < 0) { + diag_printf("card initialisation failed !\n"); + return -1; + } else { + return 0; + } + } + return 0; + +} + +int init_sdcard(COMPAR *pp) +{ + unsigned long value; + int timeout; + unsigned char tbuffer[6]; + unsigned short newrca; + unsigned long trans_speed; + unsigned long read_bl_len; + unsigned long c_size; + unsigned long c_size_mult; + unsigned long sector_size; + unsigned long conbuf[3]; + unsigned long mult; + unsigned long blen; + unsigned long card_size; + unsigned long trans_rate; + int i; + unsigned long trans_rate_exp[8] = {100, 1000, 10000, 100000, 0, 0, 0, 0}; + unsigned short time_mantissa[16] = {0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80}; + + enable_sdcard_power(); + + pp->rca = 0; // relative card address + + HAL_READ_UINT32(ICMR, value); + value &= (~0x00800000); + HAL_WRITE_UINT32(ICMR, value); // mask interrupt source SD-card controller + + HAL_WRITE_UINT32(MMCCLKRT, MMCCLKRT_0M304); // set clock rate to lowest rate first + HAL_WRITE_UINT32(MMCSPI, 0); // do not use SPI mode + HAL_WRITE_UINT32(MMCRESTO, 0x7f); // set to maximum timeout + HAL_WRITE_UINT32(MMCBLKLEN, 512); + HAL_WRITE_UINT32(MMCNOB, 1); + + // start the clock now + HAL_WRITE_UINT32(MMCSTRPCL, 2); // start MMCLK + HAL_READ_UINT32(MMCSTRPCL, value); + while (value & 2) { // wait until clock is started + HAL_DELAY_US(1000); + HAL_READ_UINT32(MMCSTRPCL, value); + } + HAL_DELAY_US(100 * 1000); + + pp->command_number = SD_CMD0; + if (send_command(pp) < 0) { + diag_printf("CMD0 failed, repeating command \n"); + return -1; + } + + timeout = 100; + pp->command_number = SD_ACMD41; + pp->command_parameter_high = 0x001f; // 2,8V - 3,3V + + while (timeout > 0) { + if (send_command(pp) < 0) { + HAL_DELAY_US(1000); + timeout--; + continue; + } + if (!(pp->rbuffer[1] & 0x80)) { // card not powered up + HAL_DELAY_US(1000); + timeout--; + continue; + } else { + break; + } + } + if (timeout == 0) { + diag_printf("failed to power up card, ACMD41 failed\n"); + return -1; + } +#if SDCARD_DEBUG + diag_printf("Response got from ACMD41: "); + for (i = 0; i < 6; i++) { + diag_printf("%02X ", pp->rbuffer[i]); + } + diag_printf("\n\n\n"); +#endif + pp->command_number = SD_CMD2; + if (send_command(pp) < 0) { + diag_printf("CMD2 failed !!!\n"); + return -1; + } +#if SDCARD_DEBUG + diag_printf("Response got from CMD2: "); + for (i = 0; i < 17; i++) { + diag_printf("%02X ", pp->rbuffer[i]); + } + diag_printf("\n\n\n"); +#endif + for (i = 0; i < 5; i++) { + tbuffer[i] = pp->rbuffer[i + 4]; + } + tbuffer[5] = '\0'; + + diag_printf("found SD-Card: %s\n", tbuffer); + + pp->command_number = SD_CMD3; + if (send_command(pp) < 0) { + diag_printf("CMD3 failed !!!\n"); + return -1; + } +#if SDCARD_DEBUG + diag_printf("Response got from CMD3: "); + for (i = 0; i < 6; i++) { + diag_printf("%02X ", pp->rbuffer[i]); + } + diag_printf("\n\n\n"); +#endif + newrca = 0; + newrca = (pp->rbuffer[1] << 8) | pp->rbuffer[2]; +#if 1 + diag_printf("new RCA is: %04X\n", newrca); +#endif + pp->rca = newrca; // relative card address + +////////////////////////////////////////////////////////////////////////////////// +// SEND_CSD Command +// +// get clock information of CSD register +// +////////////////////////////////////////////////////////////////////////////////// + + pp->command_number = SD_CMD9; + if (send_command(pp) < 0) { + diag_printf("CMD9 (SEND_CSD) failed !!!\n"); + return -1; + } +#if SDCARD_DEBUG + diag_printf("Response got from CMD9 (SEND_CSD): "); + for (i = 0; i < 17; i++) { + diag_printf("%02X ", pp->rbuffer[i]); + } + diag_printf("\n\n\n"); +#endif + trans_speed = pp->rbuffer[4]; + read_bl_len = pp->rbuffer[6] & 0x0f; + conbuf[0] = (unsigned long)(pp->rbuffer[9] & 0xc0); + conbuf[1] = (unsigned long)(pp->rbuffer[8] & 0xff); + conbuf[2] = (unsigned long)(pp->rbuffer[7] & 0x03); + c_size = (conbuf[0] >> 6) | (conbuf[1] << 2) | (conbuf[2] << 10); + conbuf[0] = (pp->rbuffer[11] & 0x80); + conbuf[1] = (pp->rbuffer[10] & 0x03); + c_size_mult = conbuf[0] >> 7 | conbuf[1] << 1; + conbuf[0] = (pp->rbuffer[12] & 0x80); + conbuf[1] = (pp->rbuffer[11] & 0x3f); + sector_size = conbuf[0] >> 7 | conbuf[1] << 1; + + for (i = 0, mult = 4; i < c_size_mult; i++) + mult *= 2; + + for (i = 0, blen = 1; i < read_bl_len; i++) + blen *= 2; + + card_size = (c_size + 1) * mult * blen; + diag_printf("total card capacity is %lu.%03lu MBytes\n", + card_size / 1024 / 1024, card_size / 1024 % 1024); + + conbuf[0] = (unsigned long)trans_speed & 0x07; + conbuf[1] = ((unsigned long)(trans_speed & 0x78)) >> 3; + + trans_rate = time_mantissa[conbuf[1]] * trans_rate_exp[conbuf[0]] / 10; // in kbit/sec + + diag_printf("transfer rate of card is %lu kbit/sec\n", trans_rate); + + if (trans_rate >= 19500) { + diag_printf("set interface clock rate to 19,5 MHz\n\n"); + HAL_WRITE_UINT32(MMCCLKRT, MMCCLKRT_19M5); + } else if (trans_rate >= 9750) { + diag_printf("set interface clock rate to 9,75 MHz\n\n"); + HAL_WRITE_UINT32(MMCCLKRT, MMCCLKRT_9M75); + } else if (trans_rate >= 4880) { + diag_printf("set interface clock rate to 4,88 MHz\n\n"); + HAL_WRITE_UINT32(MMCCLKRT, MMCCLKRT_4M88); + } else if (trans_rate >= 2440) { + diag_printf("set interface clock rate to 2,44 MHz\n\n"); + HAL_WRITE_UINT32(MMCCLKRT, MMCCLKRT_2M44); + } else if (trans_rate >= 1220) { + diag_printf("set interface clock rate to 1,22 MHz\n\n"); + HAL_WRITE_UINT32(MMCCLKRT, MMCCLKRT_1M22); + } else if (trans_rate >= 609) { + diag_printf("set interface clock rate to 609 kHz\n\n"); + HAL_WRITE_UINT32(MMCCLKRT, MMCCLKRT_0M609); + } +///////////////////////////////////////////////////////////////////////////////// + pp->command_number = SD_CMD7; + if (send_command(pp) < 0) { + diag_printf("CMD7 failed !!!\n"); + return -1; + } +#if SDCARD_DEBUG + diag_printf("Response got from CMD7: "); + for (i = 0; i < 6; i++) { + diag_printf("%02X ", pp->rbuffer[i]); + } + diag_printf("\n\n\n"); +#endif + pp->command_number = SD_CMD13; + if (send_command(pp) < 0) { + diag_printf("CMD13 failed !!!\n"); + return -1; + } +#if SDCARD_DEBUG + diag_printf("Response got from CMD13: "); + for (i = 0; i < 6; i++) { + diag_printf("%02X ", pp->rbuffer[i]); + } + diag_printf("\n\n\n"); +#endif + if (pp->rbuffer[3] != 0x09 && (pp->rbuffer[2] & 0x01) != 0x00) { + diag_printf("error, Card is not in the Transfer state as expected !\n"); + return -1; + } + + pp->command_number = SD_ACMD6; + if (send_command(pp) < 0) { + diag_printf("ACMD6 failed !!!\n"); + return -1; + } + + return 1; + +} + +int send_command(COMPAR *pp) +{ + unsigned long cvalue; + int i; + unsigned short val; + unsigned char *cp; + unsigned char cnumber; + + //diag_printf("processing CMD: %d\n", pp->command_number); + cnumber = pp->command_number; + switch (pp->command_number) { + case SD_CMD0: + pp->command_parameter_low = 0; // stuff bits + pp->command_parameter_high = 0; // RCA Relative Card Address; + pp->res_type = CMD_RES_TYPE_NORESP; + pp->data_en = 0; + pp->dma_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + break; + case SD_CMD2: + pp->command_parameter_low = 0; + pp->command_parameter_high = 0; + pp->res_type = CMD_RES_TYPE_R2; + pp->data_en = 0; + pp->dma_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + break; + case SD_CMD3: + pp->command_parameter_low = 0; // stuff bits + pp->command_parameter_high = 0; // stuff bits + pp->res_type = CMD_RES_TYPE_R6; + pp->data_en = 0; + pp->dma_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + break; + case SD_CMD7: + pp->command_parameter_low = 0; + pp->command_parameter_high = pp->rca; + pp->res_type = CMD_RES_TYPE_R1; + pp->dma_en = 0; + pp->data_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + break; + case SD_CMD9: // SEND_CSD + pp->command_parameter_low = 0; + pp->command_parameter_high = pp->rca; + pp->res_type = CMD_RES_TYPE_R2; + pp->dma_en = 0; + pp->data_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + break; + case SD_CMD12: // Stop Transmission + pp->command_parameter_low = 0; + pp->command_parameter_high = 0; + pp->res_type = CMD_RES_TYPE_R1; + pp->dma_en = 0; + pp->data_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + break; + case SD_CMD13: + pp->command_parameter_low = 0; + pp->command_parameter_high = pp->rca; + pp->res_type = CMD_RES_TYPE_R1; + pp->dma_en = 0; + pp->data_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + break; + case SD_CMD17: // READ_SINGLE_BLOCK + pp->res_type = CMD_RES_TYPE_R1; + pp->dma_en = 0; + pp->data_en = 1; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + break; + + case SD_ACMD6: + // we issue a CMD 55 first. + pp->command_parameter_low = 0; // stuff bits + pp->command_parameter_high = 0; // RCA Relative Card Address; + pp->res_type = CMD_RES_TYPE_R1; + pp->dma_en = 0; + pp->data_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + HAL_WRITE_UINT32(MMCCMD, 55); // command number + HAL_WRITE_UINT32(MMCARGH, pp->rca); + HAL_WRITE_UINT32(MMCARGL, pp->command_parameter_low); + + cvalue = cmd_value(pp); + HAL_WRITE_UINT32(MMCCMDAT, cvalue); + if (wait4cmd_end() < 0) { + diag_printf("CMD55 failed !!!\n"); + return -1; + } + + // issue CMD 6 now + pp->command_parameter_low = 2; // 4 Bit Bus width + pp->command_parameter_high = 0; + pp->res_type = CMD_RES_TYPE_R1; + pp->dma_en = 0; + pp->data_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 1; + pp->init = 0; + pp->sd_4dat = 1; + cnumber = 6; + break; + + case SD_ACMD41: + // we issue a CMD 55 first. + pp->command_parameter_low = 0; // stuff bits + pp->command_parameter_high = 0; // RCA Relative Card Address; + pp->res_type = CMD_RES_TYPE_R1; + pp->dma_en = 0; + pp->data_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + HAL_WRITE_UINT32(MMCCMD, 55); // command number + HAL_WRITE_UINT32(MMCARGH, pp->rca); + HAL_WRITE_UINT32(MMCARGL, pp->command_parameter_low); + + cvalue = cmd_value(pp); + HAL_WRITE_UINT32(MMCCMDAT, cvalue); + if (wait4cmd_end() < 0) { + diag_printf("CMD55 failed !!!\n"); + return -1; + } + + // issue CMD 41 now + pp->command_parameter_low = 0; + pp->command_parameter_high = 0x001f; // 2,8V - 3,3V + pp->res_type = CMD_RES_TYPE_R3; + pp->dma_en = 0; + pp->data_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 1; + pp->init = 0; + pp->sd_4dat = 1; + cnumber = 41; + break; + default: +#if SDCARD_DEBUG + diag_printf("found unsupported command: %d\n", pp->command_number); +#else + diag_printf("found unsupported command\n\n"); +#endif + return -1; + } + + HAL_WRITE_UINT32(MMCCMD, pp->command_number); // command number + HAL_WRITE_UINT32(MMCARGH, pp->command_parameter_high); // command parameter upper 16 bits + HAL_WRITE_UINT32(MMCARGL, pp->command_parameter_low); // command parameter lower 16 bits + + cvalue = cmd_value(pp); + //diag_printf("writing into command register: 0x%08X\n", cvalue); + HAL_WRITE_UINT32(MMCCMDAT, cvalue); + + if (wait4cmd_end() < 0) { + return -1; + } + + if (pp->res_type == CMD_RES_TYPE_NORESP) { + return 0; + } + + cp = pp->rbuffer; + if (pp->res_type == CMD_RES_TYPE_R2) { + for (i = 0; i < 17 / 2; i++) { + HAL_READ_UINT16(MMCRES, val); + *(cp++) = (unsigned char)((val >> 8) & 0xff); + *(cp++) = (unsigned char)(val & 0xff); + } + } else { + for (i = 0; i < 6 / 2; i++) { + HAL_READ_UINT16(MMCRES, val); + *(cp++) = (unsigned char)((val >> 8) & 0xff); + *(cp++) = (unsigned char)(val & 0xff); + } + } + return 0; +} + +int wait4cmd_end(void) +{ + int timeout; + unsigned long cvalue; + unsigned long val; + + timeout = 1000; + HAL_READ_UINT32(MMCSTAT, val); + while (!(val & MMCSTAT_END_CMD_RES)) { + HAL_DELAY_US(1000); + timeout--; + if (timeout <= 0){ + break; + } + HAL_READ_UINT32(MMCSTAT, val); + } + if (timeout <= 0) { + diag_printf("Command timed out, no response from card controller\n"); + //HAL_READ_UINT32(MMCSTAT, val); + //diag_printf("Status register: 0x%08X\n", val); + return -1; + } + + HAL_READ_UINT32(MMCSTAT, cvalue); + + if (cvalue & MMCSTAT_TIME_OUT_RES) { + diag_printf("Command Response Time Out Error\n"); + return -1; + } + + if (cvalue & MMCSTAT_RES_CRC_ERR) { + diag_printf("Response CRC Error occured\n"); + return -1; + } + return 0; +} + +#if DMA_ACCESS // DMA Version +int read_single_block(COMPAR *pp, unsigned long address) +{ + unsigned long val, cvalue; + + HAL_DCACHE_SYNC(); + HAL_WRITE_UINT32(MMCNOB, 1); + + HAL_WRITE_UINT32(DCSR8, 0x40000000); // set DMA channel to no descriptor fetch mode + + HAL_WRITE_UINT32(DSADR8, 0x41100040); // SDCARD FIFO + HAL_WRITE_UINT32(DTADR8, (unsigned long)pp->dbuffer); // target address + HAL_WRITE_UINT32(DCMD8, 0x60034200); // command + HAL_WRITE_UINT32(DCSR8, 0xc0000000); // run channel + + pp->command_parameter_low = address & 0xffff; + pp->command_parameter_high = (address & 0xffff0000) >> 16; + + pp->command_number = SD_CMD17; + pp->res_type = CMD_RES_TYPE_R1; + pp->data_en = 1; + pp->dma_en = 1; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + + HAL_WRITE_UINT32(MMCCMD, pp->command_number); // command number + HAL_WRITE_UINT32(MMCARGH, pp->command_parameter_high); // command parameter upper 16 bits + HAL_WRITE_UINT32(MMCARGL, pp->command_parameter_low); // command parameter lower 16 bits + + cvalue = cmd_value(pp); + HAL_WRITE_UINT32(MMCCMDAT, cvalue); + + HAL_READ_UINT32(DCMD8, val); // command + while (val & 0x1fff) { + HAL_READ_UINT32(DCMD8, val); + } + + HAL_WRITE_UINT32(DCSR8, 0x40000000); // set DMA channel to no descriptor fetch mode +#if 0 + HAL_READ_UINT32(MMCIREG, val); + while (!(val & 0x1)) { // wait for DATA_TRANS_DONE + + HAL_READ_UINT32(MMCIREG, val); + } +#endif + //dump_buf((unsigned char *)pp->dbuffer, 512); + + if (wait4cmd_end() < 0) { + diag_printf("read single block command timed out !!!!"); + return -1; + } +#if 0 + HAL_READ_UINT32(DSADR8, val); + diag_printf("DMA source address: 0x%08X\n", val); + HAL_READ_UINT32(DTADR8, val); // target address + diag_printf("DMA target address: 0x%08X\n", val); + + HAL_READ_UINT32(DCMD8, val); // command + diag_printf("DMA command register: 0x%08X\n", val); + + HAL_READ_UINT32(DCSR8, val); + diag_printf("DMA status register: 0x%08X\n", val); +#endif + return 0; + +} +#else // no DMA +int read_single_block(COMPAR *pp, unsigned long address) +{ + int length; + int i; + int bp; + unsigned long val, cvalue; + unsigned char val8; + unsigned long *bap; + + HAL_WRITE_UINT32(MMCNOB, 1); + + bap = (unsigned long *)pp->dbuffer; + + pp->command_parameter_low = address & 0xffff; + pp->command_parameter_high = (address & 0xffff0000) >> 16; + + pp->command_number = SD_CMD17; + pp->res_type = CMD_RES_TYPE_R1; + pp->data_en = 1; + pp->dma_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + + HAL_WRITE_UINT32(MMCCMD, pp->command_number); // command number + HAL_WRITE_UINT32(MMCARGH, pp->command_parameter_high); // command parameter upper 16 bits + HAL_WRITE_UINT32(MMCARGL, pp->command_parameter_low); // command parameter lower 16 bits + + cvalue = cmd_value(pp); + HAL_WRITE_UINT32(MMCCMDAT, cvalue); + + length = 512; + bp = 0; + + while (length > 0) { + HAL_READ_UINT32(MMCIREG, val); + while (!(val & 0x20)) { // wait for RXFIFO_RD_REQ + //HAL_DELAY_US(100); + + HAL_READ_UINT32(MMCIREG, val); + } +#if 0 + for (i = 0; i < 32; i++) { + HAL_READ_UINT8(MMCRXFIFO, val8); + pp->dbuffer[bp++] = val8; + } +#else + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; +#endif + length -=32; + } + if (wait4cmd_end() < 0) { + diag_printf("read single block command timed out !!!!"); + return -1; + } + + return 0; + +} +#endif + +#if 1 +void dump_buf(unsigned char *address, u16 length) +{ + u16 lines = length / 16; + u16 rest = length % 16; + int i, j; + + for (i = 0; i < lines; i++) { + for (j = 0; j < 16; j++) + diag_printf("%02X ", address[i * 16 + j]); + diag_printf(" "); + for (j = 0; j < 16; j++) { + if (isprint(address[i * 16 + j])) { + diag_printf("%c", address[i * 16 + j]); + } + else { + diag_printf("."); + } + } + diag_printf("\n"); + } + + // behandle Restzeile + for (j = 0; j < rest; j++) + diag_printf("%02X ", address[i * 16 + j]); + diag_printf(" "); + for (j = 0; j < 16 - rest; j++) + diag_printf(" "); + for (j = 0; j < rest; j++) { + if (isprint(address[i * 16 + j])) { + diag_printf("%c", address[i * 16 + j]); + } + else { + diag_printf("."); + } + } + + diag_printf("\n"); + +} +#endif + +int get_dir_data(drive_spec *ds, COMPAR *pp) +{ + u32 actual_block; + u32 block_needed; + u32 entry_offset; + int i, j, k; + unsigned char *buffer; + dir_data dentry; + + k = 0; + actual_block = 0; + ds->number_of_files = 0; + buffer = pp->dbuffer; + + for (i = 0; i < ds->maximum_root_entries; i++) { + block_needed = ds->root_dir_start_block + i * 32 / ds->bytes_per_sector; + if (actual_block != block_needed) { + if (read_single_block(pp, block_needed * 512) < 0) { + diag_printf("read single block command failed!\n"); + return -1; + } + + actual_block = block_needed; + } + entry_offset = (i * 32) % ds->bytes_per_sector; + if ( buffer[entry_offset] == 0x00 || buffer[entry_offset] == 0x05 + || buffer[entry_offset] == 0x2e || buffer[entry_offset] == 0xe5) + continue; + if (buffer[entry_offset + 0x0b] & 0x1e) + continue; // hidden system or label + + // copy filename + for (j = 0;j < 8;j++) + if (buffer[entry_offset + j] > 0x40 && buffer[entry_offset + j] < 0x5b) + (dentry.dir_fname)[j] = buffer[entry_offset + j] + 0x20; + else + (dentry.dir_fname)[j] = buffer[entry_offset + j]; + + for (j = 0;j < 3;j++) + if (buffer[entry_offset + j + 8] > 0x40 && buffer[entry_offset + j + 8] < 0x5b) + (dentry.dir_fname)[j + 9] = buffer[entry_offset + j + 8] + 0x20; + else + (dentry.dir_fname)[j + 9] = buffer[entry_offset + j + 8]; + + dentry.dir_fname[8] = '.'; + dentry.dir_fname[12] = '\0'; + kill_space(dentry.dir_fname); + + dentry.dir_year = ((buffer[entry_offset + 0x19] & 0xfe) >> 1) + 1980; + dentry.dir_month = ((buffer[entry_offset + 0x18] & 0xe0) >> 5) + (buffer[entry_offset + 0x19] & 0x01) * 8; + dentry.dir_day = (buffer[entry_offset + 0x18] & 0x1f); + + dentry.dir_second = (buffer[entry_offset + 0x16] & 0x1f); + dentry.dir_minute = ((buffer[entry_offset + 0x16] & 0xe0) >> 5) + (buffer[entry_offset + 0x17] & 0x07) * 8; + dentry.dir_hour = (buffer[entry_offset + 0x17] & 0xf1) >> 3; + + dentry.dir_start_cluster =buffer[entry_offset + 0x1a] + ((buffer[entry_offset + 0x1b]) << 8); + dentry.dir_fsize = ((buffer[entry_offset + 0x1c]) << 0) + + ((buffer[entry_offset + 0x1d]) << 8) + + ((buffer[entry_offset + 0x1e]) << 16) + + ((buffer[entry_offset + 0x1f]) << 24); + + ds->number_of_files++; + dump_dir(&dentry, ds); + } + return 0; +} + +void dump_dir(dir_data *dird, drive_spec *ds) +{ + int j; + + diag_printf("%2d: %s", ds->number_of_files, (dird)->dir_fname); + for (j = 0; j < 15 - strlen((dird)->dir_fname); j++) { + diag_printf(" "); + } + diag_printf("%02d.%02d.%04d %02d:%02d:%02d size: %10lu bytes start cluster: %6u\n", + (dird)->dir_day, + (dird)->dir_month, + (dird)->dir_year, + (dird)->dir_hour, + (dird)->dir_minute, + (dird)->dir_second, + (dird)->dir_fsize, + (dird)->dir_start_cluster); +} + +int get_next_cluster(dir_data *dird, drive_spec *ds, COMPAR *pp, unsigned short last_cluster) +{ + u16 cluster; + u32 block; + static u16 fat[256]; + static u32 actual_fat_block = 0; + u32 fat_block_needed; + u16 fat_entry; + u16 fvalue; + + // find next block in fat + fat_block_needed = ds->fat_start_block + last_cluster * 2 / ds->bytes_per_sector; + fat_entry = (last_cluster * 2) % ds->bytes_per_sector; // this is the offset to the sector start + if (actual_fat_block != fat_block_needed) { +#if SDCARD_DEBUG + diag_printf("loading fat block %lu\n", fat_block_needed); +#endif + pp->dbuffer = (unsigned char *)fat; + if (read_single_block(pp, fat_block_needed * 512) < 0) { + diag_printf("read single block command failed!\n"); + return -1; + } + + actual_fat_block = fat_block_needed; +#if SDCARD_DEBUG + dump_buf((u8 *)fat, 512); +#endif + } + + fvalue = fat[fat_entry / 2]; +#if SDCARD_DEBUG + diag_printf("cluster is %d\n", cluster); + + diag_printf("fat contents of entry %d is: %d\n", fat_entry, fvalue); + diag_printf("length = %lu \n", length); +#endif + if (!fvalue) { + diag_printf("unexpected NULL pointer in FAT\n"); + return -1; + } + if ((fvalue & 0xfff0) == 0xfff0) { + //diag_printf("end of file found in FAT\n"); + return 0; + } + cluster = fvalue; + return (int)cluster; + + block = (cluster - 2) * ds->sectors_per_cluster + ds->data_area_start_block; + +} + +int read_file(dir_data *dird, drive_spec *ds, unsigned long *address, COMPAR *pp) +{ + u32 length; + u32 block; + u32 *daddr; + u16 fat[256]; + u32 actual_fat_block; + u8 *bp; + int new_cluster; + u32 clusters; + u32 max_clusters; + u16 start_cluster; // first cluster of multiple block region + int got_eof; +#ifdef CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT + u8 blockBuffer[512]; + + // Read the first block to determine if we are about + // to load Wince .BIN image + + pp->isWinceImage = 0; + pp->dbuffer = blockBuffer; + block = (dird->dir_start_cluster - 2) * ds->sectors_per_cluster + ds->data_area_start_block; + + if (read_single_block(pp, block * 512) < 0) { + diag_printf("failed to read the first data block!\n"); + return -1; + } + + // Check signature + + if (ce_is_bin_image((void*)blockBuffer, 512)) { + // Wince image, setup the .BIN parser. + pp->isWinceImage = 1; + ce_bin_init_parser(); + } else { + pp->isWinceImage = 0; + } +#endif + max_clusters = 1020 / ds->sectors_per_cluster; + got_eof = 0; + + bp = (u8 *)fat; + + actual_fat_block = 0; //no fat block is loaded already + daddr = address; + start_cluster = dird->dir_start_cluster; + length = dird->dir_fsize; + block = (start_cluster - 2) * ds->sectors_per_cluster + ds->data_area_start_block; + //diag_printf("Sektors per Cluster: %d\n", ds->sectors_per_cluster); + + while (length > 0) { + u16 last_cluster = start_cluster; // last cluster of multiple block region + + clusters = 1; + + if (length > (ds->bytes_per_sector * ds->sectors_per_cluster)) { + length -= (ds->bytes_per_sector * ds->sectors_per_cluster); + } else { + length = 0; + } + + while (clusters < max_clusters) { + new_cluster = get_next_cluster(dird, ds, pp, last_cluster); + if (new_cluster < 0) { + diag_printf("error !!!!\n"); + return -1; + } + if (new_cluster == 0) { + //diag_printf("EOF number of clusters is %d !!!!\n", clusters); + got_eof = 1; + break; + } + if ((new_cluster - last_cluster) == 1) { + last_cluster = (u16)new_cluster; + //diag_printf("%d: cluster number %d found\n", clusters, last_cluster); + clusters++; + if (length > (ds->bytes_per_sector * ds->sectors_per_cluster)) { + length -= (ds->bytes_per_sector * ds->sectors_per_cluster); + } + else { + length = 0; + } + } else { + break; + } + } +#if SDCARD_DEBUG + diag_printf("start cluster is: %d \n", start_cluster); + diag_printf("last cluster is: %d \n", last_cluster); + diag_printf("number of clusters are: %d\n", last_cluster - start_cluster + 1); + diag_printf("length is: %d\n", length); +#endif + if (got_eof && (length != 0)) { + diag_printf("found unexpected EOF!\n"); + return -1; + } + + block = (start_cluster - 2) * ds->sectors_per_cluster + ds->data_area_start_block; + pp->dbuffer = (unsigned char *)daddr; + + if (read_multiple_block(pp, block * 512, ds->sectors_per_cluster * + (last_cluster - start_cluster + 1)) < 0) { + diag_printf("read multiple block command failed!\n"); + return -1; + } + daddr += (ds->bytes_per_sector / 4 * ds->sectors_per_cluster * + (last_cluster - start_cluster + 1)); + + start_cluster = get_next_cluster(dird, ds, pp, last_cluster); + } + + return 0; + +} + +int read_file_old(dir_data *dird, drive_spec *ds, unsigned long *address, COMPAR *pp) +{ + u16 cluster; + u32 length; + u32 block; + u32 *daddr; + u16 fat[256]; + u32 actual_fat_block; + u32 fat_block_needed; + u16 fat_entry; + u16 fvalue; + + actual_fat_block = 0; //no fat block is loaded already + daddr = address; + cluster = dird->dir_start_cluster; + length = dird->dir_fsize; + block = (cluster - 2) * ds->sectors_per_cluster + ds->data_area_start_block; + + diag_printf("Sektors per Cluster: %d\n", ds->sectors_per_cluster); + + while (length > 0) { +#if 0 + for (s = 0; s < ds->sectors_per_cluster; s++) { + if (length == 0) + break; + + pp->dbuffer = (unsigned char *)daddr; + if (read_single_block(pp, block * 512) < 0) { + diag_printf("read single block command failed!\n"); + return -1; + } +#if SDCARD_DEBUG + diag_printf("loading block: %d\n", block); +#endif + block++; + daddr += ds->bytes_per_sector / 4; + if (length > ds->bytes_per_sector) { + length -= ds->bytes_per_sector; + } else { + length = 0; + } +#if SDCARD_DEBUG + diag_printf("new length is: %lu \n", length); +#endif + } +#else + pp->dbuffer = (unsigned char *)daddr; + if (read_multiple_block(pp, block * 512, ds->sectors_per_cluster) < 0) { + diag_printf("read multiple block command failed!\n"); + return -1; + } + + block += ds->sectors_per_cluster; + daddr += (ds->bytes_per_sector / 4 * ds->sectors_per_cluster); + if (length > (ds->bytes_per_sector * ds->sectors_per_cluster)) { + length -= (ds->bytes_per_sector * ds->sectors_per_cluster); + } else { + length = 0; + } +#if SDCARD_DEBUG + diag_printf("new length is: %lu \n", length); +#endif +#endif + if (!length) { // all data loaded + return 0; + } + + // find next block in fat + fat_block_needed = ds->fat_start_block + cluster * 2 / ds->bytes_per_sector; + fat_entry = (cluster * 2) % ds->bytes_per_sector; // this is the offset to the sector start + if (actual_fat_block != fat_block_needed) { +#if SDCARD_DEBUG + diag_printf("loading fat block %lu\n", fat_block_needed); +#endif + pp->dbuffer = (unsigned char *)fat; + if (read_single_block(pp, fat_block_needed * 512) < 0) { + diag_printf("read single block command failed!\n"); + return -1; + } + + actual_fat_block = fat_block_needed; +#if SDCARD_DEBUG + dump_buf((u8 *)fat, 512); +#endif + } + + fvalue = fat[fat_entry / 2]; +#if SDCARD_DEBUG + diag_printf("cluster is %d\n", cluster); + + diag_printf("fat contents of entry %d is: %d\n", fat_entry, fvalue); + diag_printf("length = %lu \n", length); +#endif + if (!fvalue) { + diag_printf("unexpected NULL pointer in FAT\n"); + return -1; + } + if ((fvalue & 0xfff0) == 0xfff0) { + diag_printf("unexpected end of file or reserved cluster found in FAT\n"); + return -1; + } + cluster = fvalue; + block = (cluster - 2) * ds->sectors_per_cluster + ds->data_area_start_block; + } + + return 0; +} + +int get_dir_entry(dir_data *dentry, drive_spec *ds, COMPAR *pp, unsigned char *filename) +{ + u32 actual_block; + u32 block_needed; + u32 entry_offset; + int i, j, k; + unsigned char *buffer; + unsigned char *cp; + int fnlength; + + cp = filename; + fnlength = 0; + + while (*(cp++) != '\0') { + fnlength++; + } + //diag_printf("filename length is %d\n", fnlength); + + k = 0; + actual_block = 0; + ds->number_of_files = 0; + buffer = pp->dbuffer; + + for (i = 0; i < ds->maximum_root_entries; i++) { + block_needed = ds->root_dir_start_block + i * 32 / ds->bytes_per_sector; + if (actual_block != block_needed) { + if (read_single_block(pp, block_needed * 512) < 0) { + diag_printf("read single block command failed!\n"); + return -1; + } + + actual_block = block_needed; + } + entry_offset = (i * 32) % ds->bytes_per_sector; + if (buffer[entry_offset] == 0x00 || + buffer[entry_offset] == 0x05 || + buffer[entry_offset] == 0x2e || + buffer[entry_offset] == 0xe5) { + continue; + } + if (buffer[entry_offset + 0x0b] & 0x1e) { + continue; // hidden system or label + } + // copy filename + for (j = 0;j < 8;j++) + if (buffer[entry_offset + j] > 0x40 && buffer[entry_offset + j] < 0x5b) + (dentry->dir_fname)[j] = buffer[entry_offset + j] + 0x20; + else + (dentry->dir_fname)[j] = buffer[entry_offset + j]; + + for (j = 0;j < 3;j++) + if (buffer[entry_offset + j + 8] > 0x40 && buffer[entry_offset + j + 8] < 0x5b) + (dentry->dir_fname)[j + 9] = buffer[entry_offset + j + 8] + 0x20; + else + (dentry->dir_fname)[j + 9] = buffer[entry_offset + j + 8]; + + dentry->dir_fname[8] = '.'; + dentry->dir_fname[12] = '\0'; + kill_space(dentry->dir_fname); + + dentry->dir_year = ((buffer[entry_offset + 0x19] & 0xfe) >> 1) + 1980; + dentry->dir_month = ((buffer[entry_offset + 0x18] & 0xe0) >> 5) + (buffer[entry_offset + 0x19] & 0x01) * 8; + dentry->dir_day = (buffer[entry_offset + 0x18] & 0x1f); + + dentry->dir_second = (buffer[entry_offset + 0x16] & 0x1f); + dentry->dir_minute = ((buffer[entry_offset + 0x16] & 0xe0) >> 5) + (buffer[entry_offset + 0x17] & 0x07) * 8; + dentry->dir_hour = (buffer[entry_offset + 0x17] & 0xf1) >> 3; + + dentry->dir_start_cluster = buffer[entry_offset + 0x1a] + ((buffer[entry_offset + 0x1b]) << 8); + dentry->dir_fsize = ((buffer[entry_offset + 0x1c]) << 0) + + ((buffer[entry_offset + 0x1d]) << 8) + + ((buffer[entry_offset + 0x1e]) << 16) + + ((buffer[entry_offset + 0x1f]) << 24); + + // compare filename + cp = filename; + for (k = 0; k < fnlength; k++) { + if (*(cp++) != dentry->dir_fname[k]) { + break; + } + } + //diag_printf("k= %d \n", k); + if (k == fnlength) { +#if SDCARD_DEBUG + diag_printf("file found !!!\n"); + dump_dir(&dentry, ds); +#endif + return 0; + } + ds->number_of_files++; + } + return -1; +} + +int isprint(int character) +{ + unsigned char a; + + a = (unsigned char)(character & 0xff); + + if (a > 0x1f && a < 0x7f) + return 1; + else + return 0; +} + +void kill_space(char *string) +{ + int i = 0; + int j; + + while (string[i] != '\0') { + if (string[i] == ' ') { + j = i; + while (string[j] != '\0') { + string[j] = string[j + 1]; + j++; + } + } else { + i++; + } + } +} + +int read_multiple_block(COMPAR *pp, unsigned long address, unsigned long blocks) +{ + static unsigned long __attribute__ ((aligned (32))) dma_desc[64][4]; + unsigned long val, cvalue, length, last_size, dma_buffer; + int i; + unsigned long cebuffer[1024]; + int bi; + unsigned long *bap; + + //HAL_WRITE_UINT32(GPSRa, 0x800); + //HAL_WRITE_UINT32(GPCRa, 0x800); + + if (!pp->isWinceImage) { // use chained descriptor list dma + dma_buffer = (unsigned long)pp->dbuffer; + + length = blocks * 512; + + i = 0; + while (length > 0) { + if (i > 63) { + diag_printf("descriptor overrun!!!\n"); + return -1; + } + + dma_desc[i][0] = (unsigned long)&dma_desc[i + 1][0]; + dma_desc[i][1] = 0x41100040; // source address is SDCARD FIFO + dma_desc[i][2] = dma_buffer; // target address + val = 0x60034000; + if (length >= 8160) { + last_size = 8160; + dma_desc[i][3] = val | 8160; // command + //diag_printf("descriptor %d: DMA length set to %d bytes\n", i, last_size); + } else { + last_size = length; + dma_desc[i][3] = val | length; // command + //diag_printf("descriptor %d: DMA length set to %d bytes\n", i, last_size); + } + dma_buffer += last_size; + length -= last_size; + if (length == 0) { + dma_desc[i][0] |= 1; // set stop bit + } + i++; + } + + HAL_DCACHE_SYNC(); + + //diag_printf("descriptor start is 0x%08X\n", (unsigned long)&dma_desc[0][0]); + + HAL_READ_UINT32(DCSR8, val); + val &= 0x3fffffff; // clear RUN and NODESCRIPTOR FETCH + HAL_WRITE_UINT32(DCSR8, val); + + HAL_WRITE_UINT32(DDADR8, (unsigned long)&dma_desc[0][0]); + val |= 0x80000000; // run channel + HAL_WRITE_UINT32(DCSR8, val); + + HAL_WRITE_UINT32(MMCNOB, blocks); + + pp->command_parameter_low = address & 0xffff; + pp->command_parameter_high = (address & 0xffff0000) >> 16; + + pp->command_number = SD_CMD18; + pp->res_type = CMD_RES_TYPE_R1; + pp->data_en = 1; + pp->dma_en = 1; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + + HAL_WRITE_UINT32(MMCCMD, pp->command_number); // command number + HAL_WRITE_UINT32(MMCARGH, pp->command_parameter_high); // command parameter upper 16 bits + HAL_WRITE_UINT32(MMCARGL, pp->command_parameter_low); // command parameter lower 16 bits + + cvalue = cmd_value(pp); + HAL_WRITE_UINT32(MMCCMDAT, cvalue); + + // wait for dma end + HAL_READ_UINT32(DCSR8, val); // wait for dma end + while (val & 0x80000000) { + HAL_READ_UINT32(DCSR8, val); + } +#if SDCARD_DEBUG + diag_printf("DMA finished \n"); + diag_printf("DMA Control Status is: 0x%08X\n", val); + + HAL_READ_UINT32(DDADR8, val); + diag_printf("Descriptor Address Register: 0x%08X\n", val); + + HAL_READ_UINT32(DSADR8, val); + diag_printf("Source Address Register: 0x%08X\n", val); + + HAL_READ_UINT32(DTADR8, val); + diag_printf("Target Address Register: 0x%08X\n", val); + + HAL_READ_UINT32(DCMD8, val); + diag_printf("Command Register: 0x%08X\n", val); +#endif + HAL_WRITE_UINT32(MMCNOB, 1); + + pp->command_number = SD_CMD12; //Stop Transmission + if (send_command(pp) < 0) { + diag_printf("CMD12 failed !!!\n"); + return -1; + } + + return 0; + } else { // read wince image +#ifdef CYGBLD_BUILD_REDBOOT_WITH_WINCE_SUPPORT + HAL_WRITE_UINT32(MMCNOB, blocks); + //HAL_WRITE_UINT32(MMCNOB, blocks); + + pp->command_parameter_low = address & 0xffff; + pp->command_parameter_high = (address & 0xffff0000) >> 16; + + pp->command_number = SD_CMD18; + pp->res_type = CMD_RES_TYPE_R1; + pp->data_en = 1; + pp->dma_en = 0; + pp->data_write = 0; + pp->stream_blk = 0; + pp->busy = 0; + pp->init = 0; + pp->sd_4dat = 1; + + HAL_WRITE_UINT32(MMCCMD, pp->command_number); + HAL_WRITE_UINT32(MMCARGH, pp->command_parameter_high); + HAL_WRITE_UINT32(MMCARGL, pp->command_parameter_low); + + cvalue = cmd_value(pp); + HAL_WRITE_UINT32(MMCCMDAT, cvalue); + + length = 512 * blocks; + + bap = cebuffer; + + bi = 0; + + while (length > 0) { + HAL_READ_UINT32(MMCIREG, val); + while (!(val & 0x20)) { // wait for RXFIFO_RD_REQ + HAL_READ_UINT32(MMCIREG, val); + } + + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + *(bap++) = *(unsigned long *)MMCRXFIFO; + + length -= 32; + bi += 8; + + if (bi == 1024) { + switch (ce_bin_parse_next(cebuffer, 4096)) { + case CE_PR_EOF: // End of file + // The image was successfully loaded, just go out + break; + + case CE_PR_ERROR: + // Ops! Corrupted or invalid image! + return -1; + + case CE_PR_MORE: + // Need more data. Just process to the next block + break; + } + bi = 0; + bap = cebuffer; + } + + if (!length) { + switch (ce_bin_parse_next(cebuffer, bi * 4)) { + case CE_PR_EOF: // End of file + // The image was successfully loaded, just go out + break; + //return 0; + case CE_PR_ERROR: + // Ops! Corrupted or invalid image! + return -1; + case CE_PR_MORE: + // Need more data. Just process to the next block + break; + } + } + + } + + if (wait4cmd_end() < 0) { + diag_printf("read multiple block command timed out !!!!"); + return -1; + } + + HAL_WRITE_UINT32(MMCNOB, 1); + + pp->command_number = SD_CMD12; // Stop Transmission + if (send_command(pp) < 0) { + diag_printf("CMD12 failed !!!\n"); + return -1; + } +#endif + return 0; + } +} diff --git a/packages/hal/arm/xscale/triton270/v2_0/src/triton270_misc.c b/packages/hal/arm/xscale/triton270/v2_0/src/triton270_misc.c new file mode 100755 index 00000000..ff333b19 --- /dev/null +++ b/packages/hal/arm/xscale/triton270/v2_0/src/triton270_misc.c @@ -0,0 +1,1655 @@ +//========================================================================== +// +// triton270_misc.c +// +// HAL misc board support code for XScale TRITON270 +// +//========================================================================== +//#####ECOSGPLCOPYRIGHTBEGIN#### +//## ------------------------------------------- +//## This file is part of eCos, the Embedded Configurable Operating System. +//## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +//## +//## eCos is free software; you can redistribute it and/or modify it under +//## the terms of the GNU General Public License as published by the Free +//## Software Foundation; either version 2 or (at your option) any later version. +//## +//## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +//## WARRANTY; without even the implied warranty of MERCHANTABILITY or +//## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +//## for more details. +//## +//## You should have received a copy of the GNU General Public License along +//## with eCos; if not, write to the Free Software Foundation, Inc., +//## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +//## +//## As a special exception, if other files instantiate templates or use macros +//## or inline functions from this file, or you compile this file and link it +//## with other works to produce a work based on this file, this file does not +//## by itself cause the resulting work to be covered by the GNU General Public +//## License. However the source code for this file must still be made available +//## in accordance with section (3) of the GNU General Public License. +//## +//## This exception does not invalidate any other reasons why a work based on +//## this file might be covered by the GNU General Public License. +//## +//## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +//## at http://sources.redhat.com/ecos/ecos-license/ +//## ------------------------------------------- +//#####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter, usteinkohl +// Contributors: msalter, usteinkohl +// Date: 20th August 2004 (last modification) +// Purpose: HAL board support +// Description: Implementations of HAL board interfaces +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ +#include +#include + +#include +#include +#include CYGBLD_HAL_PLATFORM_H +#include CYGHWR_MEMORY_LAYOUT_H + +#include // base types +#include // tracing macros +#include // assertion macros + +#include // IO macros +#include // Stub macros +#include // calling interface API +#include // Register state info +#include +#include // Interrupt names +#include +#include // Hardware definitions +#include // CYG_ISR_HANDLED + +extern int printf(char *fmt, ...); + +inline unsigned long _fu_phys_address(unsigned long _x_) +{ + switch (_x_>>12) { + case 0x0: + return _x_ + 0xa0000000; + case 0xa0000: + return _x_ & 0xfffffff; + default: + return _x_; + } +} + +/*------------------------------------------------------------------------*/ +/* IDE support */ + +void cyg_hal_plf_ide_init(void) +{ +} + +void coldstart(void) +{ + cyg_uint32 value; + + HAL_WRITE_UINT32(OSCR, 0); // initialize os timer counter + HAL_WRITE_UINT32(RCNR, 0); // initialize rtc counter + HAL_WRITE_UINT32(RTTR, 0x7FFF); // divide RTC to get 1hz output + // + // initialize interrupt registers + // + HAL_WRITE_UINT32(ICMR, 0); // Pending Interrupts are masked from becoming active + HAL_WRITE_UINT32(ICMR2, 0); + HAL_WRITE_UINT32(ICLR, 0); // Route all Interrupts to CPU IRQ (none to FIQ) + HAL_WRITE_UINT32(ICLR2, 0); + HAL_WRITE_UINT32(ICCR, 1); // Only enabled and unmasked interrupt bring core out of idle + + // + // setup general purpose I/Os (specific to TRITON270 board) + // must set GPSR/GPCR, then set GPDR, then set GPAFR + // + // this is already done in the assembly code. + + // clear all edge detect status bits + HAL_WRITE_UINT32(GEDRa, 0xffffffff); // clear all bits + HAL_WRITE_UINT32(GEDRb, 0xffffffff); + HAL_WRITE_UINT32(GEDRc, 0xffffffff); + HAL_WRITE_UINT32(GEDRd, 0xffffffff); + + // setup PCMCIA timing parameters (should be optimized (usteinkohl) + // + // this is SK3 specific + // + // for about 200 MHz MEMCLK: + // command setup: 30 nsec + // command minimum duration: 100 nsec + // command hold: 20 nsec + + HAL_WRITE_UINT32(MCIO0, 0x00040286); + HAL_WRITE_UINT32(MCIO1, 0x00040286); + + HAL_WRITE_UINT32(MCMEM0, 0x00040286); + HAL_WRITE_UINT32(MCMEM1, 0x00040286); + + HAL_WRITE_UINT32(MCATT0, 0x00040286); + HAL_WRITE_UINT32(MCATT1, 0x00040286); + + HAL_WRITE_UINT32(MECR, 0x3); // set CIT and NOS + + HAL_WRITE_UINT32(PWRICR, ICR_UR); // reset i2c_unit; + HAL_WRITE_UINT32(PWRICR, ICR_IUE | ICR_SCLE | ICR_GCD); + + HAL_READ_UINT32(PCFR, value); + //value |= 0x00000040; // enable PI2C + value = value & (~0x400); // disable voltage change sequencer + HAL_WRITE_UINT32(PCFR, value); +} + +void hal_sio_print_string(char *buf) +{ + cyg_uint32 value; + + while(1) { + HAL_READ_UINT32(STLSR, value); + while(!(value & 0x40)) { + HAL_READ_UINT32(STLSR, value); + } + value = (cyg_uint32)(*buf++) & 0xff; + if (!value) { + return; + } else { + HAL_WRITE_UINT32(STTHR, value); + } + } + +} + +void unlock_flash_all(void); + +void hal_hardware_init(void) +{ + cyg_uint32 cken; + cyg_uint32 val; + int ind; + + HAL_READ_UINT32(CKEN, cken); + // enable FFUART clock and BTUART clock and STUART + HAL_WRITE_UINT32(CKEN, cken | 0xe0); + + // Let the "OS" counter run + coldstart(); + + // Set up eCos/ROM interfaces + hal_if_init(); //ecos, not platform, specifc. Common to all. Do not change. + + // Enable caches + HAL_DCACHE_ENABLE(); //leave this + HAL_ICACHE_ENABLE(); //leave this + + //diag_printf("CKEN register: 0x%08X\n", cken); + + // check if we restart from sleep mode + HAL_READ_UINT32(RCSR, val); + //HAL_WRITE_UINT32(RCSR, 0xf); // clear all bits + if (val & 0x0f) { + const char *sep = " "; + diag_printf("\nReset caused by:"); + if (val & 1) { + diag_printf("%shardware reset pin", sep); + sep = " + "; + } + if (val & 0x02) { + diag_printf("%swatchdog reset", sep); + sep = " + "; + } + if (val & 0x08) { + diag_printf("%sGPIO reset\n", sep); + sep = " + "; + } + if (val & 0x04) { + diag_printf("%ssleep reset", sep); + sep = " + "; + HAL_READ_UINT32(PSPR, val); + if (!val) { + diag_printf("\nwarning, NULL pointer detected in PSPR register\n"); + } else { + diag_printf("\nrestarting operating system ...\n"); + asm volatile ( + "mov pc, %0;" // jump to pointer + : + : "r"(val) + ); + } + } + diag_printf("\n"); + } else { + diag_printf("\nwarning, unknown reset source !!!!\n"); + diag_printf("RCSR register: 0x%08X\n", val); + } + + ind = get_clock_table_index(208); + + HAL_READ_UINT32(MDREFR, val); + val |= 0x20000000; // set K0DB4 + HAL_WRITE_UINT32(MDREFR, val); + + change_core_voltage(ind); + change_clock(ind); + + if (pclktab[ind].MDREFR_K0DB2) { + HAL_READ_UINT32(MDREFR, val); // set K0DB2 + val |= 0x00004000; + } else { + HAL_READ_UINT32(MDREFR, val); // reset K0DB0 + val &= (~0x00004000); + } + HAL_WRITE_UINT32(MDREFR, val); + + if (pclktab[ind].MDREFR_K0DB4) { + HAL_READ_UINT32(MDREFR, val); // set K0DB2 + val |= 0x20000000; + } else { + HAL_READ_UINT32(MDREFR, val); // reset K0DB2 + val &= (~0x20000000); + } + HAL_WRITE_UINT32(MDREFR, val); +} + +void enable_sdcard_power(void) +{ + unsigned long value; + + HAL_READ_UINT32(GAFR1c, value); // set alternate function of GPIO91 to 0 + value &= 0xff3fffff; + HAL_WRITE_UINT32(GAFR1c, value); + + HAL_READ_UINT32(GPDRc, value); // config GPIO91 as output + value |= 0x08000000; + HAL_WRITE_UINT32(GPDRc, value); + + HAL_WRITE_UINT32(GPCRc, 0x08000000); // clear GPIO91 + HAL_DELAY_US(1000*1000); + + HAL_WRITE_UINT32(DRCMR21, 0x00000088); // map SDCARD receive to DMA channel No. 8 + HAL_WRITE_UINT32(DCSR8, 0x40000000); // set DMA channel to no descriptor fetch mode + HAL_WRITE_UINT32(DALGN, 0x100); // allow byte allinement for channel 8 + +#if 0 // only for Debug + HAL_WRITE_UINT32(GPCRa, 0x800); + + HAL_READ_UINT32(GPDRa, value); + value |= 0x800; + HAL_WRITE_UINT32(GPDRa, value); +#endif + +} + +#include CYGHWR_MEMORY_LAYOUT_H +typedef void code_fun(void); +void triton270_program_new_stack(void *func) +{ + register CYG_ADDRESS stack_ptr asm("sp"); + register CYG_ADDRESS old_stack asm("r4"); + register code_fun *new_func asm("r0"); + + old_stack = stack_ptr; + + stack_ptr = CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE - sizeof(CYG_ADDRESS); + new_func = (code_fun*)func; + new_func(); + + stack_ptr = old_stack; +} + +#if 0 + asm volatile ( + "ldr r1,=0x00000800;" // we use GPIO23 for controlling the debug LED + + "250961:;" + "ldr r0,=0x40E00024;" // GPCR0 + "str r1, [r0];" // switch the LED on + + "ldr r2,=0x00a00000;" // wait some time + "mov r3,#1 ;" + "998:;" + "sub r2, r2, r3;" + "cmp r2,#0;" + "bne 998b;" + + "ldr r0,=0x40E00018;" // GPSR0 + "str r1, [r0];" // switch the LED off + + "ldr r2,=0x00a00000;" // wait some time + "mov r3,#1;" + "998:;" + "sub r2, r2, r3;" + "cmp r2,#0;" + "bne 998b;" + + "b 250961b;" + : + : + : "r0","r1","r2","r3" + ); +#endif + +// Initialize the clock +static cyg_uint32 clock_period; + +void hal_clock_initialize(cyg_uint32 period) +{ + cyg_uint32 oier; + + // Load match value + HAL_WRITE_UINT32(OSMR0, period); + clock_period = period; + + // Start the counter + HAL_WRITE_UINT32(OSCR, 0); + // Clear any pending interrupt + HAL_WRITE_UINT32(OSSR, OSSR_TIMER0); + // Enable timer 0 interrupt + HAL_READ_UINT32(OIER, oier); + HAL_WRITE_UINT32(OIER, oier | OIER_TIMER0); + + // Unmask timer 0 interrupt + HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_TIMER0); +} + +// This routine is called during a clock interrupt. +void hal_clock_reset(cyg_uint32 vector, cyg_uint32 period) +{ + cyg_uint32 oscr; + + // Load new match value + HAL_READ_UINT32(OSCR, oscr); + HAL_WRITE_UINT32(OSMR0, oscr + period); + // Clear any pending interrupt + HAL_WRITE_UINT32(OSSR, OSSR_TIMER0); +} + +// Read the current value of the clock, returning the number of hardware +// "ticks" that have occurred (i.e. how far away the current value is from +// the start) + +// Note: The "contract" for this function is that the value is the number +// of hardware clocks that have happened since the last interrupt (i.e. +// when it was reset). This value is used to measure interrupt latencies. +// However, since the hardware counter runs freely, this routine computes +// the difference between the current clock period and the number of hardware +// ticks left before the next timer interrupt. +void hal_clock_read(cyg_uint32 *pvalue) +{ + int orig; + cyg_uint32 oscr; + cyg_uint32 osmr0; + + HAL_DISABLE_INTERRUPTS(orig); + HAL_READ_UINT32(OSCR, oscr); + HAL_READ_UINT32(OSMR0, osmr0); + *pvalue = clock_period + oscr - osmr0; + HAL_RESTORE_INTERRUPTS(orig); +} + +// Delay for some number of micro-seconds +void hal_delay_us(cyg_uint32 time) +{ + cyg_uint32 val = 0; + cyg_uint32 ctr; + + HAL_READ_UINT32(OSCR, ctr); + while (time-- > 0) { + do { + cyg_uint32 oscr; + + HAL_READ_UINT32(OSCR, oscr); + if (ctr != oscr) { + // FIXME: DEFINE AND USE a global CLOCK_TICK_RATE somewhere! + // This value is WRONG for PXA270! + //val += 271267; // 271267ps (3.6864Mhz -> 271.267ns) + val += 307692; // 307692ps (3.25Mhz -> 307.692ns) + ++ctr; + } + } while (val < 1000000); + val -= 1000000; + } +} + +typedef cyg_uint32 cyg_ISR(cyg_uint32 vector, CYG_ADDRWORD data); + +extern void cyg_interrupt_post_dsr(CYG_ADDRWORD intr_obj); + +static inline cyg_uint32 hal_call_isr(cyg_uint32 vector) +{ + return 0; +} + +// Interrupt handling + +// This routine is called to respond to a hardware interrupt (IRQ). It +// should interrogate the hardware and return the IRQ vector number. +int hal_IRQ_handler(void) +{ + cyg_uint32 sources, index; + +#ifdef HAL_EXTENDED_IRQ_HANDLER + // Use platform specific IRQ handler, if defined + // Note: this macro should do a 'return' with the appropriate + // interrupt number if such an extended interrupt exists. The + // assumption is that the line after the macro starts 'normal' processing. + HAL_EXTENDED_IRQ_HANDLER(index); +#endif + + HAL_READ_UINT32(ICIP, sources); + if (sources & 0xff0000) { + index = 16; + } else if (sources & 0xff00) { + index = 8; + } else if (sources & 0xff) { + index = 0; + } else { + index = 24; + } + do { + if ((1 << index) & sources) { + if (index == CYGNUM_HAL_INTERRUPT_GPIO) { + // Special case of GPIO cascade. Search for lowest set bit + HAL_READ_UINT32(GEDRa, sources); + index = 0; + do { + if (sources & (1 << index)) { + return index + 32; + } + index++; + } while (index < 32); + HAL_READ_UINT32(GEDRb, sources); + index = 0; + do { + if (sources & (1 << index)) { + return index + 64; + } + index++; + } while (index < 32); + HAL_READ_UINT32(GEDRc, sources); + index = 0; + do { + if (sources & (1 << index)) { + return index + 96; + } + index++; + } while (index < 32); + HAL_READ_UINT32(GEDRc, sources); + index = 0; + do { + if (sources & (1 << index)) { + return index + 128; + } + index++; + } while (index < 23); // GPIOs 96..118 + } + return index; + } + index++; + } while (index & 7); + + return CYGNUM_HAL_INTERRUPT_NONE; // This shouldn't happen! +} + +void hal_interrupt_mask(int vector) +{ + cyg_uint32 icmr; + +#ifdef HAL_EXTENDED_INTERRUPT_MASK + // Use platform specific handling, if defined + // Note: this macro should do a 'return' for "extended" values of 'vector' + // Normal vectors are handled by code subsequent to the macro call. + HAL_EXTENDED_INTERRUPT_MASK(vector); +#endif + if (vector >= CYGNUM_HAL_INTERRUPT_GPIO2) { + vector = CYGNUM_HAL_INTERRUPT_GPIO; + } + HAL_READ_UINT32(ICMR, icmr); + HAL_WRITE_UINT32(ICMR, icmr & ~(1 << vector)); +} + +void hal_interrupt_unmask(int vector) +{ + cyg_uint32 icmr; + +#ifdef HAL_EXTENDED_INTERRUPT_UNMASK + // Use platform specific handling, if defined + // Note: this macro should do a 'return' for "extended" values of 'vector' + // Normal vectors are handled by code subsequent to the macro call. + HAL_EXTENDED_INTERRUPT_UNMASK(vector); +#endif + + if (vector >= CYGNUM_HAL_INTERRUPT_GPIO2) { + vector = CYGNUM_HAL_INTERRUPT_GPIO; + } + HAL_READ_UINT32(ICMR, icmr); + HAL_WRITE_UINT32(ICMR, icmr | (1 << vector)); +} + +void hal_interrupt_acknowledge(int vector) +{ + cyg_uint32 rtsr; + +#if DEBUG_INT + diag_printf("void hal_interrupt_acknowledge(int vector) entered ...\n"); + diag_printf("vector = %d \n", vector); +#endif + switch (vector) { + case CYGNUM_HAL_INTERRUPT_ALARM: + HAL_READ_UINT32(RTSR, rtsr); + HAL_WRITE_UINT32(RTSR, (rtsr & ~0x2553) | 0x1); + break; + case CYGNUM_HAL_INTERRUPT_HZ: + HAL_READ_UINT32(RTSR, rtsr); + HAL_WRITE_UINT32(RTSR, (rtsr & ~0x2553) | 0x2); + break; + case CYGNUM_HAL_INTERRUPT_TIMER3: + HAL_WRITE_UINT32(OSSR, 0x08); + break; + case CYGNUM_HAL_INTERRUPT_TIMER2: + HAL_WRITE_UINT32(OSSR, 0x04); + break; + case CYGNUM_HAL_INTERRUPT_TIMER1: + HAL_WRITE_UINT32(OSSR, 0x02); + break; + case CYGNUM_HAL_INTERRUPT_TIMER0: + HAL_WRITE_UINT32(OSSR, 0x01); + break; + case CYGNUM_HAL_INTERRUPT_DMA: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_SSP: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_MMC: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_FFUART: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_BTUART: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_STUART: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_ICP: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_I2S: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_LCD: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_AC97: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_I2C: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_PMU: + // user specific code here + break; + case CYGNUM_HAL_INTERRUPT_USB: + // user specific code here + break; + // GPIO interrupts are driven by an edge detection mechanism. This + // is latching so these interrupts must be acknowledged directly. + // All other interrupts simply go away when the interrupting unit + // has been serviced by the ISR. + case CYGNUM_HAL_INTERRUPT_GPIO1: + HAL_WRITE_UINT32(GEDRa, 0x2); + break; + case CYGNUM_HAL_INTERRUPT_GPIO0: + HAL_WRITE_UINT32(GEDRa, 0x1); + break; + default: // the rest is second level GPIO + if (vector >= CYGNUM_HAL_INTERRUPT_GPIO96) { + HAL_WRITE_UINT32(GEDRd, (1 << (vector - 128))); + } else if (vector >= CYGNUM_HAL_INTERRUPT_GPIO64) { + HAL_WRITE_UINT32(GEDRc, (1 << (vector - 96))); + } else if (vector >= CYGNUM_HAL_INTERRUPT_GPIO32) { + HAL_WRITE_UINT32(GEDRb, (1 << (vector - 64))); + } else if (vector >= CYGNUM_HAL_INTERRUPT_GPIO2) { + HAL_WRITE_UINT32(GEDRa, (1 << (vector - 32))); + } + break; + } + return; +} + +void hal_interrupt_configure(int vector, int level, int up) +{ +#if DEBUG_INT + diag_printf("void hal_interrupt_configure(int vector, int level, int up) entered ...\n"); + diag_printf("vector = %d level = %d up = %d \n", vector, level, up); +#endif +#if 0 +#ifdef HAL_EXTENDED_INTERRUPT_CONFIGURE + // Use platform specific handling, if defined + // Note: this macro should do a 'return' for "extended" values of 'vector' + // Normal vectors are handled by code subsequent to the macro call. + HAL_EXTENDED_INTERRUPT_CONFIGURE(vector, level, up); +#endif + if (vector >= CYGNUM_HAL_INTERRUPT_GPIO64) { + if (level) { + if (up) { + // Enable both edges + *(unsigned long*)GRERc |= (1 << (vector - 96)); + *(unsigned long*)GFERc |= (1 << (vector - 96)); + } else { + // Disable both edges + *(unsigned long*)GRERc &= ~(1 << (vector - 96)); + *(unsigned long*)GFERc &= ~(1 << (vector - 96)); + } + } else { + // Only interested in one edge + if (up) { + // Set rising edge detect and clear falling edge detect. + *(unsigned long*)GRERc |= (1 << (vector - 96)); + *(unsigned long*)GFERc &= ~(1 << (vector - 96)); + } else { + // Set falling edge detect and clear rising edge detect. + *(unsigned long*)GFERc |= (1 << (vector - 96)); + *(unsigned long*)GRERc &= ~(1 << (vector - 96)); + } + } + } else if (vector >= CYGNUM_HAL_INTERRUPT_GPIO32) { + if (level) { + if (up) { + // Enable both edges + *(unsigned long*)GRERb |= (1 << (vector - 64)); + *(unsigned long*)GFERb |= (1 << (vector - 64)); + } else { + // Disable both edges + *(unsigned long*)GRERb &= ~(1 << (vector - 64)); + *(unsigned long*)GFERb &= ~(1 << (vector - 64)); + } + } else { + // Only interested in one edge + if (up) { + // Set rising edge detect and clear falling edge detect. + *(unsigned long*)GRERb |= (1 << (vector - 64)); + *(unsigned long*)GFERb &= ~(1 << (vector - 64)); + } else { + // Set falling edge detect and clear rising edge detect. + *(unsigned long*)GFERb |= (1 << (vector - 64)); + *(unsigned long*)GRERb &= ~(1 << (vector - 64)); + } + } + } else if (vector >= CYGNUM_HAL_INTERRUPT_GPIO2) { + if (level) { + if (up) { + // Enable both edges + *(unsigned long*)GRERa |= (1 << (vector - 32)); + *(unsigned long*)GFERa |= (1 << (vector - 32)); + } else { + // Disable both edges + *(unsigned long*)GRERa &= ~(1 << (vector - 32)); + *(unsigned long*)GFERa &= ~(1 << (vector - 32)); + } + } else { + // Only interested in one edge + if (up) { + // Set rising edge detect and clear falling edge detect. + *(unsigned long*)GRERa |= (1 << (vector - 32)); + *(unsigned long*)GFERa &= ~(1 << (vector - 32)); + } else { + // Set falling edge detect and clear rising edge detect. + *(unsigned long*)GFERa |= (1 << (vector - 32)); + *(unsigned long*)GRERa &= ~(1 << (vector - 32)); + } + } + } else if (vector == CYGNUM_HAL_INTERRUPT_GPIO0 || vector == CYGNUM_HAL_INTERRUPT_GPIO1) { + if (level) { + if (up) { + // Enable both edges + *(unsigned long*)GRERa |= (1 << (vector - 8)); + *(unsigned long*)GFERa |= (1 << (vector - 8)); + } else { + // Disable both edges + *(unsigned long*)GRERa &= ~(1 << (vector - 8)); + *(unsigned long*)GFERa &= ~(1 << (vector - 8)); + } + } else { + // Only interested in one edge + if (up) { + // Set rising edge detect and clear falling edge detect. + *(unsigned long*)GRERa |= (1 << (vector - 8)); + *(unsigned long*)GFERa &= ~(1 << (vector - 8)); + } else { + // Set falling edge detect and clear rising edge detect. + *(unsigned long*)GFERa |= (1 << (vector - 8)); + *(unsigned long*)GRERa &= ~(1 << (vector - 8)); + } + } + } +#endif +} + +void hal_interrupt_set_level(int vector, int level) +{ +} + +/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ +/* Command and code to reset the hardware by issuing the reset vector */ +/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ +void cyg_hal_xscale_soft_reset(CYG_ADDRESS entry) +{ + unsigned long value; + + diag_printf("\nDoing software reset now"); + + // clear reset status + HAL_WRITE_UINT32(RCSR, 0x0f); + + HAL_READ_UINT32(OSCR, value); + value += 325000; + HAL_WRITE_UINT32(OSMR3, value); + HAL_WRITE_UINT32(OWER, 1); + while (1) { // wait here for watchdog reset + diag_printf("."); + HAL_DELAY_US(10 * 1000); + } +} + +void do_triton_reset(int argc, char *argv[]) +{ + HAL_PLATFORM_RESET(); +} + +RedBoot_cmd("reset", + "Reset the board/hardware", + "", + do_triton_reset + ); + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +/*------------------------------------------------------------------------*/ +// HW Debug support + +static inline void set_ibcr0(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c8,0" : : "r"(x)); +} + +static inline unsigned get_ibcr0(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c8,0" : "=r"(x) :); + return x; +} + +static inline void set_ibcr1(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c9,0" : : "r"(x)); +} + +static inline unsigned get_ibcr1(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c9,0" : "=r"(x) :); + return x; +} + +static inline void set_dbr0(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c0,0" : : "r"(x)); +} + +static inline unsigned get_dbr0(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c0,0" : "=r"(x) :); + return x; +} + +static inline void set_dbr1(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c3,0" : : "r"(x)); +} + +static inline unsigned get_dbr1(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c3,0" : "=r"(x) :); + return x; +} + +static inline void set_dbcon(unsigned x) +{ + asm volatile ("mcr p15,0,%0,c14,c4,0" : : "r"(x)); +} + +static inline unsigned get_dbcon(void) +{ + unsigned x; + asm volatile ("mrc p15,0,%0,c14,c4,0" : "=r"(x) :); + return x; +} + +static inline void set_dcsr(unsigned x) +{ + asm volatile ("mcr p14,0,%0,c10,c0,0" : : "r"(x)); +} + +static inline unsigned get_dcsr(void) +{ + unsigned x; + asm volatile ("mrc p14,0,%0,c10,c0,0" : "=r"(x) :); + return x; +} + +int cyg_hal_plf_hw_breakpoint(int setflag, void *vaddr, int len) +{ + unsigned int addr = (unsigned)vaddr; + + if (setflag) { + if (!(get_ibcr0() & 1)) + set_ibcr0(addr | 1); + else if (!(get_ibcr1() & 1)) + set_ibcr1(addr | 1); + else + return -1; + } else { + unsigned x = (addr | 1); + if (get_ibcr0() == x) + set_ibcr0(0); + else if (get_ibcr0() == x) + set_ibcr1(0); + else + return -1; + } + return 0; +} + +int cyg_hal_plf_hw_watchpoint(int setflag, void *vaddr, int len, int type) +{ + unsigned int mask, bit_nr, mode, addr = (unsigned)vaddr; + unsigned dbcon = get_dbcon(); + + mask = 0x80000000; + bit_nr = 31; + while (bit_nr) { + if (len & mask) + break; + bit_nr--; + mask >>= 1; + } + mask = ~(0xffffffff << bit_nr); + + if (setflag) { + /* set a watchpoint */ + if (type == 2) + mode = 1; // break on write + else if (type == 3) + mode = 3; // break on read + else if (type == 4) + mode = 2; // break on any access + else + return 1; + + if (!(dbcon & 3)) { + set_dbr0(addr); + set_dbr1(mask); + set_dbcon(dbcon | mode | 0x100); + } else + return 1; + } else { + /* clear a watchpoint */ + if (dbcon & 3) + set_dbcon(dbcon & ~3); + else + return 1; + } + return 0; +} + +// Return indication of whether or not we stopped because of a +// watchpoint or hardware breakpoint. If stopped by a watchpoint, +// also set '*data_addr_p' to the data address which triggered the +// watchpoint. +int cyg_hal_plf_is_stopped_by_hardware(void **data_addr_p) +{ + unsigned fsr, dcsr, dbcon, kind = 0; + + // Check for debug event + asm volatile ("mrc p15,0,%0,c5,c0,0" : "=r"(fsr) :); + if ((fsr & 0x200) == 0) + return HAL_STUB_HW_STOP_NONE; + + // There was a debug event. Check the MOE for details + dcsr = get_dcsr(); + switch ((dcsr >> 2) & 7) { + case 1: // HW breakpoint + return HAL_STUB_HW_STOP_BREAK; + case 2: // Watchpoint + dbcon = get_dbcon(); + if (dbcon & 0x100) { + // dbr1 is used as address mask + kind = dbcon & 3; + *data_addr_p = (void *)get_dbr0(); + } + if (kind == 1) + return HAL_STUB_HW_STOP_WATCH; + if (kind == 2) + return HAL_STUB_HW_STOP_AWATCH; + if (kind == 3) + return HAL_STUB_HW_STOP_RWATCH; + // should never get here + break; + } + return HAL_STUB_HW_STOP_NONE; +} +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#define SCL_LOW (unsigned char)0x00 +#define SCL_HIGH (unsigned char)0x01 +#define SDA_LOW (unsigned char)0x00 +#define SDA_HIGH (unsigned char)0x02 +#define I2C_WRITE (unsigned char)0x00 +#define I2C_READ (unsigned char)0x01 + +#define WRITE_REG32(__regadr, __val) ((__regadr) = (__val)) +#define READ_REG32(__regadr) (__regadr) + +#define PXA250_AFREG_BASE 0x40e00054 +#define PXA250_PINDIR_BASE 0x40e0000c +#define PXA250_PINSET_BASE 0x40e00018 +#define PXA250_PINCLEAR_BASE 0x40e00024 +#define PXA250_REDGE_BASE 0x40e00030 +#define PXA250_FEDGE_BASE 0x40e0003c +#define PXA250_DEDGE_BASE 0x40e00048 +#define PXA250_PINLEVEL_BASE 0x40e00000 + +void pin_i2c_setup(pin_i2c_t *pin_data) +{ + // configure pins as GPIO function + set_alternate_function((unsigned char)pin_data->scl_no, 0); + set_alternate_function((unsigned char)pin_data->sda_no, 0); + + // set both pins to input + set_pin_dir((unsigned char)pin_data->scl_no, 0); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 0); /* 0=input 1=output */ + + // clear all output registers + clear_pin((unsigned char)pin_data->scl_no); + clear_pin((unsigned char)pin_data->sda_no); +} + +void bus_out(pin_i2c_t *pin_data, unsigned char pdata) +{ + switch (pdata & 0x03) { + case 0: + set_pin_dir((unsigned char)pin_data->scl_no, 1); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 1); /* 0=input 1=output */ + break; + case 1: + set_pin_dir((unsigned char)pin_data->scl_no, 0); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 1); /* 0=input 1=output */ + break; + case 2: + set_pin_dir((unsigned char)pin_data->scl_no, 1); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 0); /* 0=input 1=output */ + break; + case 3: + set_pin_dir((unsigned char)pin_data->scl_no, 0); /* 0=input 1=output */ + set_pin_dir((unsigned char)pin_data->sda_no, 0); /* 0=input 1=output */ + break; + } + return; +} + +int bus_in(pin_i2c_t *pin_data) +{ + int result; + + result = get_pin_status((unsigned char)pin_data->sda_no); + if (result < 0) { + //dprintf("get_pin_status returned error \n"); + return 1; + } else { + return result; + } +} + +void i2c_start(pin_i2c_t *pin_data) +{ + //dprintf("pin status is %d\n", get_pin_status((unsigned char)pin_data->sda_no)); + + bus_out(pin_data, SCL_HIGH | SDA_LOW); + HAL_DELAY_US(10); + + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); + + bus_out(pin_data, SCL_HIGH | SDA_LOW); + HAL_DELAY_US(10); + + bus_out(pin_data, SCL_LOW | SDA_LOW); + HAL_DELAY_US(10); +} + +void i2c_stop(pin_i2c_t *pin_data) +{ + bus_out(pin_data, SCL_LOW | SDA_LOW); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_LOW); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); +} + +int i2c_read_ack(pin_i2c_t *pin_data) +{ + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); + if (bus_in(pin_data)) { + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + return -2; + } else { + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + return 0; + } +} + +void i2c_write_ack(pin_i2c_t *pin_data) +{ + bus_out(pin_data, SCL_LOW | SDA_LOW); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_LOW); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_LOW | SDA_LOW); + HAL_DELAY_US(10); +} + +void i2c_write_nack(pin_i2c_t *pin_data) +{ + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); +} + +void i2c_slave_addr(pin_i2c_t *pin_data, unsigned char dev, unsigned char mode) +{ + i2c_write(pin_data, dev | mode); +} + +void i2c_read(pin_i2c_t *pin_data, unsigned char *res) +{ + unsigned char in = 0; + unsigned char bit = 0x80; + + while (bit) { + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | SDA_HIGH); + HAL_DELAY_US(10); + if (bus_in(pin_data)) + in |= bit; + bus_out(pin_data, SCL_LOW | SDA_HIGH); + HAL_DELAY_US(10); + bit >>= 1; + } + *res = in; +} + +void i2c_write(pin_i2c_t *pin_data, unsigned char val) +{ + unsigned char out; + unsigned char bit = 0x80; + + while (bit) { + out = (bit & val) ? SDA_HIGH : SDA_LOW; + bus_out(pin_data, SCL_LOW | out); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_HIGH | out); + HAL_DELAY_US(10); + bus_out(pin_data, SCL_LOW | out); + HAL_DELAY_US(10); + bit >>= 1; + } +} + +/* ================================================================ */ +/* + function: se_read + + paramters: unsigned char addr start address in ser. EEPROM + unsigned int numb number of bytes to be read + char *dat pointer to data buffer + + ret. val.: int = 0, every thing ok + else, device not av., or not ready + +*/ +int se_read(pin_i2c_t *pin_data, unsigned char addr, unsigned char dev_address, + unsigned int numb, char *dat) +{ + unsigned int i; + + i2c_start(pin_data); + i2c_slave_addr(pin_data, dev_address, I2C_WRITE); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, addr); /* read from start address */ + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + + i2c_start(pin_data); + i2c_slave_addr(pin_data, dev_address, I2C_READ); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + + for (i = 0; i < numb - 1; i++) { + i2c_read(pin_data, dat++); + i2c_write_ack(pin_data); + } + i2c_read(pin_data, dat); + i2c_stop(pin_data); + + return 0; +} + +/* ================================================================ */ +/* + function: se_write + + paramters: unsigned char addr start address in ser. EEPROM + unsigned char val value to write + + ret. val.: int = 0, every thing ok + else, device not av., or not ready + +*/ +int se_write(pin_i2c_t *pin_data, unsigned char addr,unsigned char dev_address, unsigned char val) +{ + i2c_start(pin_data); + i2c_slave_addr(pin_data, dev_address, I2C_WRITE); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, addr); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, val); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_stop(pin_data); + HAL_DELAY_US(10000); + return 0; +} + +/* ================================================================ */ +/* + function: ltc1663_pwrite + + paramters: unsigned dev_address device address of chip + unsigned char command command byte + unsigned short val value to write + + ret. val.: int = 0, every thing ok + else, device not av., or not ready + +*/ +int ltc1663_write(pin_i2c_t *pin_data, unsigned char dev_address, unsigned char command, + unsigned short val) +{ + i2c_start(pin_data); + i2c_slave_addr(pin_data, dev_address, I2C_WRITE); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, command); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, (unsigned char)val&0xff); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_write(pin_data, (unsigned char)((val&0xff00)>>8)); + if (i2c_read_ack(pin_data) < 0) { + i2c_stop(pin_data); + return -1; + } + i2c_stop(pin_data); + HAL_DELAY_US(100); + return 0; +} + +// ----------------------------------------------------------------------- +int set_alternate_function(unsigned char gpio_number, unsigned char function_code) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + if (function_code > 3) { + //dprintf("GPIO alternate function code %d is out of range\n", function_code); + return 0; + } + + register_offset = gpio_number / 16; + + bit_offset = gpio_number % 16; + mask = 3 << (bit_offset*2); + + reg_adr = PXA250_AFREG_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (function_code << (bit_offset*2)); + + WRITE_REG32(reg_adr, new_value); + return 1; +} + +int set_pin_dir(unsigned char gpio_number, unsigned char dir_code) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + if (dir_code > 1) { + //dprintf("GPIO alternate function code %d is out of range\n", dir_code); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_PINDIR_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (dir_code << (bit_offset)); + + WRITE_REG32(reg_adr, new_value); + return 1; +} + +int set_rising_edge(unsigned char gpio_number, unsigned char edge_code) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + if (edge_code > 1) { + //dprintf("rising edge value sould be 0 or 1, not %d\n", edge_code); + return 0; + } + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_REDGE_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (edge_code << (bit_offset)); + WRITE_REG32(reg_adr, new_value); + return 1; +} + +int set_falling_edge(unsigned char gpio_number, unsigned char edge_code) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + if (edge_code > 1) { + //dprintf("falling edge value sould be 0 or 1, not %d\n", edge_code); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_FEDGE_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (edge_code << (bit_offset)); + WRITE_REG32(reg_adr, new_value); + return 1; +} + +int set_pin(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_PINSET_BASE + register_offset * 4; + + org_value = 0; + + new_value = (org_value & (~mask)) | (1 << (bit_offset)); + + WRITE_REG32(reg_adr, new_value); + return 1; + +} + +int clear_pin(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_PINCLEAR_BASE + register_offset * 4; + + org_value = 0; + + new_value = (org_value & (~mask)) | (1 << (bit_offset)); + + WRITE_REG32(reg_adr, new_value); + return 1; + +} + +int get_pin_status(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long return_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return -1; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_PINLEVEL_BASE + register_offset * 4; + + return_value = (READ_REG32(reg_adr) & mask) >> bit_offset; + + return return_value; +} + +int clear_edge(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + unsigned long new_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_DEDGE_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + new_value = (org_value & (~mask)) | (1 << (bit_offset)); + WRITE_REG32(reg_adr, new_value); + + return 1; +} + +int detect_edge(unsigned char gpio_number) +{ + unsigned int register_offset; + unsigned int bit_offset; + unsigned long mask; + unsigned long reg_adr; + unsigned long org_value; + + // do some checking + if (gpio_number >= NUM_GPIOS) { + //dprintf("GPIO pin number %d is out of range!\n", gpio_number); + return 0; + } + + register_offset = gpio_number / 32; + + bit_offset = gpio_number % 32; + mask = 1 << (bit_offset); + + reg_adr = PXA250_DEDGE_BASE + register_offset * 4; + + org_value = READ_REG32(reg_adr); + + return !!(org_value & mask); +} + +void init_i2c(void) +{ + HAL_WRITE_UINT32(ICR, ICR_UR); // reset i2c_unit; + HAL_WRITE_UINT32(ICR, ICR_IUE | ICR_SCLE | ICR_GCD); +} + +//FIXME: insert timeout into while loop +cyg_int32 write_i2c_pcf8574(cyg_uint8 device_adr, cyg_uint8 dat_value) +{ + cyg_uint32 value; + unsigned int retries; + +// write device address now + HAL_WRITE_UINT32(IDBR, (device_adr & 0xfe)); + HAL_READ_UINT32(ICR, value); + value = value & ~(ICR_STOP | ICR_ALDIE); + HAL_WRITE_UINT32(ICR, value | ICR_START | ICR_TB); + + HAL_READ_UINT32(ISR, value); + value &= ISR_ITE; + while (!value) { // wait for Transmit Empty + HAL_READ_UINT32(ISR, value); + value &= ISR_ITE; + } + HAL_READ_UINT32(ISR, value); + if (value & ISR_BED) { + + //diag_printf("I2C: bus error, status after write device address is: %06X\n", value); + HAL_READ_UINT32(ICR, value); + HAL_WRITE_UINT32(ICR, value | ICR_MA); // send master abort + HAL_DELAY_US(10000); + HAL_WRITE_UINT32(ICR, value & ~ICR_MA); + return -1; + } + HAL_WRITE_UINT32(ISR, ISR_ITE); // clear ITE status + +// write data now + HAL_WRITE_UINT32(IDBR, (dat_value & 0xff)); + HAL_READ_UINT32(ICR, value); + value &= ~ICR_START; + HAL_WRITE_UINT32(ICR, value | ICR_TB | ICR_STOP); + + HAL_READ_UINT32(ISR, value); + retries = 1000000; + while (!(value & ISR_ITE)) { // wait for Transmit Empty + HAL_READ_UINT32(ISR, value); + } + if (!(value & ISR_ITE)) { + diag_printf("I2C: timeout waiting for ITE\n"); + return -1; + } + if (value & ISR_BED) { + //diag_printf("I2C: bus error, status after write device address is: %06X\n", value); + HAL_READ_UINT32(ICR, value); + HAL_WRITE_UINT32(ICR, value | ICR_MA); // send master abort + HAL_DELAY_US(10000); + HAL_WRITE_UINT32(ICR, value & ~ICR_MA); + return -1; + } + HAL_WRITE_UINT32(ISR, ISR_ITE); // clear ITE status + + HAL_READ_UINT32(ICR, value); + value = value & ~(ICR_STOP | ICR_START | ICR_TB); + HAL_WRITE_UINT32(ICR, value); + + return 0; +} + +//FIXME: insert timeout into while loop +cyg_int32 read_i2c_pcf8574(cyg_uint8 device_adr) +{ + cyg_uint32 value; + unsigned int retries; + + // write device address now + HAL_WRITE_UINT32(IDBR, (device_adr | 0x01)); + + HAL_READ_UINT32(ICR, value); + value &= ~ICR_STOP; + HAL_WRITE_UINT32(ICR, value | ICR_START | ICR_TB); + + HAL_READ_UINT32(ISR, value); + retries = 1000000; + while (!(value & ISR_ITE)) { // wait for Transmit Empty + HAL_READ_UINT32(ISR, value); + } + if (!(value & ISR_ITE)) { + diag_printf("I2C: timeout waiting for ITE\n"); + return -1; + } + if (value & ISR_BED) { + //diag_printf("I2C: bus error, status after write device address is: %06X\n", value); + HAL_READ_UINT32(ICR, value); + HAL_WRITE_UINT32(ICR, value | ICR_MA); // send master abort + HAL_DELAY_US(10000); + HAL_WRITE_UINT32(ICR, value & ~ICR_MA); + return -1; + } + HAL_WRITE_UINT32(ISR, ISR_ITE); // clear ITE status + + // read data now + HAL_READ_UINT32(ICR, value); + value &= ~ICR_START; + HAL_WRITE_UINT32(ICR, value |ICR_TB | ICR_STOP | ICR_ACKNAK); + + HAL_READ_UINT32(ISR, value); + value &= ISR_IRF; + while (!value) { // wait for Receive Buffer full + HAL_READ_UINT32(ISR, value); + value &= ISR_IRF; + } + + HAL_WRITE_UINT32(ISR, ISR_IRF); // clear ITE status + + HAL_READ_UINT32(ICR, value); + value = value & ~(ICR_STOP | ICR_START | ICR_TB | ICR_ACKNAK); + HAL_WRITE_UINT32(ICR, value); + + HAL_READ_UINT32(IDBR, value); + + return value & 0xff; +} +/*------------------------------------------------------------------------*/ +// EOF triton270_misc.c diff --git a/packages/hal/h8300/arch/v2_0/src/h8300_stub.c b/packages/hal/h8300/arch/v2_0/src/h8300_stub.c new file mode 100644 index 00000000..80320836 --- /dev/null +++ b/packages/hal/h8300/arch/v2_0/src/h8300_stub.c @@ -0,0 +1,286 @@ +//======================================================================== +// +// h8300_stub.c +// +// Helper functions for H8/300H stub +// +//======================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//======================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Red Hat, jskov +// Contributors: Red Hat, jskov +// Date: 1998-11-06 +// Purpose: +// Description: Helper functions for H8/300H stub +// Usage: +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +#include + +#include + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include +#include +#include + +#ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +#include // dbg_currthread_id +#endif + +/*---------------------------------------------------------------------- + * Asynchronous interrupt support + */ + +typedef unsigned short t_inst; + +static struct +{ + t_inst *targetAddr; + t_inst savedInstr; +} asyncBuffer; + +/* Called to asynchronously interrupt a running program. + Must be passed address of instruction interrupted. + This is typically called in response to a debug port + receive interrupt. +*/ + +void +install_async_breakpoint(void *pc) +{ + asyncBuffer.targetAddr = pc; + asyncBuffer.savedInstr = *(t_inst *)pc; + *(t_inst *)pc = (t_inst)HAL_BREAKINST; + __instruction_cache(CACHE_FLUSH); + __data_cache(CACHE_FLUSH); +} + +/*--------------------------------------------------------------------*/ +/* Given a trap value TRAP, return the corresponding signal. */ + +int __computeSignal (unsigned int trap_number) +{ + switch (trap_number) { + case 11: + return SIGTRAP; + default: + return SIGINT; + } +} + +/*--------------------------------------------------------------------*/ +/* Return the trap number corresponding to the last-taken trap. */ + +int __get_trap_number (void) +{ + extern int CYG_LABEL_NAME(_intvector); + // The vector is not not part of the GDB register set so get it + // directly from the save context. + return CYG_LABEL_NAME(_intvector); +} + +/*--------------------------------------------------------------------*/ +/* Set the currently-saved pc register value to PC. This also updates NPC + as needed. */ + +void set_pc (target_register_t pc) +{ + put_register (PC, pc); +} + + +/*---------------------------------------------------------------------- + * Single-step support. Lifted from CygMon. + */ + +#define NUM_SS_BPTS 2 +static target_register_t break_mem [NUM_SS_BPTS] = {0, 0}; +static unsigned char break_mem_data [NUM_SS_BPTS]; + +/* Set a single-step breakpoint at ADDR. Up to two such breakpoints + can be set; WHICH specifies which one to set (0 or 1). */ + +static void +set_single_bp (int which, unsigned char *addr) +{ + if (break_mem[which] == 0) { + break_mem[which] = (target_register_t) addr; + break_mem_data[which] = *(unsigned short *)addr; + *(unsigned short *)addr = HAL_BREAKINST; + } +} + +/* Clear any single-step breakpoint(s) that may have been set. */ + +void __clear_single_step (void) +{ + int x; + for (x = 0; x < NUM_SS_BPTS; x++) + { + unsigned char* addr = (unsigned char*) break_mem[x]; + if (addr) { + *addr = break_mem_data[x]; + break_mem[x] = 0; + } + } +} + +/* Set breakpoint(s) to simulate a single step from the current PC. */ + +const static unsigned char opcode_length0[]={ + 0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02, /* 0x58 */ + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, /* 0x60 */ + 0x02,0x02,0x11,0x11,0x02,0x02,0x04,0x04, /* 0x68 */ + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, /* 0x70 */ + 0x08,0x04,0x06,0x04,0x04,0x04,0x04,0x04 /* 0x78 */ +}; + +const static unsigned char opcode_length1[]={ + 0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x04,0x04,0x00,0x04 +}; + +static int insn_length(unsigned char *pc) +{ + if (*pc != 0x01 && (*pc < 0x58 || *pc>=0x80)) + return 2; + else + switch (*pc) { + case 0x01: + switch (*(pc+1) & 0xf0) { + case 0x00: + if (*(pc+2)== 0x78) { + return 10; + } else if (*(pc+2)== 0x6b) { + return (*(pc+3) & 0x20)?8:6; + } else { + return (*(pc+2) & 0x02)?6:4; + } + case 0x40: + return (*(pc+2) & 0x02)?8:6; + default: + return opcode_length1[*(pc+1)>>4]; + } + case 0x6a: + case 0x6b: + return (*(pc+1) & 0x20)?6:4; + default: + return opcode_length0[*pc-0x58]; + } +} + +void __single_step (void) +{ + unsigned int pc = get_register (PC); + unsigned int next; + unsigned int opcode; + + opcode = *(unsigned short *)pc; + next = pc + insn_length((unsigned char *)pc); + if (opcode == 0x5470) { + /* rts */ + unsigned long *sp; + sp = (unsigned long *)get_register(SP); + next = *sp & 0x00ffffff; + } else if ((opcode & 0xfb00) != 0x5800) { + /* jmp / jsr */ + int regs; + const short reg_tbl[]={ER0,ER1,ER2,ER3,ER4,ER5,ER6,SP}; + switch(opcode & 0xfb00) { + case 0x5900: + regs = (opcode & 0x0070) >> 8; + next = get_register(reg_tbl[regs]); + break; + case 0x5a00: + next = *(unsigned long *)(pc+2) & 0x00ffffff; + break; + case 0x5b00: + next = *(unsigned long *)(opcode & 0xff); + break; + } + } else if (((opcode & 0xf000) == 0x4000) || ((opcode & 0xff00) == 0x5500)) { + /* b**:8 */ + unsigned long dsp; + dsp = (long)(opcode && 0xff)+pc+2; + set_single_bp(1,(unsigned char *)dsp); + } else if (((opcode & 0xff00) == 0x5800) || ((opcode & 0xff00) == 0x5c00)) { + /* b**:16 */ + unsigned long dsp; + dsp = *(unsigned short *)(pc+2)+pc+4; + set_single_bp(1,(unsigned char *)dsp); + } + set_single_bp(0,(unsigned char *)next); +} + +void __install_breakpoints (void) +{ + /* NOP since single-step HW exceptions are used instead of + breakpoints. */ +} + +void __clear_breakpoints (void) +{ + +} + + +/* If the breakpoint we hit is in the breakpoint() instruction, return a + non-zero value. */ + +externC void CYG_LABEL_NAME(breakinst)(void); +int +__is_breakpoint_function () +{ + return get_register (PC) == (target_register_t)&CYG_LABEL_NAME(breakinst); +} + + +/* Skip the current instruction. */ + +void __skipinst (void) +{ + unsigned long pc = get_register (PC); + + pc+=insn_length((unsigned char *)pc); + put_register (PC, (target_register_t) pc); +} + +#endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS diff --git a/packages/hal/h8300/h8300h/v2_0/src/h8_sci.c b/packages/hal/h8300/h8300h/v2_0/src/h8_sci.c new file mode 100644 index 00000000..822809c7 --- /dev/null +++ b/packages/hal/h8300/h8300h/v2_0/src/h8_sci.c @@ -0,0 +1,321 @@ +//============================================================================= +// +// h8_sci.c +// +// Simple driver for the H8/300H Serial Communication Interface (SCI) +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ysato +// Contributors:ysato +// Date: 2002-03-21 +// Description: Simple driver for the H8/300H Serial Communication Interface +// Clients of this file can configure the behavior with: +// CYGNUM_SCI_PORTS: number of SCI ports +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#ifdef CYGNUM_HAL_H8300_SCI_PORTS + +#include // IO macros +#include // CYG_ISR_HANDLED +#include // Helper functions +#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include // SAVE/RESTORE GP +#include // Calling-if API +#include // serial register definitions + +#include // our header + +//-------------------------------------------------------------------------- + +void +cyg_hal_plf_sci_init_channel(void* chan) +{ + cyg_uint8 tmp; + cyg_uint8* base = ((channel_data_t *)chan)->base; + + // Disable Tx/Rx interrupts, but enable Tx/Rx + HAL_WRITE_UINT8(base+_REG_SCSCR, + CYGARC_REG_SCSCR_TE|CYGARC_REG_SCSCR_RE); + + // 8-1-no parity. + HAL_WRITE_UINT8(base+_REG_SCSMR, 0); + + // Set speed to CYGNUM_HAL_H8300_H8300H_SCI_DEFAULT_BAUD_RATE + HAL_READ_UINT8(base+_REG_SCSMR, tmp); + tmp &= ~CYGARC_REG_SCSMR_CKSx_MASK; + tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_H8300_H8300H_SCI_BAUD_RATE); + HAL_WRITE_UINT8(base+_REG_SCSMR, tmp); + HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_H8300_H8300H_SCI_BAUD_RATE)); +} + +static cyg_bool +cyg_hal_plf_sci_getc_nonblock(void* __ch_data, cyg_uint8* ch) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 sr; + + HAL_READ_UINT8(base+_REG_SCSSR, sr); + if (sr & CYGARC_REG_SCSSR_ORER) { + // Serial RX overrun. Clear error and let caller try again. + HAL_WRITE_UINT8(base+_REG_SCSSR, + CYGARC_REG_SCSSR_CLEARMASK & ~CYGARC_REG_SCSSR_ORER); + return false; + } + + if ((sr & CYGARC_REG_SCSSR_RDRF) == 0) + return false; + + HAL_READ_UINT8(base+_REG_SCRDR, *ch); + + // Clear buffer full flag. + HAL_WRITE_UINT8(base+_REG_SCSSR, sr & ~CYGARC_REG_SCSSR_RDRF); + + return true; +} + +cyg_uint8 +cyg_hal_plf_sci_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while(!cyg_hal_plf_sci_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + +void +cyg_hal_plf_sci_putc(void* __ch_data, cyg_uint8 c) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 sr; + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT8(base+_REG_SCSSR, sr); + } while ((sr & CYGARC_REG_SCSSR_TDRE) == 0); + + HAL_WRITE_UINT8(base+_REG_SCTDR, c); + + // Clear empty flag. + HAL_WRITE_UINT8(base+_REG_SCSSR, sr & ~CYGARC_REG_SCSSR_TDRE); + + // Hang around until the character has been safely sent. + do { + HAL_READ_UINT8(base+_REG_SCSSR, sr); + } while ((sr & CYGARC_REG_SCSSR_TDRE) == 0); + + CYGARC_HAL_RESTORE_GP(); +} + + +static channel_data_t channels[CYGNUM_HAL_H8300_SCI_PORTS]; + +static void +cyg_hal_plf_sci_write(void* __ch_data, const cyg_uint8* __buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + cyg_hal_plf_sci_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void +cyg_hal_plf_sci_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + *__buf++ = cyg_hal_plf_sci_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool +cyg_hal_plf_sci_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + int delay_count; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 20; // delay in .1 ms steps + + for(;;) { + res = cyg_hal_plf_sci_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(50); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int +cyg_hal_plf_sci_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + static int irq_state = 0; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_uint8 scr; + int ret = 0; + CYGARC_HAL_SAVE_GP(); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + irq_state = 1; + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); + scr |= CYGARC_REG_SCSCR_RIE; + HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); + break; + case __COMMCTL_IRQ_DISABLE: + ret = irq_state; + irq_state = 0; + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); + scr &= ~CYGARC_REG_SCSCR_RIE; + HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + default: + break; + } + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int +cyg_hal_plf_sci_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + cyg_uint8 c, sr; + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + int res = 0; + CYGARC_HAL_SAVE_GP(); + + *__ctrlc = 0; + HAL_READ_UINT8(base+_REG_SCSSR, sr); + if (sr & CYGARC_REG_SCSSR_ORER) { + // Serial RX overrun. Clear error and hope protocol recovers. + HAL_WRITE_UINT8(base+_REG_SCSSR, + CYGARC_REG_SCSSR_CLEARMASK & ~CYGARC_REG_SCSSR_ORER); + res = CYG_ISR_HANDLED; + } else if (sr & CYGARC_REG_SCSSR_RDRF) { + // Received character + HAL_READ_UINT8(base+_REG_SCRDR, c); + + // Clear buffer full flag. + HAL_WRITE_UINT8(base+_REG_SCSSR, + CYGARC_REG_SCSSR_CLEARMASK & ~CYGARC_REG_SCSSR_RDRF); + + if( cyg_hal_is_break( &c , 1 ) ) + *__ctrlc = 1; + + res = CYG_ISR_HANDLED; + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +void +cyg_hal_plf_sci_init(int sci_index, int comm_index, + int rcv_vect, cyg_uint8* base) +{ + channel_data_t* chan = &channels[sci_index]; + hal_virtual_comm_table_t* comm; + int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + // Initialize channel table + chan->base = base; + chan->isr_vector = rcv_vect; + chan->msec_timeout = 1000; + + // Disable interrupts. + HAL_INTERRUPT_MASK(chan->isr_vector); + + // Init channel + + cyg_hal_plf_sci_init_channel(chan); + + // Setup procs in the vector table + + // Initialize channel procs + CYGACC_CALL_IF_SET_CONSOLE_COMM(comm_index); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, chan); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_sci_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_sci_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_sci_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_sci_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_sci_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_sci_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_sci_getc_timeout); + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); +} + +#endif // CYGNUM_HAL_H8300_H8300H_SCI_PORTS + +//----------------------------------------------------------------------------- +// end of sh_sci.c diff --git a/packages/hal/powerpc/adder/v2_0/misc/redboot_ROMRAM.ecm b/packages/hal/powerpc/adder/v2_0/misc/redboot_ROMRAM.ecm new file mode 100644 index 00000000..205122c1 --- /dev/null +++ b/packages/hal/powerpc/adder/v2_0/misc/redboot_ROMRAM.ecm @@ -0,0 +1,109 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware adder ; + template redboot ; + package -hardware CYGPKG_HAL_POWERPC v2_0 ; + package -hardware CYGPKG_HAL_POWERPC_MPC8xx v2_0 ; + package -hardware CYGPKG_HAL_POWERPC_ADDER v2_0 ; + package -hardware CYGPKG_HAL_QUICC v2_0 ; + package -hardware CYGPKG_DEVS_FLASH_POWERPC_ADDER v2_0 ; + package -hardware CYGPKG_DEVS_FLASH_AMD_AM29XXXXX v2_0 ; + package -hardware CYGPKG_DEVS_ETH_POWERPC_QUICC v2_0 ; + package -hardware CYGPKG_DEVS_ETH_POWERPC_ADDER v2_0 ; + package -template CYGPKG_HAL v2_0 ; + package -template CYGPKG_INFRA v2_0 ; + package -template CYGPKG_REDBOOT v2_0 ; + package -template CYGPKG_ISOINFRA v2_0 ; + package -template CYGPKG_LIBC_STRING v2_0 ; + package -template CYGPKG_NS_DNS v2_0 ; + package -template CYGPKG_CRC v2_0 ; + package CYGPKG_IO_FLASH v2_0 ; + package CYGPKG_IO_ETH_DRIVERS v2_0 ; +}; + +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + inferred_value 0 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + inferred_value 1 +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROMRAM +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGBLD_REDBOOT_MIN_IMAGE_SIZE { + user_value 0x00030000 +}; + +cdl_option CYGOPT_REDBOOT_FIS_REDBOOT_BACKUP { + user_value 0 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DNS_HEADER { + inferred_value 1 +}; + +cdl_option CYGPKG_NS_DNS_BUILD { + inferred_value 0 +}; + +cdl_option CYGHWR_DEVS_FLASH_AMD_AM29LV320D { + inferred_value 1 +}; + + diff --git a/packages/hal/powerpc/adder/v2_0/src/redboot_linux_exec.c b/packages/hal/powerpc/adder/v2_0/src/redboot_linux_exec.c new file mode 100644 index 00000000..15672235 --- /dev/null +++ b/packages/hal/powerpc/adder/v2_0/src/redboot_linux_exec.c @@ -0,0 +1,273 @@ +//========================================================================== +// +// redboot_linux_boot.c +// +// RedBoot command to boot Linux +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2002 Gary Thomas +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//####OTHERCOPYRIGHTBEGIN#### +// +// The structure definitions below are taken from include/ppc/platforms/am860.h in +// the Linux kernel, Copyright (c) 2002 Gary Thomas, Copyright (c) 1997 Dan Malek. +// Their presence here is for the express purpose of communication with the Linux +// kernel being booted and is considered 'fair use' by the original author and +// are included with their permission. +// +//####OTHERCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors: gthomas,msalter +// Date: 2002-01-14 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include + +#include +#include +#include +#include + +#ifdef CYGPKG_REDBOOT_NETWORKING +#include +#endif + +#ifdef CYGSEM_REDBOOT_HAL_LINUX_BOOT + +#include CYGHWR_MEMORY_LAYOUT_H + +//========================================================================= + +// Exported CLI function(s) +static void do_exec(int argc, char *argv[]); +RedBoot_cmd("exec", + "Execute a Linux image - with MMU off", + "[-w timeout]\n" + " [-c \"kernel command line\"] []", + do_exec + ); + +//========================================================================= +// Imported from Linux kernel include/asm-ppc/am860.h +// Copyright (c) 2002 Gary Thomas (gary@chez-thomas.org) +// Copyright (c) 1997 Dan Malek (dmalek@jlc.net) +// Used with permission of author(s). + + +/* A Board Information structure that is given to a program when + * RedBoot starts it up. + */ +typedef struct bd_info { + unsigned int bi_tag; /* Should be 0x42444944 "BDID" */ + unsigned int bi_size; /* Size of this structure */ + unsigned int bi_revision; /* revision of this structure */ + unsigned int bi_bdate; /* EPPCbug date, i.e. 0x11061997 */ + unsigned int bi_memstart; /* Memory start address */ + unsigned int bi_memsize; /* Memory (end) size in bytes */ + unsigned int bi_intfreq; /* Internal Freq, in Hz */ + unsigned int bi_busfreq; /* Bus Freq, in Hz */ + unsigned int bi_clun; /* Boot device controller */ + unsigned int bi_dlun; /* Boot device logical dev */ + unsigned char bi_enetaddr[6]; + unsigned int bi_baudrate; + unsigned char *bi_cmdline; +} bd_t; + +// +// Execute a Linux kernel - this is a RedBoot CLI command +// +static void +do_exec(int argc, char *argv[]) +{ + unsigned long entry; + bool wait_time_set, cmd_line_set; + int wait_time; + char *cmd_line; + char *cline; + struct option_info opts[2]; + hal_virtual_comm_table_t *__chan; + int baud_rate; + + bd_t *board_info; + CYG_INTERRUPT_STATE oldints; + unsigned long sp = CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE; + + init_opts(&opts[0], 'w', true, OPTION_ARG_TYPE_NUM, + (void **)&wait_time, (bool *)&wait_time_set, "wait timeout"); + init_opts(&opts[1], 'c', true, OPTION_ARG_TYPE_STR, + (void **)&cmd_line, (bool *)&cmd_line_set, "kernel command line"); + entry = entry_address; // Default from last 'load' operation + if (!scan_opts(argc, argv, 1, opts, 2, (void *)&entry, OPTION_ARG_TYPE_NUM, + "[physical] starting address")) { + return; + } + + // Determine baud rate on current console + __chan = CYGACC_CALL_IF_CONSOLE_PROCS(); + baud_rate = CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_GETBAUD); + if (baud_rate <= 0) { + baud_rate = CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD; + } + + // Make a little space at the top of the stack, and align to + // 64-bit boundary. + sp = (sp-128) & ~7; // The Linux boot code uses this space for FIFOs + + // Copy the commandline onto the stack, and set the SP to just below it. + if (cmd_line_set) { + int len,i; + + // get length of string + for( len = 0; cmd_line[len] != '\0'; len++ ); + + // decrement sp by length of string and align to + // word boundary. + sp = (sp-(len+1)) & ~3; + + // assign this SP value to command line start + cline = (char *)sp; + + // copy command line over. + for( i = 0; i < len; i++ ) + cline[i] = cmd_line[i]; + cline[len] = '\0'; + + } else { + cline = (char *)NULL; + } + + // Set up parameter struct at top of stack + sp = sp-sizeof(bd_t); + board_info = (bd_t *)sp; + memset(board_info, sizeof(*board_info), 0); + + board_info->bi_tag = 0x42444944; + board_info->bi_size = sizeof(board_info); + board_info->bi_revision = 1; + board_info->bi_bdate = 0x06012002; + board_info->bi_memstart = CYGMEM_REGION_ram; + board_info->bi_memsize = CYGMEM_REGION_ram_SIZE; + board_info->bi_intfreq = CYGHWR_HAL_POWERPC_BOARD_SPEED*1000000; + board_info->bi_busfreq = 66*1000000; + board_info->bi_clun = 0; // ???? + board_info->bi_dlun = 0; // ???? + board_info->bi_baudrate = baud_rate; + board_info->bi_cmdline = cline; +#ifdef CYGPKG_REDBOOT_NETWORKING + memcpy(board_info->bi_enetaddr, __local_enet_addr, sizeof(enet_addr_t)); +#endif + + // adjust SP to 64 bit boundary, and leave a little space + // between it and the commandline for PowerPC calling + // conventions. + + sp = (sp-32)&~7; + + if (wait_time_set) { + int script_timeout_ms = wait_time * 1000; +#ifdef CYGFUN_REDBOOT_BOOT_SCRIPT + unsigned char *hold_script = script; + script = (unsigned char *)0; +#endif + diag_printf("About to start execution at %p - abort with ^C within %d seconds\n", + (void *)entry, wait_time); + while (script_timeout_ms >= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT) { + int res; + char line[80]; + res = _rb_gets(line, sizeof(line), CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT); + if (res == _GETS_CTRLC) { +#ifdef CYGFUN_REDBOOT_BOOT_SCRIPT + script = hold_script; // Re-enable script +#endif + return; + } + script_timeout_ms -= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT; + } + } + + // Disable interrupts + HAL_DISABLE_INTERRUPTS(oldints); + + // Put the caches to sleep. + HAL_DCACHE_SYNC(); + HAL_ICACHE_DISABLE(); + HAL_DCACHE_DISABLE(); + HAL_DCACHE_SYNC(); + HAL_ICACHE_INVALIDATE_ALL(); + HAL_DCACHE_INVALIDATE_ALL(); + +// diag_printf("entry %08x, sp %08x, info %08x, cmd line %08x, baud %d\n", +// entry, sp, board_info, cline, baud_rate); +// breakpoint(); + + // Call into Linux + __asm__ volatile ( + // Start by disabling MMU - the mappings are + // 1-1 so this should not cause any problems + "mfmsr 3\n" + "li 4,0xFFFFFFCF\n" + "and 3,3,4\n" + "sync\n" + "mtmsr 3\n" + "sync\n" + + // Now set up parameters to jump into linux + + "mtlr %0\n" // set entry address in LR + "mr 1,%1\n" // set stack pointer + "mr 3,%2\n" // set board info in R3 + "mr 4,%3\n" // set command line in R4 + "blr \n" // jump into linux + : + : "r"(entry),"r"(sp),"r"(board_info),"r"(cline) + : "r3", "r4" + + ); +} + +#endif // CYGSEM_REDBOOT_HAL_LINUX_BOOT + +//========================================================================= +// EOF redboot_linux_exec.c diff --git a/packages/hal/powerpc/csb281/v2_0/src/redboot_linux_exec.c b/packages/hal/powerpc/csb281/v2_0/src/redboot_linux_exec.c new file mode 100644 index 00000000..e6b07de3 --- /dev/null +++ b/packages/hal/powerpc/csb281/v2_0/src/redboot_linux_exec.c @@ -0,0 +1,271 @@ +//========================================================================== +// +// redboot_linux_boot.c +// +// RedBoot command to boot Linux +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2002 Gary Thomas +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//####OTHERCOPYRIGHTBEGIN#### +// +// The structure definitions below are taken from include/ppc/platforms/am860.h in +// the Linux kernel, Copyright (c) 2002 Gary Thomas, Copyright (c) 1997 Dan Malek. +// Their presence here is for the express purpose of communication with the Linux +// kernel being booted and is considered 'fair use' by the original author and +// are included with their permission. +// +//####OTHERCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors: gthomas,msalter +// Date: 2002-01-14 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include +#include +#include + +#ifdef CYGPKG_REDBOOT_NETWORKING +#include +#endif + +#ifdef CYGSEM_REDBOOT_HAL_LINUX_BOOT + +#include CYGHWR_MEMORY_LAYOUT_H + +//========================================================================= + +// Exported CLI function(s) +static void do_exec(int argc, char *argv[]); +RedBoot_cmd("exec", + "Execute a Linux image - with MMU off", + "[-w timeout]\n" + " [-c \"kernel command line\"] []", + do_exec + ); + +//========================================================================= +// Imported from Linux kernel include/asm-ppc/am860.h +// Copyright (c) 2002 Gary Thomas (gary@chez-thomas.org) +// Copyright (c) 1997 Dan Malek (dmalek@jlc.net) +// Used with permission of author(s). + + +/* A Board Information structure that is given to a program when + * RedBoot starts it up. + */ +typedef struct bd_info { + unsigned int bi_tag; /* Should be 0x42444944 "BDID" */ + unsigned int bi_size; /* Size of this structure */ + unsigned int bi_revision; /* revision of this structure */ + unsigned int bi_bdate; /* EPPCbug date, i.e. 0x11061997 */ + unsigned int bi_memstart; /* Memory start address */ + unsigned int bi_memsize; /* Memory (end) size in bytes */ + unsigned int bi_intfreq; /* Internal Freq, in Hz */ + unsigned int bi_busfreq; /* Bus Freq, in Hz */ + unsigned int bi_clun; /* Boot device controller */ + unsigned int bi_dlun; /* Boot device logical dev */ + unsigned char bi_enetaddr[6]; + unsigned int bi_baudrate; + unsigned char *bi_cmdline; +} bd_t; + +// +// Execute a Linux kernel - this is a RedBoot CLI command +// +static void +do_exec(int argc, char *argv[]) +{ + unsigned long entry; + bool wait_time_set, cmd_line_set; + int wait_time; + char *cmd_line; + char *cline; + struct option_info opts[2]; + hal_virtual_comm_table_t *__chan; + int baud_rate; + + bd_t *board_info; + CYG_INTERRUPT_STATE oldints; + unsigned long sp = CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE; + + init_opts(&opts[0], 'w', true, OPTION_ARG_TYPE_NUM, + (void **)&wait_time, (bool *)&wait_time_set, "wait timeout"); + init_opts(&opts[1], 'c', true, OPTION_ARG_TYPE_STR, + (void **)&cmd_line, (bool *)&cmd_line_set, "kernel command line"); + entry = entry_address; // Default from last 'load' operation + if (!scan_opts(argc, argv, 1, opts, 2, (void *)&entry, OPTION_ARG_TYPE_NUM, + "[physical] starting address")) { + return; + } + + // Determine baud rate on current console + __chan = CYGACC_CALL_IF_CONSOLE_PROCS(); + baud_rate = CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_GETBAUD); + if (baud_rate <= 0) { + baud_rate = CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD; + } + + // Make a little space at the top of the stack, and align to + // 64-bit boundary. + sp = (sp-128) & ~7; // The Linux boot code uses this space for FIFOs + + // Copy the commandline onto the stack, and set the SP to just below it. + if (cmd_line_set) { + int len,i; + + // get length of string + for( len = 0; cmd_line[len] != '\0'; len++ ); + + // decrement sp by length of string and align to + // word boundary. + sp = (sp-(len+1)) & ~3; + + // assign this SP value to command line start + cline = (char *)sp; + + // copy command line over. + for( i = 0; i < len; i++ ) + cline[i] = cmd_line[i]; + cline[len] = '\0'; + + } else { + cline = (char *)NULL; + } + + // Set up parameter struct at top of stack + sp = sp-sizeof(bd_t); + board_info = (bd_t *)sp; + memset(board_info, sizeof(*board_info), 0); + + board_info->bi_tag = 0x42444944; + board_info->bi_size = sizeof(board_info); + board_info->bi_revision = 1; + board_info->bi_bdate = 0x06012002; + board_info->bi_memstart = CYGMEM_REGION_ram; + board_info->bi_memsize = CYGMEM_REGION_ram_SIZE; + board_info->bi_intfreq = CYGHWR_HAL_POWERPC_CPU_SPEED*1000000; + board_info->bi_busfreq = CYGHWR_HAL_POWERPC_MEM_SPEED*1000000; + board_info->bi_clun = 0; // ???? + board_info->bi_dlun = 0; // ???? + board_info->bi_baudrate = baud_rate; + board_info->bi_cmdline = cline; +#ifdef CYGPKG_REDBOOT_NETWORKING + memcpy(board_info->bi_enetaddr, __local_enet_addr, sizeof(enet_addr_t)); +#endif + + // adjust SP to 64 bit boundary, and leave a little space + // between it and the commandline for PowerPC calling + // conventions. + + sp = (sp-32)&~7; + + if (wait_time_set) { + int script_timeout_ms = wait_time * 1000; +#ifdef CYGFUN_REDBOOT_BOOT_SCRIPT + unsigned char *hold_script = script; + script = (unsigned char *)0; +#endif + diag_printf("About to start execution at %p - abort with ^C within %d seconds\n", + (void *)entry, wait_time); + while (script_timeout_ms >= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT) { + int res; + char line[80]; + res = _rb_gets(line, sizeof(line), CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT); + if (res == _GETS_CTRLC) { +#ifdef CYGFUN_REDBOOT_BOOT_SCRIPT + script = hold_script; // Re-enable script +#endif + return; + } + script_timeout_ms -= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT; + } + } + + // Disable interrupts + HAL_DISABLE_INTERRUPTS(oldints); + + // Put the caches to sleep. + HAL_DCACHE_SYNC(); + HAL_ICACHE_DISABLE(); + HAL_DCACHE_DISABLE(); + HAL_DCACHE_SYNC(); + HAL_ICACHE_INVALIDATE_ALL(); + HAL_DCACHE_INVALIDATE_ALL(); + +// diag_printf("entry %08x, sp %08x, info %08x, cmd line %08x, baud %d\n", +// entry, sp, board_info, cline, baud_rate); +// breakpoint(); + + // Call into Linux + __asm__ volatile ( + // Start by disabling MMU - the mappings are + // 1-1 so this should not cause any problems + "mfmsr 3\n" + "li 4,0xFFFFFFCF\n" + "and 3,3,4\n" + "sync\n" + "mtmsr 3\n" + "sync\n" + + // Now set up parameters to jump into linux + + "mtlr %0\n" // set entry address in LR + "mr 1,%1\n" // set stack pointer + "mr 3,%2\n" // set board info in R3 + "mr 4,%3\n" // set command line in R4 + "blr \n" // jump into linux + : + : "r"(entry),"r"(sp),"r"(board_info),"r"(cline) + : "r3", "r4" + + ); +} + +#endif // CYGSEM_REDBOOT_HAL_LINUX_BOOT + +//========================================================================= +// EOF redboot_linux_exec.c diff --git a/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_ram.h b/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_ram.h new file mode 100644 index 00000000..210df9fe --- /dev/null +++ b/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_ram.h @@ -0,0 +1,48 @@ +// eCos memory layout - Fri Oct 20 10:25:48 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include +#include +#endif + +#define CYGMEM_REGION_rom (0x000000) +#define CYGMEM_REGION_rom_SIZE (0x06ffff) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_RO) + +#define CYGMEM_REGION_ram (0x400000) +#define CYGMEM_REGION_ram_SIZE (0x0fffff) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_iram (0x3f9800) +#define CYGMEM_REGION_iram_SIZE (0x006800) +#define CYGMEM_REGION_iram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_eflash (0x800000) +#define CYGMEM_REGION_eflash_SIZE (0x1fffff) +#define CYGMEM_REGION_eflash_ATTR (CYGMEM_REGION_ATTR_RO) + +#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 (0x2000) + +#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 (0x00500000 - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_ram.ldi b/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_ram.ldi new file mode 100644 index 00000000..0c8d1897 --- /dev/null +++ b/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_ram.ldi @@ -0,0 +1,35 @@ + +#include + +MEMORY +{ + rom : ORIGIN = 0x00000000, LENGTH = 0x0006ffff /* internal flash */ + ram(WA) : ORIGIN = 0x00400000, LENGTH = 0x000fffff /* external RAM */ + iram(WA) : ORIGIN = 0x003f9800, LENGTH = 0x00006800 /* internal RAM */ + eflash(RXIW) : ORIGIN = 0x00800000, LENGTH = 0x001fffff /* external FLASH */ +} + +SECTIONS +{ + SECTIONS_BEGIN + CYG_LABEL_DEFN(__reserved_vectors) = 0x00000000; + + . = 0x3f9800; + CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); + . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200; + CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); + . = 0x00400000; + + SECTION_vectors (ram, 0x00400000, 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/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_rom.h b/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_rom.h new file mode 100644 index 00000000..210df9fe --- /dev/null +++ b/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_rom.h @@ -0,0 +1,48 @@ +// eCos memory layout - Fri Oct 20 10:25:48 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include +#include +#endif + +#define CYGMEM_REGION_rom (0x000000) +#define CYGMEM_REGION_rom_SIZE (0x06ffff) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_RO) + +#define CYGMEM_REGION_ram (0x400000) +#define CYGMEM_REGION_ram_SIZE (0x0fffff) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_iram (0x3f9800) +#define CYGMEM_REGION_iram_SIZE (0x006800) +#define CYGMEM_REGION_iram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) + +#define CYGMEM_REGION_eflash (0x800000) +#define CYGMEM_REGION_eflash_SIZE (0x1fffff) +#define CYGMEM_REGION_eflash_ATTR (CYGMEM_REGION_ATTR_RO) + +#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 (0x2000) + +#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 (0x00500000 - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_rom.ldi b/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_rom.ldi new file mode 100644 index 00000000..bd3753d2 --- /dev/null +++ b/packages/hal/powerpc/ec555/v2_0/include/pkgconf/mlt_powerpc_ec555_rom.ldi @@ -0,0 +1,41 @@ + +#include + +MEMORY +{ + rom : ORIGIN = 0x00000000, LENGTH = 0x0006ffff /* internal flash */ + ram(WA) : ORIGIN = 0x00400000, LENGTH = 0x000fffff /* external RAM */ + iram(WA) : ORIGIN = 0x003f9800, LENGTH = 0x00006800 /* internal RAM */ + eflash(RXIW) : ORIGIN = 0x00800000, LENGTH = 0x001fffff /* external FLASH */ +} + +SECTIONS +{ + SECTIONS_BEGIN + + CYG_LABEL_DEFN(__reserved_vectors) = 0x00000000; + + SECTION_vectors (rom, 0x00000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) + + . = 0x3f9800; + 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_data (iram, ALIGN (0x10), FOLLOWING (.gcc_except_table)) + SECTION_sbss (iram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (iram, ALIGN (0x10), LMA_EQ_VMA) + + . = 0x400000; + + CYG_LABEL_DEFN(__heap1) = ALIGN(0x8); + + SECTIONS_END +} diff --git a/packages/hal/powerpc/mbx/v2_0/src/redboot_linux_exec.c b/packages/hal/powerpc/mbx/v2_0/src/redboot_linux_exec.c new file mode 100644 index 00000000..7bd7b55b --- /dev/null +++ b/packages/hal/powerpc/mbx/v2_0/src/redboot_linux_exec.c @@ -0,0 +1,311 @@ +//========================================================================== +// +// redboot_linux_boot.c +// +// RedBoot command to boot Linux +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//####OTHERCOPYRIGHTBEGIN#### +// +// The structure definitions below are taken from include/asm-ppc/mbx.h in +// the Linux kernel, Copyright (c) 1997 Dan Malek. Their presence +// here is for the express purpose of communication with the Linux kernel +// being booted and is considered 'fair use' by the original author and +// are included with his permission. +// +//####OTHERCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors: gthomas,msalter +// Date: 2002-01-14 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include CYGBLD_HAL_TARGET_H +#include CYGBLD_HAL_PLATFORM_H + +#include +#include + +#ifdef CYGSEM_REDBOOT_HAL_LINUX_BOOT + +#include CYGHWR_MEMORY_LAYOUT_H + +//========================================================================= + +// Exported CLI function(s) +static void do_exec(int argc, char *argv[]); +RedBoot_cmd("exec", + "Execute an image - with MMU off", + "[-w timeout]\n" + " [-r [-s ]]\n" + " [-c \"kernel command line\"] []", + do_exec + ); + +//========================================================================= +// Imported from Linux kernel include/asm-ppc/mbx.h +// Copyright (c) 1997 Dan Malek (dmalek@jlc.net) +// Used with permission of author. + + +/* A Board Information structure that is given to a program when + * EPPC-Bug starts it up. + */ +typedef struct bd_info { + unsigned int bi_tag; /* Should be 0x42444944 "BDID" */ + unsigned int bi_size; /* Size of this structure */ + unsigned int bi_revision; /* revision of this structure */ + unsigned int bi_bdate; /* EPPCbug date, i.e. 0x11061997 */ + unsigned int bi_memstart; /* Memory start address */ + unsigned int bi_memsize; /* Memory (end) size in bytes */ + unsigned int bi_intfreq; /* Internal Freq, in Hz */ + unsigned int bi_busfreq; /* Bus Freq, in Hz */ + unsigned int bi_clun; /* Boot device controller */ + unsigned int bi_dlun; /* Boot device logical dev */ + + /* These fields are not part of the board information structure + * provided by the boot rom. They are filled in by embed_config.c + * so we have the information consistent with other platforms. + */ + unsigned char bi_enetaddr[6]; + unsigned int bi_baudrate; +} bd_t; + +/* Memory map for the MBX as configured by EPPC-Bug. We could reprogram + * The SIU and PCI bridge, and try to use larger MMU pages, but the + * performance gain is not measureable and it certainly complicates the + * generic MMU model. + * + * In a effort to minimize memory usage for embedded applications, any + * PCI driver or ISA driver must request or map the region required by + * the device. For convenience (and since we can map up to 4 Mbytes with + * a single page table page), the MMU initialization will map the + * NVRAM, Status/Control registers, CPM Dual Port RAM, and the PCI + * Bridge CSRs 1:1 into the kernel address space. + */ +#define PCI_ISA_IO_ADDR ((unsigned)0x80000000) +#define PCI_ISA_IO_SIZE ((unsigned int)(512 * 1024 * 1024)) +#define PCI_IDE_ADDR ((unsigned)0x81000000) +#define PCI_ISA_MEM_ADDR ((unsigned)0xc0000000) +#define PCI_ISA_MEM_SIZE ((unsigned int)(512 * 1024 * 1024)) +#define PCMCIA_MEM_ADDR ((unsigned int)0xe0000000) +#define PCMCIA_MEM_SIZE ((unsigned int)(64 * 1024 * 1024)) +#define PCMCIA_DMA_ADDR ((unsigned int)0xe4000000) +#define PCMCIA_DMA_SIZE ((unsigned int)(64 * 1024 * 1024)) +#define PCMCIA_ATTRB_ADDR ((unsigned int)0xe8000000) +#define PCMCIA_ATTRB_SIZE ((unsigned int)(64 * 1024 * 1024)) +#define PCMCIA_IO_ADDR ((unsigned int)0xec000000) +#define PCMCIA_IO_SIZE ((unsigned int)(64 * 1024 * 1024)) +#define NVRAM_ADDR ((unsigned int)0xfa000000) +#define NVRAM_SIZE ((unsigned int)(1 * 1024 * 1024)) +#define MBX_CSR_ADDR ((unsigned int)0xfa100000) +#define MBX_CSR_SIZE ((unsigned int)(1 * 1024 * 1024)) +#define IMAP_ADDR ((unsigned int)0xfa200000) +#define IMAP_SIZE ((unsigned int)(64 * 1024)) +#define PCI_CSR_ADDR ((unsigned int)0xfa210000) +#define PCI_CSR_SIZE ((unsigned int)(64 * 1024)) + +/* Map additional physical space into well known virtual addresses. Due + * to virtual address mapping, these physical addresses are not accessible + * in a 1:1 virtual to physical mapping. + */ +#define ISA_IO_VIRT_ADDR ((unsigned int)0xfa220000) +#define ISA_IO_VIRT_SIZE ((unsigned int)64 * 1024) + +/* Interrupt assignments. + * These are defined (and fixed) by the MBX hardware implementation. + */ +#define POWER_FAIL_INT SIU_IRQ0 /* Power fail */ +#define TEMP_HILO_INT SIU_IRQ1 /* Temperature sensor */ +#define QSPAN_INT SIU_IRQ2 /* PCI Bridge (DMA CTLR?) */ +#define ISA_BRIDGE_INT SIU_IRQ3 /* All those PC things */ +#define COMM_L_INT SIU_IRQ6 /* MBX Comm expansion connector pin */ +#define STOP_ABRT_INT SIU_IRQ7 /* Stop/Abort header pin */ + +/* The MBX uses the 8259. +*/ +#define NR_8259_INTS 16 + +// End of imported data/structures +//========================================================================= + +#define MBX_CSR_COM1 0x02 // COM1 enabled + +// +// Execute a Linux kernel - this is a RedBoot CLI command +// +static void +do_exec(int argc, char *argv[]) +{ + unsigned long entry; + bool wait_time_set; + int wait_time; + bool cmd_line_set, ramdisk_addr_set, ramdisk_size_set; + unsigned long ramdisk_addr, ramdisk_size; + char *cmd_line; + char *cline; + struct option_info opts[6]; + + bd_t *board_info; + + CYG_INTERRUPT_STATE oldints; + unsigned long sp = CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE; + + init_opts(&opts[0], 'w', true, OPTION_ARG_TYPE_NUM, + (void **)&wait_time, (bool *)&wait_time_set, "wait timeout"); + init_opts(&opts[1], 'c', true, OPTION_ARG_TYPE_STR, + (void **)&cmd_line, (bool *)&cmd_line_set, "kernel command line"); + init_opts(&opts[2], 'r', true, OPTION_ARG_TYPE_NUM, + (void **)&ramdisk_addr, (bool *)&ramdisk_addr_set, "ramdisk_addr"); + init_opts(&opts[3], 's', true, OPTION_ARG_TYPE_NUM, + (void **)&ramdisk_size, (bool *)&ramdisk_size_set, "ramdisk_size"); + if (!scan_opts(argc, argv, 1, opts, 4, (void *)&entry, OPTION_ARG_TYPE_NUM, + "[physical] starting address")) + { + return; + } + + // Make a little space at the top of the stack, and align to + // 64-bit boundary. + sp = (sp-8) & ~7; + + // Set up parameter struct at top of stack + + sp = sp-sizeof(bd_t); + + board_info = (bd_t *)sp; + + board_info->bi_tag = 0x42444944; + board_info->bi_size = sizeof(board_info); + board_info->bi_revision = 1; + board_info->bi_bdate = 0x11061997; + board_info->bi_memstart = CYGMEM_REGION_ram; + board_info->bi_memsize = CYGMEM_REGION_ram_SIZE; + board_info->bi_intfreq = CYGHWR_HAL_POWERPC_BOARD_SPEED; + board_info->bi_busfreq = 66; // ???? + board_info->bi_clun = 0; // ???? + board_info->bi_dlun = 0; // ???? + + // Copy the commandline onto the stack, and set the SP to just below it. + + // If no cmd_line set in args, set it to empty string. + if( !cmd_line_set ) + cmd_line = ""; + + { + int len,i; + + // get length of string + for( len = 0; cmd_line[len] != '\0'; len++ ); + + // decrement sp by length of string and align to + // word boundary. + sp = (sp-(len+1)) & ~3; + + // assign this SP value to command line start + cline = (char *)sp; + + // copy command line over. + for( i = 0; i < len; i++ ) + cline[i] = cmd_line[i]; + cline[len] = '\0'; + + // adjust SP to 64 bit boundary, and leave a little space + // between it and the commandline for PowerPC calling + // conventions. + + sp = (sp-32)&~7; + + } + + // Disable interrupts + HAL_DISABLE_INTERRUPTS(oldints); + + // Put the caches to sleep. + HAL_DCACHE_SYNC(); + HAL_ICACHE_DISABLE(); + HAL_DCACHE_DISABLE(); + HAL_DCACHE_SYNC(); + HAL_ICACHE_INVALIDATE_ALL(); + HAL_DCACHE_INVALIDATE_ALL(); + +// diag_printf("entry %08x sp %08x bi %08x cl %08x\n", +// entry,sp,board_info,cline); +// breakpoint(); + + // Call into Linux + *(volatile unsigned char *)MBX_CSR_ADDR |= MBX_CSR_COM1; // Magic that says COM1 enabled + __asm__ volatile ( + // Linux seems to want the I/O mapped at 0xFA200000 + "lis 3,0xFA20\n" + "mtspr 638,3\n" + + // Start by disabling MMU - the mappings are + // 1-1 so this should not cause any problems + "mfmsr 3\n" + "li 4,0xFFFFFFCF\n" + "and 3,3,4\n" + "sync\n" + "mtmsr 3\n" + "sync\n" + + // Now set up parameters to jump into linux + + "mtlr %0\n" // set entry address in LR + "mr 1,%1\n" // set stack pointer + "mr 3,%2\n" // set board info in R3 + "mr 4,%3\n" // set command line in R4 + "blr \n" // jump into linux + : + : "r"(entry),"r"(sp),"r"(board_info),"r"(cline) + : "r3", "r4" + + ); +} + +#endif // CYGSEM_REDBOOT_HAL_LINUX_BOOT + +//========================================================================= +// EOF redboot_linux_exec.c diff --git a/packages/hal/powerpc/viper/v2_0/src/redboot_linux_exec.c b/packages/hal/powerpc/viper/v2_0/src/redboot_linux_exec.c new file mode 100644 index 00000000..15672235 --- /dev/null +++ b/packages/hal/powerpc/viper/v2_0/src/redboot_linux_exec.c @@ -0,0 +1,273 @@ +//========================================================================== +// +// redboot_linux_boot.c +// +// RedBoot command to boot Linux +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2002 Gary Thomas +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//####OTHERCOPYRIGHTBEGIN#### +// +// The structure definitions below are taken from include/ppc/platforms/am860.h in +// the Linux kernel, Copyright (c) 2002 Gary Thomas, Copyright (c) 1997 Dan Malek. +// Their presence here is for the express purpose of communication with the Linux +// kernel being booted and is considered 'fair use' by the original author and +// are included with their permission. +// +//####OTHERCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): msalter +// Contributors: gthomas,msalter +// Date: 2002-01-14 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include + +#include +#include +#include +#include + +#ifdef CYGPKG_REDBOOT_NETWORKING +#include +#endif + +#ifdef CYGSEM_REDBOOT_HAL_LINUX_BOOT + +#include CYGHWR_MEMORY_LAYOUT_H + +//========================================================================= + +// Exported CLI function(s) +static void do_exec(int argc, char *argv[]); +RedBoot_cmd("exec", + "Execute a Linux image - with MMU off", + "[-w timeout]\n" + " [-c \"kernel command line\"] []", + do_exec + ); + +//========================================================================= +// Imported from Linux kernel include/asm-ppc/am860.h +// Copyright (c) 2002 Gary Thomas (gary@chez-thomas.org) +// Copyright (c) 1997 Dan Malek (dmalek@jlc.net) +// Used with permission of author(s). + + +/* A Board Information structure that is given to a program when + * RedBoot starts it up. + */ +typedef struct bd_info { + unsigned int bi_tag; /* Should be 0x42444944 "BDID" */ + unsigned int bi_size; /* Size of this structure */ + unsigned int bi_revision; /* revision of this structure */ + unsigned int bi_bdate; /* EPPCbug date, i.e. 0x11061997 */ + unsigned int bi_memstart; /* Memory start address */ + unsigned int bi_memsize; /* Memory (end) size in bytes */ + unsigned int bi_intfreq; /* Internal Freq, in Hz */ + unsigned int bi_busfreq; /* Bus Freq, in Hz */ + unsigned int bi_clun; /* Boot device controller */ + unsigned int bi_dlun; /* Boot device logical dev */ + unsigned char bi_enetaddr[6]; + unsigned int bi_baudrate; + unsigned char *bi_cmdline; +} bd_t; + +// +// Execute a Linux kernel - this is a RedBoot CLI command +// +static void +do_exec(int argc, char *argv[]) +{ + unsigned long entry; + bool wait_time_set, cmd_line_set; + int wait_time; + char *cmd_line; + char *cline; + struct option_info opts[2]; + hal_virtual_comm_table_t *__chan; + int baud_rate; + + bd_t *board_info; + CYG_INTERRUPT_STATE oldints; + unsigned long sp = CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE; + + init_opts(&opts[0], 'w', true, OPTION_ARG_TYPE_NUM, + (void **)&wait_time, (bool *)&wait_time_set, "wait timeout"); + init_opts(&opts[1], 'c', true, OPTION_ARG_TYPE_STR, + (void **)&cmd_line, (bool *)&cmd_line_set, "kernel command line"); + entry = entry_address; // Default from last 'load' operation + if (!scan_opts(argc, argv, 1, opts, 2, (void *)&entry, OPTION_ARG_TYPE_NUM, + "[physical] starting address")) { + return; + } + + // Determine baud rate on current console + __chan = CYGACC_CALL_IF_CONSOLE_PROCS(); + baud_rate = CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_GETBAUD); + if (baud_rate <= 0) { + baud_rate = CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD; + } + + // Make a little space at the top of the stack, and align to + // 64-bit boundary. + sp = (sp-128) & ~7; // The Linux boot code uses this space for FIFOs + + // Copy the commandline onto the stack, and set the SP to just below it. + if (cmd_line_set) { + int len,i; + + // get length of string + for( len = 0; cmd_line[len] != '\0'; len++ ); + + // decrement sp by length of string and align to + // word boundary. + sp = (sp-(len+1)) & ~3; + + // assign this SP value to command line start + cline = (char *)sp; + + // copy command line over. + for( i = 0; i < len; i++ ) + cline[i] = cmd_line[i]; + cline[len] = '\0'; + + } else { + cline = (char *)NULL; + } + + // Set up parameter struct at top of stack + sp = sp-sizeof(bd_t); + board_info = (bd_t *)sp; + memset(board_info, sizeof(*board_info), 0); + + board_info->bi_tag = 0x42444944; + board_info->bi_size = sizeof(board_info); + board_info->bi_revision = 1; + board_info->bi_bdate = 0x06012002; + board_info->bi_memstart = CYGMEM_REGION_ram; + board_info->bi_memsize = CYGMEM_REGION_ram_SIZE; + board_info->bi_intfreq = CYGHWR_HAL_POWERPC_BOARD_SPEED*1000000; + board_info->bi_busfreq = 66*1000000; + board_info->bi_clun = 0; // ???? + board_info->bi_dlun = 0; // ???? + board_info->bi_baudrate = baud_rate; + board_info->bi_cmdline = cline; +#ifdef CYGPKG_REDBOOT_NETWORKING + memcpy(board_info->bi_enetaddr, __local_enet_addr, sizeof(enet_addr_t)); +#endif + + // adjust SP to 64 bit boundary, and leave a little space + // between it and the commandline for PowerPC calling + // conventions. + + sp = (sp-32)&~7; + + if (wait_time_set) { + int script_timeout_ms = wait_time * 1000; +#ifdef CYGFUN_REDBOOT_BOOT_SCRIPT + unsigned char *hold_script = script; + script = (unsigned char *)0; +#endif + diag_printf("About to start execution at %p - abort with ^C within %d seconds\n", + (void *)entry, wait_time); + while (script_timeout_ms >= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT) { + int res; + char line[80]; + res = _rb_gets(line, sizeof(line), CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT); + if (res == _GETS_CTRLC) { +#ifdef CYGFUN_REDBOOT_BOOT_SCRIPT + script = hold_script; // Re-enable script +#endif + return; + } + script_timeout_ms -= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT; + } + } + + // Disable interrupts + HAL_DISABLE_INTERRUPTS(oldints); + + // Put the caches to sleep. + HAL_DCACHE_SYNC(); + HAL_ICACHE_DISABLE(); + HAL_DCACHE_DISABLE(); + HAL_DCACHE_SYNC(); + HAL_ICACHE_INVALIDATE_ALL(); + HAL_DCACHE_INVALIDATE_ALL(); + +// diag_printf("entry %08x, sp %08x, info %08x, cmd line %08x, baud %d\n", +// entry, sp, board_info, cline, baud_rate); +// breakpoint(); + + // Call into Linux + __asm__ volatile ( + // Start by disabling MMU - the mappings are + // 1-1 so this should not cause any problems + "mfmsr 3\n" + "li 4,0xFFFFFFCF\n" + "and 3,3,4\n" + "sync\n" + "mtmsr 3\n" + "sync\n" + + // Now set up parameters to jump into linux + + "mtlr %0\n" // set entry address in LR + "mr 1,%1\n" // set stack pointer + "mr 3,%2\n" // set board info in R3 + "mr 4,%3\n" // set command line in R4 + "blr \n" // jump into linux + : + : "r"(entry),"r"(sp),"r"(board_info),"r"(cline) + : "r3", "r4" + + ); +} + +#endif // CYGSEM_REDBOOT_HAL_LINUX_BOOT + +//========================================================================= +// EOF redboot_linux_exec.c diff --git a/packages/io/eth/v2_0/doc/driver_doc b/packages/io/eth/v2_0/doc/driver_doc new file mode 100644 index 00000000..164c182a --- /dev/null +++ b/packages/io/eth/v2_0/doc/driver_doc @@ -0,0 +1,373 @@ +This file provides a simple description of how to write a low-level, +hardware dependent ethernet driver. + +The basic idea is that there is a high-level driver (which is only +code/functions) that is part of the stack. There will be one or more +low-level driver tied to the actual network hardware. Each of these +drivers contains one or more driver instances. The principal idea is +that the low-level drivers know nothing of the details of the stack that +will be using them. Thus, the same driver can be used by the eCos +supported TCP/IP stack, or any other, with no changes. + +A driver instance is contained within a "struct eth_drv_sc". + + struct eth_hwr_funs { + // Initialize hardware (including startup) + void (*start)(struct eth_drv_sc *sc, + unsigned char *enaddr); + // Shut down hardware + void (*stop)(struct eth_drv_sc *sc); + // Control interface + int (*control)(struct eth_drv_sc *sc, + unsigned long cmd, + void *data, + int len); + // Query interface - can a packet be sent? + int (*can_send)(struct eth_drv_sc *sc); + // Send a packet of data + void (*send)(struct eth_drv_sc *sc, + struct eth_drv_sg *sg_list, + int sg_len, + int total_len, + unsigned long key); + // Receive [unload] a packet of data + void (*recv)(struct eth_drv_sc *sc, + struct eth_drv_sg *sg_list, + int sg_len); + // Deliver data to/from device from/to stack memory space + // (moves lots of memcpy()s out of DSRs into thread) + void (*deliver)(struct eth_drv_sc *sc); + // Poll for interrupts/device service + void (*poll)(struct eth_drv_sc *sc); + // Get interrupt information from hardware driver + int (*int_vector)(struct eth_drv_sc *sc); + // Logical driver interface + struct eth_drv_funs *eth_drv, *eth_drv_old; + }; + + struct eth_drv_sc { + struct eth_hwr_funs *funs; + void *driver_private; + const char *dev_name; + struct arpcom sc_arpcom; /* ethernet common */ + }; + +You create one of these instances using the "ETH_DRV_SC()" macro which +sets up the structure, including the prototypes for the functions, etc. +By doing things this way, if the internal design of the ethernet drivers +changes (e.g. we need to add a new low-level implementation function), +existing drivers will no longer compile until updated. This is much +better than to have all of the definitions in the low-level drivers +themselves and have them be [quietly] broken if the interfaces change. + +The "magic" which gets the drivers started [and indeed, linked] is +similar to what is used for the I/O subsystem. [Note: I may try and +make it part of the I/O subsystem later.] This is done using the +"NETDEVTAB_ENTRY()" macro, which defines an initialization function +and the basic data structures for the low-level driver. + + typedef struct cyg_netdevtab_entry { + const char *name; + bool (*init)(struct cyg_netdevtab_entry *tab); + void *device_instance; + unsigned long status; + } cyg_netdevtab_entry_t; + +The "device_instance" entry here would point to the "struct +eth_drv_sc" entry previously defined. This allows the network driver +setup to work with any class of driver, not just ethernet drivers. In +the future, there will surely be serial PPP drivers, etc. These will +use the "NETDEVTAB" setup to create the basic driver, but they will +most likely be built on top of other high-level device driver layers. + +So, the bottom line is that a hardware driver will have a template +(boilerplate) which looks like this: + + #include + #include + #include + #include + #include + #include + + ETH_DRV_SC(DRV_sc, + 0, // No driver specific data needed + "eth0", // Name for this interface + HRDWR_start, + HRDWR_stop, + HRDWR_control, + HRDWR_can_send + HRDWR_send, + HRDWR_recv); + + NETDEVTAB_ENTRY(DRV_netdev, + "DRV", + DRV_HRDWR_init, + &DRV_sc); + +This, along with the referenced functions, completely define the driver. +Extensibility note: if one needed the same low-level driver to handle +multiple similar hardware interfaces, you would need multiple invocations +of the "ETH_DRV_SC()/NETDEVTAB_ENTRY()" macros. You would add a pointer +to some instance specific data, e.g. containing base addresses, interrupt +numbers, etc, where the "0, // No driver specific data" is currently. + +Now a quick waltz through the functions. This discussion will use the +generic names from above. + +static bool DRV_HDWR_init(struct cyg_netdevtab_entry *tab) +========================================================== + +This function is called as part of system initialization. Its primary +function is to decide if the hardware [as indicated via +tab->device_instance] is working and if the interface needs to be made +available in the system. If this is the case, this function needs to +finish with a call to the ethernet driver function: + + eth_drv_init((struct eth_drv_sc *)tab->device_instance, + unsigned char *enaddr); + +where 'enaddr' is a pointer to the ethernet station address for this +unit. Note: the ethernet station address is supposed to be a +world-unique, 48 bit address for this particular ethernet interface. +Typically it is provided by the board/hardware manufacturer in ROM. + +In many packages it is possible for the ESA to be set from RedBoot, +(perhaps from 'fconfig' data), hard-coded from CDL, or from an EPROM. +A driver should choose a run-time specified ESA (e.g. from RedBoot) +preferentially, otherwise (in order) it should use a CDL specified +ESA if one has been set, otherwise an EPROM set ESA, or otherwise +fail. See the cl/cs8900a eth driver for an example. + +static void +HRDWR_start(struct eth_drv_sc *sc, unsigned char *enaddr, int flags) +==================================================================== + +This function is called, perhaps much later than system initialization +time, when the system (an application) is ready for the interface to +become active. The purpose of this function is to set up the hardware +interface to start accepting packets from the network and be able to +send packets out. Note: this function will be called whenever the +up/down state of the logical interface changes, e.g. when the IP address +changes. This may occur more than one time, so this function needs to +be prepared for that case. + +FUTURE: the "flags" field (currently unused) may be used to tell the +function how to start up, e.g. whether interrupts will be used, +selection of "promiscuous" mode etc. + +static void HRDWR_stop(struct eth_drv_sc *sc) +============================================= + +This function is the inverse of "start". It should shut down the +hardware and keep it from interacting with the physical network. + +static int +HRDWR_control(struct eth_drv_sc *sc, unsigned long key, void *data, int len) +============================================================================ + +This function is used to perform low-level "control" operations on the +interface. These operations would be initiated via 'ioctl()' in the BSD +stack, and would be anything that would require the hardware setup to +possibly change (i.e. cannot be performed totally by the +platform-independent layers). + +Current operations: + +ETH_DRV_SET_MAC_ADDRESS: + This function sets the ethernet station address (ESA or MAC) for the + device. Normally this address is kept in non-volatile memory and is + unique in the world. This function must at least set the interface to + use the new address. It may also update the NVM as appropriate. + +This function should return zero if the specified operation was +completed successfully. It should return non-zero if the operation +could not be performed, for any reason. + +static int HRDWR_can_send(struct eth_drv_sc *sc) +================================================ + +This function is called to determine if it is possible to start the +transmission of a packet on the interface. Some interfaces will allow +multiple packets to be "queued" and this function allows for the highest +possible utilization of that mode. + +Return the number of packets which could be accepted at this time, zero +implies that the interface is saturated/busy. + +static void +HRDWR_send(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len, + int total_len, unsigned long key) +========================================================================= + +This function is used to send a packet of data to the network. It is +the responsibility of this function to somehow hand the data over to the +hardware interface. This will most likely require copying, but just the +address/length values could be used by smart hardware. + +NOTE: All data in/out of the driver is specified via a "scatter-gather" +list. This is just an array of address/length pairs which describe +sections of data to move (in the order given by the array). + +Once the data has been successfully sent by the interface (or if an +error occurs), the driver should call 'eth_drv_tx_done()' using the +specified 'key'. Only then will the upper layers release the resources +for that packet and start another transmission. + +FUTURE: This function may be extended so that the data need not be +copied by having the function return a "disposition" code (done, send +pending, etc). At this point, you should move the data to some "safe" +location before returning. + +static void +HRDWR_recv(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len) +========================================================================= + +This function is actually a call back, only invoked after the +upper-level function + eth_drv_recv(struct eth_drv_sc *sc, int total_len) +has been called. This upper level function is called by the hardware +driver when it knows that a packet of data is available on the +interface. The 'eth_drv_recv()' function then arranges network buffers +and structures for the data and then calls "HRDWR_recv()" to actually +move the data from the interface. + +static void +HRDWR_deliver(struct eth_drv_sc *sc) +========================================================================= + +This function is actually a call back, and notifies the driver that delivery +is happening. This allows it to actually do the copy of packet data to/from +the hardware from/to the packet buffer. And once that's done, then do things +like unmask its interrupts, and free any relevant resources so it can process +further packets. + +In general it will be called from the user thread responsible for delivering +network packets. + +static void +HRDWR_poll(struct eth_drv_sc *sc) +========================================================================= + +This function is used when in a non-interrupt driven system, e.g. when +interrupts are completely disabled. This allows the driver time to check +whether anything needs doing either for transmission, or to check if +anything has been received, or if any other processing needs doing.. + +static int +HRDWR_int_vector(struct eth_drv_sc *sc) +========================================================================= + +This function returns the interrupt vector number used for RX interrupts. +This is so the common GDB stubs infrastructure can detect when to check +for incoming ctrl-c's when doing debugging over ethernet. + +Upper layer functions - called by drivers +========================================= + +These functions are defined by the upper layers (machine independent) of +the networking driver support. They are present to hide the interfaces +to the actual networking stack so that the hardware drivers may possibly +be used by any network stack implementation. + +These functions require a pointer to a "struct eth_drv_sc" table which +describes the interface at a logical level. It is assumed that the +driver [lowest level hardware support] will keep track of this pointer +so it may be passed "up" as appropriate. + + struct eth_drv_sc { + struct eth_drv_funs *funs; // Pointer to hardware functions (see above) + void *driver_private; // Device specific data + const char *dev_name; + struct arpcom sc_arpcom; // ethernet common + }; + +This structure is created, one per logical interface, via ETH_DRV_SC macro. + +void eth_drv_init(struct eth_drv_sc *sc, unsigned char *enaddr) +=============================================================== + +This function establishes the device at initialization time. The +hardware should be totally intialized (not "started") when this function +is called. + +void eth_drv_tx_done(struct eth_drv_sc *sc, unsigned long key, int status) +========================================================================== + +This function is called when a packet completes transmission on the +interface. The 'key' value must be one of the keys provided to +"HRDWR_send()" above. The value 'status' should be non-zero (currently +undefined) to indicate that an error occurred during the transmission. + +void eth_drv_recv(struct eth_drv_sc *sc, int len) +================================================= + +This function is called to indicate that a packet of length 'len' has +arrived at the interface. The callback "HRDWR_recv()" function +described above will be used to actually unload the data from the +interface into buffers used by the machine independent layers. + + + +Calling graph for Transmit and Receive +-------------------------------------- + +It may be worth clarifying further the flow of control in the transmit +and receive cases, where the hardware driver does use interrupts and so +DSRs to tell the "foreground" when something asynchronous has occurred. + +Transmit: + Foreground task calls into network stack to send a packet (or the + stack decides to send a packet in response to incoming traffic). + The driver calls the HRDWR_can_send() function in the hardware driver. + HRDWR_can_send() returns the number of available "slots" in which it + can store a pending transmit packet. + If it cannot send at this time, the packet is queued outside the + hardware driver for later; in this case, the hardware is already busy + transmitting, so expect an interrupt as described below for completion + of the packet currently outgoing. + If it can send right now, HRDWR_send() is called. + HRDWR_send() copies the data into special hardware buffers, or + instructs the hardware to "send that". + It also remembers the key that is associated with this tx request. + these calls return. + ... + + Asynchronously, the hardware makes an interrupt to say "transmit is + done"; the ISR quietens the interrupt source in the hardware and + requests that the associated DSR be run. + The DSR realizes that a transmit request has completed, and calls + eth_drv_tx_done() with the same key that it remembered for this tx. + eth_drv_tx_done() uses the key to find the resources associated with + this transmit request; thus the stack knows that the transmit has + completed and its resources can be freed. + eth_drv_tx_done() also enquires whether HRDWR_can_send() now says + "yes, we can send" and if so, dequeues a further transmit request + which may have been queued as described above. If so: + HRDWR_send() copies the data into the hardware buffers, or + instructs the hardware to "send that" and remembers the new key. + these calls return to the DSR and thus to the foreground. + ... + + +Receive: + ... + + Asynchronously, the hardware makes an interrupt to say "there is ready + data in a receive buffer"; the ISR quietens the interrupt source in + the hardware and requests that the associated DSR be run. + The DSR realizes that there is data ready and calls eth_drv_recv() + with the length of the data that is available. + eth_drv_recv() prepares a set of scatter-gather buffers that can + accommodate that data. + It then calls back into the hardware driver routine HRDWR_recv(). + HRDWR_recv() must copy the data from the hardware's buffers into + the scatter-gather buffers provided, and return. + eth_drv_recv() sends the new packet up the network stack and returns. + Back in the DSR now, the driver cleans the receive buffer and returns + it to the hardware's control, available to receive another packet from + the network. + The DSR returns to the foreground. + ... + + diff --git a/packages/net/common/v2_0/tests/linux_echo.c b/packages/net/common/v2_0/tests/linux_echo.c new file mode 100644 index 00000000..367ce3a0 --- /dev/null +++ b/packages/net/common/v2_0/tests/linux_echo.c @@ -0,0 +1,281 @@ +//========================================================================== +// +// tests/linux_echo.c +// +// Simple TCP throughput test - echo component FOR LINUX HOST +// * CAUTION: host, i.e. non eCos, only * +// +//========================================================================== +//####BSDCOPYRIGHTBEGIN#### +// +// ------------------------------------------- +// +// Portions of this software may have been derived from OpenBSD or other sources, +// and are covered by the appropriate copyright disclaimers included herein. +// +// ------------------------------------------- +// +//####BSDCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2000-01-10 +// Purpose: +// Description: This is the middle part of a three part test. The idea is +// to test the throughput of box in a configuration like this: +// +// +------+ port +----+ port +----+ +// |SOURCE|=========>|ECHO|============>|SINK| +// +------+ 9990 +----+ 9991 +----+ +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#undef _KERNEL +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#define true 1 +#define false 1 + +#define TNR_ON() +#define TNR_OFF() + +#define diag_printf printf + +void +pexit(char *s) +{ + perror(s); + exit(1); +} + + +#define SOURCE_PORT 9990 +#define SINK_PORT 9991 + +#define MAX_BUF 8192 +static unsigned char data_buf[MAX_BUF]; + +struct test_params { + long nbufs; + long bufsize; + long load; +}; + +struct test_status { + long ok; +}; + +int max( int a, int b ) { return (a>b)?a:b; } +int min( int a, int b ) { return (a +}; diff --git a/packages/redboot/v2_0/src/net/old_bootp.c b/packages/redboot/v2_0/src/net/old_bootp.c new file mode 100755 index 00000000..cde386ca --- /dev/null +++ b/packages/redboot/v2_0/src/net/old_bootp.c @@ -0,0 +1,225 @@ +//========================================================================== +// +// net/bootp.c +// +// Stand-alone minimal BOOTP support for RedBoot +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2002 Gary Thomas +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2000-07-14 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#include +#include + +extern int net_debug; + +#define SHOULD_BE_RANDOM 0x12345555 + +/* How many milliseconds to wait before retrying the request */ +#define RETRY_TIME 1000 +#define MAX_RETRIES 30 + +static bootp_header_t *bp_info; + +#ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY +static const unsigned char dhcpCookie[] = {99,130,83,99}; +static const unsigned char dhcpEndOption[] = {255}; +static const unsigned char dhcpRequestOption[] = {52,1,3}; +#endif + +static void +bootp_handler(udp_socket_t *skt, char *buf, int len, + ip_route_t *src_route, word src_port) +{ + bootp_header_t *b; +#ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY + unsigned char *p,*end; + int optlen; +#endif + + b = (bootp_header_t *)buf; + if (bp_info) { + memset(bp_info,0,sizeof *bp_info); + if (len > sizeof *bp_info) + len = sizeof *bp_info; + memcpy(bp_info, b, len); + } + + // Only accept pure REPLY responses + if (b->bp_op != BOOTREPLY) + return; + + // Must be sent to me, as well! + if (memcmp(b->bp_chaddr, __local_enet_addr, 6)) + return; + + memcpy(__local_ip_addr, &b->bp_yiaddr, 4); +#ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY + memcpy(__local_ip_gate, &b->bp_giaddr, 4); + + if (memcmp(b->bp_vend, dhcpCookie, sizeof(dhcpCookie))) + return; + + optlen = len - (b->bp_vend - ((unsigned char*)b)); + + p = b->bp_vend+4; + end = ((unsigned char*)b) + len; + + while (p < end) { + unsigned char tag = *p; + if (tag == TAG_END) + break; + if (tag == TAG_PAD) + optlen = 1; + else { + optlen = p[1]; + p += 2; + switch (tag) { + case TAG_SUBNET_MASK: // subnet mask + memcpy(__local_ip_mask,p,4); + break; + case TAG_GATEWAY: // router + memcpy(__local_ip_gate,p,4); + break; + default: + break; + } + } + p += optlen; + } +#endif +} + +#define AddOption(p,d) do {memcpy(p,d,sizeof d); p += sizeof d;} while (0) + +/* + * Find our IP address and copy to __local_ip_addr. + * Return zero if successful, -1 if not. + */ +int +__bootp_find_local_ip(bootp_header_t *info) +{ + udp_socket_t udp_skt; + bootp_header_t b; + ip_route_t r; + int retry; + unsigned long start; + ip_addr_t saved_ip_addr; +#ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY + unsigned char *p; +#endif + int txSize; + + bp_info = info; + + memset(&b, 0, sizeof(b)); + + b.bp_op = BOOTREQUEST; + b.bp_htype = HTYPE_ETHERNET; + b.bp_hlen = 6; + b.bp_xid = SHOULD_BE_RANDOM; + +#ifdef CYGSEM_REDBOOT_NETWORKING_USE_GATEWAY + p = b.bp_vend; + + AddOption(p,dhcpCookie); + AddOption(p,dhcpRequestOption); + AddOption(p,dhcpEndOption); + + // Some servers insist on a minimum amount of "vendor" data + if (p < &b.bp_vend[BP_MIN_VEND_SIZE]) p = &b.bp_vend[BP_MIN_VEND_SIZE]; + txSize = p - (unsigned char*)&b; +#else + txSize = sizeof(b); +#endif + + memcpy( saved_ip_addr, __local_ip_addr, sizeof(__local_ip_addr) ); + memset( __local_ip_addr, 0, sizeof(__local_ip_addr) ); + + memcpy(b.bp_chaddr, __local_enet_addr, 6); + + /* fill out route for a broadcast */ + r.ip_addr[0] = 255; + r.ip_addr[1] = 255; + r.ip_addr[2] = 255; + r.ip_addr[3] = 255; + r.enet_addr[0] = 255; + r.enet_addr[1] = 255; + r.enet_addr[2] = 255; + r.enet_addr[3] = 255; + r.enet_addr[4] = 255; + r.enet_addr[5] = 255; + + /* setup a socket listener for bootp replies */ + __udp_install_listener(&udp_skt, IPPORT_BOOTPC, bootp_handler); + + retry = MAX_RETRIES; + while (retry-- > 0) { + start = MS_TICKS(); + + __udp_send((char *)&b, txSize, &r, IPPORT_BOOTPS, IPPORT_BOOTPC); + + do { + __enet_poll(); + if (__local_ip_addr[0] || __local_ip_addr[1] || __local_ip_addr[2] || __local_ip_addr[3]) { + /* success */ + __udp_remove_listener(IPPORT_BOOTPC); + return 0; + } + } while ((MS_TICKS_DELAY() - start) < RETRY_TIME); + } + + /* timed out */ + __udp_remove_listener(IPPORT_BOOTPC); + net_debug = 0; + memcpy( __local_ip_addr, saved_ip_addr, sizeof(__local_ip_addr)); + return -1; +} + + diff --git a/packages/services/compress/zlib/v2_0/src/infcodes.c b/packages/services/compress/zlib/v2_0/src/infcodes.c new file mode 100644 index 00000000..d4e5ee9a --- /dev/null +++ b/packages/services/compress/zlib/v2_0/src/infcodes.c @@ -0,0 +1,257 @@ +/* infcodes.c -- process literals and length/distance pairs + * Copyright (C) 1995-1998 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" +#include "infblock.h" +#include "infcodes.h" +#include "infutil.h" +#include "inffast.h" + +/* simplify the use of the inflate_huft type with some defines */ +#define exop word.what.Exop +#define bits word.what.Bits + +typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ + START, /* x: set up for LEN */ + LEN, /* i: get length/literal/eob next */ + LENEXT, /* i: getting length extra (have base) */ + DIST, /* i: get distance next */ + DISTEXT, /* i: getting distance extra */ + COPY, /* o: copying bytes in window, waiting for space */ + LIT, /* o: got literal, waiting for output space */ + WASH, /* o: got eob, possibly still output waiting */ + END, /* x: got eob and all data flushed */ + BADCODE} /* x: got error */ +inflate_codes_mode; + +/* inflate codes private state */ +struct inflate_codes_state { + + /* mode */ + inflate_codes_mode mode; /* current inflate_codes mode */ + + /* mode dependent information */ + uInt len; + union { + struct { + inflate_huft *tree; /* pointer into tree */ + uInt need; /* bits needed */ + } code; /* if LEN or DIST, where in tree */ + uInt lit; /* if LIT, literal */ + struct { + uInt get; /* bits to get for extra */ + uInt dist; /* distance back to copy from */ + } copy; /* if EXT or COPY, where and how much */ + } sub; /* submode */ + + /* mode independent information */ + Byte lbits; /* ltree bits decoded per branch */ + Byte dbits; /* dtree bits decoder per branch */ + inflate_huft *ltree; /* literal/length/eob tree */ + inflate_huft *dtree; /* distance tree */ + +}; + + +inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z) +uInt bl, bd; +inflate_huft *tl; +inflate_huft *td; /* need separate declaration for Borland C++ */ +z_streamp z; +{ + inflate_codes_statef *c; + + if ((c = (inflate_codes_statef *) + ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL) + { + c->mode = START; + c->lbits = (Byte)bl; + c->dbits = (Byte)bd; + c->ltree = tl; + c->dtree = td; + Tracev((stderr, "inflate: codes new\n")); + } + return c; +} + + +int inflate_codes(s, z, r) +inflate_blocks_statef *s; +z_streamp z; +int r; +{ + uInt j; /* temporary storage */ + inflate_huft *t; /* temporary pointer */ + uInt e; /* extra bits or operation */ + uLong b; /* bit buffer */ + uInt k; /* bits in bit buffer */ + Bytef *p; /* input data pointer */ + uInt n; /* bytes available there */ + Bytef *q; /* output window write pointer */ + uInt m; /* bytes to end of window or read pointer */ + Bytef *f; /* pointer to copy strings from */ + inflate_codes_statef *c = s->sub.decode.codes; /* codes state */ + + /* copy input/output information to locals (UPDATE macro restores) */ + LOAD + + /* process input and output based on current state */ + while (1) switch (c->mode) + { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ + case START: /* x: set up for LEN */ +#ifndef SLOW + if (m >= 258 && n >= 10) + { + UPDATE + r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z); + LOAD + if (r != Z_OK) + { + c->mode = r == Z_STREAM_END ? WASH : BADCODE; + break; + } + } +#endif /* !SLOW */ + c->sub.code.need = c->lbits; + c->sub.code.tree = c->ltree; + c->mode = LEN; + case LEN: /* i: get length/literal/eob next */ + j = c->sub.code.need; + NEEDBITS(j) + t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); + DUMPBITS(t->bits) + e = (uInt)(t->exop); + if (e == 0) /* literal */ + { + c->sub.lit = t->base; + Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", t->base)); + c->mode = LIT; + break; + } + if (e & 16) /* length */ + { + c->sub.copy.get = e & 15; + c->len = t->base; + c->mode = LENEXT; + break; + } + if ((e & 64) == 0) /* next table */ + { + c->sub.code.need = e; + c->sub.code.tree = t + t->base; + break; + } + if (e & 32) /* end of block */ + { + Tracevv((stderr, "inflate: end of block\n")); + c->mode = WASH; + break; + } + c->mode = BADCODE; /* invalid code */ + z->msg = (char*)"invalid literal/length code"; + r = Z_DATA_ERROR; + LEAVE + case LENEXT: /* i: getting length extra (have base) */ + j = c->sub.copy.get; + NEEDBITS(j) + c->len += (uInt)b & inflate_mask[j]; + DUMPBITS(j) + c->sub.code.need = c->dbits; + c->sub.code.tree = c->dtree; + Tracevv((stderr, "inflate: length %u\n", c->len)); + c->mode = DIST; + case DIST: /* i: get distance next */ + j = c->sub.code.need; + NEEDBITS(j) + t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); + DUMPBITS(t->bits) + e = (uInt)(t->exop); + if (e & 16) /* distance */ + { + c->sub.copy.get = e & 15; + c->sub.copy.dist = t->base; + c->mode = DISTEXT; + break; + } + if ((e & 64) == 0) /* next table */ + { + c->sub.code.need = e; + c->sub.code.tree = t + t->base; + break; + } + c->mode = BADCODE; /* invalid code */ + z->msg = (char*)"invalid distance code"; + r = Z_DATA_ERROR; + LEAVE + case DISTEXT: /* i: getting distance extra */ + j = c->sub.copy.get; + NEEDBITS(j) + c->sub.copy.dist += (uInt)b & inflate_mask[j]; + DUMPBITS(j) + Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist)); + c->mode = COPY; + case COPY: /* o: copying bytes in window, waiting for space */ +#ifndef __TURBOC__ /* Turbo C bug for following expression */ + f = (uInt)(q - s->window) < c->sub.copy.dist ? + s->end - (c->sub.copy.dist - (q - s->window)) : + q - c->sub.copy.dist; +#else + f = q - c->sub.copy.dist; + if ((uInt)(q - s->window) < c->sub.copy.dist) + f = s->end - (c->sub.copy.dist - (uInt)(q - s->window)); +#endif + while (c->len) + { + NEEDOUT + OUTBYTE(*f++) + if (f == s->end) + f = s->window; + c->len--; + } + c->mode = START; + break; + case LIT: /* o: got literal, waiting for output space */ + NEEDOUT + OUTBYTE(c->sub.lit) + c->mode = START; + break; + case WASH: /* o: got eob, possibly more output */ + if (k > 7) /* return unused byte, if any */ + { + Assert(k < 16, "inflate_codes grabbed too many bytes") + k -= 8; + n++; + p--; /* can always return one */ + } + FLUSH + if (s->read != s->write) + LEAVE + c->mode = END; + case END: + r = Z_STREAM_END; + LEAVE + case BADCODE: /* x: got error */ + r = Z_DATA_ERROR; + LEAVE + default: + r = Z_STREAM_ERROR; + LEAVE + } +#ifdef NEED_DUMMY_RETURN + return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ +#endif +} + + +void inflate_codes_free(c, z) +inflate_codes_statef *c; +z_streamp z; +{ + ZFREE(z, c); + Tracev((stderr, "inflate: codes free\n")); +} diff --git a/packages/services/compress/zlib/v2_0/src/infcodes.h b/packages/services/compress/zlib/v2_0/src/infcodes.h new file mode 100644 index 00000000..6c750d89 --- /dev/null +++ b/packages/services/compress/zlib/v2_0/src/infcodes.h @@ -0,0 +1,27 @@ +/* infcodes.h -- header to use infcodes.c + * Copyright (C) 1995-1998 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +struct inflate_codes_state; +typedef struct inflate_codes_state FAR inflate_codes_statef; + +extern inflate_codes_statef *inflate_codes_new OF(( + uInt, uInt, + inflate_huft *, inflate_huft *, + z_streamp )); + +extern int inflate_codes OF(( + inflate_blocks_statef *, + z_streamp , + int)); + +extern void inflate_codes_free OF(( + inflate_codes_statef *, + z_streamp )); + diff --git a/packages/templates/all/v2_0.ect b/packages/templates/all/v2_0.ect new file mode 100644 index 00000000..145bf58f --- /dev/null +++ b/packages/templates/all/v2_0.ect @@ -0,0 +1,236 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_all { + description "This configuration provides all packages." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_IO_SERIAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_KERNEL v2_0 ; + package CYGPKG_MEMALLOC v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_LIBC v2_0 ; + package CYGPKG_LIBC_I18N v2_0 ; + package CYGPKG_LIBC_SETJMP v2_0 ; +# package CYGPKG_LIBC_SIGNALS v2_0 ; + package CYGPKG_LIBC_STARTUP v2_0 ; + package CYGPKG_LIBC_STDIO v2_0 ; + package CYGPKG_LIBC_STDLIB v2_0 ; + package CYGPKG_LIBC_STRING v2_0 ; + package CYGPKG_LIBC_TIME v2_0 ; + package CYGPKG_LIBM v2_0 ; + package CYGPKG_POSIX v2_0 ; + package CYGPKG_UITRON v2_0 ; + package CYGPKG_IO_WATCHDOG v2_0 ; + package CYGPKG_IO_WALLCLOCK v2_0 ; + package CYGPKG_ERROR v2_0 ; + package CYGPKG_IO_FILEIO v2_0 ; + package CYGPKG_NET v2_0 ; + package CYGPKG_NET_OPENBSD_STACK v2_0 ; + package CYGPKG_SNMPAGENT v2_0 ; + package CYGPKG_SNMPLIB v2_0 ; + package CYGPKG_NS_DNS v2_0 ; + package CYGPKG_IO_ETH_DRIVERS v2_0 ; + package CYGPKG_CRC v2_0 ; + package CYGPKG_CPULOAD v2_0 ; +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DNS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGIMP_KERNEL_SCHED_SORTED_QUEUES { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE { + inferred_value 1 +}; + +cdl_component CYGSEM_KERNEL_SCHED_ASR_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_ASR_GLOBAL { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + inferred_value 1 +}; + + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_component CYGPKG_KERNEL_THREADS_DESTRUCTORS { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DIRENT_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + inferred_value 1 +}; diff --git a/packages/templates/cygmon/v2_0.ect b/packages/templates/cygmon/v2_0.ect new file mode 100644 index 00000000..4a0ee856 --- /dev/null +++ b/packages/templates/cygmon/v2_0.ect @@ -0,0 +1,98 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_stubs { + description " +This is the eCos CygMon configuration. It is used when building CygMon." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_IO_SERIAL v2_0 ; + package CYGPKG_ERROR v2_0 ; + package CYGPKG_CYGMON v2_0 ; + package CYGPKG_KERNEL v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_LIBC v2_0 ; + package CYGPKG_LIBC_STRING v2_0 ; + package CYGPKG_LIBC_SETJMP v2_0 ; + package CYGPKG_LIBC_I18N v2_0 ; + package CYGPKG_MEMALLOC v2_0 ; +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + user_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + user_value 0 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROM +}; + +cdl_option CYGBLD_BUILD_CYGMON { + user_value 1 +}; + +cdl_option CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT { + user_value 0 +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; diff --git a/packages/templates/cygmon_no_kernel/v2_0.ect b/packages/templates/cygmon_no_kernel/v2_0.ect new file mode 100644 index 00000000..e69d1e13 --- /dev/null +++ b/packages/templates/cygmon_no_kernel/v2_0.ect @@ -0,0 +1,97 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_stubs { + description " +This is the eCos CygMon configuration. It is used when building CygMon." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_IO_SERIAL v2_0 ; + package CYGPKG_ERROR v2_0 ; + package CYGPKG_CYGMON v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_LIBC v2_0 ; + package CYGPKG_LIBC_STRING v2_0 ; + package CYGPKG_LIBC_SETJMP v2_0 ; + package CYGPKG_LIBC_I18N v2_0 ; + package CYGPKG_MEMALLOC v2_0 ; +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + user_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + user_value 0 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROM +}; + +cdl_option CYGBLD_BUILD_CYGMON { + user_value 1 +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + user_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGSEM_ERROR_PER_THREAD_ERRNO { + inferred_value 0 +}; diff --git a/packages/templates/default/v2_0.ect b/packages/templates/default/v2_0.ect new file mode 100644 index 00000000..aab23028 --- /dev/null +++ b/packages/templates/default/v2_0.ect @@ -0,0 +1,129 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_default { + description " +This is a default eCos configuration. It contains the infrastructure, +kernel, C and maths libraries, plus their support packages." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_IO_SERIAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_KERNEL v2_0 ; + package CYGPKG_MEMALLOC v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_LIBC v2_0 ; + package CYGPKG_LIBC_I18N v2_0 ; + package CYGPKG_LIBC_SETJMP v2_0 ; + package CYGPKG_LIBC_SIGNALS v2_0 ; + package CYGPKG_LIBC_STARTUP v2_0 ; + package CYGPKG_LIBC_STDIO v2_0 ; + package CYGPKG_LIBC_STDLIB v2_0 ; + package CYGPKG_LIBC_STRING v2_0 ; + package CYGPKG_LIBC_TIME v2_0 ; + package CYGPKG_LIBM v2_0 ; + package CYGPKG_IO_WALLCLOCK v2_0 ; + package CYGPKG_ERROR v2_0 ; +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; diff --git a/packages/templates/kernel/v2_0.ect b/packages/templates/kernel/v2_0.ect new file mode 100644 index 00000000..f5bce885 --- /dev/null +++ b/packages/templates/kernel/v2_0.ect @@ -0,0 +1,32 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_kernel { + description "This configuration provides HAL, infrastructure, and the kernel packages." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_IO_SERIAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_KERNEL v2_0 ; + package CYGPKG_ERROR v2_0 ; + package CYGPKG_MEMALLOC v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; diff --git a/packages/templates/minimal/v2_0.ect b/packages/templates/minimal/v2_0.ect new file mode 100644 index 00000000..9a980128 --- /dev/null +++ b/packages/templates/minimal/v2_0.ect @@ -0,0 +1,33 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_minimal { + description "This is a minimal configuration. It only contains the HAL and INFRA packages." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_ERROR v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; +}; + +cdl_option CYGSEM_ERROR_PER_THREAD_ERRNO { + inferred_value 0 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; diff --git a/packages/templates/net/v2_0.ect b/packages/templates/net/v2_0.ect new file mode 100644 index 00000000..0c2fbe90 --- /dev/null +++ b/packages/templates/net/v2_0.ect @@ -0,0 +1,229 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_net { + description "This configuration includes the TCP/IP stack." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_IO_SERIAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_KERNEL v2_0 ; + package CYGPKG_MEMALLOC v2_0 ; + package CYGPKG_LIBC v2_0 ; + package CYGPKG_LIBC_TIME v2_0 ; + package CYGPKG_LIBC_STDLIB v2_0 ; + package CYGPKG_LIBC_STRING v2_0 ; + package CYGPKG_LIBC_I18N v2_0 ; + package CYGPKG_LIBC_SETJMP v2_0 ; + package CYGPKG_LIBC_STARTUP v2_0 ; + package CYGPKG_LIBC_STDIO v2_0 ; + package CYGPKG_LIBM v2_0 ; + package CYGPKG_POSIX v2_0 ; + package CYGPKG_IO_WATCHDOG v2_0 ; + package CYGPKG_IO_WALLCLOCK v2_0 ; + package CYGPKG_ERROR v2_0 ; + package CYGPKG_IO_FILEIO v2_0 ; + package CYGPKG_NET v2_0 ; + package CYGPKG_NET_FREEBSD_STACK v2_0 ; + package CYGPKG_NS_DNS v2_0 ; + package CYGPKG_IO_ETH_DRIVERS v2_0 ; +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DNS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DIRENT_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + inferred_value 1 +}; + +cdl_option CYGIMP_KERNEL_SCHED_SORTED_QUEUES { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE { + inferred_value 1 +}; + +cdl_component CYGSEM_KERNEL_SCHED_ASR_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_ASR_GLOBAL { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + inferred_value 1 +}; + +cdl_component CYGPKG_KERNEL_THREADS_DESTRUCTORS { + inferred_value 1 +}; diff --git a/packages/templates/old_net/v2_0.ect b/packages/templates/old_net/v2_0.ect new file mode 100644 index 00000000..af74381e --- /dev/null +++ b/packages/templates/old_net/v2_0.ect @@ -0,0 +1,230 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_net { + description "This configuration includes the TCP/IP stack." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_IO_SERIAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_KERNEL v2_0 ; + package CYGPKG_MEMALLOC v2_0 ; + package CYGPKG_LIBC v2_0 ; + package CYGPKG_LIBC_TIME v2_0 ; + package CYGPKG_LIBC_STDLIB v2_0 ; + package CYGPKG_LIBC_STRING v2_0 ; + package CYGPKG_LIBC_I18N v2_0 ; + package CYGPKG_LIBC_SETJMP v2_0 ; + package CYGPKG_LIBC_STARTUP v2_0 ; + package CYGPKG_LIBC_STDIO v2_0 ; + package CYGPKG_LIBM v2_0 ; + package CYGPKG_POSIX v2_0 ; + package CYGPKG_IO_WATCHDOG v2_0 ; + package CYGPKG_IO_WALLCLOCK v2_0 ; + package CYGPKG_ERROR v2_0 ; + package CYGPKG_IO_FILEIO v2_0 ; + package CYGPKG_NET v2_0 ; + package CYGPKG_NET_OPENBSD_STACK v2_0 ; + package CYGPKG_NS_DNS v2_0 ; + package CYGPKG_IO_ETH_DRIVERS v2_0 ; +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DNS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DIRENT_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + inferred_value 1 +}; + +cdl_option CYGIMP_KERNEL_SCHED_SORTED_QUEUES { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE { + inferred_value 1 +}; + +cdl_component CYGSEM_KERNEL_SCHED_ASR_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_ASR_GLOBAL { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + inferred_value 1 +}; + +cdl_component CYGPKG_KERNEL_THREADS_DESTRUCTORS { + inferred_value 1 +}; + diff --git a/packages/templates/posix/v2_0.ect b/packages/templates/posix/v2_0.ect new file mode 100644 index 00000000..b5a767c0 --- /dev/null +++ b/packages/templates/posix/v2_0.ect @@ -0,0 +1,149 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_posix { + description "This configuration provides HAL, infrastructure, the kernel and POSIX packages." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_KERNEL v2_0 ; + package CYGPKG_MEMALLOC v2_0 ; + package CYGPKG_ERROR v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_POSIX v2_0 ; + package CYGPKG_IO_FILEIO v2_0 ; + package CYGPKG_LIBC v2_0 ; + package CYGPKG_LIBC_SETJMP v2_0 ; + package CYGPKG_LIBC_STRING v2_0 ; + package CYGPKG_LIBC_STARTUP v2_0 ; +}; + +cdl_option CYGIMP_KERNEL_SCHED_SORTED_QUEUES { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE { + inferred_value 1 +}; + +cdl_component CYGSEM_KERNEL_SCHED_ASR_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGSEM_KERNEL_SCHED_ASR_GLOBAL { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DIRENT_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + inferred_value 0 +}; diff --git a/packages/templates/redboot/v2_0.ect b/packages/templates/redboot/v2_0.ect new file mode 100644 index 00000000..48799817 --- /dev/null +++ b/packages/templates/redboot/v2_0.ect @@ -0,0 +1,72 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_stubs { + description " +This is the RedBoot configuration, used when building the RedBoot environment." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_REDBOOT v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_LIBC_STRING v2_0 ; + package CYGPKG_NS_DNS v2_0 ; + package CYGPKG_CRC v2_0 ; +}; + +cdl_option CYGBLD_BUILD_REDBOOT { + user_value 1 ; +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + user_value 4096 +}; + +cdl_option CYGBLD_ISO_DNS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGPKG_NS_DNS_BUILD { + inferred_value 0 +}; + +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + inferred_value 0 +}; diff --git a/packages/templates/stubs/v2_0.ect b/packages/templates/stubs/v2_0.ect new file mode 100644 index 00000000..d571eb28 --- /dev/null +++ b/packages/templates/stubs/v2_0.ect @@ -0,0 +1,43 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_stubs { + description " +This is the eCos stubs configuration. It is used when building eCos GDB stubs." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_IO_SERIAL v2_0 ; + package CYGPKG_ERROR v2_0 ; +}; + +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + user_value 1 ; +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGSEM_ERROR_PER_THREAD_ERRNO { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; diff --git a/packages/templates/uitron/v2_0.ect b/packages/templates/uitron/v2_0.ect new file mode 100644 index 00000000..8be07fe2 --- /dev/null +++ b/packages/templates/uitron/v2_0.ect @@ -0,0 +1,134 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration template_uitron { + description " +This configuration provides full level S (standard) compliance with +version 3.02 of the uITRON standard, plus many level E (extended) +features." ; + package CYGPKG_HAL v2_0 ; + package CYGPKG_IO v2_0 ; + package CYGPKG_IO_SERIAL v2_0 ; + package CYGPKG_INFRA v2_0 ; + package CYGPKG_KERNEL v2_0 ; + package CYGPKG_MEMALLOC v2_0 ; + package CYGPKG_UITRON v2_0 ; + package CYGPKG_ISOINFRA v2_0 ; + package CYGPKG_LIBC v2_0 ; + package CYGPKG_LIBC_I18N v2_0 ; + package CYGPKG_LIBC_SETJMP v2_0 ; + package CYGPKG_LIBC_SIGNALS v2_0 ; + package CYGPKG_LIBC_STARTUP v2_0 ; + package CYGPKG_LIBC_STDIO v2_0 ; + package CYGPKG_LIBC_STDLIB v2_0 ; + package CYGPKG_LIBC_STRING v2_0 ; + package CYGPKG_LIBC_TIME v2_0 ; + package CYGPKG_LIBM v2_0 ; + package CYGPKG_IO_WALLCLOCK v2_0 ; + package CYGPKG_ERROR v2_0 ; +}; + + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + + + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; diff --git a/tools/acsupport/ChangeLog b/tools/acsupport/ChangeLog new file mode 100644 index 00000000..b295d632 --- /dev/null +++ b/tools/acsupport/ChangeLog @@ -0,0 +1,51 @@ +2003-02-12 Bart Veer + + * acinclude.m4: Another attempt at the Tcl macro, to cope with + cygwin tcl 8.3 and 8.4. Also fix some problems with VC++ builds. + +2002-10-27 Bart Veer + + * acinclude.m4 (ECOS_PATH_TCL): fix typo that prevented a build + under Debian Woody + +2002-09-22 Bart Veer + + * acinclude.m4: + Add the Tcl library path to ecos_LDADD (patch provided by Andrew + Lunn). Also add a reminder about ecos_tcl_version issues and + fix up Tk support. + +2002-08-27 Robin Farine + + * acinclude.m4 (ECOS_PATH_TCL): having found tclConfig.sh in + //tcl, search for tkConfig.sh in //tcl and in + //tk. + +2002-08-03 Bart Veer + + * Created as part of autoconf reorganization. + +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002, 2003 Bart Veer +// +// This file is part of the eCos autoconf support. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### diff --git a/tools/acsupport/acinclude.m4 b/tools/acsupport/acinclude.m4 new file mode 100644 index 00000000..c537de2e --- /dev/null +++ b/tools/acsupport/acinclude.m4 @@ -0,0 +1,891 @@ +dnl Process this file with aclocal to get an aclocal.m4 file. Then +dnl process that with autoconf. +dnl ==================================================================== +dnl +dnl acinclude.m4 +dnl +dnl Various autoconf macros that are shared between different +dnl eCos packages. +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 2002, 2003 Bart Veer +dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 1998/12/16 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl ==================================================================== +dnl Ensure that configure is not being run in the source tree, i.e. +dnl that a separate build tree has been created. This is not absolutely +dnl necessary at the time of writing but may become so in future, and +dnl is good practice. + +AC_DEFUN(ECOS_CHECK_BUILD_ne_SRC,[ + AC_MSG_CHECKING([that a separate build tree is being used]) + ecos_cwd=`/bin/pwd` + if test "${srcdir}" = "." ; then + srcdir=${ecos_cwd} + fi + if test "${ecos_cwd}" = "${srcdir}" ; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([This configure script should not be run inside the source tree. Instead please use a separate build tree]) + else + AC_MSG_RESULT(yes) + fi +]) + +dnl ==================================================================== +dnl The AM_INIT_AUTOMAKE() will define a symbol VERSION for the +dnl package's version number. Unfortunately this symbol is rather +dnl hard to share if several different packages are involved, so this +dnl macro is used to define an alternative symbol + +AC_DEFUN(ECOS_SUBST_VERSION,[ + AC_REQUIRE([AM_INIT_AUTOMAKE]) + ifelse($#,1,,AC_MSG_ERROR([Invalid number of arguments passed to ECOS SUBST_VERSION])) + AC_DEFINE_UNQUOTED($1, "$VERSION") +]) + +dnl -------------------------------------------------------------------- +dnl Convert a cygwin pathname to something acceptable to VC++ (but +dnl still invoked from bash and cygwin's make). This means using +dnl the cygpath utility and then translating any backslashes into +dnl forward slashes to avoid confusing make. + +AC_DEFUN(ECOS_MSVC_PATH, [ + AC_REQUIRE([ECOS_PROG_MSVC]) + ifelse($#, 1, , AC_MSG_ERROR("Invalid number of arguments passed to ECOS MSVC_PATH")) + if test "${MSVC}" = "yes" ; then + $1=`cygpath -w ${$1} | tr \\\\\\\\ /` + fi +]) + +dnl ==================================================================== +dnl An internal utility to define eCos variants of various compilation +dnl related flags. The aim is to avoid messing with CFLAGS, LIBS, and +dnl so on because those are used for feature tests as well as for +dnl passing on to the application. +AC_DEFUN(ECOS_PROG_DEFINE_COMPILER_FLAGS,[ + ecos_CFLAGS="" + ecos_CXXFLAGS="" + ecos_LDADD="" + ecos_INCLUDES="" + ecos_LIBS="" + AC_SUBST(ecos_CFLAGS) + AC_SUBST(ecos_CXXFLAGS) + AC_SUBST(ecos_LDADD) + AC_SUBST(ecos_INCLUDES) + AC_SUBST(ecos_LIBS) +]) + +dnl For historical reasons some of the eCos host-side software can be +dnl built with Visual C++ as well as g++. The user can specify this +dnl at configure time using CC=cl, where cl.exe is the compiler driver. +dnl This macro will set the variable MSVC to "yes" or to "no" depending +dnl on whether or not VC++ is being used, analogous to the variable +dnl GCC set by AC_PROG_CC. It provides support for an automake +dnl conditional thus allowing the makefile to adapt somewhat to the +dnl compiler being used. Finally it fills in the ECOS_INCLUDES, +dnl ECOS_LIBS and ECOS_LDADD variables with suitable initial values. + +AC_DEFUN(ECOS_PROG_MSVC,[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([ECOS_PROG_DEFINE_COMPILER_FLAGS]) + + AC_MSG_CHECKING("for Visual C++") + MSVC="no"; + if test "${CC}" = "cl" ; then + MSVC="yes" + CXX="cl" + MSVC_SRCDIR=${srcdir} + ECOS_MSVC_PATH(MSVC_SRCDIR) + AC_SUBST(MSVC_SRCDIR) + ecos_INCLUDES="${ecos_INCLUDES} \"-I${MSVC_SRCDIR}\"" + ecos_LDADD="-link" + ecos_LIBS="advapi32.lib" + fi + AM_CONDITIONAL(MSVC, test "${MSVC}" = "yes") + if test "${MSVC}" = "yes" ; then + AC_MSG_RESULT([unfortunately yes]) + else + AC_MSG_RESULT([no]) + fi +]) + +dnl ==================================================================== +dnl Set up sensible flags for the various different compilers. This +dnl is achieved by manipulating AM-CFLAGS and AM-CXXFLAGS via a subst, +dnl plus undoing the setting of CFLAGS and CXXFLAGS done by +dnl the AC_PROC_CC and AC_PROG_CXX macros (e.g. setting the default +dnl compilation flags to -O2). Note that this relies +dnl on knowing about the internals of those macros. +dnl +dnl There is little point in checking the cache: this macro does +dnl not do any feature tests so checking the cache would probably +dnl be more expensive than doing the work here. +dnl +dnl For now the only supported compilers are gcc/g++ and VC++. Attempts +dnl to use another compiler will result in an error at configure-time. +AC_DEFUN(ECOS_PROG_STANDARD_COMPILER_FLAGS, [ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([ECOS_PROG_DEFINE_COMPILER_FLAGS]) + AC_REQUIRE([ECOS_PROG_MSVC]) + + AC_MSG_CHECKING("the default compiler flags") + + dnl Add a user-settable flag to control whether or debugging info is + dnl incorporated at compile-time. + ecosflags_enable_debug="no" + AC_ARG_ENABLE(debug,[ --enable-debug do a debug rather than a release build], + [case "${enableval}" in + yes) ecosflags_enable_debug="yes" ;; + *) ecosflags_enable_debug="no" ;; + esac]) + + dnl For VC++ builds also provide a flag for ANSI vs. unicode builds. + dnl For now this does not actually affect the compiler flags. + dnl NOTE: there may also have to be a flag to control whether or + dnl the VC++ multi-threading flags are enabled. + ecosflags_enable_ansi="no" + if test "${MSVC}" = "yes" ; then + AC_ARG_ENABLE(ansi,[ --enable-ansi do an ANSI rather than a unicode build], + [case "${enableval}" in + yes) ecosflags_enable_ansi="yes" ;; + *) ecosflags_enable_ansi="no" ;; + esac]) + fi + + dnl Now we know what the user is after. + if test "${GCC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Woverloaded-virtual" + elif test "${MSVC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -nologo -W3" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -nologo -W3 -GR -GX" + else + AC_MSG_ERROR("default flags for ${CC} are not known") + fi + + dnl Choose between debugging and optimization. + if test "${ecosflags_enable_debug}" = "yes" ; then + if test "${GCC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -g -O0" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -g -O0" + elif test "${MSVC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -MDd -Zi" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -MDd -Zi" + fi + else + dnl For now building with g++ implies -O0 rather than -O2. The + dnl compile-time performance of g++ at -O2 has been disappointing + dnl for quite some time, and the eCos host-side code is not + dnl sufficiently cpu-intensive to require -O2. + if test "${GCC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -O0" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -O0" + elif test "${MSVC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -MD -O2" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -MD -O2" + fi + fi + + CFLAGS="${ac_save_CFLAGS}" + CXXFLAGS="${ac_save_CXXFLAGS}" + + AC_MSG_RESULT(done) +]) + +dnl -------------------------------------------------------------------- +dnl User-settable options for assertions and tracing. +dnl +dnl The settable options are: +dnl --disable-asserts +dnl --disable-preconditions +dnl --disable-postconditions +dnl --disable-invariants +dnl --disable-loopinvariants +dnl --disable-tracing +dnl --disable-fntracing + +AC_DEFUN(ECOS_ARG_INFRASTRUCTURE, [ + + AC_REQUIRE([ECOS_PROG_STANDARD_COMPILER_FLAGS]) + + if test "${ecosflags_enable_debug}" = "yes" ; then + ecosinfra_asserts="yes" + ecosinfra_preconditions="yes" + ecosinfra_postconditions="yes" + ecosinfra_invariants="yes" + ecosinfra_loopinvariants="yes" + ecosinfra_tracing="yes" + ecosinfra_fntracing="yes" + else + ecosinfra_asserts="no" + ecosinfra_preconditions="no" + ecosinfra_postconditions="no" + ecosinfra_invariants="no" + ecosinfra_loopinvariants="no" + ecosinfra_tracing="no" + ecosinfra_fntracing="no" + fi + + AC_ARG_ENABLE(asserts,[ --disable-asserts disable all assertions], + [case "${enableval}" in + yes) ecosinfra_asserts="yes" ;; + no) ecosinfra_asserts="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for disable-asserts option]) ;; + esac]) + if test "${ecosinfra_asserts}" = "yes"; then + AC_DEFINE(CYGDBG_USE_ASSERTS) + fi + + AC_ARG_ENABLE(preconditions, [ --disable-preconditions disable a subset of the assertions], + [case "${enableval}" in + yes) ecosinfra_preconditions="yes" ;; + no) ecosinfra_preconditions="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for disable-preconditions option]) ;; + esac]) + if test "${ecosinfra_preconditions}" = "yes"; then + AC_DEFINE(CYGDBG_INFRA_DEBUG_PRECONDITIONS) + fi + + AC_ARG_ENABLE(postconditions, [ --disable-postconditions disable a subset of the assertions], + [case "${enableval}" in + yes) ecosinfra_postconditions="yes" ;; + no) ecosinfra_postconditions="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for disable-postconditions option]) ;; + esac]) + if test "${ecosinfra_postconditions}" = "yes"; then + AC_DEFINE(CYGDBG_INFRA_DEBUG_POSTCONDITIONS) + fi + + AC_ARG_ENABLE(invariants, [ --disable-invariants disable a subset of the assertions], + [case "${enableval}" in + yes) ecosinfra_invariants="yes" ;; + no) ecosinfra_invariants="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for disable-invariants option]) ;; + esac]) + if test "${ecosinfra_invariants}" = "yes"; then + AC_DEFINE(CYGDBG_INFRA_DEBUG_INVARIANTS) + fi + + AC_ARG_ENABLE(loopinvariants, [ --disable-loopinvariants disable a subset of the assertions], + [case "${enableval}" in + yes) ecosinfra_loopinvariants="yes" ;; + no) ecosinfra_loopinvariants="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for disable-loopinvariants option]) ;; + esac]) + if test "${ecosinfra_loopinvariants}" = "yes"; then + AC_DEFINE(CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS) + fi + + AC_ARG_ENABLE(tracing,[ --disable-tracing disable tracing], + [case "${enableval}" in + yes) ecosinfra_tracing="yes" ;; + no) ecosinfra_tracing="no" ;; + *) AC_MSG_ERROR([bad value ${enableval} for disable-tracing option]) ;; + esac]) + if test "${ecosinfra_tracing}" = "yes"; then + AC_DEFINE(CYGDBG_USE_TRACING) + fi + + AC_ARG_ENABLE(fntracing,[ --disable-fntracing disable function entry/exit tracing], + [case "${enableval}" in + yes) ecosinfra_fntracing="yes" ;; + no) ecosinfra_fntracing=no ;; + *) AC_MSG_ERROR([bad value ${enableval} for disable-fntracing option]) ;; + esac]) + if test "${ecosinfra_fntracing}" = "yes"; then + AC_DEFINE(CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS) + fi +]) + +dnl ==================================================================== +dnl Inspired by KDE's autoconfig +dnl This macro takes three Arguments like this: +dnl AC_FIND_FILE(foo.h, $incdirs, incdir) +dnl the filename to look for, the list of paths to check and +dnl the variable with the result. + +AC_DEFUN(AC_FIND_FILE,[ + $3="" + for i in $2; do + if test -r "$i/$1"; then + $3=$i + break + fi + done +]) + +dnl ==================================================================== +dnl Variation of the above. +dnl This macro takes three Arguments like this: +dnl AC_FIND_DIR(infra, $incdirs, incdir) +dnl the directory name to look for, the list of paths to check and +dnl the variable with the result. + +AC_DEFUN(AC_FIND_DIR,[ + $3="" + for i in $2; do + if test -d "$i/$1"; then + $3=$i + break + fi + done +]) + +dnl ==================================================================== +dnl Work out details of the Tcl/tk installation that should be used. +dnl In theory this is simple: when Tcl is installed in +dnl (usually /usr) there should be a file /lib/tclConfig.sh +dnl which defines exactly how to build Tcl-based applications. Of course +dnl Tcl may be installed anywhere, not just in /usr, so it is necessary +dnl to do some searching. There is a command-line argument +dnl --with-tcl= to specify the Tcl installation, so the macro +dnl can search for /lib/tclConfig.sh, /lib/tclConfig.sh +dnl and /usr/lib/tclConfig.sh +dnl +dnl Unfortunately not all systems use this convention. For example, +dnl at the time of writing Debian installs tclConfig.sh in a versioned +dnl subdirectory /usr/lib/tcl8.3/tclConfig.sh. Hence there is an +dnl additional argument --with-tcl-version= which is used to +dnl extend the search path. +dnl +dnl For VC++ builds the situation is different again. Tcl may be +dnl installed anywhere, so the data in tclConfig.sh is not useful +dnl (and that file may not be provided at all). Instead --with-tcl +dnl must be used to specify the path. Alternatively separate paths +dnl for headers and libraries can be specified using --with-tcl-header +dnl and --with-tcl-lib. Usually it will also be necessary to specify +dnl the library version number using --with-tcl-version. + +dnl This adds two main command-line options, --with-tcl= to +dnl specify the Tcl install directory, and --with-tcl-version= +dnl to control which version of Tcl should be used. For finer-grained +dnl control there are additional options --with-tcl-header and +dnl --with-tcl-version. It is assumed that Tcl and Tk are installed +dnl in the same place. +dnl +dnl On Unix systems and under cygwin there should be a file +dnl $(tcl_prefix)/lib/tclConfig.sh containing all the information +dnl needed for Tcl. This file is consulted and the appropriate +dnl variables extracted. Similar information for Tk lives in +dnl tkConfig.sh. As a useful side effect all variables defined +dnl in those scripts can be accessed. +dnl +dnl To confuse matters, subtly different naming conventions are used +dnl under Unix and NT. Under Unix the Tcl library will be called +dnl libtcl8.0.a, libtcl8.1.a, etc. with a dot between the major and +dnl minor version. Under NT (including cygwin) the library will be +dnl called tcl80.lib, tcl81.lib, libtcl80.a, libtcl81.a, etc. +dnl without a dot. +dnl +dnl Currently this macro assumes that Tcl is preinstalled, and not +dnl built alongside eCos. Specifically the macro checks that +dnl tcl.h can be found, plus on Unix systems tclConfig.sh and +dnl tkConfig.sh as well. +dnl +dnl This macro updates the build-related variables ecos_INCLUDES, +dnl ecos_LDADD, and ecos_LIBS. The latter assumes the application +dnl only needs Tcl. If Tk is needed as well then the variable +dnl ecos_tklibs should be used in addition. + +AC_DEFUN(ECOS_PATH_TCL, [ + + AC_REQUIRE([ECOS_PROG_MSVC]) + AC_REQUIRE([AC_CYGWIN]) + + ecos_tk_libs="" + ecos_tk_libdir="" + + dnl Where is the Tcl installation, and what version should be used? + AC_MSG_CHECKING(for Tcl installation) + AC_ARG_WITH(tcl,[ --with-tcl= location of Tcl header and libraries]) + AC_ARG_WITH(tcl-version,[ --with-tcl-version= version of Tcl to be used]) + + dnl If using VC++ then there are no sensible default directories + dnl to search for a Tcl installation. Instead the user must + dnl supply either --with-tcl, or both --with-tcl-header and + dnl --with-tcl-lib. + dnl + dnl Also when using VC++ there is no tclConfig.sh file to + dnl consult about which libraries are needed. Instead that + dnl information is hard-wired here. + if test "${MSVC}" = "yes" ; then + AC_ARG_WITH(tcl-header,[ --with-tcl-header= location of Tcl header]) + AC_ARG_WITH(tcl-lib,[ --with-tcl-lib= location of Tcl libraries]) + ecos_tcl_incdir="" + ecos_tcl_libdir="" + if test "${with_tcl_version+set}" != set ; then + AC_MSG_ERROR(You must specify a Tcl version using --with-tcl-version=) + fi + if test "${with_tcl_header+set}" = set ; then + ecos_tcl_incdir=${with_tcl_header} + elif test "${with_tcl+set}" = set ; then + ecos_tcl_incdir="${with_tcl}/include" + else + AC_MSG_ERROR(You must specify a Tcl installation with either --with-tcl= or --with-tcl-header=) + fi + if test "${with_tcl_lib+set}" = set; then + ecos_tcl_libdir=${with_tcl_lib} + elif test "${with_tcl+set}" = set; then + ecos_tcl_libdir="${with_tcl}/lib" + else + AC_MSG_ERROR(You must specify a Tcl installation with either --with-tcl= or --with-tcl-lib=) + fi + + dnl Sanity check, make sure that there is a tcl.h header file. + dnl If not then there is no point in proceeding. + if test \! -r "${ecos_tcl_incdir}/tcl.h" ; then + AC_MSG_ERROR([unable to locate Tcl header file tcl.h]) + fi + + ECOS_MSVC_PATH(ecos_tcl_incdir) + ECOS_MSVC_PATH(ecos_tcl_libdir) + ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_tcl_incdir}\"" + ecos_LIBS="${ecos_LIBS} tcl${with_tcl_version}.lib" + ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_tcl_libdir}\"" + + dnl FIXME: what libraries are needed for a tk application under VC++? + dnl and can the version be determined more accurately? + ecos_tk_libs="" + + else + dnl Try to find tclConfig.sh + possibles="" + if test "${with_tcl+set}" = set ; then + possibles="${with_tcl}/lib" + if test "${with_tcl_version+set}" = set ; then + possibles="${possibles} ${with_tcl}/lib/tcl${with_tcl_version}" + fi + fi + possibles="${possibles} ${prefix}/lib" + if test "${with_tcl_version+set}" = set ; then + possibles="${possibles} ${prefix}/lib/tcl${with_tcl_version}" + fi + possibles="${possibles} /usr/lib" + if test "${with_tcl_version+set}" = set ; then + possibles="${possibles} /usr/lib/tcl${with_tcl_version}" + fi + AC_FIND_FILE("tclConfig.sh", ${possibles}, tclconfig) + if test \! -r "${tclconfig}/tclConfig.sh" ; then + AC_MSG_ERROR(unable to locate Tcl configuration file tclConfig.sh) + else + . ${tclconfig}/tclConfig.sh + + dnl Now we need to figure out where to find the Tcl header files. + dnl tclConfig.sh may define a variable TCL_INC_DIR, otherwise + dnl use TCL_PREFIX/include + if test -z "${TCL_INC_DIR}" ; then + ecos_tcl_incdir="${TCL_PREFIX}/include" + else + ecos_tcl_incdir="${TCL_INC_DIR}" + fi + if test \! -r "${ecos_tcl_incdir}/tcl.h" ; then + AC_MSG_ERROR(unable to locate Tcl header file tcl.h) + else + dnl On Unix systems -I/usr/include is unnecessary, and can + dnl cause problems on hosts where gcc is not the platform's + dnl default compiler because of the use of unfixed headers. + dnl Hence it is explicitly removed here. + if test "${ecos_tcl_incdir}" != "/usr/include" ; then + ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_tcl_incdir}" + fi + fi + + dnl There should be a variable TCL_LIB_SPEC which defines + dnl exactly how to link with Tcl. Unfortunately this is not + dnl 100% guaranteed, so a backup solution is still needed. + dnl NOTE: there is also TCL_LIBS defining additional libraries + dnl such as -ldl. That may have to be added to ecos_LIBS. + if test -z "${TCL_LIB_SPEC}" -a "${with_tcl_version+set}" = set ; then + AC_FIND_FILE("libtcl${with_tcl_version}.a", ${possibles}, libtcl) + if test -r "${libtcl}/libtcl${with_tcl_version}.a" ; then + TCL_LIB_SPEC="-L${libtcl} -ltcl${with_tcl_version}" + fi + fi + if test -z "${TCL_LIB_SPEC}" ; then + AC_FIND_FILE("libtcl.a", ${possibles}, libtcl) + if test -r "${libtcl}/libtcl.a" ; then + TCL_LIB_SPEC="-L${libtcl} -ltcl" + fi + fi + if test -z "${TCL_LIB_SPEC}" ; then + AC_MSG_ERROR(${tclconfig}/tclConfig.sh does not define TCL_LIB_SPEC, and unable to find libtcl.a) + fi + ecos_LIBS="${ecos_LIBS} ${TCL_LIB_SPEC}" + + dnl Next, look for tkConfig.sh + possibles=`echo ${possibles} | sed -e 's,tcl,tk,g'` + AC_FIND_FILE("tkConfig.sh", ${possibles}, tkconfig) + if test \! -r "${tkconfig}/tkConfig.sh" ; then + AC_MSG_ERROR(unable to locate Tk config file tkConfig.sh) + else + . ${tkconfig}/tkConfig.sh + if test -z "${TK_INC_DIR}" ; then + if test "${TK_PREFIX}" = "/usr" ; then + ecos_tk_includes="${TK_XINCLUDES}" + else + ecos_tk_includes="-I${TK_PREFIX}/include ${TK_XINCLUDES}" + fi + else + ecos_tk_includes="-I${TK_INC_DIR} ${TK_XINCLUDES}" + fi + + dnl As with TCL_LIB_SPEC, TK_LIB_SPEC may be empty + if test -z "${TK_LIB_SPEC}" -a "${with_tcl_version+set}" = set ; then + AC_FIND_FILE("libtk${with_tcl_version}.a", ${possibles}, libtk) + if test -r "${libtk}/libtk${with_tcl_version}.a" ; then + TK_LIB_SPEC="-L${libtk} -ltk${with_tcl_version}" + fi + fi + if test -z "${TK_LIB_SPEC}" ; then + AC_FIND_FILE("libtk.a", ${possibles}, libtk) + if test -r "${libtk}/libtk.a" ; then + TK_LIB_SPEC="-L${libtk} -ltk" + fi + fi + if test -z "${TK_LIB_SPEC}" ; then + AC_MSG_ERROR(${tkconfig}/tkConfig.sh does not define TK_LIB_SPEC, and unable to find libtk.a) + fi + ecos_tk_libs="${TK_LIB_SPEC} ${TK_LIBS}" + fi + fi + fi + + AC_MSG_RESULT([-I${ecos_tcl_incdir} ${TCL_LIB_SPEC}]) + AC_SUBST(ecos_tk_includes) + AC_SUBST(ecos_tk_libs) +]) + +dnl ==================================================================== +dnl Search for the infrastructure headers. Usually these can be picked +dnl up from host/infra in the build tree. This macro updates +dnl ecos_INCLUDES, ecos_LDADD and ecos_LIBS appropriately. In addition +dnl it defines new variables ecos_infra_incdir and ecos_infra_libdir, +dnl useful for listing explicit dependencies. +dnl +dnl This macro should only be used in configure scripts that run after +dnl the infrastructure has been configured because it relies on the +dnl infra directory already having been created in the build tree. + +AC_DEFUN(ECOS_PATH_INFRA, [ + AC_MSG_CHECKING([for eCos host-side infrastructure]) + + dnl Where are we in the build tree? First assume that we are in the host + dnl tree, thus allowing configury of just the host-side. If that fails + dnl assume we can be anywhere. + infra_builddir="" + possibles=".. ../.. ../../.. ../../../.. ../../../../.." + AC_FIND_DIR("infra", ${possibles}, infra_builddir) + if test "${infra_builddir}" = "" ; then + possibles="../host ../../host ../../../host ../../../../host ../../../../../host ../../../../../../host" + AC_FIND_DIR("infra", ${possibles}, infra_builddir) + fi + if test "${infra_builddir}" != "" ; then + infra_builddir="${infra_builddir}/infra" + infra_builddir=`cd ${infra_builddir} && /bin/pwd` + fi + + ecos_infra_incdir="" + ecos_infra_libdir="" + ecos_infra_libs="" + + AC_ARG_WITH(infra-header,[ --with-infra-header= location of eCos infrastructure headers]) + AC_ARG_WITH(infra-lib,[ --with-infra-lib= location of eCos infrastructure library]) + AC_ARG_WITH(infra,[ --with-infra= location of eCos infrastructure installation]) + + if test "${with_infra_header+set}" = "set"; then + ecos_infra_incdir="${with_infra_header}" + elif test "${with_infra+set}" = "set"; then + ecos_infra_incdir="${with_infra}/include" + elif test "${infra_builddir}" != "" ; then + ecos_infra_incdir="${infra_builddir}" + else + AC_MSG_ERROR([infrastructure headers not found]) + fi + if test "${MSVC}" = "yes" ; then + ecos_msvc_infra_incdir=${ecos_infra_incdir} + ECOS_MSVC_PATH(ecos_msvc_infra_incdir) + ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_msvc_infra_incdir}\"" + else + ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_infra_incdir}" + fi + + if test "${with_infra_lib+set}" = "set"; then + ecos_infra_libdir="${with_infra_lib}" + elif test "${with_infra+set}" = "set"; then + ecos_infra_libdir="${with_infra}/lib" + elif test "${infra_builddir}" != "" ; then + ecos_infra_libdir="${infra_builddir}" + else + AC_MSG_ERROR([infrastructure library not found]) + fi + if test "${MSVC}" = "yes" ; then + ecos_msvc_infra_libdir=${ecos_infra_libdir} + ECOS_MSVC_PATH(ecos_msvc_infra_libdir) + ecos_LIBS="${ecos_LIBS} cyginfra.lib" + ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_msvc_infra_libdir}\"" + else + ecos_LIBS="${ecos_LIBS} -lcyginfra" + ecos_LDADD="${ecos_LDADD} -L${ecos_infra_libdir}" + fi + + AC_SUBST(ecos_infra_incdir) + AC_SUBST(ecos_infra_libdir) + AC_MSG_RESULT(-I[${ecos_infra_incdir} -L${ecos_infra_libdir}]) +]) + +dnl ==================================================================== +dnl And a very similar macro for libcdl, but note that the headers +dnl are in the source tree rather than the build tree. + +AC_DEFUN(ECOS_PATH_LIBCDL, [ + AC_MSG_CHECKING([for libcdl]) + + dnl Where are we in the source tree? + libcdl_srcdir="" + possibles="${srcdir}/.. ${srcdir}/../.. ${srcdir}/../../.. ${srcdir}/../../../.. ${srcdir}/../../../../.." + AC_FIND_DIR("libcdl", ${possibles}, libcdl_srcdir) + if test "${libcdl_srcdir}" = "" ; then + possibles="${srcdir}/../host ${srcdir}/../../host ${srcdir}/../../../host ${srcdir}/../../../../host ${srcdir}/../../../../../host ${srcdir}/../../../../../../host" + AC_FIND_DIR("libcdl", ${possibles}, libcdl_srcdir) + fi + if test "${libcdl_srcdir}" != "" ; then + libcdl_srcdir="${libcdl_srcdir}/libcdl" + libcdl_srcdir=`cd ${libcdl_srcdir} && /bin/pwd` + fi + + dnl And where are we in the build tree? + libcdl_builddir="" + possibles=".. ../.. ../../.. ../../../.. ../../../../.." + AC_FIND_DIR("libcdl", ${possibles}, libcdl_builddir) + if test "${libcdl_builddir}" = "" ; then + possibles="../host ../../host ../../../host ../../../../host ../../../../../host ../../../../../../host" + AC_FIND_DIR("libcdl", ${possibles}, libcdl_builddir) + fi + if test "${libcdl_builddir}" != "" ; then + libcdl_builddir="${libcdl_builddir}/libcdl" + libcdl_builddir=`cd ${libcdl_builddir} && /bin/pwd` + fi + + ecos_libcdl_incdir="" + ecos_libcdl_libdir="" + ecos_libcdl_libs="" + + AC_ARG_WITH(libcdl-header,[ --with-libcdl-header= location of eCos libcdl headers]) + AC_ARG_WITH(libcdl-lib,[ --with-libcdl-lib= location of eCos libcdl library]) + AC_ARG_WITH(libcdl,[ --with-libcdl= location of eCos libcdl installation]) + + if test "${with_libcdl_header+set}" = "set"; then + ecos_libcdl_incdir="${with_libcdl_header}" + elif test "${with_libcdl+set}" = "set"; then + ecos_libcdl_incdir="${with_libcdl}/include" + elif test "${libcdl_srcdir}" != "" ; then + ecos_libcdl_incdir="${libcdl_srcdir}" + fi + if test \! -r "${ecos_libcdl_incdir}/cdl.hxx" ; then + AC_MSG_ERROR([libcdl headers not found]) + fi + if test "${MSVC}" = "yes" ; then + ecos_msvc_libcdl_incdir="${ecos_libcdl_incdir}" + ECOS_MSVC_PATH(ecos_msvc_libcdl_incdir) + ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_msvc_libcdl_incdir}\"" + else + ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_libcdl_incdir}" + fi + + if test "${with_libcdl_lib+set}" = "set"; then + ecos_libcdl_libdir="${with_libcdl_lib}" + elif test "${with_libcdl+set}" = "set"; then + ecos_libcdl_libdir="${with_libcdl}/lib" + elif test "${libcdl_builddir}" != "" ; then + ecos_libcdl_libdir="${libcdl_builddir}" + else + AC_MSG_ERROR([libcdl library not found]) + fi + if test "${MSVC}" = "yes" ; then + ecos_msvc_libcdl_libdir=${ecos_libcdl_libdir} + ECOS_MSVC_PATH(ecos_msvc_libcdl_libdir) + ecos_LIBS="${ecos_LIBS} cdl.lib" + ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_msvc_libcdl_libdir}\"" + else + ecos_LIBS="${ecos_LIBS} -lcdl" + ecos_LDADD="${ecos_LDADD} -L${ecos_libcdl_libdir}" + fi + + AC_SUBST(ecos_libcdl_incdir) + AC_SUBST(ecos_libcdl_libdir) + AC_MSG_RESULT([-I${ecos_libcdl_incdir} -L${ecos_libcdl_libdir}]) +]) + +dnl ==================================================================== +dnl Look for a 64 bit data type. It is necessary to check both C and C++ +dnl compilers. +dnl +dnl A better implementation would check whether or not AC_PROG_CC and +dnl AC_PROG_CXX have been invoked and only test the appropriate +dnl compiler. +dnl +dnl When cross-compiling, default to long long on the assumption that +dnl gcc/g++ must be used and long long is likely to be the 64 bit data +dnl type. This is not guaranteed, but sufficiently likely to meet +dnl the requirements for the time being. The CHECK_SIZEOF() macro +dnl might be another way to get the desired information. + +AC_DEFUN(ECOS_TYPE_64bit, [ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_PROG_CXX]) + + AC_CACHE_CHECK("for a 64 bit data type",ecos_cv_type_64bit,[ + for type in "long" "long long" "__int64"; do + AC_LANG_SAVE + AC_LANG_C + AC_TRY_RUN([ + main() { + return 8 != sizeof($type); + } + ],ctype_64bit=$type,ctype_64bit="unknown",ctype_64bit="long long") + AC_LANG_CPLUSPLUS + AC_TRY_RUN([ + int main(int argc, char ** argv) { + return 8 != sizeof($type); + } + ],cxxtype_64bit=$type,cxxtype_64bit="unknown",cxxtype_64bit="long long") + AC_LANG_RESTORE + if test "${ctype_64bit}" = "${type}" -a "${cxxtype_64bit}" = "${type}"; then + ecos_cv_type_64bit="${type}" + break + fi + done + ]) + if test "${ecos_cv_type_64bit}" = ""; then + AC_MSG_ERROR(Unable to figure out how to do 64 bit arithmetic) + else + if test "${ecos_cv_type_64bit}" != "long long"; then + AC_DEFINE_UNQUOTED(cyg_halint64,${ecos_cv_type_64bit}) + AC_DEFINE_UNQUOTED(cyg_halcount64,${ecos_cv_type_64bit}) + fi + fi +]) + +dnl ==================================================================== +dnl Check that both the C and C++ compilers support __PRETTY_FUNCTION__ + +AC_DEFUN(ECOS_C_PRETTY_FUNCTION,[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_PROG_CXX]) + + AC_CACHE_CHECK("for __PRETTY_FUNCTION__ support",ecos_cv_c_pretty_function,[ + AC_LANG_SAVE + AC_LANG_C + AC_TRY_LINK( + [#include ], + [puts(__PRETTY_FUNCTION__);], + c_ok="yes", + c_ok="no" + ) + AC_LANG_CPLUSPLUS + AC_TRY_LINK( + [#include ], + [puts(__PRETTY_FUNCTION__);], + cxx_ok="yes", + cxx_ok="no" + ) + AC_LANG_RESTORE + if test "${c_ok}" = "yes" -a "${cxx_ok}" = "yes"; then + ecos_cv_c_pretty_function="yes" + fi + ]) + if test "${ecos_cv_c_pretty_function}" = "yes"; then + AC_DEFINE(CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO) + fi +]) + +dnl ==================================================================== +dnl During installation eCos package-specific host-side code should be +dnl versioned in the same way as the packages themselves, allowing +dnl different versions to coexist in one installation. This is analogous +dnl to having multiple versions of a shared library installed so that +dnl applications can load whichever one they were linked with. +dnl +dnl To support all this the host-side code needs access to a number +dnl of directory names: +dnl ECOS_REPOSITORY e.g. ~/ecc/ecc +dnl PACKAGE_DIR e.g. hal/synth/arch +dnl PACKAGE_VERSION e.g. current +dnl PACKAGE_INSTALL e.g. hal/synth/arch/current +dnl +dnl These, together with the standard variable libexecdir, allow +dnl the host-side code to navigate around both source and install +dnl trees. + +AC_DEFUN(ECOS_PACKAGE_DIRS,[ + + dnl srcdir will be something like /packages///host + package_dir=`cd ${srcdir} && /bin/pwd` + PACKAGE_VERSION=`dirname ${package_dir}` + PACKAGE_VERSION=`basename ${PACKAGE_VERSION}` + + dnl Now look for an "acsupport" directory as a good way of identifying + dnl the root of the repository. Assume that this does not clash with + dnl any real packages in the repository. Also assume that no silly games + dnl are being played with symlinks. + package_dir=`dirname ${package_dir}` + package_dir=`dirname ${package_dir}` + + possibles="${package_dir}/.. ${package_dir}/../.. ${package_dir}/../../.. ${package_dir}/../../../.." + possibles="${possibles} ${package_dir}/../../../../.. ${package_dir}/../../../../../.." + AC_FIND_DIR("acsupport", ${possibles}, repository_root) + if test "${repository_root}" = "" ; then + AC_MSG_ERROR([Failed to identify this package's position within the eCos repository]) + fi + dnl repository_root will still contain the ..'s, instead of an absolute path + ECOS_REPOSITORY=`cd "${repository_root}/packages/pkgconf/.." && /bin/pwd` + + dnl Now we have two absolute paths, so just remove one from the other + PACKAGE_DIR=`echo ${package_dir} | sed -e "s:${ECOS_REPOSITORY}/::"` + + dnl To avoid creating too many subdirectories on the host-side, turn + dnl e.g. hal/synth/arch into hal_synth_arch. Theoretically this could + dnl go wrong because multiple packages could map onto the same string, + dnl but in practice there should be a net reduction in complexity. + dnl bartv: / to _ conversion disabled for now, 5 March 2002 + PACKAGE_INSTALL="${PACKAGE_DIR}/${PACKAGE_VERSION}" + dnl PACKAGE_INSTALL=`echo ${PACKAGE_INSTALL} | sed -e "s:/:_:g"` + + AC_SUBST(ECOS_REPOSITORY) + AC_SUBST(PACKAGE_DIR) + AC_SUBST(PACKAGE_VERSION) + AC_SUBST(PACKAGE_INSTALL) +]) diff --git a/tools/acsupport/config.guess b/tools/acsupport/config.guess new file mode 100755 index 00000000..20c971aa --- /dev/null +++ b/tools/acsupport/config.guess @@ -0,0 +1,1171 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 +# Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner . +# Please send patches to . +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit system type (host/target name). +# +# Only a few systems have been added to this list; please add others +# (but try to keep the structure clean). +# + +# Use $HOST_CC if defined. $CC may point to a cross-compiler +if test x"$CC_FOR_BUILD" = x; then + if test x"$HOST_CC" != x; then + CC_FOR_BUILD="$HOST_CC" + else + if test x"$CC" != x; then + CC_FOR_BUILD="$CC" + else + CC_FOR_BUILD=cc + fi + fi +fi + + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 8/24/94.) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # Netbsd (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # Determine the machine/vendor (is the vendor relevant). + case "${UNAME_MACHINE}" in + amiga) machine=m68k-cbm ;; + arm32) machine=arm-unknown ;; + atari*) machine=m68k-atari ;; + sun3*) machine=m68k-sun ;; + mac68k) machine=m68k-apple ;; + macppc) machine=powerpc-apple ;; + hp3[0-9][05]) machine=m68k-hp ;; + ibmrt|romp-ibm) machine=romp-ibm ;; + *) machine=${UNAME_MACHINE}-unknown ;; + esac + # The Operating System including object format. + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + # The OS release + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `./$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + esac + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-cbm-sysv4 + exit 0;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i?86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:4) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=4.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + sed 's/^ //' << EOF >$dummy.c + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + rm -f $dummy.c $dummy + esac + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i?86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + hppa*:OpenBSD:*:*) + echo hppa-unknown-openbsd + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F300:UNIX_System_V:*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + F301:UNIX_System_V:*:*) + echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i?86:BSD/386:*:* | i?86:BSD/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + if test -x /usr/bin/objformat; then + if test "elf" = "`/usr/bin/objformat`"; then + echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` + exit 0 + fi + fi + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:Linux:*:*) + + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + ld_help_string=`cd /; ld --help 2>&1` + ld_supported_emulations=`echo $ld_help_string \ + | sed -ne '/supported emulations:/!d + s/[ ][ ]*/ /g + s/.*supported emulations: *// + s/ .*// + p'` + case "$ld_supported_emulations" in + *ia64) + echo "${UNAME_MACHINE}-unknown-linux" + exit 0 + ;; + i?86linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 + ;; + i?86coff) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 + ;; + sparclinux) + echo "${UNAME_MACHINE}-unknown-linux-gnuaout" + exit 0 + ;; + armlinux) + echo "${UNAME_MACHINE}-unknown-linux-gnuaout" + exit 0 + ;; + elf32arm*) + echo "${UNAME_MACHINE}-unknown-linux-gnuoldld" + exit 0 + ;; + armelf_linux*) + echo "${UNAME_MACHINE}-unknown-linux-gnu" + exit 0 + ;; + m68klinux) + echo "${UNAME_MACHINE}-unknown-linux-gnuaout" + exit 0 + ;; + elf32ppc | elf32ppclinux) + # Determine Lib Version + cat >$dummy.c < +#if defined(__GLIBC__) +extern char __libc_version[]; +extern char __libc_release[]; +#endif +main(argc, argv) + int argc; + char *argv[]; +{ +#if defined(__GLIBC__) + printf("%s %s\n", __libc_version, __libc_release); +#else + printf("unkown\n"); +#endif + return 0; +} +EOF + LIBC="" + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy | grep 1\.99 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.c $dummy + echo powerpc-unknown-linux-gnu${LIBC} + exit 0 + ;; + esac + + if test "${UNAME_MACHINE}" = "alpha" ; then + cat <$dummy.s + .data + \$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main + main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + LIBC="" + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `./$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + esac + + objdump --private-headers $dummy | \ + grep ld.so.1 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 + elif test "${UNAME_MACHINE}" = "mips" ; then + cat >$dummy.c < /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif +#ifdef __MIPSEB__ + printf ("%s-unknown-linux-gnu\n", argv[1]); +#endif +#ifdef __MIPSEL__ + printf ("%sel-unknown-linux-gnu\n", argv[1]); +#endif + return 0; +} +EOF + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + elif test "${UNAME_MACHINE}" = "s390"; then + echo s390-ibm-linux && exit 0 + else + # Either a pre-BFD a.out linker (linux-gnuoldld) + # or one that does not give us useful --help. + # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. + # If ld does not provide *any* "supported emulations:" + # that means it is gnuoldld. + echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" + test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 + + case "${UNAME_MACHINE}" in + i?86) + VENDOR=pc; + ;; + *) + VENDOR=unknown; + ;; + esac + # Determine whether the default compiler is a.out or elf + cat >$dummy.c < +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + fi ;; +# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions +# are messed up and put the nodename in both sysname and nodename. + i?86:DYNIX/ptx:4*:*) + echo i386-sequent-sysv4 + exit 0 ;; + i?86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i?86:*:5:7*) + # Fixed at (any) Pentium or better + UNAME_MACHINE=i586 + if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then + echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + fi + exit 0 ;; + i?86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + i?86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:*:6*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + Power*:Mac*OS:*:*) + echo powerpc-apple-macos${UNAME_RELEASE} + exit 0 ;; + *:Mac*OS:*:*) + echo ${UNAME_MACHINE}-apple-macos${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-qnx-qnx${UNAME_VERSION} + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +#if !defined (ultrix) + printf ("vax-dec-bsd\n"); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +#echo '(Unable to guess system type)' 1>&2 + +exit 1 diff --git a/tools/acsupport/config.sub b/tools/acsupport/config.sub new file mode 100755 index 00000000..5d756240 --- /dev/null +++ b/tools/acsupport/config.sub @@ -0,0 +1,1250 @@ +#! /bin/sh +# Configuration validation subroutine script, version 1.1. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 +# Free Software Foundation, Inc. +# +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner . +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +if [ x$1 = x ] +then + echo Configuration name missing. 1>&2 + echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 + echo "or $0 ALIAS" 1>&2 + echo where ALIAS is a recognized configuration type. 1>&2 + exit 1 +fi + +# First pass through any local machine types. +case $1 in + *local*) + echo $1 + exit 0 + ;; + *) + ;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + linux-gnu*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ + | 580 | i960 | h8300 \ + | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ + | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ + | alphaev6[78] \ + | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ + | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ + | mips64orion | mips64orionel | mipstx39 | mipstx39el \ + | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ + | mips64vr5000 | miprs64vr5000el | mcore \ + | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ + | thumb | d10v | fr30 | avr) + basic_machine=$basic_machine-unknown + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i[34567]86) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + # FIXME: clean up the formatting here. + vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ + | xmp-* | ymp-* \ + | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ + | alphaev6[78]-* \ + | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ + | clipper-* | orion-* \ + | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ + | mipstx39-* | mipstx39el-* | mcore-* \ + | f301-* | armv*-* | s390-* | sv1-* | t3e-* \ + | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ + | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* ) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-cbm + ;; + amigaos | amigados) + basic_machine=m68k-cbm + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-cbm + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [ctj]90-cray) + basic_machine=c90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[34567]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i[34567]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i[34567]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i[34567]86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + i386-go32 | go32) + basic_machine=i386-unknown + os=-go32 + ;; + i386-mingw32 | mingw32) + basic_machine=i386-unknown + os=-mingw32 + ;; + i386-qnx | qnx) + basic_machine=i386-qnx + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + msdos) + basic_machine=i386-unknown + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + np1) + basic_machine=np1-gould + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexen) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexen-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=rs6000-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=t3e-cray + os=-unicos + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sparc | sparcv9) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + c4x*) + basic_machine=c4x-none + os=-coff + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -qnx) + os=-qnx4 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -*MiNT) + os=-mint + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f301-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -*MiNT) + vendor=atari + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os diff --git a/tools/acsupport/install-sh b/tools/acsupport/install-sh new file mode 100755 index 00000000..e9de2384 --- /dev/null +++ b/tools/acsupport/install-sh @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/tools/acsupport/ltconfig b/tools/acsupport/ltconfig new file mode 100755 index 00000000..ab304fd3 --- /dev/null +++ b/tools/acsupport/ltconfig @@ -0,0 +1,2822 @@ +#! /bin/sh + +# ltconfig - Create a system-specific libtool. +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Gordon Matzigkeit , 1996 +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A lot of this script is taken from autoconf-2.10. + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} +echo=echo +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec "$SHELL" "$0" --no-reexec ${1+"$@"} +fi + +# Find the correct PATH separator. Usually this is `:', but +# DJGPP uses `;' like DOS. +if test "X${PATH_SEPARATOR+set}" != "Xset"; then + UNAME=${UNAME-`uname 2>/dev/null`} + case X$UNAME in + *-DOS) PATH_SEPARATOR=';' ;; + *) PATH_SEPARATOR=':' ;; + esac +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +if test "X${echo_test_string+set}" != "Xset"; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string="`eval $cmd`") 2>/dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" != 'X\t' || + test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH /usr/ucb; do + if test -f $dir/echo && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif test -f /bin/ksh && test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running ltconfig again with it. + ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}" + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf "%s\n"' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + # Cool, printf works + : + elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && + test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL" + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && + test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# The name of this program. +progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` + +# Constants: +PROGRAM=ltconfig +PACKAGE=libtool +VERSION=1.2f +TIMESTAMP=" (1.385 1999/03/15 17:24:54)" +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5' +rm="rm -f" + +help="Try \`$progname --help' for more information." + +# Global variables: +default_ofile=libtool +can_build_shared=yes +enable_shared=yes +# All known linkers require a `.a' archive for static linking. +enable_static=yes +enable_fast_install=yes +enable_dlopen=unknown +ltmain= +silent= +srcdir= +ac_config_guess= +ac_config_sub= +host= +nonopt= +ofile="$default_ofile" +verify_host=yes +with_gcc=no +with_gnu_ld=no +need_locks=yes +ac_ext=c +objext=o +libext=a +cache_file= + +old_AR="$AR" +old_CC="$CC" +old_CFLAGS="$CFLAGS" +old_CPPFLAGS="$CPPFLAGS" +old_LD="$LD" +old_LN_S="$LN_S" +old_NM="$NM" +old_RANLIB="$RANLIB" +old_DLLTOOL="$DLLTOOL" +old_AS="$AS" + +# Parse the command line options. +args= +prev= +for option +do + case "$option" in + -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$option" + prev= + continue + fi + + case "$option" in + --help) cat <&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + if test -z "$ltmain"; then + ltmain="$option" + elif test -z "$host"; then +# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 +# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then +# echo "$progname: warning \`$option' is not a valid host type" 1>&2 +# fi + host="$option" + else + echo "$progname: too many arguments" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac +done + +if test -z "$ltmain"; then + echo "$progname: you must specify a LTMAIN file" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +if test ! -f "$ltmain"; then + echo "$progname: \`$ltmain' does not exist" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +# Quote any args containing shell metacharacters. +ltconfig_args= +for arg +do + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ltconfig_args="$ltconfig_args '$arg'" ;; + *) ltconfig_args="$ltconfig_args $arg" ;; + esac +done + +# A relevant subset of AC_INIT. + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 5 compiler messages saved in config.log +# 6 checking for... messages and results +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>>./config.log + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +if test -n "$cache_file" && test -r "$cache_file"; then + echo "loading cache $cache_file within ltconfig" + . $cache_file +fi + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +if test -z "$srcdir"; then + # Assume the source directory is the same one as the path to LTMAIN. + srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'` + test "$srcdir" = "$ltmain" && srcdir=. +fi + +trap "$rm conftest*; exit 1" 1 2 15 +if test "$verify_host" = yes; then + # Check for config.guess and config.sub. + ac_aux_dir= + for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/config.guess; then + ac_aux_dir=$ac_dir + break + fi + done + if test -z "$ac_aux_dir"; then + echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 + echo "$help" 1>&2 + exit 1 + fi + ac_config_guess=$ac_aux_dir/config.guess + ac_config_sub=$ac_aux_dir/config.sub + + # Make sure we can run config.sub. + if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then : + else + echo "$progname: cannot run $ac_config_sub" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 + + host_alias=$host + case "$host_alias" in + "") + if host_alias=`$SHELL $ac_config_guess`; then : + else + echo "$progname: cannot guess host type; you must specify one" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac + host=`$SHELL $ac_config_sub $host_alias` + echo "$ac_t$host" 1>&6 + + # Make sure the host verified. + test -z "$host" && exit 1 + +elif test -z "$host"; then + echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 + echo "$help" 1>&2 + exit 1 +else + host_alias=$host +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case "$host_os" in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +case "$host_os" in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR cru $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +# Set a sane default for `AR'. +test -z "$AR" && AR=ar + +# If RANLIB is not set, then run the test. +if test "${RANLIB+set}" != "set"; then + result=no + + echo $ac_n "checking for ranlib... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/ranlib; then + RANLIB="ranlib" + result="ranlib" + break + fi + done + IFS="$save_ifs" + + echo "$ac_t$result" 1>&6 +fi + +if test -n "$RANLIB"; then + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" +fi + +# Set sane defaults for `DLLTOOL' and `AS', used on cygwin. +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$AS" && AS=as + +# Check to see if we are using GCC. +if test "$with_gcc" != yes || test -z "$CC"; then + # If CC is not set, then try to find GCC or a usable CC. + if test -z "$CC"; then + echo $ac_n "checking for gcc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH; do + IFS="$save_ifs" + test -z "$dir" && dir=. + if test -f $dir/gcc; then + CC="gcc" + break + fi + done + IFS="$save_ifs" + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + fi + + # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". + if test -z "$CC"; then + echo $ac_n "checking for cc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + cc_rejected=no + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/cc; then + if test "$dir/cc" = "/usr/ucb/cc"; then + cc_rejected=yes + continue + fi + CC="cc" + break + fi + done + IFS="$save_ifs" + if test $cc_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same name, so the bogon will be chosen + # first if we set CC to just the name; use the full file name. + shift + set dummy "$dir/cc" "$@" + shift + CC="$@" + fi + fi + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$CC"; then + echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 + exit 1 + fi + fi + + # Now see if the compiler is really GCC. + with_gcc=no + echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 + echo "$progname:564: checking whether we are using GNU C" >&5 + + $rm conftest.c + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + with_gcc=yes + fi + $rm conftest.c + echo "$ac_t$with_gcc" 1>&6 +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for object suffix... $ac_c" 1>&6 +$rm conftest* +echo 'int i = 1;' > conftest.c +echo "$progname:586: checking for object suffix" >& 5 +if { (eval echo $progname:587: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + for ac_file in conftest.*; do + case $ac_file in + *.c) ;; + *) objext=`echo $ac_file | sed -e s/conftest.//` ;; + esac + done +else + cat conftest.err 1>&5 + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 +fi +$rm conftest* +echo "$ac_t$objext" 1>&6 + +echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 +pic_flag= +special_shlib_compile_flags= +wl= +link_static_flag= +no_builtin_flag= + +if test "$with_gcc" = yes; then + wl='-Wl,' + link_static_flag='-static' + + case "$host_os" in + beos* | irix5* | irix6* | osf3* | osf4*) + # PIC is the default for these OSes. + ;; + aix*) + # Below there is a dirty hack to force normal static linking with -ldl + # The problem is because libdl dynamically linked with both libc and + # libC (AIX C++ library), which obviously doesn't included in libraries + # list by gcc. This cause undefined symbols with -static flags. + # This hack allows C programs to be linked with "-static -ldl", but + # we not sure about C++ programs. + link_static_flag="$link_static_flag ${wl}-lC" + ;; + cygwin* | mingw* | os2*) + # We can build DLLs from non-PIC. + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + pic_flag='-m68020 -resident32 -malways-restore-a4' + ;; + *) + pic_flag='-fPIC' + ;; + esac +else + # PORTME Check for PIC flags for the system compiler. + case "$host_os" in + aix3* | aix4*) + # All AIX code is PIC. + link_static_flag='-bnso -bI:/lib/syscalls.exp' + ;; + + hpux9* | hpux10* | hpux11*) + # Is there a better link_static_flag that works with the bundled CC? + wl='-Wl,' + link_static_flag="${wl}-a ${wl}archive" + pic_flag='+Z' + ;; + + irix5* | irix6*) + wl='-Wl,' + link_static_flag='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + cygwin* | mingw* | os2*) + # We can build DLLs from non-PIC. + ;; + + osf3* | osf4*) + # All OSF/1 code is PIC. + wl='-Wl,' + link_static_flag='-non_shared' + ;; + + sco3.2v5*) + pic_flag='-Kpic' + link_static_flag='-dn' + special_shlib_compile_flags='-belf' + ;; + + solaris*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + sunos4*) + pic_flag='-PIC' + link_static_flag='-Bstatic' + wl='-Qoption ld ' + ;; + + sysv4.2uw2* | sysv4.3* | sysv5*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + uts4*) + pic_flag='-pic' + link_static_flag='-Bstatic' + ;; + + *) + can_build_shared=no + ;; + esac +fi + +if test -n "$pic_flag"; then + echo "$ac_t$pic_flag" 1>&6 + + # Check to make sure the pic_flag actually works. + echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $pic_flag -DPIC" + echo "$progname:717: checking if $compiler PIC flag $pic_flag works" >&5 + if { (eval echo $progname:718: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + case "$host_os" in + hpux9* | hpux10* | hpux11*) + # On HP-UX, both CC and GCC only warn that PIC is supported... then they + # create non-PIC objects. So, if there were any warnings, we assume that + # PIC is not supported. + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + can_build_shared=no + pic_flag= + else + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + fi + ;; + *) + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + ;; + esac + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + can_build_shared=no + pic_flag= + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + echo "$ac_t"none 1>&6 +fi + +# Check to see if options -o and -c are simultaneously supported by compiler +echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6 +$rm conftest* +echo "int some_variable = 0;" > conftest.c +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -c -o conftest2.o" +echo "$progname:760: checking if $compiler supports -c -o file.o" >&5 +if { (eval echo $progname:761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest2.o; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + compiler_c_o=no + else + echo "$ac_t"yes 1>&6 + compiler_c_o=yes + fi +else + # Append any errors to the config.log. + cat conftest.err 1>&5 + compiler_c_o=no + echo "$ac_t"no 1>&6 +fi +CFLAGS="$save_CFLAGS" +$rm conftest* + +if test x"$compiler_c_o" = x"yes"; then + # Check to see if we can write to a .lo + echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -c -o conftest.lo" + echo "$progname:788: checking if $compiler supports -c -o file.lo" >&5 +if { (eval echo $progname:789: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + compiler_o_lo=no + else + echo "$ac_t"yes 1>&6 + compiler_o_lo=yes + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + compiler_o_lo=no + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + compiler_o_lo=no +fi + +# Check to see if we can do hard links to lock some files if needed +hard_links="nottested" +if test "$compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$ac_t$hard_links" 1>&6 + $rm conftest* + if test "$hard_links" = no; then + echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2 + need_locks=warn + fi +else + need_locks=no +fi + +if test "$with_gcc" = yes; then + # Check to see if options -fno-rtti -fno-exceptions are supported by compiler + echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c" + echo "$progname:840: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 + if { (eval echo $progname:841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + compiler_rtti_exceptions=no + else + echo "$ac_t"yes 1>&6 + compiler_rtti_exceptions=yes + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + compiler_rtti_exceptions=no + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* + + if test "$compiler_rtti_exceptions" = "yes"; then + no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' + else + no_builtin_flag=' -fno-builtin' + fi + +fi + +# Check for any special shared library compilation flags. +if test -n "$special_shlib_compile_flags"; then + echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : + else + echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 + can_build_shared=no + fi +fi + +echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 +$rm conftest* +echo 'main(){return(0);}' > conftest.c +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $link_static_flag" +echo "$progname:884: checking if $compiler static flag $link_static_flag works" >&5 +if { (eval echo $progname:885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + echo "$ac_t$link_static_flag" 1>&6 +else + echo "$ac_t"none 1>&6 + link_static_flag= +fi +LDFLAGS="$save_LDFLAGS" +$rm conftest* + +if test -z "$LN_S"; then + # Check to see if we can use ln -s, or we need hard links. + echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 + $rm conftestdata + if ln -s X conftestdata 2>/dev/null; then + $rm conftestdata + LN_S="ln -s" + else + LN_S=ln + fi + if test "$LN_S" = "ln -s"; then + echo "$ac_t"yes 1>&6 + else + echo "$ac_t"no 1>&6 + fi +fi + +# Make sure LD is an absolute path. +if test -z "$LD"; then + ac_prog=ld + if test "$with_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 + echo "$progname:917: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + /* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we are not using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld... $ac_c" 1>&6 + echo "$progname:941: checking for GNU ld" >&5 + else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 + echo "$progname:944: checking for non-GNU ld" >&5 + fi + + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog"; then + LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + fi + + if test -n "$LD"; then + echo "$ac_t$LD" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$LD"; then + echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 + exit 1 + fi +fi + +# Check to see if it really is or is not GNU ld. +echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 +# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + with_gnu_ld=yes +else + with_gnu_ld=no +fi +echo "$ac_t$with_gnu_ld" 1>&6 + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 + +allow_undefined_flag= +no_undefined_flag= +need_lib_prefix=unknown +need_version=unknown +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +archive_cmds= +archive_expsym_cmds= +old_archive_from_new_cmds= +export_dynamic_flag_spec= +whole_archive_flag_spec= +thread_safe_flag_spec= +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= +always_export_symbols=no +export_symbols_cmds='$NM $libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' +# include_expsyms should be a list of space-separated symbols to be *always* +# included in the symbol list +include_expsyms= +# exclude_expsyms can be an egrep regular expression of symbols to exclude +# it will be wrapped by ` (' and `)$', so one must not match beginning or +# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', +# as well as any symbol that contains `d'. +exclude_expsyms= + +case "$host_os" in +cygwin* | mingw*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$with_gcc" != yes; then + with_gnu_ld=no + fi + ;; + +freebsd2* | sunos4*) + exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + ;; + +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case "$host_os" in + aix3* | aix4*) + # On AIX, the GNU linker is very broken + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts' + wlarc= + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + beos*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=yes + + # Extract the symbol export list from an `--export-all' def file, + # then regenerate the def file from the symbol export list, so that + # the compiled dll only exports the symbol export list. + export_symbols_cmds='rm -f $objdir/$soname-ltdll.c~ + sed -e "/^# \/\* ltdll.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ + (cd $objdir && $CC -c $soname-ltdll.c)~ + $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs~ + sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols' + + archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~ + _lt_hint=1; + for symbol in `cat $export_symbols`; do + echo " \$symbol @ \$_lt_hint ; " >> $objdir/$soname-def; + _lt_hint=`expr 1 + \$_lt_hint`; + done~ + $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ + $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ + $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts' + + old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' + ;; + + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case "$host_os" in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$with_gcc" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4*) + allow_undefined_flag= + if test "$with_gcc" = yes; then + if strings `${CC} -print-prog-name=collect2` | \ + grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + fi + archive_cmds='$CC -shared ${wl}-bnoentry -o $objdir/$soname $libobjs $deplibs $linkopts' + else + always_export_symbols=yes + archive_expsym_cmds='$CC -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bM:SRE ${wl}-bnoentry' + hardcode_direct=yes + fi + hardcode_minus_L=yes + # Though LIBPATH variable hardcodes shlibpath into executable, + # it doesn't affect searching for -l* libraries; this confuses + # tests in mdemo. + hardcode_shlibpath_var=unsupported + hardcode_libdir_flag_spec='-L$libdir' + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + + cygwin* | mingw*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs' + fix_srcfile_path='`cygpath -w $srcfile`' + ;; + + freebsd1*) + ld_shlibs=no + can_build_shared=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_minus_L=no # verified on 2.2.6 + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + ;; + + hpux9*) + archive_cmds='$rm $objdir/$soname~$LD -b +s +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10* | hpux11*) + archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + if test "$with_gcc" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF + fi + hardcode_libdir_flag_spec='${wl}-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + openbsd*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' + ;; + + osf3* | osf4*) + if test "$with_gcc" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + ;; + + sunos4*) + # Why do we need -Bstatic? To avoid inter-library dependencies, maybe... + if test "$with_gcc" = yes; then + # Use -fPIC here because libgcc is multilibbed + archive_cmds='$CC -shared ${wl}-Bstatic -fPIC -o $lib $libobjs $deplibs $linkopts' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=no + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + can_build_shared=no + ;; + esac +fi +echo "$ac_t$ld_shlibs" 1>&6 + +if test -z "$NM"; then + echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 + case "$NM" in + /* | [A-Za-z]:[/\\]*) ;; # Let the user override the test with a path. + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -p" + break + else + NM=${NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$NM" && NM=nm + ;; + esac + echo "$ac_t$NM" 1>&6 +fi + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" + +# Define system-specific variables. +case "$host_os" in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'" + ;; +irix*) + symcode='[BCDEGRST]' + ;; +solaris*) + symcode='[BDT]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[ABCDGISTW]' +fi + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + $rm conftest* + cat > conftest.c <&5 + if { (eval echo $progname:1448: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then + # Now try to grab the symbols. + nlist=conftest.nm + if { echo "$progname:1451: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.c +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c' + + cat <> conftest.c +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c + cat <<\EOF >> conftest.c + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$objext conftestm.$objext + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="conftestm.$objext" + CFLAGS="$CFLAGS$no_builtin_flag" + if { (eval echo $progname:1503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + pipe_works=yes + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + LIBS="$save_LIBS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + $rm conftest* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + global_symbol_pipe= + fi +done +echo "$ac_t$pipe_works" 1>&6 + +if test -z "$global_symbol_pipe"; then + global_symbol_to_cdecl= +fi + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && \ + test "$hardcode_minus_L" != no && \ + test "$hardcode_shlibpath_var" != no; then + + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$ac_t$hardcode_action" 1>&6 + + +reload_flag= +reload_cmds='$LD$reload_flag -o $output$reload_objs' +echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 +# PORTME Some linkers may need a different reload flag. +reload_flag='-r' +echo "$ac_t$reload_flag" 1>&6 +test -n "$reload_flag" && reload_flag=" $reload_flag" + +# PORTME Fill in your ld.so characteristics +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +file_magic_cmd= +file_magic_test_file= +deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [regex]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given egrep regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. +echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 +case "$host_os" in +aix3*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so$major' + ;; + +aix4*) + version_type=linux + # AIX has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + # We preserve .a as extension for shared libraries though AIX4.2 + # and later linker supports .so + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a' + shlibpath_var=LIBPATH + deplibs_check_method=pass_all + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}.so' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + library_names_spec='${libname}.so$major ${libname}.so' + soname_spec='${libname}.so' + finish_cmds='PATH="$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + deplibs_check_method='file_magic ELF 32-bit LSB shared object' + file_magic_cmd=/usr/bin/file + file_magic_test_file=/shlib/libc.so + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw*) + version_type=windows + if test "$with_gcc" = yes; then + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a' + else + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' + fi + dynamic_linker='Win32 ld.exe' + deplibs_check_method='file_magic file format pei*-i386.*architecture: i386' + file_magic_cmd='objdump -f' + need_lib_prefix=no + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case "$version_type" in + freebsd-elf*) + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /usr/lib/libc.so*` + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + deplibs_check_method=unknown + library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' + need_version=yes + ;; + esac + finish_cmds='PATH="$PATH:/sbin" OBJFORMAT="'"$objformat"'" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +gnu*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + need_lib_prefix=no + need_version=no + shlibpath_var=SHLIB_PATH + library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' + soname_spec='${libname}${release}.sl$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5*) + version_type=irix + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + shlibpath_var=LD_LIBRARY_PATH + deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" # or should it be pass_all? + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /lib/libc.so*` + shlibpath_overrides_runpath=no + ;; + +irix6*) + version_type=irix + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + case "$LD" in # libtool.m4 will add one of these switches to LD + *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + # even though /usr/local/lib is always searched, the man-page says + # shared libraries should not be installed there if they use an ABI + # different from -32, so we'd better not search for shared libraries + # there either + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" # or should it be pass_all? + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /lib${libsuff}/libc.so*` + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + + if test -f /lib/ld.so.1; then + dynamic_linker='GNU ld.so' + else + # Only the GNU ld.so supports shared libraries on MkLinux. + case "$host_cpu" in + powerpc*) dynamic_linker=no ;; + *) dynamic_linker='Linux ld.so' ;; + esac + fi + ;; + +netbsd*) + version_type=sunos + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' + soname_spec='${libname}${release}.so$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + ;; + +openbsd*) + version_type=sunos + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + need_version=no + fi + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + need_lib_prefix=no + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4*) + version_type=osf + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + shlibpath_var=LD_LIBRARY_PATH + # deplibs_check_method='pass_all' + # Although pass_all appears to work, it copies symbols from static libraries + # into shared ones and exports them. So, when a program is linked with two + # or more libraries that have got copies of the same symbols, link fails + # This was only tested on osf4: + deplibs_check_method='file_magic COFF format alpha shared library' + file_magic_cmd=/usr/bin/file + file_magic_test_file=/shlib/libc.so + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib" + file_magic_cmd=/usr/bin/file + file_magic_test_file=/lib/libc.so + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + case "$host_vendor" in + ncr) + deplibs_check_method='pass_all' + ;; + esac + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t$dynamic_linker" 1>&6 +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 + +if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then + case "$deplibs_check_method" in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac +fi + +echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4*) + test "$enable_shared" = yes && enable_static=no + ;; +esac + +echo "$ac_t$enable_shared" 1>&6 + +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes + +echo "checking whether to build static libraries... $enable_static" 1>&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +echo $ac_n "checking for objdir... $ac_c" 1>&6 +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +echo "$ac_t$objdir" 1>&6 + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else +if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then + lt_cv_dlopen=no lt_cv_dlopen_libs= +echo $ac_n "checking for dlopen""... $ac_c" 1>&6 +echo "$progname:1977: checking for dlopen" >&5 +if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +dlopen(); +#endif + +; return 0; } +EOF +if { (eval echo $progname:2004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_dlopen=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_dlopen=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 +echo "$progname:2022: checking for dlopen in -ldl" >&5 +ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 +echo "$progname:2059: checking for dld_link in -ldld" >&5 +ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for shl_load""... $ac_c" 1>&6 +echo "$progname:2096: checking for shl_load" >&5 +if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +shl_load(); +#endif + +; return 0; } +EOF +if { (eval echo $progname:2123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_shl_load=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_shl_load=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for LoadLibrary""... $ac_c" 1>&6 +echo "$progname:2141: checking for LoadLibrary" >&5 +if eval "test \"`echo '$''{'ac_cv_func_LoadLibrary'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char LoadLibrary(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_LoadLibrary) || defined (__stub___LoadLibrary) +choke me +#else +LoadLibrary(); +#endif + +; return 0; } +EOF +if { (eval echo $progname:2168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_LoadLibrary=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_LoadLibrary=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'LoadLibrary`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="LoadLibrary" +else + echo "$ac_t""no" 1>&6 +fi + + +fi + + +fi + + +fi + + +fi + +fi + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + fi + + case "$lt_cv_dlopen" in + dlopen) +for ac_hdr in dlfcn.h; do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "$progname:2210: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int fnord = 0; +EOF +ac_try="$ac_compile conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo $progname:2220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +done + + if test "x$ac_cv_header_dlfcn_h" = xyes; then + CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + fi + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 +echo "$progname:2248: checking whether a program can dlopen itself" >&5 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + lt_cv_dlopen_self=cross + else + cat > conftest.c < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LTDL_GLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LTDL_GLOBAL DL_GLOBAL +# else +# define LTDL_GLOBAL 0 +# endif +#endif + +/* We may have to define LTDL_LAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LTDL_LAZY_OR_NOW +# ifdef RTLD_LAZY +# define LTDL_LAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LTDL_LAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LTDL_LAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LTDL_LAZY_OR_NOW DL_NOW +# else +# define LTDL_LAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +fnord() { int i=42;} +main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); + if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); + if(ptr1 || ptr2) exit(0); } exit(1); } + +EOF +if { (eval echo $progname:2302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + lt_cv_dlopen_self=yes +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + lt_cv_dlopen_self=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$lt_cv_dlopen_self" 1>&6 + + if test "$lt_cv_dlopen_self" = yes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 +echo "$progname:2321: checking whether a statically linked program can dlopen itself" >&5 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + lt_cv_dlopen_self_static=cross + else + cat > conftest.c < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LTDL_GLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LTDL_GLOBAL DL_GLOBAL +# else +# define LTDL_GLOBAL 0 +# endif +#endif + +/* We may have to define LTDL_LAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LTDL_LAZY_OR_NOW +# ifdef RTLD_LAZY +# define LTDL_LAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LTDL_LAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LTDL_LAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LTDL_LAZY_OR_NOW DL_NOW +# else +# define LTDL_LAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +fnord() { int i=42;} +main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); + if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); + if(ptr1 || ptr2) exit(0); } exit(1); } + +EOF +if { (eval echo $progname:2375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + lt_cv_dlopen_self_static=yes +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + lt_cv_dlopen_self_static=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 +fi + ;; + esac + + case "$lt_cv_dlopen_self" in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case "$lt_cv_dlopen_self_static" in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + +# Copy echo and quote the copy, instead of the original, because it is +# used later. +ltecho="$echo" +if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ltecho="$CONFIG_SHELL \$0 --fallback-echo" +fi +LTSHELL="$SHELL" + +LTCONFIG_VERSION="$VERSION" + +# Only quote variables if we're using ltmain.sh. +case "$ltmain" in +*.sh) + # Now quote all the things that may contain metacharacters. + for var in ltecho old_CC old_CFLAGS old_CPPFLAGS old_LD old_NM old_RANLIB \ + old_LN_S old_DLLTOOL old_AS AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \ + reload_flag reload_cmds wl \ + pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ + thread_safe_flag_spec whole_archive_flag_spec libname_spec \ + library_names_spec soname_spec \ + RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \ + file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ + hardcode_libdir_flag_spec hardcode_libdir_separator \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do + + case "$var" in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case "$ltecho" in + *'\$0 --fallback-echo"') + ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + + trap "$rm \"$ofile\"; exit 1" 1 2 15 + echo "creating $ofile" + $rm "$ofile" + cat < "$ofile" +#! $SHELL + +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. +# +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +### BEGIN LIBTOOL CONFIG +EOF + cfgfile="$ofile" + ;; + +*) + # Double-quote the variables that need it (for aesthetics). + for var in old_CC old_CFLAGS old_CPPFLAGS old_LD old_NM old_RANLIB \ + old_LN_S old_DLLTOOL old_AS; do + eval "$var=\\\"\$var\\\"" + done + + # Just create a config file. + cfgfile="$ofile.cfg" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + echo "creating $cfgfile" + $rm "$cfgfile" + cat < "$cfgfile" +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +EOF + ;; +esac + +cat <> "$cfgfile" +# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\ +# LD=$old_LD NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\ +# DLLTOOL="$old_DLLTOOL" AS="$old_AS" \\ +# $0$ltconfig_args +# +# Compiler and other test output produced by $progname, useful for +# debugging $progname, is in ./config.log if it exists. + +# The version of $progname that generated this script. +LTCONFIG_VERSION=$LTCONFIG_VERSION + +# Shell to use when invoking shell scripts. +SHELL=$LTSHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$ltecho + +# The archiver. +AR=$AR + +# The default C compiler. +CC=$CC + +# The linker used to build libraries. +LD=$LD + +# Whether we need hard or soft links. +LN_S=$LN_S + +# A BSD-compatible nm program. +NM=$NM + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$reload_flag +reload_cmds=$reload_cmds + +# How to pass a linker flag through the compiler. +wl=$wl + +# Object file suffix (normally "o"). +objext="$objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Additional compiler flags for building library objects. +pic_flag=$pic_flag + +# Does compiler simultaneously support -c and -o options +compiler_c_o=$compiler_c_o + +# Can we write directly to a .lo ? +compiler_o_lo=$compiler_o_lo + +# Must we lock files when doing compilation ? +need_locks=$need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$link_static_flag + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$RANLIB +old_archive_cmds=$old_archive_cmds +old_postinstall_cmds=$old_postinstall_cmds +old_postuninstall_cmds=$old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$old_archive_from_new_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$archive_cmds +archive_expsym_cmds=$archive_expsym_cmds +postinstall_cmds=$postinstall_cmds +postuninstall_cmds=$postuninstall_cmds + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$deplibs_check_method + +# Command to use when deplibs_check_method == file_magic +file_magic_cmd=$file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$global_symbol_to_cdecl + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$hardcode_libdir_separator + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required +always_export_symbols=$always_export_symbols + +# The command to extract exported symbols +export_symbols_cmds=$export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols +exclude_expsyms=$exclude_expsyms + +# Symbols that must always be exported +include_expsyms=$include_expsyms + +EOF + +case "$ltmain" in +*.sh) + echo '### END LIBTOOL CONFIG' >> "$ofile" + echo >> "$ofile" + case "$host_os" in + aix3*) + cat <<\EOF >> "$ofile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # Append the ltmain.sh script. + cat "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1) + + chmod +x "$ofile" + ;; + +*) + # Compile the libtool program. + echo "FIXME: would compile $ltmain" + ;; +esac + +test -n "$cache_file" || exit 0 + +# AC_CACHE_SAVE +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/tools/acsupport/ltmain.sh b/tools/acsupport/ltmain.sh new file mode 100644 index 00000000..bfc7e9d7 --- /dev/null +++ b/tools/acsupport/ltmain.sh @@ -0,0 +1,3779 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun ltconfig. +# +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +# The name of this program. +progname=`$echo "$0" | sed 's%^.*/%%'` +modename="$progname" + +# Constants. +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.2f +TIMESTAMP=" (1.385 1999/03/15 17:24:54)" + +default_mode= +help="Try \`$progname --help' for more information." +magic="%%%MAGIC variable%%%" +mkdir="mkdir" +mv="mv -f" +rm="rm -f" + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' +SP2NL='tr \040 \012' +NL2SP='tr \012 \040' + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +# We save the old values to restore during execute mode. +if test "${LC_ALL+set}" = set; then + save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL +fi +if test "${LANG+set}" = set; then + save_LANG="$LANG"; LANG=C; export LANG +fi + +if test "$LTCONFIG_VERSION" != "$VERSION"; then + echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + echo "$modename: not configured to build any kind of library" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case "$arg" in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + execute_dlfiles) + eval "$prev=\"\$$prev \$arg\"" + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case "$arg" in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + exit 0 + ;; + + --config) + sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0 + exit 0 + ;; + + --debug) + echo "$progname: enabling shell trace mode" + set -x + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --quiet | --silent) + show=: + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case "$nonopt" in + *cc | *++ | gcc* | *-gcc*) + mode=link + for arg + do + case "$arg" in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case "$mode" in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + lastarg= + srcfile="$nonopt" + suppress_output= + + user_target=no + for arg + do + # Accept any command-line options. + case "$arg" in + -o) + if test "$user_target" != "no"; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit 1 + fi + user_target=next + ;; + + -static) + build_old_libs=yes + continue + ;; + esac + + case "$user_target" in + next) + # The next one is the -o target name + user_target=yes + continue + ;; + yes) + # We got the output file + user_target=set + libobj="$arg" + continue + ;; + esac + + # Accept the current argument as the source file. + lastarg="$srcfile" + srcfile="$arg" + + # Aesthetically quote the previous argument. + + # Backslashify any backslashes, double quotes, and dollar signs. + # These are the only characters that are still specially + # interpreted inside of double-quoted scrings. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly in scan + # sets, so we specify it separately. + case "$lastarg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + lastarg="\"$lastarg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + done + + case "$user_target" in + set) + ;; + no) + # Get the name of the library object. + libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + *) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit 1 + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSfmso]' + case "$libobj" in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case "$libobj" in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $libobj" + else + removelist="$libobj" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit 1" 1 2 15 + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit 1" 1 2 15 + else + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until ln "$0" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $pic_flag -DPIC $srcfile" + if test "$build_old_libs" = yes; then + lo_libobj="$libobj" + dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$libobj"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + + if test -d "$dir"; then + $show "$rm $libobj" + $run $rm $libobj + else + $show "$mkdir $dir" + $run $mkdir $dir + status=$? + if test $status -ne 0 && test ! -d $dir; then + exit $status + fi + fi + fi + if test "$compiler_o_lo" = yes; then + output_obj="$libobj" + command="$command -o $output_obj" + elif test "$compiler_c_o" = yes; then + output_obj="$obj" + command="$command -o $output_obj" + fi + + $show "$command" + if $run eval "$command"; then : + else + test -n "$output_obj" && $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed, then go on to compile the next one + if test x"$output_obj" != x"$libobj"; then + $show "$mv $output_obj $libobj" + if $run $mv $output_obj $libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # If we have no pic_flag, then copy the object into place and finish. + if test -z "$pic_flag" && test "$build_old_libs" = yes; then + # Rename the .lo from within objdir to obj + if test -f $obj; then + $show $rm $obj + $run $rm $obj + fi + + $show "$mv $libobj $obj" + if $run $mv $libobj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + + # Now arrange that obj and lo_libobj become the same file + $show "$LN_S $obj $lo_libobj" + if $run $LN_S $obj $lo_libobj; then + exit 0 + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Allow error messages only from the first compilation. + suppress_output=' >/dev/null 2>&1' + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + command="$base_compile $srcfile" + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + output_obj="$obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + $show "$command" + if $run eval "$command"; then : + else + $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed + if test x"$output_obj" != x"$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Create an invalid libtool object if no PIC, so that we do not + # accidentally link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > \$libobj" || exit $? + else + # Move the .lo from within objdir + $show "$mv $libobj $lo_libobj" + if $run $mv $libobj $lo_libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + fi + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + $rm "$lockfile" + fi + + exit 0 + ;; + + # libtool link mode + link) + modename="$modename: link" + C_compiler="$CC" # save it, to compile generated C sources + CC="$nonopt" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invokation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + + # This is a source program that is used to create dlls on Windows + # Don't remove nor modify the starting and closing comments +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ + # This is a source program that is used to create import libraries + # on Windows for dlls which lack them. Don't remove nor modify the + # starting and closing comments +# /* impgen.c starts here */ +# /* Copyright (C) 1999 Free Software Foundation, Inc. +# +# This file is part of GNU libtool. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# */ +# +# #include /* for printf() */ +# #include /* for open(), lseek(), read() */ +# #include /* for O_RDONLY, O_BINARY */ +# #include /* for strdup() */ +# +# static unsigned int +# pe_get16 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[2]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 2); +# return b[0] + (b[1]<<8); +# } +# +# static unsigned int +# pe_get32 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[4]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 4); +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# static unsigned int +# pe_as32 (ptr) +# void *ptr; +# { +# unsigned char *b = ptr; +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# int +# main (argc, argv) +# int argc; +# char *argv[]; +# { +# int dll; +# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; +# unsigned long export_rva, export_size, nsections, secptr, expptr; +# unsigned long name_rvas, nexp; +# unsigned char *expdata, *erva; +# char *filename, *dll_name; +# +# filename = argv[1]; +# +# dll = open(filename, O_RDONLY|O_BINARY); +# if (!dll) +# return 1; +# +# dll_name = filename; +# +# for (i=0; filename[i]; i++) +# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') +# dll_name = filename + i +1; +# +# pe_header_offset = pe_get32 (dll, 0x3c); +# opthdr_ofs = pe_header_offset + 4 + 20; +# num_entries = pe_get32 (dll, opthdr_ofs + 92); +# +# if (num_entries < 1) /* no exports */ +# return 1; +# +# export_rva = pe_get32 (dll, opthdr_ofs + 96); +# export_size = pe_get32 (dll, opthdr_ofs + 100); +# nsections = pe_get16 (dll, pe_header_offset + 4 +2); +# secptr = (pe_header_offset + 4 + 20 + +# pe_get16 (dll, pe_header_offset + 4 + 16)); +# +# expptr = 0; +# for (i = 0; i < nsections; i++) +# { +# char sname[8]; +# unsigned long secptr1 = secptr + 40 * i; +# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); +# unsigned long vsize = pe_get32 (dll, secptr1 + 16); +# unsigned long fptr = pe_get32 (dll, secptr1 + 20); +# lseek(dll, secptr1, SEEK_SET); +# read(dll, sname, 8); +# if (vaddr <= export_rva && vaddr+vsize > export_rva) +# { +# expptr = fptr + (export_rva - vaddr); +# if (export_rva + export_size > vaddr + vsize) +# export_size = vsize - (export_rva - vaddr); +# break; +# } +# } +# +# expdata = (unsigned char*)malloc(export_size); +# lseek (dll, expptr, SEEK_SET); +# read (dll, expdata, export_size); +# erva = expdata - export_rva; +# +# nexp = pe_as32 (expdata+24); +# name_rvas = pe_as32 (expdata+32); +# +# printf ("EXPORTS\n"); +# for (i = 0; i&2 + fi + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test $# -gt 0; do + arg="$1" + shift + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case "$prev" in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case "$arg" in + *.la | *.lo) ;; # We handle these cases below. + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + fi + prev= + continue + ;; + *) + dlprefiles="$dlprefiles $arg" + test "$prev" = dlfiles && dlfiles="$dlfiles $arg" + prev= + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit 1 + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath) + rpath="$rpath $arg" + prev= + continue + ;; + xrpath) + xrpath="$xrpath $arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi + + prevarg="$arg" + + case "$arg" in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + dlopen_self=$dlopen_self_static + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + if test "$export_dynamic" != yes; then + export_dynamic=yes + if test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + else + arg= + fi + fi + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: cannot have more than one -exported-symbols" + exit 1 + fi + if test "$arg" = "-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's%^-L\(.*\)$%\1%'` + case "$dir" in + /* | [A-Za-z]:[/\\]*) + # Add the corresponding hardcode_libdir_flag, if it is not identical. + ;; + *) + $echo "$modename: \`-L$dir' cannot specify a relative directory" 1>&2 + exit 1 + ;; + esac + case " $deplibs " in + *" $arg "*) ;; + *) deplibs="$deplibs $arg";; + esac + case " $lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir";; + esac + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + dllsearchdir=`cd "$dir" && pwd || echo "$dir"` + case ":$dllsearchpath:" in + ::) dllsearchpath="$dllsearchdir";; + *":$dllsearchdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dllsearchdir";; + esac + ;; + esac + ;; + + -l*) + deplibs="$deplibs $arg" + ;; + + -module) + if test "$module" != yes; then + module=yes + if test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + else + arg= + fi + fi + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + xrpath="$xrpath "`$echo "X$arg" | $Xsed -e 's/^-R//'` + continue + ;; + + -static) + # If we have no pic_flag, then this is the same as -all-static. + if test -z "$pic_flag" && test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + dlopen_self=$dlopen_self_static + fi + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + + *.o | *.obj | *.a | *.lib) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A library object. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` + prev= + fi + libobjs="$libobjs $arg" + ;; + + *.la) + # A libtool-controlled library. + + dlname= + libdir= + library_names= + old_library= + + # Check to see that this really is a libtool archive. + if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 + exit 1 + fi + + # If the library was installed with an old release of libtool, + # it will not redefine variable installed. + installed=yes + + # If there is no directory component, then add one. + case "$arg" in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 + exit 1 + fi + + # Find the relevant object directory and library name. + name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` + + if test "X$installed" = Xyes; then + dir="$libdir" + else + dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$arg"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + fi + + if test -n "$dependency_libs"; then + # Extract -R from dependency_libs + temp_deplibs= + for deplib in $dependency_libs; do + case "$deplib" in + -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + case " $rpath $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + -L*) case "$compile_command $temp_deplibs " in + *" $deplib "*) ;; + *) temp_deplibs="$temp_deplibs $deplib";; + esac;; + *) temp_deplibs="$temp_deplibs $deplib";; + esac + done + dependency_libs="$temp_deplibs" + fi + + if test -z "$libdir"; then + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$deplibs$dependency_libs" + compile_command="$compile_command $dir/$old_library$dependency_libs" + finalize_command="$finalize_command $dir/$old_library$dependency_libs" + continue + fi + + # This library was specified with -dlopen. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking statically, + # we need to preload. + prev=dlprefiles + else + # We should not create a dependency on this library, but we + # may need any libraries it requires. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + prev= + continue + fi + fi + + # The library was specified with -dlpreopen. + if test "$prev" = dlprefiles; then + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + dlprefiles="$dlprefiles $dir/$old_library" + else + dlprefiles="$dlprefiles $dir/$linklib" + fi + prev= + fi + + if test "$build_libtool_libs" = yes && test -n "$library_names"; then + link_against_libtool_libs="$link_against_libtool_libs $arg" + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # We need an absolute path. + case "$dir" in + /* | [A-Za-z]:[/\\]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$libdir'" 1>&2 + exit 1 + fi + ;; + esac + + # This is the magic to use -rpath. + # Skip directories that are in the system default run-time + # search path, unless they have been requested with -R. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + + lib_linked=yes + case "$hardcode_action" in + immediate | unsupported) + if test "$hardcode_direct" = no; then + compile_command="$compile_command $dir/$linklib" + deplibs="$deplibs $dir/$linklib" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + dllsearchdir=`cd "$dir" && pwd || echo "$dir"` + if test -n "$dllsearchpath"; then + dllsearchpath="$dllsearchpath:$dllsearchdir" + else + dllsearchpath="$dllsearchdir" + fi + ;; + esac + elif test "$hardcode_minus_L" = no; then + case "$host" in + *-*-sunos*) + compile_shlibpath="$compile_shlibpath$dir:" + ;; + esac + case "$compile_command " in + *" -L$dir "*) ;; + *) compile_command="$compile_command -L$dir";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = no; then + case ":$compile_shlibpath:" in + *":$dir:"*) ;; + *) compile_shlibpath="$compile_shlibpath$dir:";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -l$name" + else + lib_linked=no + fi + ;; + + relink) + if test "$hardcode_direct" = yes; then + compile_command="$compile_command $absdir/$linklib" + deplibs="$deplibs $absdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + case "$compile_command " in + *" -L$absdir "*) ;; + *) compile_command="$compile_command -L$absdir";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -L$absdir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case ":$compile_shlibpath:" in + *":$absdir:"*) ;; + *) compile_shlibpath="$compile_shlibpath$absdir:";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -l$name" + else + lib_linked=no + fi + ;; + + *) + lib_linked=no + ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit 1 + fi + + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + finalize_command="$finalize_command $libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + case "$finalize_command " in + *" -L$libdir "*) ;; + *) finalize_command="$finalize_command -L$libdir";; + esac + finalize_command="$finalize_command -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case ":$finalize_shlibpath:" in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:";; + esac + finalize_command="$finalize_command -l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + case "$finalize_command " in + *" -L$dir "*) ;; + *) finalize_command="$finalize_command -L$libdir";; + esac + finalize_command="$finalize_command -l$name" + fi + else + # Transform directly to old archives if we don't build new libraries. + if test -n "$pic_flag" && test -z "$old_library"; then + $echo "$modename: cannot find static library for \`$arg'" 1>&2 + exit 1 + fi + + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_command="$compile_command $dir/$linklib" + finalize_command="$finalize_command $dir/$linklib" + else + case "$compile_command " in + *" -L$dir "*) ;; + *) compile_command="$compile_command -L$dir";; + esac + compile_command="$compile_command -l$name" + case "$finalize_command " in + *" -L$dir "*) ;; + *) finalize_command="$finalize_command -L$dir";; + esac + finalize_command="$finalize_command -l$name" + fi + fi + + # Add in any libraries that this one depends upon. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + esac + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + case "$output" in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *.a | *.lib) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into archives" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles"; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + ;; + + *.la) + # Make sure we only generate libraries of the form `libNAME.la'. + case "$outputname" in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + if test -n "$objs"; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 + exit 1 + fi + + # How the heck are we supposed to write a wrapper for a shared library? + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2 + exit 1 + fi + + if test -n "$dlfiles$dlprefiles"; then + $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test $# -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + libext=al + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + dependency_libs="$deplibs" + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + current="$2" + revision="$3" + age="$4" + + # Check that each of the things are valid numbers. + case "$current" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$revision" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$age" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case "$version_type" in + none) ;; + + irix) + major=`expr $current - $age + 1` + versuffix="$major.$revision" + verstring="sgi$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test $loop != 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="sgi$major.$iface:$verstring" + done + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + windows) + # Like Linux, but with '-' rather than '.', since we only + # want one extension on Windows 95. + major=`expr $current - $age` + versuffix="-$major-$age-$revision" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + verstring="0.0" + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + dependency_libs="$deplibs" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + # these systems don't actually have a c library (as such)! + ;; + *) + # Add libc to deplibs on all other systems. + deplibs="$deplibs -lc" + ;; + esac + fi + + # Create the output directory, or remove our outputs if we need to. + if test -d $output_objdir; then + $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" + $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* + else + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + exit $status + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + if test "$build_libtool_libs" = yes; then + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case "$deplibs_check_method" in + pass_all) + newdeplibs=$deplibs + ;; # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behaviour. + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potlib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | sed 's/.* -> //'` + case "$potliblink" in + /*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" \ + | sed 10q \ + | egrep "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: This library needs some functionality provided by $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) newdeplibs="" + if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | + grep . >/dev/null; then + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + echo "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + dlname= + library_names= + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + fi + fi + fi + + # test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + deplibs=$newdeplibs + # Done checking deplibs! + + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Ensure that we have .o objects for linkers which dislike .lo + # (e.g. aix) incase we are running --disable-static + for obj in $libobjs; do + oldobj=`$echo "X$obj" | $Xsed -e "$lo2o"` + test -f $oldobj || ${LN_S} $obj $oldobj + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + if test -n "$whole_archive_flag_spec"; then + if test -n "$convenience"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + else + for xlib in $convenience; do + # Extract the objects. + xdir="$xlib"x + generated="$generated $xdir" + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x ../$xlib)" + $run eval "(cd \$xdir && $AR x ../\$xlib)" || exit $? + + libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + + linkopts="$linkopts $flag" + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$objdir/$libname.exp" + $run $rm $export_symbols + eval cmds=\"$export_symbols_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + eval cmds=\"$archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + *.lo | *.o | *.obj) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into objects" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles"; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case "$output" in + *.lo) + if test -n "$objs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Create the old-style object. + reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` + + output="$obj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + test -z "$libobj" && exit 0 + + if test "$build_libtool_libs" != yes; then + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs" + output="$libobj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show $rm $libobj + $run $rm $libobj + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj || exit $? + fi + + exit 0 + ;; + + # Anything else should be a program. + *) + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + if test "$dlself" = yes && test "$export_dynamic" = no; then + $echo "$modename: error: \`-dlopen self' requires \`-export-dynamic'" 1>&2 + exit 1 + fi + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$compile_rpath " in + *" $libdir "*) ;; + *) compile_rpath="$compile_rpath $libdir" ;; + esac + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" = yes; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case "$dlsyms" in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$objdir/${output}.nm" + + if test -d $objdir; then + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -ne 0 && test ! -d $objdir; then + exit $status + fi + fi + + # Parse the name list into a source file. + $show "creating $objdir/$dlsyms" + + $echo > "$objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$objdir/$output.exp" + $run $rm $export_symbols + $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run $rm $export_symbols + $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$objdir/$output.exp"' + $run eval 'grep -f "$objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`echo "$arg" | sed -e 's%^.*/%%'` + $run eval 'echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{\ +" + + sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ + -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ + < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr_t) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case "$host" in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + exit $? + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case "$dir" in + /* | [A-Za-z]:[/\\]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + # AGH! Flame the AIX and HP-UX people for me, will ya? + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Create the binary in the object directory, then wrap it. + if test ! -d $output_objdir; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $objdir; then + exit $status + fi + fi + + # Delete the old output file. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $0 --fallback-echo"; then + case "$0" in + /* | [A-Za-z]:[/\\]*) qecho="$SHELL $0 --fallback-echo";; + *) qecho="$SHELL `pwd`/$0 --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`echo $output|sed 's,.exe$,,'` ;; + esac + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + link_against_libtool_libs='$link_against_libtool_libs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + /* | [A-Za-z]:[/\\]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + echo >> $output "\ + program=lt-'$outputname' + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if (cd \"\$thisdir\" && eval \$relink_command); then : + else + $rm \"\$progdir/\$file\" + exit 1 + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + *-*-cygwin* | *-*-mingw | *-*-os2*) + # win32 systems need to use the prog path for dll + # lookup to work + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + *) + $echo >> $output "\ + # Export the path to the program. + PATH=\"\$progdir:\$PATH\" + export PATH + + exec \$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` + fi + addlibs="$old_convenience" + fi + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + xdir="$xlib"x + generated="$generated $xdir" + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x ../$xlib)" + $run eval "(cd \$xdir && $AR x ../\$xlib)" || exit $? + + oldobjs="$oldobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + eval cmds=\"$old_archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case "$output" in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + if test -n "$xrpath"; then + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + done + dependency_libs="$temp_xrpath $dependency_libs" + fi + + # Only create the output if not a dry run. + if test -z "$run"; then + $echo > $output "\ +# $output - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP + +# The name that we can dlopen(3). +dlname='$dlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=no + +# Directory that this library needs to be installed in: +libdir='$install_libdir'\ +" + + $rm "$output_objdir/$outputname"i + sed 's/^installed=no$/installed=yes/' \ + < "$output" > "$output_objdir/$outputname"i || exit 1 + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $? + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case "$arg" in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case "$destdir" in + /* | [A-Za-z]:[/\\]*) ;; + *) + for file in $files; do + case "$file" in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case "$file" in + *.a | *.lib) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$realname $destdir/$realname" + $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + test "X$dlname" = "X$realname" && dlname= + + if test $# -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + test "X$dlname" = "X$linkname" && dlname= + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + if test -n "$dlname"; then + # Install the dynamically-loadable library. + $show "$install_prog $dir/$dlname $destdir/$dlname" + $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $? + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + if test ! -f "$instname"; then + # Just in case it was removed... + $show "Creating $instname" + $rm "$instname" + sed 's/^installed=no$/installed=yes/' "$file" > "$instname" + fi + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case "$destfile" in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.o | *.obj) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + link_against_libtool_libs= + relink_command= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Check the variables that should have been set. + if test -z "$link_against_libtool_libs"; then + $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $link_against_libtool_libs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case "$lib" in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes; then + outputname="/tmp/$$-$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $echo "$modename: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && $rm $outputname + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec $SHELL $0 --finish$current_libdirs + exit 1 + fi + + exit 0 + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit 0 + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "----------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case "$file" in + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case "$file" in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + + # Restore saved enviroment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now actually exec the command. + eval "exec \$cmd$args" + + $echo "$modename: cannot exec \$cmd$args" + exit 1 + else + # Display what would be done. + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool uninstall mode + uninstall) + modename="$modename: uninstall" + rm="$nonopt" + files= + + for arg + do + case "$arg" in + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + rmfiles="$file" + + case "$name" in + *.la) + # Possibly a libtool archive, so verify it. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $dir/$n" + test "X$n" = "X$dlname" && dlname= + done + test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname" + test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" + + $show "$rm $rmfiles" + $run $rm $rmfiles + + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + # FIXME: should reinstall the best remaining shared library. + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` + rmfiles="$rmfiles $dir/$oldobj" + fi + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + + *) + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + esac + done + exit 0 + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 +fi # test -z "$show_help" + +# We need to display help for each of the modes. +case "$mode" in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --version print version information + +MODE must be one of the following: + + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/tools/acsupport/missing b/tools/acsupport/missing new file mode 100755 index 00000000..cbe2b0ef --- /dev/null +++ b/tools/acsupport/missing @@ -0,0 +1,188 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Franc,ois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`configure.in'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`configure.in'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`configure.in'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER([^):]*:\([^)]*\)).*/\1/p' configure.in` + if test -z "$files"; then + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^):]*\)).*/\1/p' configure.in` + test -z "$files" || files="$files.in" + else + files=`echo "$files" | sed -e 's/:/ /g'` + fi + test -z "$files" && files="config.h.in" + touch $files + ;; + + automake) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print \ + | sed 's/^\(.*\).am$/touch \1.in/' \ + | sh + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/tools/acsupport/mkinstalldirs b/tools/acsupport/mkinstalldirs new file mode 100755 index 00000000..cc8783ed --- /dev/null +++ b/tools/acsupport/mkinstalldirs @@ -0,0 +1,36 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Last modified: 1994-03-25 +# Public domain + +errstatus=0 + +for file in ${1+"$@"} ; do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d in ${1+"$@"} ; do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" 1>&2 + mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$? + fi + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/tools/src/ChangeLog b/tools/src/ChangeLog new file mode 100644 index 00000000..a8c3df17 --- /dev/null +++ b/tools/src/ChangeLog @@ -0,0 +1,141 @@ +2003-02-12 Bart Veer + + * Makefile.in: Regenerate after acinclude.m4 update + +2002-08-03 Bart Veer + + * acinclude.m4, configure.in, Makefile.am: + Rework host-side autoconf support + +2001-10-15 Julian Smart + + * Mounts /ecos-x now, not /x + * Fixed invocation of 'mount' when about to build + +2001-07-26 Julian Smart + + * Only use Registry functions if building a GUI Configtool. + * ecosconfig.exe doesn't now get built when building the GUI + Configtool. + +2001-07-09 Julian Smart + + * Fixed (I hope) a long-term bug in both versions of the Configtool, + whereby conflicts involving bool-data values weren't + resolved. + +2001-06-18 Julian Smart + + * Added possible fix for Tcl crash bug under Windows 9x, by + using the wxWindows Mkdir function instead of Tcl's mkdir. + +2001-06-04 Julian Smart + + * Changed cygpath in build.cxx to use /cygdrive notation, + checking in the registry first in case the user has customized + the /cygdrive mount point. + +2001-05-23 Julian Smart + + * Added Srdjan Sobajic's most excellent host/README improvements, + and listed the directories more clearly with a brief reference + to the new Configtool and its own readme. + +2001-05-16 Bart Veer + + * acinclude.m4 : + Update compiler flag handling with g++ to use -O0 rather than + -O2. The extra run-time performance is not worth the build + overheads. Also sort out the Tcl macro for VC++ builds. + + * configure.in : clean up some old cruft + + aclocal.m4, configure, Makefile.in: regenerate + +2001-01-29 Andreas Schuldei + + * acinclude.m4 (CYG_AC_PATH_TCL): Simplify Tcl installation searching + +2000-10-23 Jesper Skov + + * configure: Disable ser_filter magic for now - properly this time! + * configure.in: Ditto. + +2000-10-17 Jesper Skov + + * configure: Disable ser_filter magic for now. + * configure.in: Ditto. + +2000-09-15 Jesper Skov + + * Makefile.in: Added ser_filter rules. + * configure: Ditto. + * configure.in: Ditto. + +2000-09-12 Bart Veer + + * README + Clarify which configure script should be used. + +2000-08-18 Bart Veer + + * configure.in: + Allow cross-compilation + + * Makefile.in, configure: + Regenerate + +2000-03-13 John Dallway + + * README: + Mention use of the short form of the path to the configure + script under Windows. + +2000-03-12 Bart Veer + + * acinclude.m4, and lots of other files: + Change the CYG_AC_PATH_TCL macro to use tclConfig.sh, make + appropriate adjustments elsewhere. Also, add dependencies + such that the commands now depend on the libraries. + +2000-03-08 Bart Veer + + * README: + Updated. + + * configure.in (ECOS_DIRS): + Use the infrastructure and Tcl macros at the toplevel, so that + configure --help gives the right information. + + * configure.in (ECOS_DIRS): + Look for the file tools/ecostest/common/configure, rather than + just the directory. + +2000-03-01 Bart Veer + + * Create toplevel ChangeLog for the eCos host-side. + +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### diff --git a/tools/src/Makefile.am b/tools/src/Makefile.am new file mode 100644 index 00000000..62e07806 --- /dev/null +++ b/tools/src/Makefile.am @@ -0,0 +1,44 @@ +## Process this file with automake to produce Makefile.in +## ===================================================================== +## +## Makefile.am +## +## eCos host-side software toplevel makefile +## +## ===================================================================== +#######ECOSHOSTGPLCOPYRIGHTBEGIN#### +## ---------------------------------------------------------------------------- +## Copyright (C) 2002 Bart Veer +## Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +## +## This file is part of the eCos host tools. +## +## This program is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 of the License, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +## more details. +## +## You should have received a copy of the GNU General Public License along with +## this program; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +## +## ---------------------------------------------------------------------------- +#######ECOSHOSTGPLCOPYRIGHTEND#### +## ===================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): bartv +## Contact(s): bartv +## Date: 1998/12/17 +## Version: 0.01 +## +######DESCRIPTIONEND#### +## ===================================================================== + +AUTOMAKE_OPTIONS = 1.3 foreign +SUBDIRS = @SUBDIRS@ diff --git a/tools/src/Makefile.in b/tools/src/Makefile.in new file mode 100644 index 00000000..b507787c --- /dev/null +++ b/tools/src/Makefile.in @@ -0,0 +1,345 @@ +# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +#######ECOSHOSTGPLCOPYRIGHTBEGIN#### +#######ECOSHOSTGPLCOPYRIGHTEND#### +#######DESCRIPTIONBEGIN#### +######DESCRIPTIONEND#### + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +CC = @CC@ +CXX = @CXX@ +ECOS_REPOSITORY = @ECOS_REPOSITORY@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MSVC_SRCDIR = @MSVC_SRCDIR@ +PACKAGE = @PACKAGE@ +PACKAGE_DIR = @PACKAGE_DIR@ +PACKAGE_INSTALL = @PACKAGE_INSTALL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +VERSION = @VERSION@ +ecos_CFLAGS = @ecos_CFLAGS@ +ecos_CXXFLAGS = @ecos_CXXFLAGS@ +ecos_INCLUDES = @ecos_INCLUDES@ +ecos_LDADD = @ecos_LDADD@ +ecos_LIBS = @ecos_LIBS@ +ecos_infra_incdir = @ecos_infra_incdir@ +ecos_infra_libdir = @ecos_infra_libdir@ +ecos_libcdl_incdir = @ecos_libcdl_incdir@ +ecos_libcdl_libdir = @ecos_libcdl_libdir@ +ecos_tk_includes = @ecos_tk_includes@ +ecos_tk_libs = @ecos_tk_libs@ + +AUTOMAKE_OPTIONS = 1.3 foreign +SUBDIRS = @SUBDIRS@ +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/../acsupport/mkinstalldirs +CONFIG_CLEAN_FILES = +DIST_COMMON = ChangeLog Makefile.am Makefile.in acinclude.m4 aclocal.m4 \ +configure configure.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 + cd $(srcdir) && $(ACLOCAL) + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" != "." || dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +install-exec-am: +install-exec: install-exec-recursive + +install-data-am: +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: +uninstall: uninstall-recursive +all-am: Makefile +all-redirect: all-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-tags clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-tags distclean-generic clean-am + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs-am \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tools/src/acinclude.m4 b/tools/src/acinclude.m4 new file mode 100644 index 00000000..c5269ad7 --- /dev/null +++ b/tools/src/acinclude.m4 @@ -0,0 +1,44 @@ +dnl Process this file with aclocal to get an aclocal.m4 file. Then +dnl process that with autoconf. +dnl ==================================================================== +dnl +dnl acinclude.m4 +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 2002 Bart Veer +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 2002/08/03 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl Access shared macros. +dnl AM_CONDITIONAL needs to be mentioned here or else aclocal does not +dnl incorporate the macro into aclocal.m4 +sinclude(../acsupport/acinclude.m4) diff --git a/tools/src/aclocal.m4 b/tools/src/aclocal.m4 new file mode 100644 index 00000000..964d71e1 --- /dev/null +++ b/tools/src/aclocal.m4 @@ -0,0 +1,182 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4-p5 + +dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +dnl Process this file with aclocal to get an aclocal.m4 file. Then +dnl process that with autoconf. +dnl ==================================================================== +dnl +dnl acinclude.m4 +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 2002 Bart Veer +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 2002/08/03 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl Access shared macros. +dnl AM_CONDITIONAL needs to be mentioned here or else aclocal does not +dnl incorporate the macro into aclocal.m4 +sinclude(../acsupport/acinclude.m4) + +# Define a conditional. + +AC_DEFUN([AM_CONDITIONAL], +[AC_SUBST($1_TRUE) +AC_SUBST($1_FALSE) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi]) + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_REQUIRE([AC_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN([AM_MISSING_PROG], +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + +# Add --enable-maintainer-mode option to configure. +# From Jim Meyering + +# serial 1 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT($USE_MAINTAINER_MODE) + AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + diff --git a/tools/src/configure b/tools/src/configure new file mode 100755 index 00000000..7a692586 --- /dev/null +++ b/tools/src/configure @@ -0,0 +1,1225 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=../acsupport/config.guess + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +ac_aux_dir= +for ac_dir in ../acsupport $srcdir/../acsupport; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in ../acsupport $srcdir/../acsupport" 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + + +# Make sure we can run config.sub. +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:554: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:586: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:639: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:696: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=eCos + +VERSION=2.0 + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi + + + +missing_dir=`cd $ac_aux_dir && pwd` +echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 +echo "configure:735: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:748: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:761: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:774: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:787: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + +echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 +echo "configure:801: checking whether to enable maintainer-specific portions of Makefiles" >&5 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + MAINT=$MAINTAINER_MODE_TRUE + + + + echo $ac_n "checking that a separate build tree is being used""... $ac_c" 1>&6 +echo "configure:825: checking that a separate build tree is being used" >&5 + ecos_cwd=`/bin/pwd` + if test "${srcdir}" = "." ; then + srcdir=${ecos_cwd} + fi + if test "${ecos_cwd}" = "${srcdir}" ; then + echo "$ac_t""no" 1>&6 + { echo "configure: error: This configure script should not be run inside the source tree. Instead please use a separate build tree" 1>&2; exit 1; } + else + echo "$ac_t""yes" 1>&6 + fi + + +SUBDIRS="infra libcdl tools/configtool/standalone/common" + + + + +subdirs="${SUBDIRS}" + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g +s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g +s%@MAINT@%$MAINT%g +s%@SUBDIRS@%$SUBDIRS%g +s%@subdirs@%$subdirs%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + + test -d tools || mkdir tools + test -d tools/configtool || mkdir tools/configtool + test -d tools/configtool/standalone || mkdir tools/configtool/standalone + test -d tools/configtool/standalone/common || mkdir tools/configtool/standalone/common + + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + +if test "$no_recursion" != yes; then + + # Remove --cache-file and --srcdir arguments so they do not pile up. + ac_sub_configure_args= + ac_prev= + for ac_arg in $ac_configure_args; do + if test -n "$ac_prev"; then + ac_prev= + continue + fi + case "$ac_arg" in + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; + esac + done + + for ac_config_dir in ${SUBDIRS}; do + + # Do not complain, so a configure script can configure whichever + # parts of a large source tree are present. + if test ! -d $srcdir/$ac_config_dir; then + continue + fi + + echo configuring in $ac_config_dir + + case "$srcdir" in + .) ;; + *) + if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :; + else + { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; } + fi + ;; + esac + + ac_popdir=`pwd` + cd $ac_config_dir + + # A "../" for each directory in /$ac_config_dir. + ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'` + + case "$srcdir" in + .) # No --srcdir option. We are building in place. + ac_sub_srcdir=$srcdir ;; + /*) # Absolute path. + ac_sub_srcdir=$srcdir/$ac_config_dir ;; + *) # Relative path. + ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;; + esac + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_sub_srcdir/configure; then + ac_sub_configure=$ac_sub_srcdir/configure + elif test -f $ac_sub_srcdir/configure.in; then + ac_sub_configure=$ac_configure + else + echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2 + ac_sub_configure= + fi + + # The recursion is here. + if test -n "$ac_sub_configure"; then + + # Make the cache file name correct relative to the subdirectory. + case "$cache_file" in + /*) ac_sub_cache_file=$cache_file ;; + *) # Relative path. + ac_sub_cache_file="$ac_dots$cache_file" ;; + esac + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir" + # The eval makes quoting arguments work. + if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir + then : + else + { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; } + fi + fi + + cd $ac_popdir + done +fi + diff --git a/tools/src/configure.in b/tools/src/configure.in new file mode 100644 index 00000000..22ca1191 --- /dev/null +++ b/tools/src/configure.in @@ -0,0 +1,68 @@ +dnl Process this file with autoconf to produce a configure script. +dnl ==================================================================== +dnl +dnl configure.in +dnl +dnl Top-level configure script for eCos host-side software. +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 2002 Bart Veer +dnl Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 1998/12/17 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl Generic initialization +AC_INIT(../acsupport/config.guess) +AC_CONFIG_AUX_DIR(../acsupport) +AC_CANONICAL_HOST +AM_INIT_AUTOMAKE(eCos,2.0,0) +AM_MAINTAINER_MODE +ECOS_CHECK_BUILD_ne_SRC + +dnl Nothing actually gets built in this directory, so there is no +dnl point in worrying about compiler flags etc. Instead just +dnl recurse into appropriate subdirectories. The current directory +dnl tree is rather deep, so to avoid having to create lots of intermediate +dnl configure scripts and associated files the required build tree +dnl subdirectories are created here. +SUBDIRS="infra libcdl tools/configtool/standalone/common" + +AC_OUTPUT_COMMANDS([ + test -d tools || mkdir tools + test -d tools/configtool || mkdir tools/configtool + test -d tools/configtool/standalone || mkdir tools/configtool/standalone + test -d tools/configtool/standalone/common || mkdir tools/configtool/standalone/common +]) + +AC_SUBST(SUBDIRS) +AC_CONFIG_SUBDIRS(${SUBDIRS}) +AC_OUTPUT(Makefile) diff --git a/tools/src/infra/ChangeLog b/tools/src/infra/ChangeLog new file mode 100644 index 00000000..9e1cc606 --- /dev/null +++ b/tools/src/infra/ChangeLog @@ -0,0 +1,189 @@ +2003-02-12 Bart Veer + + * Makefile.in, configure, testsuite/Makefile.in: + Regenerate after acinclude.m4 update + +2002-08-03 Bart Veer + + * acinclude.m4, configure.in, Makefile.am, testsuite/Makefile.am: + Rework host-side autoconf support + + * hosttest.exp: allow for configury changes + + * assert.cxx: use mkstemp() when available + + * cyg_trac.h, trace.cxx: use const where appropriate + +2001-05-16 Bart Veer + + * Makefile.am: use new compiler flag support + + * configure, Makefile.in, testsuite/Makefile.in: regenerate + +2001-02-26 Julian Smart + + * assert.cxx: Cygwin 00r1 needs to include for _exit. + +2000-09-15 Jesper Skov + + * assert.cxx: Include unistd.h on unix. + Oops. Forgot the C wrapper. + +2000-08-18 Bart Veer + + * acinclude.m4, configure.in: + Allow cross-compilation + + * aclocal.m4, configure, Makefile.in, testsuite/Makefile.in + Regenerate + +1999-08-12 Bart Veer + + * configure: + * stamp-h.in: + * hosttest.exp: + First attempt at autoconfiscating the configtool + +1999-07-05 Bart Veer + + * assert.cxx: + Added new function cyg_assert_quickfail(), to facilitate + generating a dump file from inside gdb. + +1999-06-03 Bart Veer + + * configure: + Regenerated after more updates to toplevel acinclude.m4 + +1999-06-02 Bart Veer + + * configure: + Updated toplevel acinclude.m4 to add --enable-debuginfo option. + +1999-04-13 Bart Veer + + * testsuite/Makefile.am: + * trace.cxx: + * infra.h: + * checkdata.cxx: + * basetype.h: + * assert.cxx: + Updated copyright banner + +1999-03-02 Bart Veer + + * testcase.cxx (cyg_test_output): + Update to match earlier testcase.h header file change + (new status codes GDBCMD and NA, change from int to enum) + +1999-01-26 Bart Veer + + * Makefile.in: + * aclocal.m4: + * configure: + * Makefile.in: + Update to use autoconf 2.13 and automake 1.4, plus to + reflect tweaks to toplevel acinclude.m4 + + * hosttest.exp: + Improve the way compiler and linker diagnostics get handled. + +1999-01-21 Jonathan Larmour + + * basetype.h: + Remove all traces of non-CYG_KERNEL_USE_INIT_PRIORITY code + +1999-01-21 Bart Veer + + * acconfig.h: + * configure.in: + * infra.h: + Use new macro CYG_AC_SUBST_VERSION to generate a version + symbol CYGNUM_INFRA_VERSION + +1999-01-19 Bart Veer + + * hosttest.exp: + Allow makefile variable assignments of the form := as well as = + + * trace.cxx (parse_msg): + Fixed off-by-one error in output formatting, and "improved" the + way function names get displayed. + +1999-01-11 Bart Veer + + * testcase.cxx (cyg_test_output): + Use const where appropriate. + +1999-01-07 Bart Veer + + * testsuite/cyginfra/trace.exp: + * testsuite/cyginfra/ttrace4.cxx: + Added new testcase + + * testsuite/cyginfra/tassert7.cxx (main): + * testsuite/cyginfra/tassert6.cxx (main): + Eliminate warning about possible setjmp() side effects. + + * trace.cxx (trace_callback): + Off by one error when dumping a trace vector. + + * hosttest.exp: + Relative paths in include and library search paths were causing + problems. + The wrong Makefile was being examined for variable settings. + +1999-01-06 Bart Veer + + * testsuite/cyginfra/trace.exp: + * testsuite/cyginfra/ttrace1.cxx: + * testsuite/cyginfra/ttrace2.cxx: + * testsuite/cyginfra/ttrace3.cxx: + New test cases + + * testsuite/config/default.exp: + There was an easier way to get hold of hosttest.exp + + * hosttest.exp: + Reordered compile and link command lines so as to pick up the + correct versions of the libraries. + Allow packages to extract information from the Makefile + + * trace.cxx: + Initialisation via static object constructors did not work, + constructor priority ordering problems. + + * assert.cxx (default_handler): + Removed spurious debugging lines. + + * Makefile.am (install-exec-local): + Tweaks needed for MSVC + +1998-12-24 Bart Veer + + * First check-in of host-side infrastructure. + +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### diff --git a/tools/src/infra/Makefile.am b/tools/src/infra/Makefile.am new file mode 100644 index 00000000..9ce96149 --- /dev/null +++ b/tools/src/infra/Makefile.am @@ -0,0 +1,208 @@ +## Process this file with automake to produce Makefile.in +## ===================================================================== +## +## Makefile.am +## +## Host side implementation of the eCos infrastructure +## +## ===================================================================== +#######ECOSHOSTGPLCOPYRIGHTBEGIN#### +## ---------------------------------------------------------------------------- +# Copyright (C) 2002 Bart Veer +# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +## ---------------------------------------------------------------------------- +#######ECOSHOSTGPLCOPYRIGHTEND#### +## ===================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): bartv +## Contact(s): bartv +## Date: 1998/07/13 +## Version: 0.01 +## +######DESCRIPTIONEND#### +## ===================================================================== + +AUTOMAKE_OPTIONS = 1.3 foreign +SUBDIRS = testsuite + +## The generated makefile is responsible for the following: +## +## 1) copy across the shared header files cyg_type.h, cyg_ass.h and +## cyg_trac.h from the include directory into the appropriate part +## of the build tree. +## +## 2) on the target side the infrastructure headers depend on +## the configuration system via , and on the +## HAL package via . These two files need +## to be implemented somewhat differently on the host side. +## There are usable versions in the source tree. +## +## 3) build libcyginfra.a +## +## 4) allow the whole system to be installed, and all the usual +## makefile targets. + +## The main target is a static library. The problem is naming it +## correctly. automake seems to insist on calling it libcyginfra.a, +## even when compiling it with VC++. Various attempts to use +## cyginfra.lib instead with VC++ have failed. Instead the library +## will always be built as libcyginfra.a, but it may get installed +## as cyginfra.lib. + +noinst_LIBRARIES = libcyginfra.a +libcyginfra_a_SOURCES = assert.cxx \ + trace.cxx \ + checkdata.cxx \ + testcase.cxx + +## Pick up compiler flags etc. from configury +INCLUDES = @ecos_INCLUDES@ +LIBS = @ecos_LIBS@ @ecos_LDADD@ +AM_CFLAGS = @ecos_CFLAGS@ +AM_CXXFLAGS = @ecos_CXXFLAGS@ + +if MSVC +all-local: cyginfra.lib + +cyginfra.lib: libcyginfra.a + $(INSTALL) $< $@ + +clean-local: + $(RM) cyginfra.lib + +install-exec-local: all-local + $(mkinstalldirs) $(DESTDIR)$(libdir) + $(INSTALL) cyginfra.lib $(DESTDIR)$(libdir)/cyginfra.lib + +else + +all-local: +clean-local: + +install-exec-local: libcyginfra.a + $(mkinstalldirs) $(DESTDIR)$(libdir) + $(INSTALL) libcyginfra.a $(DESTDIR)$(libdir)/libcyginfra.a + +endif + +## ---------------------------------------------------------------------------- +## The header files do not all belong in the same directory. This +## causes problems with automake. First list the header files. + +copies = cyg/infra/cyg_type.h \ + cyg/infra/cyg_ass.h \ + cyg/infra/cyg_trac.h \ + cyg/infra/testcase.h \ + cyg/hal/basetype.h \ + pkgconf/infra.h \ + pkgconf/hostinfra.h + +## The headers are not installed as part of the default install +## target, instead a data hook is used. This avoids problems when the +## appropriate directories do not yet exist in the install tree. +noinst_HEADERS = $(copies) + +install-data-local: $(copies) + $(mkinstalldirs) $(DESTDIR)$(includedir) \ + $(DESTDIR)$(includedir)/cyg \ + $(DESTDIR)$(includedir)/cyg/infra \ + $(DESTDIR)$(includedir)/cyg/hal \ + $(DESTDIR)$(includedir)/pkgconf + $(INSTALL_DATA) cyg/infra/cyg_type.h $(DESTDIR)$(includedir)/cyg/infra + $(INSTALL_DATA) cyg/infra/cyg_ass.h $(DESTDIR)$(includedir)/cyg/infra + $(INSTALL_DATA) cyg/infra/cyg_trac.h $(DESTDIR)$(includedir)/cyg/infra + $(INSTALL_DATA) cyg/infra/testcase.h $(DESTDIR)$(includedir)/cyg/infra + $(INSTALL_DATA) cyg/hal/basetype.h $(DESTDIR)$(includedir)/cyg/hal + $(INSTALL_DATA) pkgconf/infra.h $(DESTDIR)$(includedir)/pkgconf + $(INSTALL_DATA) pkgconf/hostinfra.h $(DESTDIR)$(includedir)/pkgconf + +## It is necessary to have an extra set of rules to copy the header files +## into the build tree, so that they are in a sensible location when +## building the sources in this package. There are explicit dependencies +## for all the object files on these headers. +## +## The header file copies should be part of the clean. +CLEANFILES = $(copies) + +cyg/infra/cyg_type.h: cyg_type.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/infra ] ; then true ; else mkdir cyg/infra ; fi + $(INSTALL_DATA) $(<) $(@) + +cyg/infra/cyg_ass.h: cyg_ass.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/infra ] ; then true ; else mkdir cyg/infra ; fi + $(INSTALL_DATA) $(<) $(@) + +cyg/infra/cyg_trac.h: cyg_trac.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/infra ] ; then true ; else mkdir cyg/infra ; fi + $(INSTALL_DATA) $(<) $(@) + +cyg/infra/testcase.h: testcase.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/infra ] ; then true ; else mkdir cyg/infra ; fi + $(INSTALL_DATA) $(<) $(@) + +pkgconf/infra.h : infra.h + @if [ -d pkgconf ] ; then true ; else mkdir pkgconf ; fi + $(INSTALL_DATA) $(<) $(@) + +pkgconf/hostinfra.h : hostinfra.h + @if [ -d pkgconf ] ; then true ; else mkdir pkgconf ; fi + $(INSTALL_DATA) $(<) $(@) + +cyg/hal/basetype.h : basetype.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/hal ] ; then true ; else mkdir cyg/hal ; fi + $(INSTALL_DATA) $(<) $(@) + +## ---------------------------------------------------------------------------- +## Add specific dependencies for all source files + +assert.$(OBJEXT) : Makefile \ + pkgconf/infra.h \ + pkgconf/hostinfra.h \ + cyg/infra/cyg_type.h \ + cyg/hal/basetype.h \ + cyg/infra/cyg_ass.h + +trace.$(OBJEXT) : Makefile \ + pkgconf/infra.h \ + pkgconf/hostinfra.h \ + cyg/infra/cyg_type.h \ + cyg/hal/basetype.h \ + cyg/infra/cyg_ass.h \ + cyg/infra/cyg_trac.h + +checkdata.$(OBJEXT) : Makefile \ + cyg/infra/cyg_ass.h \ + pkgconf/infra.h \ + pkgconf/hostinfra.h \ + cyg/infra/cyg_type.h \ + cyg/hal/basetype.h + +testcase.$(OBJEXT): Makefile \ + cyg/infra/testcase.h \ + cyg/infra/cyg_type.h \ + cyg/hal/basetype.h \ + pkgconf/infra.h \ + pkgconf/hostinfra.h diff --git a/tools/src/infra/Makefile.in b/tools/src/infra/Makefile.in new file mode 100644 index 00000000..d68cec9d --- /dev/null +++ b/tools/src/infra/Makefile.in @@ -0,0 +1,648 @@ +# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +#######ECOSHOSTGPLCOPYRIGHTBEGIN#### +# Copyright (C) 2002 Bart Veer +# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +#######ECOSHOSTGPLCOPYRIGHTEND#### +#######DESCRIPTIONBEGIN#### +######DESCRIPTIONEND#### + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +CC = @CC@ +CXX = @CXX@ +ECOS_REPOSITORY = @ECOS_REPOSITORY@ +EXEEXT = @EXEEXT@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MSVC_SRCDIR = @MSVC_SRCDIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_DIR = @PACKAGE_DIR@ +PACKAGE_INSTALL = @PACKAGE_INSTALL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ +ecos_CFLAGS = @ecos_CFLAGS@ +ecos_CXXFLAGS = @ecos_CXXFLAGS@ +ecos_INCLUDES = @ecos_INCLUDES@ +ecos_LDADD = @ecos_LDADD@ +ecos_LIBS = @ecos_LIBS@ +ecos_infra_incdir = @ecos_infra_incdir@ +ecos_infra_libdir = @ecos_infra_libdir@ +ecos_libcdl_incdir = @ecos_libcdl_incdir@ +ecos_libcdl_libdir = @ecos_libcdl_libdir@ +ecos_tk_includes = @ecos_tk_includes@ +ecos_tk_libs = @ecos_tk_libs@ + +AUTOMAKE_OPTIONS = 1.3 foreign +SUBDIRS = testsuite + +noinst_LIBRARIES = libcyginfra.a +libcyginfra_a_SOURCES = assert.cxx \ + trace.cxx \ + checkdata.cxx \ + testcase.cxx + + +INCLUDES = @ecos_INCLUDES@ +LIBS = @ecos_LIBS@ @ecos_LDADD@ +AM_CFLAGS = @ecos_CFLAGS@ +AM_CXXFLAGS = @ecos_CXXFLAGS@ + +copies = cyg/infra/cyg_type.h \ + cyg/infra/cyg_ass.h \ + cyg/infra/cyg_trac.h \ + cyg/infra/testcase.h \ + cyg/hal/basetype.h \ + pkgconf/infra.h \ + pkgconf/hostinfra.h + + +noinst_HEADERS = $(copies) + +CLEANFILES = $(copies) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/../../acsupport/mkinstalldirs +CONFIG_HEADER = hostinfra.h +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +libcyginfra_a_LIBADD = +libcyginfra_a_OBJECTS = assert.$(OBJEXT) trace.$(OBJEXT) \ +checkdata.$(OBJEXT) testcase.$(OBJEXT) +AR = ar +CXXFLAGS = @CXXFLAGS@ +CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = ./stamp-h.in ChangeLog Makefile.am Makefile.in acconfig.h \ +acinclude.m4 aclocal.m4 config.h.in configure configure.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +DEP_FILES = .deps/assert.P .deps/checkdata.P .deps/testcase.P \ +.deps/trace.P +SOURCES = $(libcyginfra_a_SOURCES) +OBJECTS = $(libcyginfra_a_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .cxx .o .obj .s +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 + cd $(srcdir) && $(ACLOCAL) + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +hostinfra.h: stamp-h + @if test ! -f $@; then \ + rm -f stamp-h; \ + $(MAKE) stamp-h; \ + else :; fi +stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=hostinfra.h:config.h.in \ + $(SHELL) ./config.status + @echo timestamp > stamp-h 2> /dev/null +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in + @if test ! -f $@; then \ + rm -f $(srcdir)/stamp-h.in; \ + $(MAKE) $(srcdir)/stamp-h.in; \ + else :; fi +$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null + +mostlyclean-hdr: + +clean-hdr: + +distclean-hdr: + -rm -f hostinfra.h + +maintainer-clean-hdr: + +mostlyclean-noinstLIBRARIES: + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +distclean-noinstLIBRARIES: + +maintainer-clean-noinstLIBRARIES: + +# FIXME: We should only use cygpath when building on Windows, +# and only if it is available. +.c.obj: + $(COMPILE) -c `cygpath -w $<` + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + -rm -f *.$(OBJEXT) + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +libcyginfra.a: $(libcyginfra_a_OBJECTS) $(libcyginfra_a_DEPENDENCIES) + -rm -f libcyginfra.a + $(AR) cru libcyginfra.a $(libcyginfra_a_OBJECTS) $(libcyginfra_a_LIBADD) + $(RANLIB) libcyginfra.a +.cxx.o: + $(CXXCOMPILE) -c $< +.cxx.obj: + $(CXXCOMPILE) -c `cygpath -w $<` + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" != "." || dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp + +%.o: %.cxx + @echo '$(CXXCOMPILE) -c $<'; \ + $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.cxx + @echo '$(LTCXXCOMPILE) -c $<'; \ + $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +all-recursive-am: hostinfra.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +install-exec-am: install-exec-local +install-exec: install-exec-recursive + +install-data-am: install-data-local +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: +uninstall: uninstall-recursive +all-am: Makefile $(LIBRARIES) $(HEADERS) hostinfra.h all-local +all-redirect: all-recursive-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + + +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-hdr mostlyclean-noinstLIBRARIES \ + mostlyclean-compile mostlyclean-tags mostlyclean-depend \ + mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-hdr clean-noinstLIBRARIES clean-compile clean-tags \ + clean-depend clean-generic mostlyclean-am clean-local + +clean: clean-recursive + +distclean-am: distclean-hdr distclean-noinstLIBRARIES distclean-compile \ + distclean-tags distclean-depend distclean-generic \ + clean-am + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-hdr \ + maintainer-clean-noinstLIBRARIES \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-depend maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ +mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ +clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile install-data-recursive \ +uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck all-recursive-am install-exec-local \ +install-exec-am install-exec install-data-local install-data-am \ +install-data install-am install uninstall-am uninstall all-local \ +all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +@MSVC_TRUE@all-local: cyginfra.lib + +@MSVC_TRUE@cyginfra.lib: libcyginfra.a +@MSVC_TRUE@ $(INSTALL) $< $@ + +@MSVC_TRUE@clean-local: +@MSVC_TRUE@ $(RM) cyginfra.lib + +@MSVC_TRUE@install-exec-local: all-local +@MSVC_TRUE@ $(mkinstalldirs) $(DESTDIR)$(libdir) +@MSVC_TRUE@ $(INSTALL) cyginfra.lib $(DESTDIR)$(libdir)/cyginfra.lib + +@MSVC_FALSE@all-local: +@MSVC_FALSE@clean-local: + +@MSVC_FALSE@install-exec-local: libcyginfra.a +@MSVC_FALSE@ $(mkinstalldirs) $(DESTDIR)$(libdir) +@MSVC_FALSE@ $(INSTALL) libcyginfra.a $(DESTDIR)$(libdir)/libcyginfra.a + +install-data-local: $(copies) + $(mkinstalldirs) $(DESTDIR)$(includedir) \ + $(DESTDIR)$(includedir)/cyg \ + $(DESTDIR)$(includedir)/cyg/infra \ + $(DESTDIR)$(includedir)/cyg/hal \ + $(DESTDIR)$(includedir)/pkgconf + $(INSTALL_DATA) cyg/infra/cyg_type.h $(DESTDIR)$(includedir)/cyg/infra + $(INSTALL_DATA) cyg/infra/cyg_ass.h $(DESTDIR)$(includedir)/cyg/infra + $(INSTALL_DATA) cyg/infra/cyg_trac.h $(DESTDIR)$(includedir)/cyg/infra + $(INSTALL_DATA) cyg/infra/testcase.h $(DESTDIR)$(includedir)/cyg/infra + $(INSTALL_DATA) cyg/hal/basetype.h $(DESTDIR)$(includedir)/cyg/hal + $(INSTALL_DATA) pkgconf/infra.h $(DESTDIR)$(includedir)/pkgconf + $(INSTALL_DATA) pkgconf/hostinfra.h $(DESTDIR)$(includedir)/pkgconf + +cyg/infra/cyg_type.h: cyg_type.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/infra ] ; then true ; else mkdir cyg/infra ; fi + $(INSTALL_DATA) $(<) $(@) + +cyg/infra/cyg_ass.h: cyg_ass.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/infra ] ; then true ; else mkdir cyg/infra ; fi + $(INSTALL_DATA) $(<) $(@) + +cyg/infra/cyg_trac.h: cyg_trac.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/infra ] ; then true ; else mkdir cyg/infra ; fi + $(INSTALL_DATA) $(<) $(@) + +cyg/infra/testcase.h: testcase.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/infra ] ; then true ; else mkdir cyg/infra ; fi + $(INSTALL_DATA) $(<) $(@) + +pkgconf/infra.h : infra.h + @if [ -d pkgconf ] ; then true ; else mkdir pkgconf ; fi + $(INSTALL_DATA) $(<) $(@) + +pkgconf/hostinfra.h : hostinfra.h + @if [ -d pkgconf ] ; then true ; else mkdir pkgconf ; fi + $(INSTALL_DATA) $(<) $(@) + +cyg/hal/basetype.h : basetype.h + @if [ -d cyg ] ; then true ; else mkdir cyg ; fi + @if [ -d cyg/hal ] ; then true ; else mkdir cyg/hal ; fi + $(INSTALL_DATA) $(<) $(@) + +assert.$(OBJEXT) : Makefile \ + pkgconf/infra.h \ + pkgconf/hostinfra.h \ + cyg/infra/cyg_type.h \ + cyg/hal/basetype.h \ + cyg/infra/cyg_ass.h + +trace.$(OBJEXT) : Makefile \ + pkgconf/infra.h \ + pkgconf/hostinfra.h \ + cyg/infra/cyg_type.h \ + cyg/hal/basetype.h \ + cyg/infra/cyg_ass.h \ + cyg/infra/cyg_trac.h + +checkdata.$(OBJEXT) : Makefile \ + cyg/infra/cyg_ass.h \ + pkgconf/infra.h \ + pkgconf/hostinfra.h \ + cyg/infra/cyg_type.h \ + cyg/hal/basetype.h + +testcase.$(OBJEXT): Makefile \ + cyg/infra/testcase.h \ + cyg/infra/cyg_type.h \ + cyg/hal/basetype.h \ + pkgconf/infra.h \ + pkgconf/hostinfra.h + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tools/src/infra/acconfig.h b/tools/src/infra/acconfig.h new file mode 100644 index 00000000..432f5798 --- /dev/null +++ b/tools/src/infra/acconfig.h @@ -0,0 +1,53 @@ +#ifndef CYGONCE_INFRA_CONFIG_H +# define CYGONCE_INFRA_CONFIG_H + +//====================================================================== +// +// acconfig.h +// +// Configuration header for host-side infrastructure +// +//====================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//====================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1998/12/16 +// Version: 0.01 +// +//####DESCRIPTIONEND#### +//====================================================================== + +#undef CYGNUM_INFRA_VERSION +#undef cyg_halint64 +#undef cyg_halcount64 +#undef CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO +#undef CYGNUM_INFRA_TRACE_VECTOR_SIZE + +#endif // CYGONCE_INFRA_CONFIG_H +// End of config.h diff --git a/tools/src/infra/acinclude.m4 b/tools/src/infra/acinclude.m4 new file mode 100644 index 00000000..a24e9864 --- /dev/null +++ b/tools/src/infra/acinclude.m4 @@ -0,0 +1,47 @@ +dnl Process this file with aclocal to get an aclocal.m4 file. Then +dnl process that with autoconf. +dnl ==================================================================== +dnl +dnl acinclude.m4 +dnl +dnl Host side implementation of the eCos infrastructure. +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 2002 Bart Veer +dnl Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 1998/07/14 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl Access shared macros. +dnl AM_CONDITIONAL needs to be mentioned here or else aclocal does not +dnl incorporate the macro into aclocal.m4 +sinclude(../../acsupport/acinclude.m4) diff --git a/tools/src/infra/aclocal.m4 b/tools/src/infra/aclocal.m4 new file mode 100644 index 00000000..5db660d3 --- /dev/null +++ b/tools/src/infra/aclocal.m4 @@ -0,0 +1,208 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4-p5 + +dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +dnl Process this file with aclocal to get an aclocal.m4 file. Then +dnl process that with autoconf. +dnl ==================================================================== +dnl +dnl acinclude.m4 +dnl +dnl Host side implementation of the eCos infrastructure. +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 2002 Bart Veer +dnl Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 1998/07/14 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl Access shared macros. +dnl AM_CONDITIONAL needs to be mentioned here or else aclocal does not +dnl incorporate the macro into aclocal.m4 +sinclude(../../acsupport/acinclude.m4) + +# Define a conditional. + +AC_DEFUN([AM_CONDITIONAL], +[AC_SUBST($1_TRUE) +AC_SUBST($1_FALSE) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi]) + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_REQUIRE([AC_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN([AM_MISSING_PROG], +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + +# Add --enable-maintainer-mode option to configure. +# From Jim Meyering + +# serial 1 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT($USE_MAINTAINER_MODE) + AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + +AC_DEFUN([AM_CONFIG_HEADER], +[AC_PREREQ([2.12]) +AC_CONFIG_HEADER([$1]) +dnl When config.status generates a header, we must update the stamp-h file. +dnl This file resides in the same directory as the config header +dnl that is generated. We must strip everything past the first ":", +dnl and everything past the last "/". +AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl +ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, +<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, +<>; do + case " <<$>>CONFIG_HEADERS " in + *" <<$>>am_file "*<<)>> + echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "<<$>>am_indx" + 1` +done<<>>dnl>>) +changequote([,]))]) + diff --git a/tools/src/infra/assert.cxx b/tools/src/infra/assert.cxx new file mode 100644 index 00000000..27922a53 --- /dev/null +++ b/tools/src/infra/assert.cxx @@ -0,0 +1,329 @@ +//{{{ Banner + +//============================================================================ +// +// assert.cxx +// +// Host side implementation of the infrastructure assertions. +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1998/11/27 +// Version: 0.01 +// Purpose: To provide a host-side implementation of the eCos assertion +// facilities. +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ #include's + +#include "pkgconf/infra.h" +#include "cyg/infra/cyg_type.h" +// Without this symbol the header file has no effect +#define CYGDBG_USE_TRACING +// Make sure that the host-side extensions get prototyped +// as well. +#define CYG_DECLARE_HOST_ASSERTION_SUPPORT +#include "cyg/infra/cyg_ass.h" + +// STDIO is needed for the default assertion handler. +// STDLIB is needed for exit() and the status codes. +#include +#include + +#if defined(__unix__) || defined(__CYGWIN32__) +extern "C" { +#include // Needed for _exit() +} +#endif + +// These are needed for the table of callbacks. +#include +#include +#include + +//}}} + +// ------------------------------------------------------------------------- +// Statics. The host-side assertion code requires two bits of data. +// +// The first identifies the function that should actually get invoked +// when an assertion is triggered. A default implementation is defined +// in this module, but applications may install a replacement. +// +// The second is a table of callback functions that various libraries +// or bits of application code may install. Each such callback gets invoked +// when an assertion triggers. + +// VC++ bogosity. Using a full function pointer prototype in a template +// confuses the compiler. It is still possible to declare the callbacks vector, +// but not any iterators for that vector. A typedef makes the problem go +// away. +typedef void (*cyg_callback_fn)(void (*)(const char*)); + + // The current assertion handler +static bool (*current_handler)( const char*, const char*, cyg_uint32, const char*) = 0; + + // The callback table. +static std::vector > callbacks; + +// ---------------------------------------------------------------------------- +// Many applications will want to handle assertion failures differently +// from the default, for example pipe the output into an emacs buffer +// rather than just generate a file. This routine allows a suitable +// function to be installed. + +extern "C" void +cyg_assert_install_failure_handler( bool(*fn)(const char*, const char*, cyg_uint32, const char*) ) +{ + current_handler = fn; +} + +// ---------------------------------------------------------------------------- +// Various different bits of the system may want to register callback functions +// that get invoked during an assertion failure and that output useful +// data. Typically this might happen in the constructor for a static object. +// A good example of such a callback is the implementation of the trace code. +// +// The implementation requires creating a new entry in the static vector. +// A memory exhaustion exception could occur but there is no sensible way of +// handling it at this level. +// +// Multiple callbacks with the same name are legal. Multiple callbacks with +// the same function are unlikely, but it is probably not worthwhile raising +// an exception (especially since this code may be called from C). +extern "C" void +cyg_assert_install_failure_callback( const char* name, void (*fn)(void (*)(const char*)) ) +{ + callbacks.push_back(std::make_pair(name, fn)); +} + +// ------------------------------------------------------------------------- +// Once an assertion has triggered either the default handler or the +// installed handler will want to invoke all the callbacks. Rather than +// provide direct access to the callback table and require the calling +// code to be in C++, a functional interface is provided instead. +extern "C" void +cyg_assert_failure_invoke_callbacks( + void (*first_fn)(const char*), + void (*data_fn)(const char*), + void (*final_fn)(void) ) +{ + std::vector >::const_iterator i; + + for ( i = callbacks.begin(); i != callbacks.end(); i++ ) { + + if (0 != first_fn) { + (*first_fn)(i->first); + } + if (0 != data_fn) { + (*(i->second))(data_fn); + } + if (0 != final_fn) { + (*final_fn)(); + } + } +} + +// ---------------------------------------------------------------------------- +// The default assertion handler. This assumes that the application is +// a console application with a sensible stderr stream. +// +// First some initial diagnostics are output immediately, in case +// subsequent attempts to output more data cause additional failures. It +// is worthwhile detecting recursive assertion failures. +// +// Assuming the table of callbacks is not empty it is possible to +// output some more data to a file. If possible mkstemp() is used to +// create this file. If mkstemp() is not available then tmpnam() is +// used instead. That function has security problems, albeit not ones +// likely to affect dump files. Once the file is opened the callbacks +// are invoked. Three utilities have to be provided to do the real +// work, and a static is used to keep track of the FILE * pointer. +// +// The testcase tassert8, and in particular the associated Tcl proc +// tassert8_filter in testsuite/cyginfra/assert.exp, has detailed +// knowledge of the output format. Any changes here may need to be +// reflected in that test case. There are also support routines in +// hosttest.exp which may need to be updated. + +static FILE * default_handler_output_file = 0; +static bool body_contains_data = false; + + // output the callback name +static void +default_handler_first_fn(const char* name) +{ + if (0 != default_handler_output_file) { + fprintf(default_handler_output_file, "# {{{ %s\n\n", name); + } + body_contains_data = false; +} + + // output some actual text. +static void +default_handler_second_fn(const char* data) +{ + body_contains_data = true; + if (0 != default_handler_output_file) { + fputs(data, default_handler_output_file); + } +} + + // the end of a callback. +static void +default_handler_final_fn( void ) +{ + + if (0 != default_handler_output_file) { + if (body_contains_data) { + fputs("\n", default_handler_output_file); + } + fputs("# }}}\n", default_handler_output_file); + } +} + + +static void +default_handler(const char* fn, const char* file, cyg_uint32 lineno, const char* msg) +{ + static int invoke_count = 0; + if (2 == invoke_count) { + // The fprintf() immediately below causes an assertion failure + } else if (1 == invoke_count) { + invoke_count++; + fprintf(stderr, "Recursive assertion failure.\n"); + return; + } else { + invoke_count = 1; + } + + // There is an argument for using write() rather than fprintf() here, + // in case the C library has been corrupted. For now this has not been + // attempted. + if (0 == msg) + msg =""; + if (0 == file) + file = ""; + + fprintf(stderr, "Assertion failure: %s\n", msg); + fprintf(stderr, "File %s, line number %lu\n", file, (unsigned long) lineno); + if (0 != fn) + fprintf(stderr, "Function %s\n", fn); + + // Only create a logfile if more information is available. + if (0 != callbacks.size() ) { + + // Use mkstemp() if possible, but only when running on a platform where /tmp + // is likely to be available. +#if defined(HAVE_MKSTEMP) && !defined(_MSC_VER) + char filename[32]; + int fd; + strcpy(filename, "/tmp/ecosdump.XXXXXX"); + fd = mkstemp(filename); + if (-1 == fd) { + fprintf(stderr, "Unable to create a suitable output file for additional data.\n"); + } else { + default_handler_output_file = fdopen(fd, "w"); + if (0 == default_handler_output_file) { + close(fd); + } + } +#else + char filename[L_tmpnam]; + if (0 == tmpnam(filename)) { + fprintf(stderr, "Unable to create a suitable output file for additional data.\n"); + } else { + + // No attempt is made to ensure that the file does not already + // exist. This would require POSIX calls rather than ISO C ones. + // The probability of a problem is considered to be too small + // to worry about. + default_handler_output_file = fopen(filename, "w"); + } +#endif + if (0 == default_handler_output_file) { + fprintf(stderr, "Unable to open output file %s\n", filename); + fputs("No further assertion information is available.\n", stderr); + } else { + fprintf(stderr, "Writing additional output to %s\n", filename); + + // Repeat the information about the assertion itself. + fprintf(default_handler_output_file, "Assertion failure: %s\n", msg); + fprintf(default_handler_output_file, "File %s, line number %lu\n", file, (unsigned long) lineno); + if (0 != fn) + fprintf(default_handler_output_file, "Function %s\n", fn); + fputs("\n", default_handler_output_file); + + // Now for the various callbacks. + cyg_assert_failure_invoke_callbacks( &default_handler_first_fn, + &default_handler_second_fn, &default_handler_final_fn ); + + // And close the file. + fputs("\nEnd of assertion data.\n", default_handler_output_file); + fclose(default_handler_output_file); + } + } + fflush(stderr); +} + +// ---------------------------------------------------------------------------- +// The assertion handler. This is the function that gets invoked when +// an assertion triggers. If a special assertion handler has been installed +// then this gets called. If it returns false or if no special handler is +// available then the default handler gets called instead. Typically the +// user will now have a lot of information about what happened to cause the +// assertion failure. The next stage is to invoke abort() which should +// terminate the program and generate a core dump for subsequent inspection +// (unless of course the application is already running in a debugger session). +// A final call to _exit() should be completely redundant. + +extern "C" void +cyg_assert_fail( const char* fn, const char* file, cyg_uint32 lineno, const char* msg ) +{ + + if ((0 == current_handler) || !(*current_handler)(fn, file, lineno, msg)) { + default_handler(fn, file, lineno, msg); + } + abort(); + _exit(0); +} + +// ---------------------------------------------------------------------------- +// A utility function, primarily intended to be called from inside gdb. +extern "C" void +cyg_assert_quickfail(void) +{ + cyg_assert_fail("gdb", "", 0, "manual call"); +} diff --git a/tools/src/infra/basetype.h b/tools/src/infra/basetype.h new file mode 100644 index 00000000..d1bddc13 --- /dev/null +++ b/tools/src/infra/basetype.h @@ -0,0 +1,98 @@ +#ifndef CYGONCE_HAL_BASETYPE_H +# define CYGONCE_HAL_BASETYPE_H + +//====================================================================== +// +// basetype.h +// +// HAL emulation for the host-side infrastructure. +// +//====================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//====================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1998/07/13 +// Version: 0.01 +// +//####DESCRIPTIONEND#### +//====================================================================== + +// The purpose of this header file is to replicate the functionality +// provided by on the target side. Essentially +// this file has to define endianness. Optionally it can also define +// the correct data types for e.g. cyg_count32 etc. +// +// On the host side portability is achieved by means of autoconf and +// feature tests, as opposed to re-implementing the HAL for each +// platform. In particular there will be a generated header file +// which gets filled in during the configure +// process. +// +// It has been decided that the host side should use exactly the same +// infrastructure header files as the target side (although extra +// functionality may be defined in these header files where +// appropriate). This means that the host side needs to provide +// , even though it does not contain a HAL. +// +// This implementation of reads in the +// configuration header generated by the configure script and adapts +// this information into whatever is required by +// . + +#ifndef CYGONCE_PKGCONF_INFRA_H +# include +#endif + +// The autoconf test for endianness will result in a #define for +// LITTLE_ENDIAN_HOST on appropriate platforms. This needs to be +// converted into a definition of CYG_BYTEORDER as per the target-side +// HAL headers. + +#ifdef WORDS_BIGENDIAN +# define CYG_BYTEORDER CYG_MSBFIRST +#else +# define CYG_BYTEORDER CYG_LSBFIRST +#endif + +// The default definitions for cyg_halint8/16/32 and cyg_halcount8/16/32 +// should be fine (although eventually we may come across a platform +// where int's are 64 bit). 64 bit arithmetic is a bit more of a problem. +// on the majority of systems so there is an autoconf test which will +// generate appropriate #define's for cyg_halint64 and cyg_halcount64, +// which means this header file does not to do anything more. +// cyg_halbool and cyg_halatomic should both be ok. + + +// Any symbols defined in which have been processed +// here should no longer be of any interest, and in the interests of +// reducing name space pollution they get undef'ed here. +#undef WORDS_BIGENDIAN + +#endif // CYGONCE_HAL_BASETYPE_H +// End of basetype.h diff --git a/tools/src/infra/checkdata.cxx b/tools/src/infra/checkdata.cxx new file mode 100644 index 00000000..c54e8f6b --- /dev/null +++ b/tools/src/infra/checkdata.cxx @@ -0,0 +1,74 @@ +//{{{ Banner + +//============================================================================ +// +// checkdata.cxx +// +// Host side implementation of the check_func() and check_data() +// utilities. +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1998/12/02 +// Version: 0.01 +// Purpose: To provide a host-side implementation of two of the +// eCos assertion facilities. facilities. +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ #include's + +#include "cyg/infra/cyg_ass.h" + +//}}} + +// ------------------------------------------------------------------------- +// It is convenient to have cyg_check_data_ptr() and cyg_check_func_ptr() +// in a separate file from cyg_assert_fail(). That way users can override +// cyg_assert_fail() itself in application code without losing access to +// the check_data and check_func routines. +// +// The actual implementation is very limited. It might be possible to +// do better on specific platforms. + +extern "C" cyg_bool +cyg_check_data_ptr( void * ptr ) +{ + return 0 != ptr; +} + +extern "C" cyg_bool +cyg_check_func_ptr ( void (*ptr)(void) ) +{ + return 0 != ptr; +} diff --git a/tools/src/infra/config.h.in b/tools/src/infra/config.h.in new file mode 100644 index 00000000..002ec38e --- /dev/null +++ b/tools/src/infra/config.h.in @@ -0,0 +1,20 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if your processor stores words with the most significant + byte first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + +#undef CYGNUM_INFRA_VERSION +#undef cyg_halint64 +#undef cyg_halcount64 +#undef CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO +#undef CYGNUM_INFRA_TRACE_VECTOR_SIZE + +/* The number of bytes in a int *. */ +#undef SIZEOF_INT_P + +/* The number of bytes in a long. */ +#undef SIZEOF_LONG + +/* Define if you have the mkstemp function. */ +#undef HAVE_MKSTEMP diff --git a/tools/src/infra/configure b/tools/src/infra/configure new file mode 100755 index 00000000..8d5b532a --- /dev/null +++ b/tools/src/infra/configure @@ -0,0 +1,2361 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer" +ac_help="$ac_help + --enable-debug do a debug rather than a release build" +ac_help="$ac_help + --enable-ansi do an ANSI rather than a unicode build" +ac_help="$ac_help + --enable-tracebufsize=X size of the trace buffer" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=assert.cxx + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + +ac_aux_dir= +for ac_dir in ../../acsupport $srcdir/../../acsupport; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in ../../acsupport $srcdir/../../acsupport" 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + + + + echo $ac_n "checking that a separate build tree is being used""... $ac_c" 1>&6 +echo "configure:557: checking that a separate build tree is being used" >&5 + ecos_cwd=`/bin/pwd` + if test "${srcdir}" = "." ; then + srcdir=${ecos_cwd} + fi + if test "${ecos_cwd}" = "${srcdir}" ; then + echo "$ac_t""no" 1>&6 + { echo "configure: error: This configure script should not be run inside the source tree. Instead please use a separate build tree" 1>&2; exit 1; } + else + echo "$ac_t""yes" 1>&6 + fi + + + +# Make sure we can run config.sub. +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:577: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:610: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:663: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:720: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=cyginfra + +VERSION=0.1 + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi + + + +missing_dir=`cd $ac_aux_dir && pwd` +echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 +echo "configure:759: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:772: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:785: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:798: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:811: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + + + + + cat >> confdefs.h <&6 +echo "configure:833: checking whether to enable maintainer-specific portions of Makefiles" >&5 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + MAINT=$MAINTAINER_MODE_TRUE + + + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:859: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:889: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:940: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:972: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 983 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1014: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1019: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1047: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + +for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1083: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CXX="$ac_prog" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CXX="$ac_cv_prog_CXX" +if test -n "$CXX"; then + echo "$ac_t""$CXX" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$CXX" && break +done +test -n "$CXX" || CXX="gcc" + + +echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1115: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 + +ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + +cat > conftest.$ac_ext << EOF + +#line 1126 "configure" +#include "confdefs.h" + +int main(){return(0);} +EOF +if { (eval echo configure:1131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cxx_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cxx_cross=no + else + ac_cv_prog_cxx_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cxx_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 +if test $ac_cv_prog_cxx_works = no; then + { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1157: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 +cross_compiling=$ac_cv_prog_cxx_cross + +echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 +echo "configure:1162: checking whether we are using GNU C++" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gxx=yes +else + ac_cv_prog_gxx=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gxx" 1>&6 + +if test $ac_cv_prog_gxx = yes; then + GXX=yes +else + GXX= +fi + +ac_test_CXXFLAGS="${CXXFLAGS+set}" +ac_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS= +echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 +echo "configure:1190: checking whether ${CXX-g++} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.cc +if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then + ac_cv_prog_cxx_g=yes +else + ac_cv_prog_cxx_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS="$ac_save_CXXFLAGS" +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi + +for ac_declaration in \ + ''\ + '#include ' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat > conftest.$ac_ext < +$ac_declaration +int main() { +exit (42); +; return 0; } +EOF +if { (eval echo configure:1239: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + continue +fi +rm -f conftest* + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1275: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +echo $ac_n "checking for object suffix""... $ac_c" 1>&6 +echo "configure:1303: checking for object suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftest* +echo 'int i = 1;' > conftest.$ac_ext +if { (eval echo configure:1309: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + for ac_file in conftest.*; do + case $ac_file in + *.c) ;; + *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; + esac + done +else + { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; } +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_objext" 1>&6 +OBJEXT=$ac_cv_objext +ac_objext=$ac_cv_objext + +echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 +echo "configure:1327: checking for Cygwin environment" >&5 +if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_cygwin=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_cygwin=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_cygwin" 1>&6 +CYGWIN= +test "$ac_cv_cygwin" = yes && CYGWIN=yes +echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 +echo "configure:1360: checking for mingw32 environment" >&5 +if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_mingw32=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_mingw32=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_mingw32" 1>&6 +MINGW32= +test "$ac_cv_mingw32" = yes && MINGW32=yes + + +echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 +echo "configure:1391: checking for executable suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$CYGWIN" = yes || test "$MINGW32" = yes; then + ac_cv_exeext=.exe +else + rm -f conftest* + echo 'int main () { return 0; }' > conftest.$ac_ext + ac_cv_exeext= + if { (eval echo configure:1401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + for file in conftest.*; do + case $file in + *.c | *.o | *.obj) ;; + *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; + esac + done + else + { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } + fi + rm -f conftest* + test x"${ac_cv_exeext}" = x && ac_cv_exeext=no +fi +fi + +EXEEXT="" +test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} +echo "$ac_t""${ac_cv_exeext}" 1>&6 +ac_exeext=$EXEEXT + + + ecos_CFLAGS="" + ecos_CXXFLAGS="" + ecos_LDADD="" + ecos_INCLUDES="" + ecos_LIBS="" + + + + + + + + + + + + echo $ac_n "checking "for Visual C++"""... $ac_c" 1>&6 +echo "configure:1439: checking "for Visual C++"" >&5 + MSVC="no"; + if test "${CC}" = "cl" ; then + MSVC="yes" + CXX="cl" + MSVC_SRCDIR=${srcdir} + + + + if test "${MSVC}" = "yes" ; then + MSVC_SRCDIR=`cygpath -w ${MSVC_SRCDIR} | tr \\\\\\\\ /` + fi + + + ecos_INCLUDES="${ecos_INCLUDES} \"-I${MSVC_SRCDIR}\"" + ecos_LDADD="-link" + ecos_LIBS="advapi32.lib" + fi + + +if test "${MSVC}" = "yes"; then + MSVC_TRUE= + MSVC_FALSE='#' +else + MSVC_TRUE='#' + MSVC_FALSE= +fi + if test "${MSVC}" = "yes" ; then + echo "$ac_t""unfortunately yes" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + + + + + + + + echo $ac_n "checking "the default compiler flags"""... $ac_c" 1>&6 +echo "configure:1479: checking "the default compiler flags"" >&5 + + ecosflags_enable_debug="no" + # Check whether --enable-debug or --disable-debug was given. +if test "${enable_debug+set}" = set; then + enableval="$enable_debug" + case "${enableval}" in + yes) ecosflags_enable_debug="yes" ;; + *) ecosflags_enable_debug="no" ;; + esac +fi + + + ecosflags_enable_ansi="no" + if test "${MSVC}" = "yes" ; then + # Check whether --enable-ansi or --disable-ansi was given. +if test "${enable_ansi+set}" = set; then + enableval="$enable_ansi" + case "${enableval}" in + yes) ecosflags_enable_ansi="yes" ;; + *) ecosflags_enable_ansi="no" ;; + esac +fi + + fi + + if test "${GCC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Woverloaded-virtual" + elif test "${MSVC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -nologo -W3" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -nologo -W3 -GR -GX" + else + { echo "configure: error: "default flags for ${CC} are not known"" 1>&2; exit 1; } + fi + + if test "${ecosflags_enable_debug}" = "yes" ; then + if test "${GCC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -g -O0" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -g -O0" + elif test "${MSVC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -MDd -Zi" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -MDd -Zi" + fi + else + if test "${GCC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -O0" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -O0" + elif test "${MSVC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -MD -O2" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -MD -O2" + fi + fi + + CFLAGS="${ac_save_CFLAGS}" + CXXFLAGS="${ac_save_CXXFLAGS}" + + echo "$ac_t""done" 1>&6 + + +echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 +echo "configure:1540: checking whether byte ordering is bigendian" >&5 +if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_bigendian=unknown +# See if sys/param.h defines the BYTE_ORDER macro. +cat > conftest.$ac_ext < +#include +int main() { + +#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN + bogus endian macros +#endif +; return 0; } +EOF +if { (eval echo configure:1558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # It does; now see whether it defined to BIG_ENDIAN or not. +cat > conftest.$ac_ext < +#include +int main() { + +#if BYTE_ORDER != BIG_ENDIAN + not big endian +#endif +; return 0; } +EOF +if { (eval echo configure:1573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_bigendian=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_bigendian=no +fi +rm -f conftest* +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +if test $ac_cv_c_bigendian = unknown; then +if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_c_bigendian=no +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_bigendian=yes +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_c_bigendian" 1>&6 +if test $ac_cv_c_bigendian = yes; then + cat >> confdefs.h <<\EOF +#define WORDS_BIGENDIAN 1 +EOF + +fi + + + + + + + echo $ac_n "checking "for a 64 bit data type"""... $ac_c" 1>&6 +echo "configure:1635: checking "for a 64 bit data type"" >&5 +if eval "test \"`echo '$''{'ecos_cv_type_64bit'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + for type in "long" "long long" "__int64"; do + + ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + + if test "$cross_compiling" = yes; then + ctype_64bit="long long" +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ctype_64bit=$type +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ctype_64bit="unknown" +fi +rm -fr conftest* +fi + + ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + + if test "$cross_compiling" = yes; then + cxxtype_64bit="long long" +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + cxxtype_64bit=$type +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + cxxtype_64bit="unknown" +fi +rm -fr conftest* +fi + + ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + + if test "${ctype_64bit}" = "${type}" -a "${cxxtype_64bit}" = "${type}"; then + ecos_cv_type_64bit="${type}" + break + fi + done + +fi + +echo "$ac_t""$ecos_cv_type_64bit" 1>&6 + if test "${ecos_cv_type_64bit}" = ""; then + { echo "configure: error: Unable to figure out how to do 64 bit arithmetic" 1>&2; exit 1; } + else + if test "${ecos_cv_type_64bit}" != "long long"; then + cat >> confdefs.h <> confdefs.h <&6 +echo "configure:1737: checking size of int *" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_int_p'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +int main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) return(1); + fprintf(f, "%d\n", sizeof(int *)); + return(0); +} +EOF +if { (eval echo configure:1756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_int_p=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_int_p=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_int_p" 1>&6 +cat >> confdefs.h <&6 +echo "configure:1776: checking size of long" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +int main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) return(1); + fprintf(f, "%d\n", sizeof(long)); + return(0); +} +EOF +if { (eval echo configure:1795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_long=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_long=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_long" 1>&6 +cat >> confdefs.h <&6 +echo "configure:1820: checking "for __PRETTY_FUNCTION__ support"" >&5 +if eval "test \"`echo '$''{'ecos_cv_c_pretty_function'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + + ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + + cat > conftest.$ac_ext < +int main() { +puts(__PRETTY_FUNCTION__); +; return 0; } +EOF +if { (eval echo configure:1841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + c_ok="yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + c_ok="no" + +fi +rm -f conftest* + ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + + cat > conftest.$ac_ext < +int main() { +puts(__PRETTY_FUNCTION__); +; return 0; } +EOF +if { (eval echo configure:1867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + cxx_ok="yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + cxx_ok="no" + +fi +rm -f conftest* + ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + + if test "${c_ok}" = "yes" -a "${cxx_ok}" = "yes"; then + ecos_cv_c_pretty_function="yes" + fi + +fi + +echo "$ac_t""$ecos_cv_c_pretty_function" 1>&6 + if test "${ecos_cv_c_pretty_function}" = "yes"; then + cat >> confdefs.h <<\EOF +#define CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO 1 +EOF + + fi + + +for ac_func in mkstemp +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1903: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + + +# Check whether --enable-tracebufsize or --disable-tracebufsize was given. +if test "${enable_tracebufsize+set}" = set; then + enableval="$enable_tracebufsize" + + if test "$enableval" = "no" -o "$enableval" = "yes"; then + { echo "configure: error: "--enable-tracebufsize should be given a suitable value"" 1>&2; exit 1; } + else + cat >> confdefs.h < confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile:Makefile.in testsuite/Makefile:testsuite/Makefile.in hostinfra.h:config.h.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g +s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g +s%@MAINT@%$MAINT%g +s%@CC@%$CC%g +s%@CXX@%$CXX%g +s%@RANLIB@%$RANLIB%g +s%@OBJEXT@%$OBJEXT%g +s%@EXEEXT@%$EXEEXT%g +s%@ecos_CFLAGS@%$ecos_CFLAGS%g +s%@ecos_CXXFLAGS@%$ecos_CXXFLAGS%g +s%@ecos_LDADD@%$ecos_LDADD%g +s%@ecos_INCLUDES@%$ecos_INCLUDES%g +s%@ecos_LIBS@%$ecos_LIBS%g +s%@MSVC_SRCDIR@%$MSVC_SRCDIR%g +s%@MSVC_TRUE@%$MSVC_TRUE%g +s%@MSVC_FALSE@%$MSVC_FALSE%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/tools/src/infra/configure.in b/tools/src/infra/configure.in new file mode 100644 index 00000000..4e5f39e2 --- /dev/null +++ b/tools/src/infra/configure.in @@ -0,0 +1,164 @@ +dnl Process this file with autoconf to produce a configure script. +dnl ==================================================================== +dnl +dnl configure.in +dnl +dnl Host side implementation of the eCos infrastructure. +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 2002 Bart Veer +dnl Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 1998/07/13 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl No infrastructure is complete without assertions. +AC_INIT(assert.cxx) + +dnl Pick up the support files from the top-level acsupport directory. +AC_CONFIG_AUX_DIR(../../acsupport) + +ECOS_CHECK_BUILD_ne_SRC + +dnl Other standard options. +AC_CANONICAL_HOST + +dnl This package is called cyginfra, partly for historical reasons +dnl and partly to avoid reorganizing the testsuite subdirectory. +dnl The generated header file may get #include'd indirectly by other +dnl packages, so it is not a good idea to define package and version. +AM_INIT_AUTOMAKE(cyginfra, 0.1,0) +ECOS_SUBST_VERSION(CYGNUM_INFRA_VERSION) +AM_MAINTAINER_MODE + +dnl The package contains a library implemented in C++. It has to be +dnl buildable under NT. Only a static version of the library is +dnl of interest at the moment. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_RANLIB +AC_OBJEXT +AC_EXEEXT +ECOS_PROG_MSVC +ECOS_PROG_STANDARD_COMPILER_FLAGS + +dnl Work out the endianness. The standard macro for this is used +dnl even though it will give warnings at autoconf time. +AC_C_BIGENDIAN + +dnl Work out a suitable datatype for 64 bit arithmetic. +ECOS_TYPE_64bit + +dnl Check the sizes of the pointer and long data types, so that +dnl CYG_ADDRWORD can be defined correctly. +AC_CHECK_SIZEOF(int *) +AC_CHECK_SIZEOF(long) + +dnl See whether or not the compiler provides __PRETTY_FUNCTION__ +ECOS_C_PRETTY_FUNCTION + +dnl What function should be used to create a temporary file? +dnl tmpnam() is deprecated for security reasons. +AC_CHECK_FUNCS(mkstemp) + +dnl -------------------------------------------------------------------- +dnl User-settable options. Currently these are handled via --enable +dnl command line options, in the absence of an accepted and more rational +dnl alternative. + +AC_ARG_ENABLE(tracebufsize,[ --enable-tracebufsize=X size of the trace buffer],[ + if test "$enableval" = "no" -o "$enableval" = "yes"; then + AC_MSG_ERROR("--enable-tracebufsize should be given a suitable value") + else + AC_DEFINE_UNQUOTED(CYGNUM_INFRA_TRACE_VECTOR_SIZE,$enableval) + fi +]) + +dnl -------------------------------------------------------------------- +dnl Directory structures. +dnl +dnl The purpose of this infrastructure implementation is to provide a way +dnl of giving host code access to the same set of assertions and tracing +dnl facilities as are available on the target side. The implementations +dnl of these facilities has to be rather different, for example the host +dnl side has to worry about running in both command-line and GUI tools, +dnl not to mention supporting different languages such as Tcl as well +dnl as C and C++. +dnl +dnl After a successful build there should be a library libcyginfra.a +dnl which can be linked with the application code and which can get +dnl installed. In addition there will be a set of header files. +dnl +dnl The infrastructure exports four main header files: +dnl +dnl cyg/infra/cyg_type.h data types, useful macros, and a +dnl few compiler-related odds and ends +dnl +dnl cyg/infra/cyg_ass.h lots of lovely assertion macros +dnl +dnl cyg/infra/cyg_trac.h lots of lovely trace macros +dnl +dnl cyg/infra/testcase.h routines for use in testcases +dnl +dnl These header files are shared between host and target side, to make +dnl sure that a consistent set of macros is used between the two. There +dnl are a number of host-specific extensions in the header files as +dnl well. +dnl +dnl The header files rely on a number of other header files: +dnl +dnl pkgconf/infra.h +dnl cyg/hal/basetype.h +dnl +dnl Obviously cyg/hal/basetype.h cannot be shared between host and target, +dnl instead it has to depend on autoconf information. +dnl +dnl Sharing pkgconf/infra.h between host and target is slightly more feasible, +dnl especially if we get the configuration tool to a point where it can +dnl be used for both host and target. However for now this would create a +dnl bit of confusion because two configuration systems would be in use, and +dnl it seems better to stick with just autoconf for now. Therefore +dnl pkgconf/infra.h #include's the file generated by autoconf and +dnl generates the appropriate #define's (it is not a good idea to have +dnl autoconf generate pkgconf/infra.h directly, autoconf is slightly too +dnl eager to do substitutions). +dnl +dnl The configuration header file that is normally generated is +dnl config.h. It is more in keeping with eCos conventions to have +dnl a different header file hostinfra.h instead. This can +dnl achieved using the appropriate AM_CONFIG_HEADER macro. +dnl +dnl Making the copies of cyg_type.h etc. is the responsibility of +dnl Makefile.am, configure is responsible only for the makefile and for +dnl hostinfra.h. + +AM_CONFIG_HEADER(hostinfra.h:config.h.in) +AC_OUTPUT(Makefile:Makefile.in testsuite/Makefile:testsuite/Makefile.in) diff --git a/tools/src/infra/cyg_ass.h b/tools/src/infra/cyg_ass.h new file mode 100644 index 00000000..cb7b2c96 --- /dev/null +++ b/tools/src/infra/cyg_ass.h @@ -0,0 +1,599 @@ +#ifndef CYGONCE_INFRA_CYG_ASS_H +#define CYGONCE_INFRA_CYG_ASS_H + +//========================================================================== +// +// cyg_ass.h +// +// Macros and prototypes for the assert system +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1997, 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg from an original by hmt +// Contributors: nickg +// Date: 1997-09-08 +// Purpose: Use asserts to avoid writing duff code. +// Description: Runtime tests that compile to nothing in +// release versions of the code, to allow +// as-you-go testing of alternate builds. +// Usage: #include +// ... +// CYG_ASSERT( pcount > 0, "Number of probes should be > 0!" ); +// +// which can result, for example, in a message of the form: +// ASSERT FAILED: probemgr.cxx:1340, scan_probes() : +// number of probes should be > 0! +// if the boolean "pcount > 0" is false. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#include // for CYGBLD_ATTRIB_NORET + +// ------------------------------------------------------------------------- +// If we do not have a function name macro, define it ourselves + +#ifndef CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO + // __PRETTY_FUNCTION__ does not work +# ifndef __PRETTY_FUNCTION__ // And it is not already defined +# define __PRETTY_FUNCTION__ NULL +# endif +#endif + +// ------------------------------------------------------------------------- +// this is executed to deal with failure - breakpoint it first! + +externC void +cyg_assert_fail( const char* /* psz_func */, const char* /* psz_file */, + cyg_uint32 /* linenum */, const char* /* psz_msg */ ) + CYGBLD_ATTRIB_NORET; + +// ------------------------------------------------------------------------- + +#ifdef CYGDBG_USE_ASSERTS + +// ------------------------------------------------------------------------- +// We define macros and appropriate prototypes for the assert/fail +// system. These are: +// CYG_FAIL - unconditional panic +// CYG_ASSERT - panic if boolean expression is false +// CYG_ASSERTC - compact version of CYG_ASSERT + +# ifdef CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE +# define CYG_ASSERT_DOCALL( _msg_ ) \ + cyg_assert_fail( __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_ ); +# else +# define CYG_ASSERT_DOCALL( _msg_ ) \ + CYG_MACRO_START \ + const char* _tmp1_ = _msg_; \ + _tmp1_ = _tmp1_; \ + cyg_assert_fail( __PRETTY_FUNCTION__, __FILE__, __LINE__, NULL ); \ + CYG_MACRO_END +# endif + +// unconditional failure; use like panic(), coredump() &c. +# define CYG_FAIL( _msg_ ) \ + CYG_MACRO_START \ + CYG_ASSERT_DOCALL( _msg_ ); \ + CYG_MACRO_END + +// conditioned assert; if the condition is false, fail. +# define CYG_ASSERT( _bool_, _msg_ ) \ + CYG_MACRO_START \ + if ( ! ( _bool_ ) ) \ + CYG_ASSERT_DOCALL( _msg_ ); \ + CYG_MACRO_END + +# define CYG_ASSERTC( _bool_ ) \ + CYG_MACRO_START \ + if ( ! ( _bool_ ) ) \ + CYG_ASSERT_DOCALL( #_bool_ );\ + CYG_MACRO_END + +#else // ! CYGDBG_USE_ASSERTS + +// ------------------------------------------------------------------------- +// No asserts: we define empty statements for assert & fail. + +# define CYG_FAIL( _msg_ ) CYG_EMPTY_STATEMENT +# define CYG_ASSERT( _bool_, _msg_ ) CYG_EMPTY_STATEMENT +# define CYG_ASSERTC( _bool_ ) CYG_EMPTY_STATEMENT + +#endif // ! CYGDBG_USE_ASSERTS + +// ------------------------------------------------------------------------- +// Pointer integrity checks. +// These check not only for NULL pointer, but can also check for pointers +// that are outside to defined memory areas of the platform or executable. +// We differentiate between data and function pointers, so that we can cope +// with different formats, and so we can check them against different memory +// regions. + +externC cyg_bool cyg_check_data_ptr(void *ptr); +externC cyg_bool cyg_check_func_ptr(void (*ptr)(void)); + +#ifdef CYGDBG_USE_ASSERTS + +# define CYG_CHECK_DATA_PTR( _ptr_, _msg_ ) \ + CYG_MACRO_START \ + if( !cyg_check_data_ptr((void *)(_ptr_))) \ + CYG_ASSERT_DOCALL( _msg_ ); \ + CYG_MACRO_END + +# define CYG_CHECK_FUNC_PTR( _ptr_, _msg_ ) \ + CYG_MACRO_START \ + if( !cyg_check_func_ptr((void (*)(void))(_ptr_))) \ + CYG_ASSERT_DOCALL( _msg_ ); \ + CYG_MACRO_END + +# define CYG_CHECK_DATA_PTRC( _ptr_ ) \ + CYG_MACRO_START \ + if ( !cyg_check_data_ptr((void *)(_ptr_))) \ + CYG_ASSERT_DOCALL("data pointer (" #_ptr_ ") is valid");\ + CYG_MACRO_END + +# define CYG_CHECK_FUNC_PTRC( _ptr_ ) \ + CYG_MACRO_START \ + if ( !cyg_check_func_ptr((void (*)(void))(_ptr_))) \ + CYG_ASSERT_DOCALL("function pointer (" #_ptr_ ") is valid"); \ + CYG_MACRO_END + +#else // CYGDBG_USE_ASSERTS + +# define CYG_CHECK_DATA_PTR( _ptr_, _msg_ ) CYG_EMPTY_STATEMENT +# define CYG_CHECK_FUNC_PTR( _ptr_, _msg_ ) CYG_EMPTY_STATEMENT +# define CYG_CHECK_DATA_PTRC( _ptr_ ) CYG_EMPTY_STATEMENT +# define CYG_CHECK_FUNC_PTRC( _ptr_ ) CYG_EMPTY_STATEMENT + +#endif // CYGDBG_USE_ASSERTS + +// ------------------------------------------------------------------------- +// Unconditional definitions: + +// Check an object for validity by calling its own checker. +// Usage: +// ClassThing *p = &classobject; +// CYG_ASSERTCLASS( p, "Object at p is broken!" ); + +// this enum gives some options as to how keenly to test; avoids cluttering +// the member function declaration if the implementor wants to do more +// zealous tests themselves. + +enum cyg_assert_class_zeal { + cyg_system_test = -1, + cyg_none = 0, + cyg_trivial, + cyg_quick, + cyg_thorough, + cyg_extreme +}; + +// ------------------------------------------------------------------------- +// Define macros for checking classes: +// +// CYG_ASSERT_CLASS - do proforma check on a class pointer +// CYG_ASSERT_CLASSO - do proforma check on a class object +// CYG_ASSERT_ZERO_OR_CLASS- a class pointer is NULL or valid +// CYG_ASSERT_THIS - "this" is valid +// + 3 compact variants and two aliases for backwards compatibility. +// +// All of these end up going via CYG_ASSERT(), which will be an empty +// statement if CYGDBG_USE_ASSERTS is disabled. There is no need to +// test CYGDBG_USE_ASSERTS again here. +// +// The idiom required is that a class have a member function called +// "bool check_this( cyg_assert_class_zeal ) const" that returns true +// iff the object is OK. This need not be conditionally compiled against +// CYGDBG_USE_ASSERTS but it can be if only this macro is used to +// invoke it. Alternatively it can be invoked by hand with other +// choices from the above enum. + +// Assert the checker function of an object by pointer, or in hand. + +#ifdef __cplusplus + +# ifndef CYG_ASSERT_CLASS_ZEAL +# define CYG_ASSERT_CLASS_ZEAL (cyg_quick) // can be redefined locally +# endif + +# define CYG_ASSERT_CLASS( _pobj_, _msg_ ) \ + CYG_ASSERT( ((0 != (_pobj_)) && \ + (_pobj_)->check_this( CYG_ASSERT_CLASS_ZEAL )), _msg_ ) + +# define CYG_ASSERTCLASS( _pobj_,_msg_) \ + CYG_ASSERT_CLASS( (_pobj_), _msg_ ) + +# define CYG_ASSERT_CLASSO( _obj_, _msg_ ) \ + CYG_ASSERT( (_obj_).check_this( CYG_ASSERT_CLASS_ZEAL ), _msg_ ) + +# define CYG_ASSERTCLASSO( _obj_, _msg_ ) \ + CYG_ASSERT_CLASSO( (_obj_), _msg_ ) + +# define CYG_ASSERT_ZERO_OR_CLASS( _pobj_, _msg_ ) \ + CYG_ASSERT( ((0 == (_pobj_)) || \ + (_pobj_)->check_this( CYG_ASSERT_CLASS_ZEAL )), _msg_ ) + +# define CYG_ASSERT_THIS( _msg_ ) \ + CYG_ASSERT( this->check_this( CYG_ASSERT_CLASS_ZEAL ), _msg_ ) + +# define CYG_ASSERT_CLASSC( _pobj_ ) \ + CYG_ASSERT_CLASS( (_pobj_), "class pointer (" #_pobj_ ") is valid" ) + +# define CYG_ASSERT_CLASSOC( _obj_ ) \ + CYG_ASSERT_CLASSO( (_obj_), "object (" #_obj_ ") is valid" ) + +# define CYG_ASSERT_ZERO_OR_CLASSC( _pobj_ ) \ + CYG_ASSERT_ZERO_OR_CLASS((_pobj_), \ + "class pointer (" #_pobj_ ") is zero or valid") + +# define CYG_ASSERT_THISC( ) \ + CYG_ASSERT_THIS( "\"this\" pointer is valid" ) + +#define CYGDBG_DEFINE_CHECK_THIS \ + bool check_this( cyg_assert_class_zeal zeal ) const; + +#endif // __cplusplus + +// ------------------------------------------------------------------------- +// Some alternative names for basic assertions that we can disable +// individually. +// +// CYG_PRECONDITION - argument checking etc +// CYG_POSTCONDITION - results etc +// CYG_LOOP_INVARIANT - for putting in loops +// +// C++ programmers have class-related variants of all of these. + +#ifdef CYGDBG_INFRA_DEBUG_PRECONDITIONS +# define CYG_PRECONDITION( _bool_ , _msg_ ) CYG_ASSERT( _bool_, _msg_ ) +# define CYG_PRECONDITIONC( _bool_ ) \ + CYG_ASSERT( _bool_, "precondition " #_bool_) +#else +# define CYG_PRECONDITION( _bool_ , _msg_ ) CYG_EMPTY_STATEMENT +# define CYG_PRECONDITIONC( _bool_ ) CYG_EMPTY_STATEMENT +#endif + +#ifdef CYGDBG_INFRA_DEBUG_POSTCONDITIONS +# define CYG_POSTCONDITION( _bool_ , _msg_ ) CYG_ASSERT( _bool_, _msg_ ) +# define CYG_POSTCONDITIONC( _bool_ ) \ + CYG_ASSERT( _bool_, "postcondition " #_bool_) +#else +# define CYG_POSTCONDITION( _bool_ , _msg_ ) CYG_EMPTY_STATEMENT +# define CYG_POSTCONDITIONC( _bool_ ) CYG_EMPTY_STATEMENT +#endif + +#ifdef CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS +# define CYG_LOOP_INVARIANT( _bool_ , _msg_ ) CYG_ASSERT( _bool_, _msg_ ) +# define CYG_LOOP_INVARIANTC( _bool_ ) \ + CYG_ASSERT( _bool_, "loop invariant " #_bool_ ) +#else +# define CYG_LOOP_INVARIANT( _bool_ , _msg_ ) CYG_EMPTY_STATEMENT +# define CYG_LOOP_INVARIANTC( _bool_ ) CYG_EMPTY_STATEMENT +#endif + +#ifdef __cplusplus + +// All variants of _CLASS +# define CYG_PRECONDITION_CLASS( _pobj_, _msg_ ) \ + CYG_PRECONDITION( ((0 != (_pobj_)) && \ + (_pobj_)->check_this(CYG_ASSERT_CLASS_ZEAL)), _msg_) + +# define CYG_PRECONDITION_CLASSC( _pobj_ ) \ + CYG_PRECONDITION_CLASS( (_pobj_), \ + "precondition, class pointer (" #_pobj_ ") is valid" ) + +# define CYG_POSTCONDITION_CLASS( _pobj_, _msg_ ) \ + CYG_POSTCONDITION( ((0 != (_pobj_)) && \ + (_pobj_)->check_this(CYG_ASSERT_CLASS_ZEAL)), _msg_) + +# define CYG_POSTCONDITION_CLASSC( _pobj_ ) \ + CYG_POSTCONDITION_CLASS( (_pobj_), \ + "postcondition, class pointer (" #_pobj_ ") is valid" ) + +# define CYG_LOOP_INVARIANT_CLASS( _pobj_, _msg_) \ + CYG_LOOP_INVARIANT( ((0 != (_pobj_)) && \ + (_pobj_)->check_this(CYG_ASSERT_CLASS_ZEAL)), _msg_) + +# define CYG_LOOP_INVARIANT_CLASSC( _pobj_ ) \ + CYG_LOOP_INVARIANT_CLASS( (_pobj_), \ + "loop invariant, class pointer (" #_pobj_ ") is valid" ) + +// All variants of _CLASSO +# define CYG_PRECONDITION_CLASSO( _obj_, _msg_ ) \ + CYG_PRECONDITION( (_obj_).check_this(CYG_ASSERT_CLASS_ZEAL), _msg_) + +# define CYG_PRECONDITION_CLASSOC( _obj_ ) \ + CYG_PRECONDITION_CLASSO( (_obj_), \ + "precondition, object (" #_obj_ ") is valid" ) + +# define CYG_POSTCONDITION_CLASSO( _obj_, _msg_ ) \ + CYG_POSTCONDITION( (_obj_).check_this(CYG_ASSERT_CLASS_ZEAL), _msg_) + +# define CYG_POSTCONDITION_CLASSOC( _obj_ ) \ + CYG_POSTCONDITION_CLASSO( (_obj_), \ + "postcondition, object (" #_obj_ ") is valid" ) + +# define CYG_LOOP_INVARIANT_CLASSO( _obj_, _msg_) \ + CYG_LOOP_INVARIANT( (_obj_).check_this(CYG_ASSERT_CLASS_ZEAL), _msg_) + +# define CYG_LOOP_INVARIANT_CLASSOC( _obj_ ) \ + CYG_LOOP_INVARIANT_CLASSO( (_obj_), \ + "loop invariant, object (" #_obj_ ") is valid" ) + +// All variants of _ZERO_OR_CLASS +# define CYG_PRECONDITION_ZERO_OR_CLASS( _pobj_, _msg_ ) \ + CYG_PRECONDITION( ((0 == (_pobj_)) || \ + (_pobj_)->check_this(CYG_ASSERT_CLASS_ZEAL)), _msg_) + +# define CYG_PRECONDITION_ZERO_OR_CLASSC( _pobj_ ) \ + CYG_PRECONDITION_ZERO_OR_CLASS( (_pobj_), \ + "precondition, class pointer (" #_pobj_ ") is zero or valid" ) + +# define CYG_POSTCONDITION_ZERO_OR_CLASS( _pobj_, _msg_ ) \ + CYG_POSTCONDITION( ((0 == (_pobj_)) || \ + (_pobj_)->check_this(CYG_ASSERT_CLASS_ZEAL)), _msg_) + +# define CYG_POSTCONDITION_ZERO_OR_CLASSC( _pobj_ ) \ + CYG_POSTCONDITION_ZERO_OR_CLASS( (_pobj_), \ + "postcondition, class pointer (" #_pobj_ ") is zero or valid" ) + +# define CYG_LOOP_INVARIANT_ZERO_OR_CLASS( _pobj_, _msg_) \ + CYG_LOOP_INVARIANT( ((0 == (_pobj_)) || \ + (_pobj_)->check_this(CYG_ASSERT_CLASS_ZEAL)), _msg_) + +# define CYG_LOOP_INVARIANT_ZERO_OR_CLASSC( _pobj_ ) \ + CYG_LOOP_INVARIANT_ZERO_OR_CLASS( (_pobj_), \ + "loop invariant, class pointer (" #_pobj_ ") is zero or valid" ) + +// All variants of _THIS +# define CYG_PRECONDITION_THIS( _msg_ ) \ + CYG_PRECONDITION( this->check_this(CYG_ASSERT_CLASS_ZEAL), _msg_) + +# define CYG_PRECONDITION_THISC() \ + CYG_PRECONDITION_THIS( "precondition, \"this\" is valid" ) + +# define CYG_POSTCONDITION_THIS( _msg_ ) \ + CYG_POSTCONDITION( this->check_this(CYG_ASSERT_CLASS_ZEAL), _msg_) + +# define CYG_POSTCONDITION_THISC() \ + CYG_POSTCONDITION_THIS( "postcondition, \"this\" is valid" ) + +# define CYG_LOOP_INVARIANT_THIS( _msg_) \ + CYG_LOOP_INVARIANT( this->check_this(CYG_ASSERT_CLASS_ZEAL), _msg_) + +# define CYG_LOOP_INVARIANT_THISC() \ + CYG_LOOP_INVARIANT_THIS( "loop invariant, \"this\" is valid" ) + +#endif // __cplusplus + +// ------------------------------------------------------------------------- +// Invariants. These are a bit more interesting. The ordinary invariants +// take an arbitrary boolean expression, and C++ does not provide any way +// of evaluating this expression automatically on entry and exit - any +// attempt to use local objects leads to trying to evaluate the expression +// when it is not in scope. This problem does not arise with objects. +// +// For C++ objects it is possible to do a bit better. A template can be +// used to create a local object whose constructor will validate the +// target object and whose destructor will validate the target object +// again. Unfortunately it is necessary to pass the type as well as +// the object: typeof() is a gcc extension, and RTTI's typeid facility +// would provide the derived class and not what we actually want. + +#ifdef CYGDBG_INFRA_DEBUG_INVARIANTS + +# define CYG_INVARIANT( _bool_, _msg_ ) \ + CYG_MACRO_START \ + if ( ! ( _bool_ ) ) \ + CYG_ASSERT_DOCALL( _msg_ ); \ + CYG_MACRO_END + +# define CYG_INVARIANTC( _bool_ ) \ + CYG_MACRO_START \ + if ( ! ( _bool_ ) ) \ + CYG_ASSERT_DOCALL( "invariant (" #_bool_ ")" ); \ + CYG_MACRO_END + +# ifdef __cplusplus +// NOTE: if the compiler does not manage to inline the appropriate +// template functions then the impact on code size and performance becomes +// rather large. But there are significant performance overheads anyway +// simply because of the call to check_this()... +// +template class __CygInvariantObject { + + const X* rep; + + private: + // Prevent access to the default constructors. + __CygInvariantObject() { } + __CygInvariantObject( const __CygInvariantObject& arg ) { } + __CygInvariantObject & operator=( const __CygInvariantObject & arg) { return *this; } + + public: + __CygInvariantObject( X* arg, const char* msg ) : rep(arg) { + if ( !rep->check_this( CYG_ASSERT_CLASS_ZEAL ) ) + CYG_ASSERT_DOCALL( msg ); + } + __CygInvariantObject( X& arg, const char* msg ) : rep(&arg) { + if ( !rep->check_this( CYG_ASSERT_CLASS_ZEAL ) ) + CYG_ASSERT_DOCALL( msg ); + } + __CygInvariantObject( const X* arg, const char* msg ) : rep(arg) { + if ( !rep->check_this( CYG_ASSERT_CLASS_ZEAL ) ) + CYG_ASSERT_DOCALL( msg ); + } + __CygInvariantObject( const X& arg, const char* msg ) : rep(&arg) { + if ( !rep->check_this( CYG_ASSERT_CLASS_ZEAL ) ) + CYG_ASSERT_DOCALL( msg ); + } + ~__CygInvariantObject( ) { + if ( !rep->check_this( CYG_ASSERT_CLASS_ZEAL ) ) + CYG_ASSERT_DOCALL( "invariant, object valid on exit" ); + rep = 0; + }; +}; + +// +// These macros provide sensible concatenation facilities at +// the C preprocessor level, getting around complications in the +// macro expansion rules related to __LINE__ and __FILE__. + +# define __CYG_INVARIANT_CLASSNAME_AUX( a, b) a ## b +# define __CYG_INVARIANT_CLASSNAME( a, b ) \ + __CYG_INVARIANT_CLASSNAME_AUX( a, b ) + + +// These macro definitions do not use CYG_MACRO_START because +// I do not want the scope of the local objects to get confused. +// +// The first line of the macro expansion specifies the type of +// the local object being created. The second line invents a +// name for this object. The third line provides command-line +// arguments. + +# define CYG_INVARIANT_CLASS( _type_, _pobj_, _msg_ ) \ + __CygInvariantObject<_type_> \ + __CYG_INVARIANT_CLASSNAME( __invariant_class_, __LINE__ ) \ + ( _pobj_, _msg_ ) + +# define CYG_INVARIANT_CLASSC( _type_, _pobj_ ) \ + __CygInvariantObject<_type_> \ + __CYG_INVARIANT_CLASSNAME( __invariant_class_, __LINE__ ) \ + ( _pobj_, "invariant, class pointer (" #_pobj_ ") is valid" ) + +# define CYG_INVARIANT_CLASSO( _type_, _obj_, _msg_ ) \ + __CygInvariantObject<_type_> \ + __CYG_INVARIANT_CLASSNAME( __invariant_class_, __LINE__ ) \ + ( _obj_, _msg_ ) + +# define CYG_INVARIANT_CLASSOC( _type_, _obj_ ) \ + __CygInvariantObject<_type_> \ + __CYG_INVARIANT_CLASSNAME( __invariant_class_, __LINE__ ) \ + ( _obj_, "invariant, object (" #_obj_ ") is valid" ) + +# define CYG_INVARIANT_THIS( _type_, _msg_ ) \ + __CygInvariantObject<_type_> \ + __CYG_INVARIANT_CLASSNAME( __invariant_class_, __LINE__ ) \ + ( this, _msg_ ) + +# define CYG_INVARIANT_THISC( _type_ ) \ + __CygInvariantObject<_type_> \ + __CYG_INVARIANT_CLASSNAME( __invariant_class_, __LINE__ ) \ + ( this, "invariant, \"this\" is valid" ) + +# endif // __cplusplus + +#else // !CYGDBG_INFRA_DEBUG_INVARIANTS + +# define CYG_INVARIANT( _bool_, _msg_ ) CYG_EMPTY_STATEMENT +# define CYG_INVARIANTC( _bool_ ) CYG_EMPTY_STATEMENT + +# ifdef __cplusplus + +# define CYG_INVARIANT_CLASS( _type_, _pobj_, _msg_ ) +# define CYG_INVARIANT_CLASSC( _type_, _pobj_ ) +# define CYG_INVARIANT_CLASSO( _type_, _obj_, _msg_ ) +# define CYG_INVARIANT_CLASSOC( _type_, _obj_ ) +# define CYG_INVARIANT_THIS( _type_, _msg_ ) +# define CYG_INVARIANT_THISC( _type_ ) + +# endif + +#endif // CYGDBG_INFRA_DEBUG_INVARIANTS + +// ------------------------------------------------------------------------- +// Compile time failure; like #error but in a macro so we can use it in +// other definitions. +// +// Usage: +// #define new CYG_COMPILETIMEFAIL( "Do NOT use new!") + +#define CYG_COMPILETIMEFAIL( _msg_ ) !!!-- _msg_ --!!! + + +// ------------------------------------------------------------------------- +// The host-side implementation of the infrastructure provides a number +// of additional functions that allow applications to provide their own +// implementation of cyg_assert_fail(). This is not strictly necessary +// since the presence of cyg_assert_fail() in the application would +// override the one in the library anyway, but it is useful to make +// certain functionality more readily available. +// +// These declarations are only available if the symbol +// CYG_DECLARE_HOST_ASSERTION_SUPPORT is defined. +#ifdef CYG_DECLARE_HOST_ASSERTION_SUPPORT + +// The default assertion handler writes its output to a file and +// if possible a suitable message to stdout. It is possible to +// install an alternative handler. If this alternative returns false +// then the default handler will be invoked instead, otherwise the +// application will exit. +externC void cyg_assert_install_failure_handler( + bool (*)(const char* /* psz_func */, + const char* /* psz_file */, + cyg_uint32 /* linenum */, + const char* /* psz_msg */) ); + +// Register a callback that should get invoked as part of handling an +// assertion failure and that will typically produce some additional +// output. For example the trace code will install a callback to output +// trace information. +// +// The first argument is a string identifying the callback. The second +// argument is a function pointer for the callback itself, whose +// argument is another function that can be invoked for output. +externC void cyg_assert_install_failure_callback( + const char* /* name */, + void (*)( void (*)(const char*) )); + +// This function can be called by assert failure handlers to invoke +// the installed callbacks. The three arguments are function pointers +// that get invoked prior to callback invocation, by the callback itself, +// and after each callback. In the first case the argument will be the +// callback name. +externC void cyg_assert_failure_invoke_callbacks( + void (*)(const char* /* name */), + void (*)(const char* /* callback data */ ), + void (*)(void) ); + +// This function is intended to be called from inside gdb instead of +// cyg_assert_fail(),, without the need to specify a filename or +// anything else. +externC void cyg_assert_quickfail(void); + +#endif // CYG_DECLARE_HOST_ASSERTION_SUPPORT + +// ------------------------------------------------------------------------- + +#endif // CYGONCE_INFRA_CYG_ASS_H multiple inclusion protection +// EOF cyg_ass.h diff --git a/tools/src/infra/cyg_trac.h b/tools/src/infra/cyg_trac.h new file mode 100644 index 00000000..5908734e --- /dev/null +++ b/tools/src/infra/cyg_trac.h @@ -0,0 +1,1648 @@ +#ifndef CYGONCE_INFRA_CYG_TRAC_H +#define CYGONCE_INFRA_CYG_TRAC_H + +//========================================================================== +// +// cyg_trac.h +// +// Macros and prototypes for the tracing system +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg from an original by hmt +// Contributors: nickg +// Date: 1998-04-23 +// Purpose: Use traces to log procedure entry, and "print" stuff +// Description: Runtime logging messages that compile to nothing in +// release versions of the code, to allow +// as-you-go tracing of alternate builds. +// Usage: #include +// ... +// CYG_TRACE2( PIPE_TRACE, "pipe %x, data %d", ppipe, oword ); +// +// which can result, for example, in a message of the form: +// "TRACE: pipemgr.cxx:1340, write_pipe(): pipe 0x8004c, data 17" +// +//####DESCRIPTIONEND#### +// + +/**************************************************************************** + +Explicit tracing +================ + +CYG_TRACE0( bool, msg ); +CYG_TRACE1( bool, msg, arg1 ); +CYG_TRACE2( bool, msg, arg1, arg2 ); +.... +CYG_TRACE8( bool, msg, .... [with 8 args] ); + +In general, the bool controls whether or not the tracing occurs for a +particular invocation of the macro. The msg is a printf-style string, +though exactly which formats are supported depends on the underlying +implementation. Typically, at least %d, %x, %08x, %c and %s will be +supported. Of course a most compact implementation might print + + TRACE:z1dbuff.c[92]get_nextdata(): data pointer %x offset %d: 42BD8 1C + +or some such, leaving you to work it out for yourself. + +It is expected that the boolean would rarely actually be a complex +expression; it is more likely that it would either be "1", tracing being +controlled for the whole compilation unit or subsystem by means of the +CYGDBG_USE_TRACING symbol, or a local symbol for tracing over the whole +file, defined to 0 or to 1. For runtime control of tracing in a debugging +session, it is typical to use symbols defined to expressions such as: + + static int xxx_trace = 0; + #define TL1 (0 < xxx_trace) + #define TL2 (1 < xxx_trace) + +so you set xxx_trace to 1 to enable those messages conditioned by TL1 +(trace level 1) and so on. + + CYG_TRACE1( TL1, "Major argument is %d", zz ); + CYG_TRACE4( TL2, "...minor details %d %d %d %d", m1, m2, m3 ,m4 ); + +To assist with the case where the same symbol or expression is used +throughout a compilation unit, the programmer can define the symbol +CYG_TRACE_USER_BOOL as they choose and then use convenience macros with the +suffix 'B' in the obvious manner: + + #define CYG_TRACE_USER_BOOL (xxx_trace > 0) + CYG_TRACE2B( "Counters are %d, %d", countlo, counthi ); + +For the case where you just want to print a load of numbers in hex, or +decimal, convenience suffices X, D and Y are provided. X uses %08x, D %d +and Y an unadorned %x for each argument. + + CYG_TRACE3D( TL2, m1, m2, d ); + +If you want to do something similar but with a little more comment, the +names (strictly spellings) of the variables you are printing can be used by +appending a V to the X, D or Y. + + CYG_TRACE3DV( TL2, m1, m2, d ); + +might output: + + TRACE:z1dbuff.c[92]get_nextdata(): m1=23 m2=-4 d=55 + +These conveniences can be combined, and they apply equally to tracing with +up to 8 variables; the B for Bool goes last: + + CYG_TRACE4DVB( i, i*i, i*i*i, i*i*i*i ); + +might output: + + TRACE:table.c[12]main(): i=3 i*i=9 i*i*i=27 i*i*i*i=81 + + +Function Tracing +================ + +There are also facities for easily reporting function entry and exit, +printing the function arguments, and detecting returns without logging (or +without a value!). + +The basic facility is + + CYG_REPORT_FUNCTION(); + +In C, place this between the local variable declarations and the first +statement or errors will ensue. C++ is more flexible; place the macro as +the first line of all functions you wish to trace. The following +variations are also provided: + + CYG_REPORT_FUNCTYPE( exitmsg ) provide a printf string for the type + of the returned value + CYG_REPORT_FUNCNAME( name ) supply a function name explicitly, for + if __FUNCTION__ is not supported + CYG_REPORT_FUNCNAMETYPE( name, exitmsg ) both of the above extensions + +These are unconditional; the assumption is that if function reporting is +used at all it will be used for all functions within a compilation unit. +However, it is useful to be able to control function reporting at finer +grain without editing the source files concerned, at compile time or at +runtime. To support this, conditioned versions (with suffix 'C') are +provided for the above four macros, which only procduce trace output if the +macro CYG_REPORT_USER_BOOL evaluates true. + + CYG_REPORT_FUNCTIONC() + CYG_REPORT_FUNCNAMEC( name ) + CYG_REPORT_FUNCTYPEC( exitmsg ) + CYG_REPORT_FUNCNAMETYPEC( name, exitmsg ) + +You can define CYG_REPORT_USER_BOOL to anything you like before invoking +these macros; using a simple -DCYG_REPORT_USER_BOOL=0 or ...=1 on the +compiler command line would do the trick, but there is more flexibility to +be gained by something like: + + #define CYG_REPORT_USER_BOOL (reporting_bool_FOO) + #ifdef TRACE_FOO + int reporting_bool_FOO = 1; + #else + int reporting_bool_FOO = 0; + #endif + +where FOO relates to the module name. Thus an external symbol sets the +default, but it can be overridden in a debugging session by setting the +variable reporting_bool_FOO. + +Note that the condition applied to the initial CYG_REPORT_FUNC...() macro +controls all function-related reporting (not tracing) from that function; +the underlying mechanisms still operate even if no output is created. Thus +no conditioned variants of CYG_REPORT_FUNCARG[s] nor of CYG_REPORT_RETURN +are needed. + +Examples: + int myfunction() + { + CYG_REPORT_FUNCTYPE( "recode is %d" ); + +A function return is traced using + + CYG_REPORT_RETURN() a void return + CYG_REPORT_RETVAL( value ) returning a value + +With the CYG_REPORT_FUNCTYPE example, the latter might produce a message +like: + + TRACE:myprog.c[40]fact(): enter + TRACE:myprog.c[53]fact(): retcode is 24 + +It is also useful to trace the values of the arguments to a function: + CYG_REPORT_FUNCARGVOID confirms that the function is void + CYG_REPORT_FUNCARG1( format, arg ) printf-style + to + CYG_REPORT_FUNCARG8( format, arg1...arg8 ) printf-style + +The CYG_REPORT_FUNCARG[1-8] macros are also offered with the convenience +extensions: D, X, or Y, and V like the explicit tracing macros. For +example: + + int fact( int number ) + { + CYG_REPORT_FUNCTYPE( "recode is %d" ); + CYG_REPORT_FUNCARG1DV( number ); + int result = number; + while ( --number > 1 ) result *= number + CYG_REPORT_RETVAL( result ); + return result; + } + +might produce: + + TRACE:myprog.c[40]fact(): enter + TRACE:myprog.c[40]fact(): number=4 + TRACE:myprog.c[53]fact(): retcode is 24 + +If no exit message is provided, a default of %08x is used. + + +General Configury +================= + +If CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO is *not* defined, it is assumed +that __PRETTY_FUNCTION__ or equivalents do not exist, so no function name +tracing is possible; only file and line number. + +If CYGDBG_INFRA_DEBUG_TRACE_MESSAGE is *not* defined, the message and +arguments to all tracing macros are not used; only "execution was here" +type information, by file, function and line number, is available. This +can greatly reduce the size of an image with tracing disabled, which may be +crucial in debugging on actual shipped hardware with limited memory. + +If configured for buffered tracing then CYG_TRACE_PRINT() can be used to +output the contents of the trace buffer on demand. + +CYG_TRACE_DUMP() outputs a form of "core dump" containing info on the +scheduler and threads at the time. This information will be invalid if +the kernel is not running. + +C/C++: in C++ the function reporting is implemented using a class object +with a destructor; this allows reporting of a return which has not been +explicitly reported, and detection of accidental multiple return reports. +This helps you write the function reporting correctly. In C it is not +possible to be so sophisticated, so the implementation is not so helpful in +detecting errors in the use of the tracing system. + +Note that for all of the above variations, the internal API to the +functions which are called in consequence of tracing remains the same, so +these variations can be mixed in the same executable, by configuring the +tracing macros differently in different compilation units or subsystems. + + +Summary +======= + +Explicit tracing +---------------- + +CYG_TRACE0( bool, msg ) if bool, print msg +CYG_TRACE1( bool, msg, arg ) if bool, printf-style + to +CYG_TRACE8( bool, msg, arg1...arg8 ) if bool, printf-style + +CYG_TRACE0B( msg, args... ) to CYG_TRACE8B() use CYG_TRACE_USER_BOOL + +CYG_TRACE1X( bool, args... ) to CYG_TRACE8X() print args using %08x +CYG_TRACE1Y( bool, args... ) to CYG_TRACE8Y() print args using %x +CYG_TRACE1D( bool, args... ) to CYG_TRACE8D() print args using %d + +CYG_TRACE1XV( bool, args... ) to CYG_TRACE8XV() print args using "arg=%08x" +CYG_TRACE1YV( bool, args... ) to CYG_TRACE8YV() print args using "arg=%x" +CYG_TRACE1DV( bool, args... ) to CYG_TRACE8DV() print args using "arg=%d" + +CYG_TRACE1XB( args... ) to CYG_TRACE8XB() print using %08x, no bool +CYG_TRACE1YB( args... ) to CYG_TRACE8YB() print using %x, no bool +CYG_TRACE1DB( args... ) to CYG_TRACE8DB() print using %d, no bool + +CYG_TRACE1XVB( args... ) to CYG_TRACE8XVB() use "arg=%08x", no bool +CYG_TRACE1YVB( args... ) to CYG_TRACE8YVB() use "arg=%x", no bool +CYG_TRACE1DVB( args... ) to CYG_TRACE8DVB() use "arg=%d", no bool + +Function tracing +---------------- + +CYG_REPORT_FUNCTION() default function entry +CYG_REPORT_FUNCNAME( name ) name the function +CYG_REPORT_FUNCTYPE( exitmsg ) printf for retval +CYG_REPORT_FUNCNAMETYPE( name, exitmsg ) both + +CYG_REPORT_FUNCTIONC() as above, but conditional +CYG_REPORT_FUNCNAMEC( name ) on CYG_REPORT_USER_BOOL +CYG_REPORT_FUNCTYPEC( exitmsg ) however it is defined +CYG_REPORT_FUNCNAMETYPEC( name, exitmsg ) ... + +CYG_REPORT_RETURN() void function exit +CYG_REPORT_RETVAL( value ) returning value + +CYG_REPORT_FUNCARGVOID() void function entry +CYG_REPORT_FUNCARG1( format, arg ) printf-style + to +CYG_REPORT_FUNCARG8( format, arg1...arg8 ) printf-style + +CYG_REPORT_FUNCARG1X( arg ) + to +CYG_REPORT_FUNCARG8X( arg1...arg8 ) use %08x +CYG_REPORT_FUNCARG1Y... use %x +CYG_REPORT_FUNCARG1D... use %d + +CYG_REPORT_FUNCARG1XV... use "arg=%08x" +CYG_REPORT_FUNCARG1YV... use "arg=%x" +CYG_REPORT_FUNCARG1DV... use "arg=%d" + +Other +----- + +CYG_TRACE_DUMP() dumps kernel state +CYG_TRACE_PRINT() prints buffered tracing + + +--------------------------------------------------------------------------- + +Internal Documentation +====================== + +The required functions which are used by the tracing macros are + + externC void + cyg_tracenomsg( const char *psz_func, const char *psz_file, cyg_uint32 linenum ); + + externC void + cyg_tracemsg( cyg_uint32 what, + const char *psz_func, const char *psz_file, cyg_uint32 linenum, + const char *psz_msg ); + + externC void + cyg_tracemsg2( cyg_uint32 what, + const char *psz_func, const char *psz_file, cyg_uint32 linenum, + const char *psz_msg, + CYG_ADDRWORD arg0, CYG_ADDRWORD arg1 ); + // extended in the obvious way for 4,6,8 arguments + +These functions should expect psz_func and psz_file to possibly be NULL in +case those facilities are not available in the compilation environment, and +do something safe in such cases. A NULL message should really be dealt +with safely also, just logging "execution here" info like cyg_tracenomsg(). + +Discussion of possible underlying implementations +------------------------------------------------- + +It is intended that the functions that get called can simply print the info +they are given in as fancy a format as you like, or they could do the +printf-type formatting and log the resulting text in a buffer. They get +told the type of event (function-entry, function-arguments, function-exit +or plain tracing info) and so can perform fancy indenting, for example, to +make call stack inspection more obvious to humans. It is also intended +that a more compact logging arrangement be possible, for example one which +records, in 32-bit words (CYG_ADDRWORDs), the addresses of the file, +function and msg strings, the line number and the arguments. This has the +implication that the msg string should not be constructed dynamically but +be static ie. a plain quoted C string. The number of arguments also must +be recorded, and if it is chosen to save string arguments in the buffer +rather than just their addresses (which could be invalid by the time the +logged information is processed) some flagging of which arguments are +strings must be provided. The system could also be extended to deal with +floats of whichever size fir in a CYG_ADDRWORD; these would probably +require special treatment also. With these considerations in mind, the +maximum number of parameters in a single trace message has been set to 8, +so that a byte bitset could be used to indicate which arguments are +strings, another for those which are floats, and the count of arguments +also fits in a byte as number or a bitset. + + +****************************************************************************/ + +#include + +#include + +// ------------------------------------------------------------------------- +// CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO is dealt with in cyg_ass.h. +// ------------------------------------------------------------------------- + +#ifdef CYGDBG_USE_TRACING + +// ------------------------------------------------------------------------- +// We define macros and appropriate prototypes for the trace/fail +// system. These are: +// CYG_TRACE0..8 - trace if boolean +// CYG_TRACEPROC - default no comment proc entry +// CYG_TRACEPROCOUT - default no comment proc exit +// CYG_TRACE_DUMP - outputs a form of "core dump", including the state +// of the kernel scheduler, threads, etc. +// CYG_TRACE_PRINT - Forces manual output of any trace info that has +// been buffered up. + +// these are executed to deal with tracing - breakpoint? + +externC void +cyg_tracenomsg( const char *psz_func, const char *psz_file, cyg_uint32 linenum ); + +externC void +cyg_trace_dump(void); + +#define CYG_TRACE_DUMP() cyg_trace_dump() + +#ifdef CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER + +externC void +cyg_trace_print(void); + +#define CYG_TRACE_PRINT() cyg_trace_print() + +#else +#define CYG_TRACE_PRINT() CYG_EMPTY_STATEMENT +#endif + +// provide every other one of these as a space/caller bloat compromise. + +# ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +enum cyg_trace_what{ + cyg_trace_trace = 0, + cyg_trace_enter, + cyg_trace_args, + cyg_trace_return, +// cyg_trace_, +// cyg_trace_, +}; + +externC void +cyg_tracemsg( cyg_uint32 what, + const char *psz_func, const char *psz_file, cyg_uint32 linenum, + const char *psz_msg ); + +externC void +cyg_tracemsg2( cyg_uint32 what, + const char *psz_func, const char *psz_file, cyg_uint32 linenum, + const char *psz_msg, + CYG_ADDRWORD arg0, CYG_ADDRWORD arg1 ); +externC void +cyg_tracemsg4( cyg_uint32 what, + const char *psz_func, const char *psz_file, cyg_uint32 linenum, + const char *psz_msg, + CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, + CYG_ADDRWORD arg2, CYG_ADDRWORD arg3 ); +externC void +cyg_tracemsg6( cyg_uint32 what, + const char *psz_func, const char *psz_file, cyg_uint32 linenum, + const char *psz_msg, + CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, + CYG_ADDRWORD arg2, CYG_ADDRWORD arg3, + CYG_ADDRWORD arg4, CYG_ADDRWORD arg5 ); +externC void +cyg_tracemsg8( cyg_uint32 what, + const char *psz_func, const char *psz_file, cyg_uint32 linenum, + const char *psz_msg, + CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, + CYG_ADDRWORD arg2, CYG_ADDRWORD arg3, + CYG_ADDRWORD arg4, CYG_ADDRWORD arg5, + CYG_ADDRWORD arg6, CYG_ADDRWORD arg7 ); + +#endif // CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +// ------------------------------------------------------------------------- + +# ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +# define CYG_TRACE_docall0( _msg_ ) \ + cyg_tracemsg( cyg_trace_trace, \ + __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_ ); + +# define CYG_TRACE_docall2( _msg_, _arg0_, _arg1_ ) \ + cyg_tracemsg2( cyg_trace_trace, \ + __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_, \ + (CYG_ADDRWORD)_arg0_, (CYG_ADDRWORD)_arg1_ ); + +# define CYG_TRACE_docall4( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_ ) \ + cyg_tracemsg4( cyg_trace_trace, \ + __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_, \ + (CYG_ADDRWORD)_arg0_, (CYG_ADDRWORD)_arg1_, \ + (CYG_ADDRWORD)_arg2_, (CYG_ADDRWORD)_arg3_ ); + +# define CYG_TRACE_docall6( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_, \ + _arg4_, _arg5_ ) \ + cyg_tracemsg6( cyg_trace_trace, \ + __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_, \ + (CYG_ADDRWORD)_arg0_, (CYG_ADDRWORD)_arg1_, \ + (CYG_ADDRWORD)_arg2_, (CYG_ADDRWORD)_arg3_, \ + (CYG_ADDRWORD)_arg4_, (CYG_ADDRWORD)_arg5_ ); + +# define CYG_TRACE_docall8( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_, \ + _arg4_, _arg5_, _arg6_, _arg7_ ) \ + cyg_tracemsg8( cyg_trace_trace, \ + __PRETTY_FUNCTION__, __FILE__, __LINE__, _msg_, \ + (CYG_ADDRWORD)_arg0_, (CYG_ADDRWORD)_arg1_, \ + (CYG_ADDRWORD)_arg2_, (CYG_ADDRWORD)_arg3_, \ + (CYG_ADDRWORD)_arg4_, (CYG_ADDRWORD)_arg5_, \ + (CYG_ADDRWORD)_arg6_, (CYG_ADDRWORD)_arg7_ ); + +# else // do not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +# define CYG_TRACE_docall0( _msg_ ) \ + cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); + +# define CYG_TRACE_docall2( _msg_, _arg0_, _arg1_ ) \ + cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); + +# define CYG_TRACE_docall4( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_ ) \ + cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); + +# define CYG_TRACE_docall6( _msg_, _arg0_, _arg1_ , _arg2_, _arg3_, \ + _arg4_, _arg5_ ) \ + cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); + +# define CYG_TRACE_docall8( _msg_, _arg0_, _arg1_, _arg2_, _arg3_, \ + _arg4_, _arg5_, _arg6_, _arg7_ ) \ + cyg_tracenomsg( __PRETTY_FUNCTION__, __FILE__, __LINE__ ); + +#endif + +// ------------------------------------------------------------------------- +// Conditioned trace; if the condition is false, fail. + +#define CYG_TRACE0( _bool_, _msg_ ) \ + CYG_MACRO_START \ + if ( ( _bool_ ) ) \ + CYG_TRACE_docall0( _msg_ ); \ + CYG_MACRO_END + +#define CYG_TRACE1( _bool_, _msg_, a ) \ + CYG_MACRO_START \ + if ( ( _bool_ ) ) \ + CYG_TRACE_docall2( _msg_, a, 0 ); \ + CYG_MACRO_END + +#define CYG_TRACE2( _bool_, _msg_, a, b ) \ + CYG_MACRO_START \ + if ( ( _bool_ ) ) \ + CYG_TRACE_docall2( _msg_, a, b ); \ + CYG_MACRO_END + +#define CYG_TRACE3( _bool_, _msg_, a, b, c ) \ + CYG_MACRO_START \ + if ( ( _bool_ ) ) \ + CYG_TRACE_docall4( _msg_, a, b, c, 0 ); \ + CYG_MACRO_END + +#define CYG_TRACE4( _bool_, _msg_, a, b, c, d ) \ + CYG_MACRO_START \ + if ( ( _bool_ ) ) \ + CYG_TRACE_docall4( _msg_, a, b, c, d ); \ + CYG_MACRO_END + +#define CYG_TRACE5( _bool_, _msg_, a, b, c, d, e ) \ + CYG_MACRO_START \ + if ( ( _bool_ ) ) \ + CYG_TRACE_docall6( _msg_, a, b, c, d, e, 0 ); \ + CYG_MACRO_END + +#define CYG_TRACE6( _bool_, _msg_, a, b, c, d, e, f ) \ + CYG_MACRO_START \ + if ( ( _bool_ ) ) \ + CYG_TRACE_docall6( _msg_, a, b, c, d, e, f ); \ + CYG_MACRO_END + +#define CYG_TRACE7( _bool_, _msg_, a, b, c, d, e, f, g ) \ + CYG_MACRO_START \ + if ( ( _bool_ ) ) \ + CYG_TRACE_docall8( _msg_, a, b, c, d, e, f, g, 0 ); \ + CYG_MACRO_END + +#define CYG_TRACE8( _bool_, _msg_, a, b, c, d, e, f, g, h ) \ + CYG_MACRO_START \ + if ( ( _bool_ ) ) \ + CYG_TRACE_docall8( _msg_, a, b, c, d, e, f, g, h ); \ + CYG_MACRO_END + +// ------------------------------------------------------------------------- +// Report function entry and exit. +// In C++ the macro CYG_REPORT_FUNCTION should appear as the first line of +// any function. It will generate a message whenever the function is entered +// and when it is exited. +// In C the macro should appear as the first statement after any local variable +// definitions. No exit message will be generated unless CYG_REPORT_RETURN is +// placed just before each return. +// Where a piece of code is to be compiled with both C and C++, the above +// rules for C should be followed. + +#ifdef CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS + +#ifdef __cplusplus + +class Cyg_TraceFunction_Report_ +{ +public: + int cond; + const char *func; + const char *file; + cyg_uint32 lnum; +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + const char *exitmsg; + CYG_ADDRWORD exitvalue; + enum { UNSET = 0, SET, VOID } exitset; +#endif + + Cyg_TraceFunction_Report_( + int condition, const char *psz_func, const char *psz_file, + cyg_uint32 linenum) + { + cond = condition; + func = psz_func; + file = psz_file; + lnum = linenum; + +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + exitmsg = NULL; + exitset = UNSET; + if ( cond ) + cyg_tracemsg( cyg_trace_enter, func, file, lnum, "enter"); +#else + if ( cond ) + cyg_tracenomsg( func, file, lnum ); +#endif + }; + + Cyg_TraceFunction_Report_( + int condition, const char *psz_func, const char *psz_file, + cyg_uint32 linenum, const char *psz_exitmsg ) + { + cond = condition; + func = psz_func; + file = psz_file; + lnum = linenum; +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + exitmsg = psz_exitmsg; + exitset = UNSET; + if ( cond ) + cyg_tracemsg( cyg_trace_enter, func, file, lnum, "enter"); +#else + CYG_UNUSED_PARAM( const char *, psz_exitmsg ); + if ( cond ) + cyg_tracenomsg( func, file, lnum ); +#endif + }; + + inline void set_exitvoid( cyg_uint32 linenum ) + { + lnum = linenum; +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + CYG_ASSERT( NULL == exitmsg, "exitvoid used in typed function" ); + CYG_ASSERT( UNSET == exitset, "exitvoid used when arg already set" ); + exitset = VOID; +#endif + } + + inline void set_exitvalue( cyg_uint32 linenum, CYG_ADDRWORD retcode ) + { + lnum = linenum; +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + CYG_ASSERT( UNSET == exitset, "exitvalue used when arg already set" ); + exitvalue = retcode; + exitset = SET; +#else + CYG_UNUSED_PARAM( CYG_ADDRWORD, retcode ); +#endif + } + + ~Cyg_TraceFunction_Report_() + { + if ( cond ) { +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + if ( VOID == exitset ) + cyg_tracemsg( cyg_trace_return, func, file, lnum, + "return void"); + else if ( UNSET == exitset ) + cyg_tracemsg( cyg_trace_return, func, file, lnum, + "RETURNING UNSET!"); + else if ( NULL == exitmsg ) + cyg_tracemsg2( cyg_trace_return, func, file, lnum, + "return %08x", exitvalue, 0 ); + else + cyg_tracemsg2( cyg_trace_return, func, file, lnum, + exitmsg, exitvalue, 0 ); +#else + cyg_tracenomsg( func, file, lnum ); +#endif + } + } +}; + +// These have no CYG_MACRO_START,END around because it is required +// that the scope of the object be the whole function body. Get it? + +// These are the unconditional versions: +#define CYG_REPORT_FUNCTION() \ + Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ + 1, __PRETTY_FUNCTION__, \ + __FILE__, __LINE__ ) + +#define CYG_REPORT_FUNCTYPE( _exitmsg_ ) \ + Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ + 1, __PRETTY_FUNCTION__, \ + __FILE__, __LINE__, _exitmsg_ ) + +#define CYG_REPORT_FUNCNAME( _name_ ) \ + Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ + 1, _name_, \ + __FILE__, __LINE__ ) + +#define CYG_REPORT_FUNCNAMETYPE( _name_, _exitmsg_ ) \ + Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ + 1, _name_, \ + __FILE__, __LINE__, _exitmsg_ ) + +// These are conditioned on macro CYG_REPORT_USER_BOOL +// (which you better have defined) +#define CYG_REPORT_FUNCTIONC() \ + Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ + CYG_REPORT_USER_BOOL, __PRETTY_FUNCTION__, \ + __FILE__, __LINE__ ) + +#define CYG_REPORT_FUNCTYPEC( _exitmsg_ ) \ + Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ + CYG_REPORT_USER_BOOL, __PRETTY_FUNCTION__, \ + __FILE__, __LINE__, _exitmsg_ ) + +#define CYG_REPORT_FUNCNAMEC( _name_ ) \ + Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ + CYG_REPORT_USER_BOOL, _name_, \ + __FILE__, __LINE__ ) + +#define CYG_REPORT_FUNCNAMETYPEC( _name_, _exitmsg_ ) \ + Cyg_TraceFunction_Report_ cyg_tracefunction_report_( \ + CYG_REPORT_USER_BOOL, _name_, \ + __FILE__, __LINE__, _exitmsg_ ) + + +#define CYG_REPORT_RETURN() CYG_MACRO_START \ + cyg_tracefunction_report_.set_exitvoid( __LINE__ ); \ +CYG_MACRO_END + +#define CYG_REPORT_RETVAL( _value_) CYG_MACRO_START \ + cyg_tracefunction_report_.set_exitvalue( \ + __LINE__, (CYG_ADDRWORD)(_value_) ); \ +CYG_MACRO_END + + +#else // not __cplusplus + + +struct Cyg_TraceFunction_Report_ +{ + int cond; + const char *func; + const char *file; /* not strictly needed in plain 'C' */ + cyg_uint32 lnum; /* nor this */ +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + const char *exitmsg; + CYG_ADDRWORD exitvalue; + int exitset; +#endif + +}; + +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +#define CYG_REPORT_FUNCTION_ENTER_INTERNAL() CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg( cyg_trace_enter, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + "enter" ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCTION_CONSTRUCT( _c_, _fn_,_fl_,_l_,_xm_,_xv_,_xs_ ) \ + { _c_, _fn_, _fl_, _l_, _xm_, _xv_, _xs_ } + +#else // do not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +#define CYG_REPORT_FUNCTION_ENTER_INTERNAL() CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracenomsg( cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCTION_CONSTRUCT( _c_, _fn_,_fl_,_l_,_xm_,_xv_,_xs_ ) \ + { _c_, _fn_, _fl_, _l_ } + +#endif // not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +// These have no CYG_MACRO_START,END around because it is required +// that the scope of the object be the whole function body. Get it? + +// These are the unconditional versions: +#define CYG_REPORT_FUNCTION() \ + struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ + CYG_REPORT_FUNCTION_CONSTRUCT( \ + 1, __PRETTY_FUNCTION__, __FILE__, __LINE__, NULL, 0, 0 ); \ + CYG_REPORT_FUNCTION_ENTER_INTERNAL() + +#define CYG_REPORT_FUNCTYPE( _exitmsg_ ) \ + struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ + CYG_REPORT_FUNCTION_CONSTRUCT( \ + 1, __PRETTY_FUNCTION__, __FILE__, __LINE__, _exitmsg_, 0, 0 ); \ + CYG_REPORT_FUNCTION_ENTER_INTERNAL() + +#define CYG_REPORT_FUNCNAME( _name_ ) \ + struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ + CYG_REPORT_FUNCTION_CONSTRUCT( \ + 1, _name_, __FILE__, __LINE__, NULL, 0, 0 ); \ + CYG_REPORT_FUNCTION_ENTER_INTERNAL() + +#define CYG_REPORT_FUNCNAMETYPE( _name_, _exitmsg_ ) \ + struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ + CYG_REPORT_FUNCTION_CONSTRUCT( \ + 1, _name_, __FILE__, __LINE__, _exitmsg_, 0, 0 ); \ + CYG_REPORT_FUNCTION_ENTER_INTERNAL() + +// These are conditioned on macro CYG_REPORT_USER_BOOL +// (which you better have defined) +#define CYG_REPORT_FUNCTIONC() \ + struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ + CYG_REPORT_FUNCTION_CONSTRUCT( \ + CYG_REPORT_USER_BOOL, \ + __PRETTY_FUNCTION__, __FILE__, __LINE__, NULL, 0, 0 ); \ + CYG_REPORT_FUNCTION_ENTER_INTERNAL() + +#define CYG_REPORT_FUNCTYPEC( _exitmsg_ ) \ + struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ + CYG_REPORT_FUNCTION_CONSTRUCT( \ + CYG_REPORT_USER_BOOL, \ + __PRETTY_FUNCTION__, __FILE__, __LINE__, _exitmsg_, 0, 0 ); \ + CYG_REPORT_FUNCTION_ENTER_INTERNAL() + +#define CYG_REPORT_FUNCNAMEC( _name_ ) \ + struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ + CYG_REPORT_FUNCTION_CONSTRUCT( \ + CYG_REPORT_USER_BOOL, \ + _name_, __FILE__, __LINE__, NULL, 0, 0 ); \ + CYG_REPORT_FUNCTION_ENTER_INTERNAL() + +#define CYG_REPORT_FUNCNAMETYPEC( _name_, _exitmsg_ ) \ + struct Cyg_TraceFunction_Report_ cyg_tracefunction_report_ = \ + CYG_REPORT_FUNCTION_CONSTRUCT( \ + CYG_REPORT_USER_BOOL, \ + _name_, __FILE__, __LINE__, _exitmsg_, 0, 0 ); \ + CYG_REPORT_FUNCTION_ENTER_INTERNAL() + +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +#define CYG_REPORT_RETURN() CYG_MACRO_START \ + CYG_ASSERT( NULL == cyg_tracefunction_report_.exitmsg, \ + "exitvoid used in typed function" ); \ + CYG_ASSERT( 0 == cyg_tracefunction_report_.exitset, \ + "exitvoid used when arg already set" ); \ + cyg_tracefunction_report_.lnum = __LINE__; \ + cyg_tracefunction_report_.exitset = 2; \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg( cyg_trace_return, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + "return void" ); \ +CYG_MACRO_END + +#define CYG_REPORT_RETVAL( _value_ ) CYG_MACRO_START \ + CYG_ASSERT( 0 == cyg_tracefunction_report_.exitset, \ + "exitvalue used when arg already set" ); \ + cyg_tracefunction_report_.lnum = __LINE__; \ + cyg_tracefunction_report_.exitvalue = (CYG_ADDRWORD)(_value_); \ + cyg_tracefunction_report_.exitset = 1; \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg2( cyg_trace_return, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + cyg_tracefunction_report_.exitmsg ? \ + cyg_tracefunction_report_.exitmsg : \ + "return %08x", \ + cyg_tracefunction_report_.exitvalue, 0 ); \ +CYG_MACRO_END + +#else // do not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +#define CYG_REPORT_RETURN() CYG_MACRO_START \ + cyg_tracefunction_report_.lnum = __LINE__; \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracenomsg( cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum ); \ +CYG_MACRO_END + +#define CYG_REPORT_RETVAL( _value_ ) CYG_MACRO_START \ + CYG_REPORT_RETURN(); \ +CYG_MACRO_END + +#endif // not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +#endif // not __cplusplus + +#ifdef CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +#define CYG_REPORT_FUNCARGVOID() CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg( cyg_trace_args, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + "(void)" \ + ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCARG1( _format_, a ) CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg2( cyg_trace_args, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + (_format_), \ + (CYG_ADDRWORD)a , 0 \ + ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCARG2( _format_, a,b ) CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg2( cyg_trace_args, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + (_format_), \ + (CYG_ADDRWORD)a, (CYG_ADDRWORD)b \ + ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCARG3( _format_, a,b,c ) CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg4( cyg_trace_args, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + (_format_), \ + (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ + (CYG_ADDRWORD)c , 0 \ + ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCARG4( _format_, a,b,c,d ) CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg4( cyg_trace_args, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + (_format_), \ + (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ + (CYG_ADDRWORD)c, (CYG_ADDRWORD)d \ + ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCARG5( _format_, a,b,c,d,e ) CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg6( cyg_trace_args, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + (_format_), \ + (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ + (CYG_ADDRWORD)c, (CYG_ADDRWORD)d, \ + (CYG_ADDRWORD)e , 0 \ + ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCARG6( _format_, a,b,c,d,e,f ) CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg6( cyg_trace_args, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + (_format_), \ + (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ + (CYG_ADDRWORD)c, (CYG_ADDRWORD)d, \ + (CYG_ADDRWORD)e, (CYG_ADDRWORD)f \ + ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCARG7( _format_, a,b,c,d,e,f,g ) CYG_MACRO_START \ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg8( cyg_trace_args, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + (_format_), \ + (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ + (CYG_ADDRWORD)c, (CYG_ADDRWORD)d, \ + (CYG_ADDRWORD)e, (CYG_ADDRWORD)f, \ + (CYG_ADDRWORD)g , 0 \ + ); \ +CYG_MACRO_END + +#define CYG_REPORT_FUNCARG8( _format_, a,b,c,d,e,f,g,h ) CYG_MACRO_START\ + if ( cyg_tracefunction_report_.cond ) \ + cyg_tracemsg8( cyg_trace_args, \ + cyg_tracefunction_report_.func, \ + cyg_tracefunction_report_.file, \ + cyg_tracefunction_report_.lnum, \ + (_format_), \ + (CYG_ADDRWORD)a, (CYG_ADDRWORD)b, \ + (CYG_ADDRWORD)c, (CYG_ADDRWORD)d, \ + (CYG_ADDRWORD)e, (CYG_ADDRWORD)f, \ + (CYG_ADDRWORD)g, (CYG_ADDRWORD)h \ + ); \ +CYG_MACRO_END + + +#else // do not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +#define CYG_REPORT_FUNCARGVOID() CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG1( _format_, a ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG2( _format_, a,b ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG3( _format_, a,b,c ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG4( _format_, a,b,c,d ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG5( _format_, a,b,c,d,e ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG6( _format_, a,b,c,d,e,f ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG7( _format_, a,b,c,d,e,f,g ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG8( _format_, a,b,c,d,e,f,g,h ) CYG_EMPTY_STATEMENT + +#endif // not CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +#else // no CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS + +#define CYG_REPORT_FUNCTION() CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCTYPE( _exitmsg_ ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCNAME( _name_ ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCNAMETYPE( _name_, _exitmsg_ ) CYG_EMPTY_STATEMENT + +#define CYG_REPORT_FUNCTIONC() CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCTYPEC( _exitmsg_ ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCNAMEC( _name_ ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCNAMETYPEC( _name_, _exitmsg_ ) CYG_EMPTY_STATEMENT + +#define CYG_REPORT_FUNCARGVOID() CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG1( _format_, a ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG2( _format_, a,b ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG3( _format_, a,b,c ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG4( _format_, a,b,c,d ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG5( _format_, a,b,c,d,e ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG6( _format_, a,b,c,d,e,f ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG7( _format_, a,b,c,d,e,f,g ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG8( _format_, a,b,c,d,e,f,g,h ) CYG_EMPTY_STATEMENT + +#define CYG_REPORT_RETURN() CYG_EMPTY_STATEMENT +#define CYG_REPORT_RETVAL( _value_ ) CYG_EMPTY_STATEMENT + +#endif // CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS + +#else // ! CYGDBG_USE_TRACING + +// ------------------------------------------------------------------------- +// No traces: we define empty statements for trace macros. + +#define CYG_TRACE0( _bool_, _msg_ ) CYG_EMPTY_STATEMENT +#define CYG_TRACE1( _bool_, _msg_, a ) CYG_EMPTY_STATEMENT +#define CYG_TRACE2( _bool_, _msg_, a,b ) CYG_EMPTY_STATEMENT +#define CYG_TRACE3( _bool_, _msg_, a,b,c ) CYG_EMPTY_STATEMENT +#define CYG_TRACE4( _bool_, _msg_, a,b,c,d ) CYG_EMPTY_STATEMENT +#define CYG_TRACE5( _bool_, _msg_, a,b,c,d,e ) CYG_EMPTY_STATEMENT +#define CYG_TRACE6( _bool_, _msg_, a,b,c,d,e,f ) CYG_EMPTY_STATEMENT +#define CYG_TRACE7( _bool_, _msg_, a,b,c,d,e,f,g ) CYG_EMPTY_STATEMENT +#define CYG_TRACE8( _bool_, _msg_, a,b,c,d,e,f,g,h ) CYG_EMPTY_STATEMENT + +#define CYG_REPORT_FUNCTION() CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCTYPE( _exitmsg_ ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCNAME( _name_ ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCNAMETYPE( _name_, _exitmsg_ ) CYG_EMPTY_STATEMENT + +#define CYG_REPORT_FUNCTIONC() CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCTYPEC( _exitmsg_ ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCNAMEC( _name_ ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCNAMETYPEC( _name_, _exitmsg_ ) CYG_EMPTY_STATEMENT + +#define CYG_REPORT_FUNCARGVOID() CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG1( _format_, a ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG2( _format_, a,b ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG3( _format_, a,b,c ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG4( _format_, a,b,c,d ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG5( _format_, a,b,c,d,e ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG6( _format_, a,b,c,d,e,f ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG7( _format_, a,b,c,d,e,f,g ) CYG_EMPTY_STATEMENT +#define CYG_REPORT_FUNCARG8( _format_, a,b,c,d,e,f,g,h ) CYG_EMPTY_STATEMENT + +#define CYG_REPORT_RETURN() CYG_EMPTY_STATEMENT +#define CYG_REPORT_RETVAL( _value_ ) CYG_EMPTY_STATEMENT + +#define CYG_TRACE_PRINT() CYG_EMPTY_STATEMENT +#define CYG_TRACE_DUMP() CYG_EMPTY_STATEMENT + +#endif // ! CYGDBG_USE_TRACING + +// ------------------------------------------------------------------------- +// +// CYG_TRACEn{[XDY]{V}}{B} +// +// Convenience macros: these fall into a few dimensions, with suffix letters: +// First option: +// X: user need not supply a format string, %08x is used +// D: ditto but signed decimal, %d +// Y: ditto but just plain %x +// Second option, only meaningful with one of XDY: +// V: " = %..." is used, by stringifying the argument +// Third option: +// B: user need not supply a bool; the symbol CYG_TRACE_USER_BOOL is +// used (which we do not define, user must do this) + +#define CYG_TRACE0B( _msg_ ) \ + CYG_TRACE0( CYG_TRACE_USER_BOOL, _msg_ ) +#define CYG_TRACE1B( _msg_, a ) \ + CYG_TRACE1( CYG_TRACE_USER_BOOL, _msg_, a ) +#define CYG_TRACE2B( _msg_, a,b ) \ + CYG_TRACE2( CYG_TRACE_USER_BOOL, _msg_, a,b ) +#define CYG_TRACE3B( _msg_, a,b,c ) \ + CYG_TRACE3( CYG_TRACE_USER_BOOL, _msg_, a,b,c ) +#define CYG_TRACE4B( _msg_, a,b,c,d ) \ + CYG_TRACE4( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d ) +#define CYG_TRACE5B( _msg_, a,b,c,d,e ) \ + CYG_TRACE5( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d,e ) +#define CYG_TRACE6B( _msg_, a,b,c,d,e,f ) \ + CYG_TRACE6( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d,e,f ) +#define CYG_TRACE7B( _msg_, a,b,c,d,e,f,g ) \ + CYG_TRACE7( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d,e,f,g ) +#define CYG_TRACE8B( _msg_, a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( CYG_TRACE_USER_BOOL, _msg_, a,b,c,d,e,f,g,h ) + +// long hex versions + +#define CYG_TRACE1X( _bool_, a ) \ + CYG_TRACE1( _bool_, "%08x", a ) +#define CYG_TRACE2X( _bool_, a,b ) \ + CYG_TRACE2( _bool_, "%08x %08x", a,b ) +#define CYG_TRACE3X( _bool_, a,b,c ) \ + CYG_TRACE3( _bool_, "%08x %08x %08x", a,b,c ) +#define CYG_TRACE4X( _bool_, a,b,c,d ) \ + CYG_TRACE4( _bool_, "%08x %08x %08x %08x", a,b,c,d ) +#define CYG_TRACE5X( _bool_, a,b,c,d,e ) \ + CYG_TRACE5( _bool_, "%08x %08x %08x %08x %08x", a,b,c,d,e ) +#define CYG_TRACE6X( _bool_, a,b,c,d,e,f ) \ + CYG_TRACE6( _bool_, "%08x %08x %08x %08x %08x %08x", \ + a,b,c,d,e,f ) +#define CYG_TRACE7X( _bool_, a,b,c,d,e,f,g ) \ + CYG_TRACE7( _bool_, "%08x %08x %08x %08x %08x %08x %08x", \ + a,b,c,d,e,f,g ) +#define CYG_TRACE8X( _bool_, a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( _bool_, "%08x %08x %08x %08x %08x %08x %08x %08x", \ + a,b,c,d,e,f,g,h ) + +#define CYG_TRACE1XV( _bool_, a ) \ + CYG_TRACE1( _bool_, # a "=%08x ", a ) +#define CYG_TRACE2XV( _bool_, a,b ) \ + CYG_TRACE2( _bool_, \ + # a "=%08x " # b "=%08x " , a,b ) +#define CYG_TRACE3XV( _bool_, a,b,c ) \ + CYG_TRACE3( _bool_, \ + # a "=%08x " # b "=%08x " # c "=%08x " , a,b,c ) +#define CYG_TRACE4XV( _bool_, a,b,c,d ) \ + CYG_TRACE4( _bool_, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + , a,b,c,d ) +#define CYG_TRACE5XV( _bool_, a,b,c,d,e ) \ + CYG_TRACE5( _bool_, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " \ + , a,b,c,d,e ) +#define CYG_TRACE6XV( _bool_, a,b,c,d,e,f ) \ + CYG_TRACE6( _bool_, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " # f "=%08x " \ + , a,b,c,d,e,f ) +#define CYG_TRACE7XV( _bool_, a,b,c,d,e,f,g ) \ + CYG_TRACE7( _bool_, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " # f "=%08x " # g "=%08x " \ + , a,b,c,d,e,f,g ) +#define CYG_TRACE8XV( _bool_, a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( _bool_, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " # f "=%08x " # g "=%08x " # h "=%08x " \ + , a,b,c,d,e,f,g,h ) + +#define CYG_TRACE1XB( a ) \ + CYG_TRACE1( CYG_TRACE_USER_BOOL, "%08x", a ) +#define CYG_TRACE2XB( a,b ) \ + CYG_TRACE2( CYG_TRACE_USER_BOOL, "%08x %08x", a,b ) +#define CYG_TRACE3XB( a,b,c ) \ + CYG_TRACE3( CYG_TRACE_USER_BOOL, "%08x %08x %08x", a,b,c ) +#define CYG_TRACE4XB( a,b,c,d ) \ + CYG_TRACE4( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x", a,b,c,d ) +#define CYG_TRACE5XB( a,b,c,d,e ) \ + CYG_TRACE5( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x %08x", a,b,c,d,e ) +#define CYG_TRACE6XB( a,b,c,d,e,f ) \ + CYG_TRACE6( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x %08x %08x", \ + a,b,c,d,e,f ) +#define CYG_TRACE7XB( a,b,c,d,e,f,g ) \ + CYG_TRACE7( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x %08x %08x %08x", \ + a,b,c,d,e,f,g ) +#define CYG_TRACE8XB( a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( CYG_TRACE_USER_BOOL, "%08x %08x %08x %08x %08x %08x %08x %08x", \ + a,b,c,d,e,f,g,h ) + +#define CYG_TRACE1XVB( a ) \ + CYG_TRACE1( CYG_TRACE_USER_BOOL, # a "=%08x ", a ) +#define CYG_TRACE2XVB( a,b ) \ + CYG_TRACE2( CYG_TRACE_USER_BOOL, \ + # a "=%08x " # b "=%08x " , a,b ) +#define CYG_TRACE3XVB( a,b,c ) \ + CYG_TRACE3( CYG_TRACE_USER_BOOL, \ + # a "=%08x " # b "=%08x " # c "=%08x " , a,b,c ) +#define CYG_TRACE4XVB( a,b,c,d ) \ + CYG_TRACE4( CYG_TRACE_USER_BOOL, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + , a,b,c,d ) +#define CYG_TRACE5XVB( a,b,c,d,e ) \ + CYG_TRACE5( CYG_TRACE_USER_BOOL, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " \ + , a,b,c,d,e ) +#define CYG_TRACE6XVB( a,b,c,d,e,f ) \ + CYG_TRACE6( CYG_TRACE_USER_BOOL, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " # f "=%08x " \ + , a,b,c,d,e,f ) +#define CYG_TRACE7XVB( a,b,c,d,e,f,g ) \ + CYG_TRACE7( CYG_TRACE_USER_BOOL, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " # f "=%08x " # g "=%08x " \ + , a,b,c,d,e,f,g ) +#define CYG_TRACE8XVB( a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( CYG_TRACE_USER_BOOL, \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " # f "=%08x " # g "=%08x " # h "=%08x " \ + , a,b,c,d,e,f,g,h ) + +// decimal versions + +#define CYG_TRACE1D( _bool_, a ) \ + CYG_TRACE1( _bool_, "%d", a ) +#define CYG_TRACE2D( _bool_, a,b ) \ + CYG_TRACE2( _bool_, "%d %d", a,b ) +#define CYG_TRACE3D( _bool_, a,b,c ) \ + CYG_TRACE3( _bool_, "%d %d %d", a,b,c ) +#define CYG_TRACE4D( _bool_, a,b,c,d ) \ + CYG_TRACE4( _bool_, "%d %d %d %d", a,b,c,d ) +#define CYG_TRACE5D( _bool_, a,b,c,d,e ) \ + CYG_TRACE5( _bool_, "%d %d %d %d %d", a,b,c,d,e ) +#define CYG_TRACE6D( _bool_, a,b,c,d,e,f ) \ + CYG_TRACE6( _bool_, "%d %d %d %d %d %d", \ + a,b,c,d,e,f ) +#define CYG_TRACE7D( _bool_, a,b,c,d,e,f,g ) \ + CYG_TRACE7( _bool_, "%d %d %d %d %d %d %d", \ + a,b,c,d,e,f,g ) +#define CYG_TRACE8D( _bool_, a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( _bool_, "%d %d %d %d %d %d %d %d", \ + a,b,c,d,e,f,g,h ) + +#define CYG_TRACE1DV( _bool_, a ) \ + CYG_TRACE1( _bool_, # a "=%d ", a ) +#define CYG_TRACE2DV( _bool_, a,b ) \ + CYG_TRACE2( _bool_, \ + # a "=%d " # b "=%d " , a,b ) +#define CYG_TRACE3DV( _bool_, a,b,c ) \ + CYG_TRACE3( _bool_, \ + # a "=%d " # b "=%d " # c "=%d " , a,b,c ) +#define CYG_TRACE4DV( _bool_, a,b,c,d ) \ + CYG_TRACE4( _bool_, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + , a,b,c,d ) +#define CYG_TRACE5DV( _bool_, a,b,c,d,e ) \ + CYG_TRACE5( _bool_, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " \ + , a,b,c,d,e ) +#define CYG_TRACE6DV( _bool_, a,b,c,d,e,f ) \ + CYG_TRACE6( _bool_, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " # f "=%d " \ + , a,b,c,d,e,f ) +#define CYG_TRACE7DV( _bool_, a,b,c,d,e,f,g ) \ + CYG_TRACE7( _bool_, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " # f "=%d " # g "=%d " \ + , a,b,c,d,e,f,g ) +#define CYG_TRACE8DV( _bool_, a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( _bool_, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " # f "=%d " # g "=%d " # h "=%d " \ + , a,b,c,d,e,f,g,h ) + +#define CYG_TRACE1DB( a ) \ + CYG_TRACE1( CYG_TRACE_USER_BOOL, "%d", a ) +#define CYG_TRACE2DB( a,b ) \ + CYG_TRACE2( CYG_TRACE_USER_BOOL, "%d %d", a,b ) +#define CYG_TRACE3DB( a,b,c ) \ + CYG_TRACE3( CYG_TRACE_USER_BOOL, "%d %d %d", a,b,c ) +#define CYG_TRACE4DB( a,b,c,d ) \ + CYG_TRACE4( CYG_TRACE_USER_BOOL, "%d %d %d %d", a,b,c,d ) +#define CYG_TRACE5DB( a,b,c,d,e ) \ + CYG_TRACE5( CYG_TRACE_USER_BOOL, "%d %d %d %d %d", a,b,c,d,e ) +#define CYG_TRACE6DB( a,b,c,d,e,f ) \ + CYG_TRACE6( CYG_TRACE_USER_BOOL, "%d %d %d %d %d %d", \ + a,b,c,d,e,f ) +#define CYG_TRACE7DB( a,b,c,d,e,f,g ) \ + CYG_TRACE7( CYG_TRACE_USER_BOOL, "%d %d %d %d %d %d %d", \ + a,b,c,d,e,f,g ) +#define CYG_TRACE8DB( a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( CYG_TRACE_USER_BOOL, "%d %d %d %d %d %d %d %d", \ + a,b,c,d,e,f,g,h ) + +#define CYG_TRACE1DVB( a ) \ + CYG_TRACE1( CYG_TRACE_USER_BOOL, # a "=%d ", a ) +#define CYG_TRACE2DVB( a,b ) \ + CYG_TRACE2( CYG_TRACE_USER_BOOL, \ + # a "=%d " # b "=%d " , a,b ) +#define CYG_TRACE3DVB( a,b,c ) \ + CYG_TRACE3( CYG_TRACE_USER_BOOL, \ + # a "=%d " # b "=%d " # c "=%d " , a,b,c ) +#define CYG_TRACE4DVB( a,b,c,d ) \ + CYG_TRACE4( CYG_TRACE_USER_BOOL, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + , a,b,c,d ) +#define CYG_TRACE5DVB( a,b,c,d,e ) \ + CYG_TRACE5( CYG_TRACE_USER_BOOL, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " \ + , a,b,c,d,e ) +#define CYG_TRACE6DVB( a,b,c,d,e,f ) \ + CYG_TRACE6( CYG_TRACE_USER_BOOL, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " # f "=%d " \ + , a,b,c,d,e,f ) +#define CYG_TRACE7DVB( a,b,c,d,e,f,g ) \ + CYG_TRACE7( CYG_TRACE_USER_BOOL, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " # f "=%d " # g "=%d " \ + , a,b,c,d,e,f,g ) +#define CYG_TRACE8DVB( a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( CYG_TRACE_USER_BOOL, \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " # f "=%d " # g "=%d " # h "=%d " \ + , a,b,c,d,e,f,g,h ) + +// short hex versions + +#define CYG_TRACE1Y( _bool_, a ) \ + CYG_TRACE1( _bool_, "%x", a ) +#define CYG_TRACE2Y( _bool_, a,b ) \ + CYG_TRACE2( _bool_, "%x %x", a,b ) +#define CYG_TRACE3Y( _bool_, a,b,c ) \ + CYG_TRACE3( _bool_, "%x %x %x", a,b,c ) +#define CYG_TRACE4Y( _bool_, a,b,c,d ) \ + CYG_TRACE4( _bool_, "%x %x %x %x", a,b,c,d ) +#define CYG_TRACE5Y( _bool_, a,b,c,d,e ) \ + CYG_TRACE5( _bool_, "%x %x %x %x %x", a,b,c,d,e ) +#define CYG_TRACE6Y( _bool_, a,b,c,d,e,f ) \ + CYG_TRACE6( _bool_, "%x %x %x %x %x %x", \ + a,b,c,d,e,f ) +#define CYG_TRACE7Y( _bool_, a,b,c,d,e,f,g ) \ + CYG_TRACE7( _bool_, "%x %x %x %x %x %x %x", \ + a,b,c,d,e,f,g ) +#define CYG_TRACE8Y( _bool_, a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( _bool_, "%x %x %x %x %x %x %x %x", \ + a,b,c,d,e,f,g,h ) + +#define CYG_TRACE1YV( _bool_, a ) \ + CYG_TRACE1( _bool_, # a "=%x ", a ) +#define CYG_TRACE2YV( _bool_, a,b ) \ + CYG_TRACE2( _bool_, \ + # a "=%x " # b "=%x " , a,b ) +#define CYG_TRACE3YV( _bool_, a,b,c ) \ + CYG_TRACE3( _bool_, \ + # a "=%x " # b "=%x " # c "=%x " , a,b,c ) +#define CYG_TRACE4YV( _bool_, a,b,c,d ) \ + CYG_TRACE4( _bool_, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + , a,b,c,d ) +#define CYG_TRACE5YV( _bool_, a,b,c,d,e ) \ + CYG_TRACE5( _bool_, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " \ + , a,b,c,d,e ) +#define CYG_TRACE6YV( _bool_, a,b,c,d,e,f ) \ + CYG_TRACE6( _bool_, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " # f "=%x " \ + , a,b,c,d,e,f ) +#define CYG_TRACE7YV( _bool_, a,b,c,d,e,f,g ) \ + CYG_TRACE7( _bool_, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " # f "=%x " # g "=%x " \ + , a,b,c,d,e,f,g ) +#define CYG_TRACE8YV( _bool_, a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( _bool_, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " # f "=%x " # g "=%x " # h "=%x " \ + , a,b,c,d,e,f,g,h ) + +#define CYG_TRACE1YB( a ) \ + CYG_TRACE1( CYG_TRACE_USER_BOOL, "%x", a ) +#define CYG_TRACE2YB( a,b ) \ + CYG_TRACE2( CYG_TRACE_USER_BOOL, "%x %x", a,b ) +#define CYG_TRACE3YB( a,b,c ) \ + CYG_TRACE3( CYG_TRACE_USER_BOOL, "%x %x %x", a,b,c ) +#define CYG_TRACE4YB( a,b,c,d ) \ + CYG_TRACE4( CYG_TRACE_USER_BOOL, "%x %x %x %x", a,b,c,d ) +#define CYG_TRACE5YB( a,b,c,d,e ) \ + CYG_TRACE5( CYG_TRACE_USER_BOOL, "%x %x %x %x %x", a,b,c,d,e ) +#define CYG_TRACE6YB( a,b,c,d,e,f ) \ + CYG_TRACE6( CYG_TRACE_USER_BOOL, "%x %x %x %x %x %x", \ + a,b,c,d,e,f ) +#define CYG_TRACE7YB( a,b,c,d,e,f,g ) \ + CYG_TRACE7( CYG_TRACE_USER_BOOL, "%x %x %x %x %x %x %x", \ + a,b,c,d,e,f,g ) +#define CYG_TRACE8YB( a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( CYG_TRACE_USER_BOOL, "%x %x %x %x %x %x %x %x", \ + a,b,c,d,e,f,g,h ) + +#define CYG_TRACE1YVB( a ) \ + CYG_TRACE1( CYG_TRACE_USER_BOOL, # a "=%x ", a ) +#define CYG_TRACE2YVB( a,b ) \ + CYG_TRACE2( CYG_TRACE_USER_BOOL, \ + # a "=%x " # b "=%x " , a,b ) +#define CYG_TRACE3YVB( a,b,c ) \ + CYG_TRACE3( CYG_TRACE_USER_BOOL, \ + # a "=%x " # b "=%x " # c "=%x " , a,b,c ) +#define CYG_TRACE4YVB( a,b,c,d ) \ + CYG_TRACE4( CYG_TRACE_USER_BOOL, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + , a,b,c,d ) +#define CYG_TRACE5YVB( a,b,c,d,e ) \ + CYG_TRACE5( CYG_TRACE_USER_BOOL, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " \ + , a,b,c,d,e ) +#define CYG_TRACE6YVB( a,b,c,d,e,f ) \ + CYG_TRACE6( CYG_TRACE_USER_BOOL, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " # f "=%x " \ + , a,b,c,d,e,f ) +#define CYG_TRACE7YVB( a,b,c,d,e,f,g ) \ + CYG_TRACE7( CYG_TRACE_USER_BOOL, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " # f "=%x " # g "=%x " \ + , a,b,c,d,e,f,g ) +#define CYG_TRACE8YVB( a,b,c,d,e,f,g,h ) \ + CYG_TRACE8( CYG_TRACE_USER_BOOL, \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " # f "=%x " # g "=%x " # h "=%x " \ + , a,b,c,d,e,f,g,h ) + +// ------------------------------------------------------------------------- +// +// CYG_REPORT_FUNCARGn{[XDY]{V}} +// +// Convenience macros two: these fall into a few dimensions, with suffix letters: +// First option: +// X: user need not supply a format string, %08x is used +// D: ditto but signed decimal, %d +// Y: ditto but just plain %x +// Second option, only meaningful with one of XDY: +// V: " = %..." is used, by stringifying the argument + +// long hex versions + +#define CYG_REPORT_FUNCARG1X( a ) \ + CYG_REPORT_FUNCARG1( "%08x", a ) +#define CYG_REPORT_FUNCARG2X( a,b ) \ + CYG_REPORT_FUNCARG2( "%08x %08x", a,b ) +#define CYG_REPORT_FUNCARG3X( a,b,c ) \ + CYG_REPORT_FUNCARG3( "%08x %08x %08x", a,b,c ) +#define CYG_REPORT_FUNCARG4X( a,b,c,d ) \ + CYG_REPORT_FUNCARG4( "%08x %08x %08x %08x", a,b,c,d ) +#define CYG_REPORT_FUNCARG5X( a,b,c,d,e ) \ + CYG_REPORT_FUNCARG5( "%08x %08x %08x %08x %08x", a,b,c,d,e ) +#define CYG_REPORT_FUNCARG6X( a,b,c,d,e,f ) \ + CYG_REPORT_FUNCARG6( "%08x %08x %08x %08x %08x %08x", \ + a,b,c,d,e,f ) +#define CYG_REPORT_FUNCARG7X( a,b,c,d,e,f,g ) \ + CYG_REPORT_FUNCARG7( "%08x %08x %08x %08x %08x %08x %08x", \ + a,b,c,d,e,f,g ) +#define CYG_REPORT_FUNCARG8X( a,b,c,d,e,f,g,h ) \ + CYG_REPORT_FUNCARG8( "%08x %08x %08x %08x %08x %08x %08x %08x", \ + a,b,c,d,e,f,g,h ) + +#define CYG_REPORT_FUNCARG1XV( a ) \ + CYG_REPORT_FUNCARG1( # a "=%08x ", a ) +#define CYG_REPORT_FUNCARG2XV( a,b ) \ + CYG_REPORT_FUNCARG2( \ + # a "=%08x " # b "=%08x " , a,b ) +#define CYG_REPORT_FUNCARG3XV( a,b,c ) \ + CYG_REPORT_FUNCARG3( \ + # a "=%08x " # b "=%08x " # c "=%08x " , a,b,c ) +#define CYG_REPORT_FUNCARG4XV( a,b,c,d ) \ + CYG_REPORT_FUNCARG4( \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + , a,b,c,d ) +#define CYG_REPORT_FUNCARG5XV( a,b,c,d,e ) \ + CYG_REPORT_FUNCARG5( \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " \ + , a,b,c,d,e ) +#define CYG_REPORT_FUNCARG6XV( a,b,c,d,e,f ) \ + CYG_REPORT_FUNCARG6( \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " # f "=%08x " \ + , a,b,c,d,e,f ) +#define CYG_REPORT_FUNCARG7XV( a,b,c,d,e,f,g ) \ + CYG_REPORT_FUNCARG7( \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " # f "=%08x " # g "=%08x " \ + , a,b,c,d,e,f,g ) +#define CYG_REPORT_FUNCARG8XV( a,b,c,d,e,f,g,h ) \ + CYG_REPORT_FUNCARG8( \ + # a "=%08x " # b "=%08x " # c "=%08x " # d "=%08x " \ + # e "=%08x " # f "=%08x " # g "=%08x " # h "=%08x " \ + , a,b,c,d,e,f,g,h ) + +// decimal versions + + +#define CYG_REPORT_FUNCARG1D( a ) \ + CYG_REPORT_FUNCARG1( "%d", a ) +#define CYG_REPORT_FUNCARG2D( a,b ) \ + CYG_REPORT_FUNCARG2( "%d %d", a,b ) +#define CYG_REPORT_FUNCARG3D( a,b,c ) \ + CYG_REPORT_FUNCARG3( "%d %d %d", a,b,c ) +#define CYG_REPORT_FUNCARG4D( a,b,c,d ) \ + CYG_REPORT_FUNCARG4( "%d %d %d %d", a,b,c,d ) +#define CYG_REPORT_FUNCARG5D( a,b,c,d,e ) \ + CYG_REPORT_FUNCARG5( "%d %d %d %d %d", a,b,c,d,e ) +#define CYG_REPORT_FUNCARG6D( a,b,c,d,e,f ) \ + CYG_REPORT_FUNCARG6( "%d %d %d %d %d %d", \ + a,b,c,d,e,f ) +#define CYG_REPORT_FUNCARG7D( a,b,c,d,e,f,g ) \ + CYG_REPORT_FUNCARG7( "%d %d %d %d %d %d %d", \ + a,b,c,d,e,f,g ) +#define CYG_REPORT_FUNCARG8D( a,b,c,d,e,f,g,h ) \ + CYG_REPORT_FUNCARG8( "%d %d %d %d %d %d %d %d", \ + a,b,c,d,e,f,g,h ) + +#define CYG_REPORT_FUNCARG1DV( a ) \ + CYG_REPORT_FUNCARG1( # a "=%d ", a ) +#define CYG_REPORT_FUNCARG2DV( a,b ) \ + CYG_REPORT_FUNCARG2( \ + # a "=%d " # b "=%d " , a,b ) +#define CYG_REPORT_FUNCARG3DV( a,b,c ) \ + CYG_REPORT_FUNCARG3( \ + # a "=%d " # b "=%d " # c "=%d " , a,b,c ) +#define CYG_REPORT_FUNCARG4DV( a,b,c,d ) \ + CYG_REPORT_FUNCARG4( \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + , a,b,c,d ) +#define CYG_REPORT_FUNCARG5DV( a,b,c,d,e ) \ + CYG_REPORT_FUNCARG5( \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " \ + , a,b,c,d,e ) +#define CYG_REPORT_FUNCARG6DV( a,b,c,d,e,f ) \ + CYG_REPORT_FUNCARG6( \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " # f "=%d " \ + , a,b,c,d,e,f ) +#define CYG_REPORT_FUNCARG7DV( a,b,c,d,e,f,g ) \ + CYG_REPORT_FUNCARG7( \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " # f "=%d " # g "=%d " \ + , a,b,c,d,e,f,g ) +#define CYG_REPORT_FUNCARG8DV( a,b,c,d,e,f,g,h ) \ + CYG_REPORT_FUNCARG8( \ + # a "=%d " # b "=%d " # c "=%d " # d "=%d " \ + # e "=%d " # f "=%d " # g "=%d " # h "=%d " \ + , a,b,c,d,e,f,g,h ) + +// short hex versions + +#define CYG_REPORT_FUNCARG1Y( a ) \ + CYG_REPORT_FUNCARG1( "%x", a ) +#define CYG_REPORT_FUNCARG2Y( a,b ) \ + CYG_REPORT_FUNCARG2( "%x %x", a,b ) +#define CYG_REPORT_FUNCARG3Y( a,b,c ) \ + CYG_REPORT_FUNCARG3( "%x %x %x", a,b,c ) +#define CYG_REPORT_FUNCARG4Y( a,b,c,d ) \ + CYG_REPORT_FUNCARG4( "%x %x %x %x", a,b,c,d ) +#define CYG_REPORT_FUNCARG5Y( a,b,c,d,e ) \ + CYG_REPORT_FUNCARG5( "%x %x %x %x %x", a,b,c,d,e ) +#define CYG_REPORT_FUNCARG6Y( a,b,c,d,e,f ) \ + CYG_REPORT_FUNCARG6( "%x %x %x %x %x %x", \ + a,b,c,d,e,f ) +#define CYG_REPORT_FUNCARG7Y( a,b,c,d,e,f,g ) \ + CYG_REPORT_FUNCARG7( "%x %x %x %x %x %x %x", \ + a,b,c,d,e,f,g ) +#define CYG_REPORT_FUNCARG8Y( a,b,c,d,e,f,g,h ) \ + CYG_REPORT_FUNCARG8( "%x %x %x %x %x %x %x %x", \ + a,b,c,d,e,f,g,h ) + +#define CYG_REPORT_FUNCARG1YV( a ) \ + CYG_REPORT_FUNCARG1( # a "=%x ", a ) +#define CYG_REPORT_FUNCARG2YV( a,b ) \ + CYG_REPORT_FUNCARG2( \ + # a "=%x " # b "=%x " , a,b ) +#define CYG_REPORT_FUNCARG3YV( a,b,c ) \ + CYG_REPORT_FUNCARG3( \ + # a "=%x " # b "=%x " # c "=%x " , a,b,c ) +#define CYG_REPORT_FUNCARG4YV( a,b,c,d ) \ + CYG_REPORT_FUNCARG4( \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + , a,b,c,d ) +#define CYG_REPORT_FUNCARG5YV( a,b,c,d,e ) \ + CYG_REPORT_FUNCARG5( \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " \ + , a,b,c,d,e ) +#define CYG_REPORT_FUNCARG6YV( a,b,c,d,e,f ) \ + CYG_REPORT_FUNCARG6( \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " # f "=%x " \ + , a,b,c,d,e,f ) +#define CYG_REPORT_FUNCARG7YV( a,b,c,d,e,f,g ) \ + CYG_REPORT_FUNCARG7( \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " # f "=%x " # g "=%x " \ + , a,b,c,d,e,f,g ) +#define CYG_REPORT_FUNCARG8YV( a,b,c,d,e,f,g,h ) \ + CYG_REPORT_FUNCARG8( \ + # a "=%x " # b "=%x " # c "=%x " # d "=%x " \ + # e "=%x " # f "=%x " # g "=%x " # h "=%x " \ + , a,b,c,d,e,f,g,h ) + + +#endif // CYGONCE_INFRA_CYG_TRAC_H multiple inclusion protection +// EOF cyg_trac.h diff --git a/tools/src/infra/cyg_type.h b/tools/src/infra/cyg_type.h new file mode 100644 index 00000000..7fa15fa9 --- /dev/null +++ b/tools/src/infra/cyg_type.h @@ -0,0 +1,339 @@ +#ifndef CYGONCE_INFRA_CYG_TYPE_H +#define CYGONCE_INFRA_CYG_TYPE_H + +//========================================================================== +// +// cyg_type.h +// +// Standard types, and some useful coding macros. +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1997, 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg from an original by hmt +// Contributors: nickg +// Date: 1997-09-08 +// Purpose: share unambiguously sized types. +// Description: we typedef [cyg_][u]int8,16,32 &c for general use. +// Usage: #include "cyg/infra/cyg_type.h" +// ... +// cyg_int32 my_32bit_integer; +// +//####DESCRIPTIONEND#### +// + +#include // Definition of NULL from the compiler + +// ------------------------------------------------------------------------- +// Some useful macros. These are defined here by default. + +// externC is used in mixed C/C++ headers to force C linkage on an external +// definition. It avoids having to put all sorts of ifdefs in. + +#ifdef __cplusplus +# define externC extern "C" +#else +# define externC extern +#endif + + +// ------------------------------------------------------------------------- +// The header defines the base types used here. It is +// supplied either by the target architecture HAL, or by the host +// porting kit. They are all defined as macros, and only those that +// make choices other than the defaults given below need be defined. + +#define CYG_LSBFIRST 1234 +#define CYG_MSBFIRST 4321 + +#include + +#if (CYG_BYTEORDER != CYG_LSBFIRST) && (CYG_BYTEORDER != CYG_MSBFIRST) +# error You must define CYG_BYTEORDER to equal CYG_LSBFIRST or CYG_MSBFIRST +#endif + +#ifndef CYG_DOUBLE_BYTEORDER +#define CYG_DOUBLE_BYTEORDER CYG_BYTEORDER +#endif + +#ifndef cyg_halint8 +# define cyg_halint8 char +#endif +#ifndef cyg_halint16 +# define cyg_halint16 short +#endif +#ifndef cyg_halint32 +# define cyg_halint32 int +#endif +#ifndef cyg_halint64 +# define cyg_halint64 long long +#endif + +#ifndef cyg_halcount8 +# define cyg_halcount8 int +#endif +#ifndef cyg_halcount16 +# define cyg_halcount16 int +#endif +#ifndef cyg_halcount32 +# define cyg_halcount32 int +#endif +#ifndef cyg_halcount64 +# define cyg_halcount64 long long +#endif + +#ifndef cyg_haladdress +# define cyg_haladdress cyg_uint32 +#endif +#ifndef cyg_haladdrword +# define cyg_haladdrword cyg_uint32 +#endif + +#ifndef cyg_halbool +# ifdef __cplusplus +# define cyg_halbool bool +# else +# define cyg_halbool int +# endif +#endif + +#ifndef cyg_halatomic +# define cyg_halatomic cyg_halint8 +#endif + +// ------------------------------------------------------------------------- +// The obvious few that compilers may define for you. +// But in case they don't: + +#ifndef NULL +# define NULL 0 +#endif + +#ifndef __cplusplus + +typedef cyg_halbool bool; + +# ifndef false +# define false 0 +# endif + +# ifndef true +# define true (!false) +# endif + +#endif + +// ------------------------------------------------------------------------- +// Allow creation of procedure-like macros that are a single statement, +// and must be followed by a semi-colon + +#define CYG_MACRO_START do { +#define CYG_MACRO_END } while (0) + +#define CYG_EMPTY_STATEMENT CYG_MACRO_START CYG_MACRO_END + +#define CYG_UNUSED_PARAM( _type_, _name_ ) CYG_MACRO_START \ + _type_ __tmp1 = (_name_); \ + _type_ __tmp2 = __tmp1; \ + __tmp1 = __tmp2; \ +CYG_MACRO_END + + +// ------------------------------------------------------------------------- +// Reference a symbol without explicitly making use of it. Ensures that +// the object containing the symbol will be included when linking. + +#define CYG_REFERENCE_OBJECT(__object__) \ + CYG_MACRO_START \ + static void *__cygvar_discard_me__ __attribute__ ((unused)) = \ + &(__object__); \ + CYG_MACRO_END + +// ------------------------------------------------------------------------- +// Define basic types for using integers in memory and structures; +// depends on compiler defaults and CPU type. + +typedef unsigned cyg_halint8 cyg_uint8 ; +typedef signed cyg_halint8 cyg_int8 ; + +typedef unsigned cyg_halint16 cyg_uint16 ; +typedef signed cyg_halint16 cyg_int16 ; + +typedef unsigned cyg_halint32 cyg_uint32 ; +typedef signed cyg_halint32 cyg_int32 ; + +typedef unsigned cyg_halint64 cyg_uint64 ; +typedef signed cyg_halint64 cyg_int64 ; + +typedef cyg_halbool cyg_bool ; + +// ------------------------------------------------------------------------- +// Define types for using integers in registers for looping and the like; +// depends on CPU type, choose what it is most comfortable with, with at +// least the range required. + +typedef unsigned cyg_halcount8 cyg_ucount8 ; +typedef signed cyg_halcount8 cyg_count8 ; + +typedef unsigned cyg_halcount16 cyg_ucount16 ; +typedef signed cyg_halcount16 cyg_count16 ; + +typedef unsigned cyg_halcount32 cyg_ucount32 ; +typedef signed cyg_halcount32 cyg_count32 ; + +typedef unsigned cyg_halcount64 cyg_ucount64 ; +typedef signed cyg_halcount64 cyg_count64 ; + +// ------------------------------------------------------------------------- +// Define a type to be used for atomic accesses. This type is guaranteed +// to be read or written in a single uninterruptible operation. This type +// is at least a single byte. + +typedef volatile unsigned cyg_halatomic cyg_atomic; +typedef volatile unsigned cyg_halatomic CYG_ATOMIC; + +// ------------------------------------------------------------------------- +// Define types for access plain, on-the-metal memory or devices. + +typedef cyg_uint32 CYG_WORD; +typedef cyg_uint8 CYG_BYTE; +typedef cyg_uint16 CYG_WORD16; +typedef cyg_uint32 CYG_WORD32; +typedef cyg_uint64 CYG_WORD64; + +typedef cyg_haladdress CYG_ADDRESS; +typedef cyg_haladdrword CYG_ADDRWORD; + +// ------------------------------------------------------------------------- +// Constructor ordering macros. These are added as annotations to all +// static objects to order the constuctors appropriately. + +#if defined(__cplusplus) && defined(__GNUC__) +# define CYGBLD_ATTRIB_INIT_PRI( _pri_ ) __attribute__((init_priority(_pri_))) +#else +// FIXME: should maybe just bomb out if this is attempted anywhere else? +// Not sure +# define CYGBLD_ATTRIB_INIT_PRI( _pri_ ) +#endif + +// The following will be removed eventually as it doesn't allow the use of +// e.g. pri+5 format +#define CYG_INIT_PRIORITY( _pri_ ) CYGBLD_ATTRIB_INIT_PRI( CYG_INIT_##_pri_ ) + +#define CYGBLD_ATTRIB_INIT_BEFORE( _pri_ ) CYGBLD_ATTRIB_INIT_PRI(_pri_-100) +#define CYGBLD_ATTRIB_INIT_AFTER( _pri_ ) CYGBLD_ATTRIB_INIT_PRI(_pri_+100) + +#define CYG_INIT_HAL 10000 +#define CYG_INIT_SCHEDULER 11000 +#define CYG_INIT_INTERRUPTS 12000 +#define CYG_INIT_DRIVERS 13000 +#define CYG_INIT_CLOCK 14000 +#define CYG_INIT_IDLE_THREAD 15000 +#define CYG_INIT_THREADS 16000 +#define CYG_INIT_KERNEL 40000 +#define CYG_INIT_IO 49000 +#define CYG_INIT_LIBC 50000 +#define CYG_INIT_COMPAT 55000 +#define CYG_INIT_APPLICATION 60000 +#define CYG_INIT_PREDEFAULT 65534 +#define CYG_INIT_DEFAULT 65535 + +// ------------------------------------------------------------------------- +// COMPILER-SPECIFIC STUFF + +#ifdef __GNUC__ +// Force a 'C' routine to be called like a 'C++' contructor +# define CYGBLD_ATTRIB_CONSTRUCTOR __attribute__((constructor)) + +// Define a compiler-specific rune for saying a function doesn't return +# define CYGBLD_ATTRIB_NORET __attribute__((noreturn)) + +// How to define weak symbols - this is only relevant for ELF and a.out, +// but that won't be a problem for eCos +# define CYGBLD_ATTRIB_WEAK __attribute__ ((weak)) + +// How to define alias to symbols. Just pass in the symbol itself, not +// the string name of the symbol +# define CYGBLD_ATTRIB_ALIAS(__symbol__) \ + __attribute__ ((alias (#__symbol__))) + +// This effectively does the reverse of the previous macro. It defines +// a name that the attributed variable or function will actually have +// in assembler. +# define CYGBLD_ATTRIB_ASM_ALIAS(__symbol__) \ + __asm__ ( #__symbol__ ) + +// Shows that a function returns the same value when given the same args, but +// note this can't be used if there are pointer args +# define CYGBLD_ATTRIB_CONST __attribute__((const)) + +#else // non-GNU + +# define CYGBLD_ATTRIB_CONSTRUCTOR + +# define CYGBLD_ATTRIB_NORET + // This intentionally gives an error only if we actually try to + // use it. #error would give an error if we simple can't. +# define CYGBLD_ATTRIB_WEAK !!!-- Attribute weak not defined --!!! + +# define CYGBLD_ATTRIB_ALIAS(__x__) !!!-- Attribute alias not defined --!!! + +# define CYGBLD_ATTRIB_ASM_ALIAS(__symbol__) !!!-- Asm alias not defined --!!! + +# define CYGBLD_ATTRIB_CONST + +#endif + +// How to define weak aliases. Currently this is simply a mixture of the +// above + +# define CYGBLD_ATTRIB_WEAK_ALIAS(__symbol__) \ + CYGBLD_ATTRIB_WEAK CYGBLD_ATTRIB_ALIAS(__symbol__) + +// ------------------------------------------------------------------------- +// Label name macro. Some toolsets generate labels with initial +// underscores and others don't. This macro should be used on labels +// that are defined in assembly code or linker scripts so that we can +// do the right thing. + +#ifndef CYG_LABEL_NAME + +#define CYG_LABEL_NAME(_name_) _name_ + +#endif + +// ------------------------------------------------------------------------- +// Various "flavours" of memory regions that can be described by the +// Memory Layout Tool (MLT). + +#define CYGMEM_REGION_ATTR_R 0x01 // Region can be read +#define CYGMEM_REGION_ATTR_W 0x02 // Region can be written + +// ------------------------------------------------------------------------- +#endif // CYGONCE_INFRA_CYG_TYPE_H multiple inclusion protection +// EOF cyg_type.h diff --git a/tools/src/infra/diag.h b/tools/src/infra/diag.h new file mode 100644 index 00000000..664e527a --- /dev/null +++ b/tools/src/infra/diag.h @@ -0,0 +1,106 @@ +#ifndef CYGONCE_INFRA_DIAG_H +#define CYGONCE_INFRA_DIAG_H + +/*============================================================================= +// +// diag.h +// +// Diagnostic Routines for Infra Development +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: nickg +// Date: 1998-03-02 +// Purpose: Diagnostic Routines for Infra Development +// Description: Diagnostic routines for use during infra development. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//==========================================================================*/ + +#include +#include + +#ifdef CYGDBG_INFRA_DIAG_PRINTF_USE_VARARG +#include +#endif + +#ifdef CYGDBG_INFRA_DIAG_USE_DEVICE +#include +#endif + +/*---------------------------------------------------------------------------*/ +/* Diagnostic routines */ + +externC void diag_init(void); /* Initialize, call before any others*/ + +externC void diag_write_char(char c); /* Write single char to output */ + +externC void diag_write_string(const char *psz); /* Write zero terminated string */ + +externC void diag_write_dec( cyg_int32 n); /* Write decimal value */ + +externC void diag_write_hex( cyg_uint32 n); /* Write hexadecimal value */ + +externC void diag_dump_buf(void *buf, CYG_ADDRWORD len); + +#ifdef CYGDBG_INFRA_DIAG_PRINTF_USE_VARARG + +externC void diag_printf( const char *fmt, ... ); /* Formatted print */ + +#else + +// This function deliberately has a K&R prototype to avoid having to use +// varargs, or pad arglists or anything grody like that. + +#warning CYGDBG_INFRA_DIAG_PRINTF_USE_VARARG not enabled +#warning Expect a "function declaration isn't a prototype" warning + +externC void diag_printf(/* const char *fmt, CYG_ADDRWORD, CYG_ADDRWORD, + CYG_ADDRWORD, CYG_ADDRWORD, CYG_ADDRWORD, + CYG_ADDRWORD, CYG_ADDRWORD, CYG_ADDRWORD */); + +#endif + +/*---------------------------------------------------------------------------*/ +/* Internal Diagnostic MACROS */ + +#ifdef CYGDBG_INFRA_DIAG_USE_DEVICE +#define DIAG_DEVICE_START_SYNC() diag_device_start_sync() +#define DIAG_DEVICE_END_SYNC() diag_device_end_sync() +#else +#define DIAG_DEVICE_START_SYNC() +#define DIAG_DEVICE_END_SYNC() +#endif + +/*---------------------------------------------------------------------------*/ +#endif /* CYGONCE_INFRA_DIAG_H */ +/* EOF diag.h */ diff --git a/tools/src/infra/hosttest.exp b/tools/src/infra/hosttest.exp new file mode 100644 index 00000000..19d45938 --- /dev/null +++ b/tools/src/infra/hosttest.exp @@ -0,0 +1,735 @@ +#=============================================================================== +# +# hosttest.exp +# +# Support for host-side testing +# +#=============================================================================== +######COPYRIGHTBEGIN#### +# +# ---------------------------------------------------------------------------- +# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ---------------------------------------------------------------------------- +# +######COPYRIGHTEND#### +#=============================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): bartv +# Contributors: bartv +# Date: 1998-11-25 +# Note: Arguably this should be a loadable package +# +#####DESCRIPTIONEND#### +#=============================================================================== +# + +# ---------------------------------------------------------------------------- +# This script gets loaded by host-side DejaGnu test harnesses to provide +# various utilities for testing eCos host applications. It lives in the +# host-side infrastructure directory and gets installed in +# $(PREFIX)/share/dejagnu. +# +# The script can assume that a number of globals from the site.exp +# file have been read in. These include: +# tool - name of the tool (i.e. the package) +# srcdir - location of the source directory +# objdir - location of the build tree +# host_alias - config triplet +# host_triplet - ditto +# +# The generated Makefile has some additional information that is useful. +# CC - name of the C compiler that is used +# CXX - name of the C++ compiler +# prefix - where everything gets installed +# OBJEXT - either o or obj +# EXEEXT - either nothing or .exe +# VERSION - the version number +# CFLAGS - flags to use when compiling C code +# CXXFLAGS - flags to use when compiling C++ code +# +# Some additional variables should be present in any generated +# makefiles in the eCos tree. +# INCLUDES - header file search path +# LIBS - libraries, search paths, ... +# +# hosttest_initialize +# Perform any initialization steps that are needed. Currently this +# means reading in the Makefile from the top-level of the build tree +# and figuring out the values of CC, CXX, and anything else that is +# useful. Any errors should be reported via perror and then the +# script should exit. +# +# There is an optional argument, a list of additional variables which +# should be present in the makefile and whose values are desired. + +proc hosttest_initialize { { pkg_vars {} } } { + + # First check that this script is actually running inside DejaGnu + if { [info exists ::objdir] == 0 } { + puts "Variable ::objdir is not defined, is this script really running inside DejaGnu?" + exit 1 + } + + # The information is stored in an array hosttest_data. Make sure this + # array exists. + array set ::hosttest_data {} + + # Now clear out any entries in the array + foreach entry [array names ::hosttest_data] { + unset ::hosttest_data($entry) + } + + # Now read in the build tree's Makefile (and not the testsuite's Makefile) + set filename [file join $::objdir .. Makefile] + if { [file exists $filename] == 0 } { + perror "Initialization error: the build tree's Makefile $filename does not exist." + exit 1 + } + set status [ catch { + set fd [open $filename r] + set contents [read $fd] + close $fd + } message] + if { $status != 0 } { + perror "Error reading $filename.\n$message" + exit 1 + } + + # The data is available. Search it for each of the variables of + # interest. Some variables are optional and are given default + # values. + set ::hosttest_data(CFLAGS) "" + set ::hosttest_data(CXXFLAGS) "" + + set lines [split $contents "\n"] + + foreach var [concat { CC CXX prefix OBJEXT EXEEXT VERSION CFLAGS CXXFLAGS INCLUDES LIBS } $pkg_vars] { + + set pattern "^$var\[ \t\]*:?=\[ \t\]* (.*)\$" + set dummy "" + set match "" + + foreach line $lines { + if { [regexp -- $pattern $line dummy match] == 1 } { + set ::hosttest_data($var) $match + break + } + } + if { [info exists ::hosttest_data($var)] == 0 } { + perror "Variable $var is not defined in $filename" + exit 1 + } + } + + # If compiling with VC++ remove any cygwin-isms from the prefix + if { [string match "cl*" $::hosttest_data(CC)] } { + set status [catch "exec cygpath -w $::hosttest_data(prefix)" message] + if { $status == 0 } { + regsub -all -- {\\} $message {/} ::hosttest_data(prefix) + } else { + perror "Converting cygwin pathname $::hosttest_data(prefix)\n$message" + exit 1 + } + } +} + + +# ---------------------------------------------------------------------------- +# hosttest_extract_version +# Assuming there has been a call to initialize, the required information +# should be available in the hosttest_data array. The initialize +# function should have aborted if the data is not available. + +proc hosttest_extract_version { } { + + if { [info exists ::hosttest_data(VERSION)] == 0 } { + error "No version information - host testing has not been properly initialized." + } + + if { [info exists ::objdir] == 0 } { + error "Variable ::objdir is not defined, is this script really running inside DejaGnu?" + } + return $::hosttest_data(VERSION) +} + +# ---------------------------------------------------------------------------- +# hosttest_compile +# compile and link one or more source files. The arguments are: +# 1) the name of the test case +# 2) a list of one or more source files that need to be compiled. +# Both .c and .cxx files are supported, and the appropriate +# compiler will be used. If this list is empty then the +# code will look for a .c or a .cxx file which matches the +# name of the test executable. Source files are assumed to +# be relative to $::srcdir/$::subdir +# 3) a list (possibly empty) of directories that should be in the +# include path. The build tree's directory is automatically in +# the path, as is $(PREFIX)/include. Note that the build tree +# is actually one level above objdir, on the assumption that +# objdir is the testsuite subdirectory of the real objdir. +# 4) ditto for library search paths. +# 5) and a list of additional libraries that should be linked. +# +# Currently it is not possible to pass compiler flags since those +# might need translating between gcc and VC++. This may have to be +# resolved. +# +# Currently linking is not done via libtool. This may have to change. +# +# The various object files and the executable are placed in a directory +# testcase in the build tree, to avoid the risk of name clashes. This +# directory must not exist yet. There is a separate routine hosttest_clean +# which simply expunges the entire testcase directory. +# +# The output of a succesful compile or built is reported using +# verbose at level 2. Unsuccesful compiles or builts are reported using +# level 1. + +proc hosttest_compile { name sources includes libdirs libs } { + + # Make sure that the testcase directory does not yet exist, then + # create it. This guarantees a clean system and reasonable access + # permissions. Each testcase invocation should involve a call to + # the clean function. + set dirname [file join $::objdir "testcase"] + if { [file exists $dirname] != 0 } { + # An empty directory is ok. + if { [llength [glob -nocomplain -- [file join $dirname "*"]]] != 0 } { + error "hosttest_compile: $dirname already exists" + } + } + + set status [catch { file mkdir $dirname } message] + if { $status != 0 } { + error "hosttest_compile: unable to create directory $dirname" + } + + # The only argument that must be valid is the test name. + if { $name == "" } { + error "hosttest_compile: invalid test case name" + } + + # If the list of sources is empty then look for a suitable + # file in the appropriate directory. + if { [llength $sources] == 0 } { + set filename [file join $::srcdir $::subdir "${name}.c"] + if { [file exists $filename] && [file isfile $filename] } { + lappend sources [file tail $filename] + } else { + set filename [file join $::srcdir $::subdir "${name}.cxx"] + if { [file exists $filename] && [file isfile $filename] } { + lappend sources [file tail $filename] + } else { + error "hosttest_compile: no sources listed and unable to find ${name}.c or ${name}.cxx" + } + } + } + + # For each source file, generate a compile command line and try to execute + # it. The command line takes the form: + # (CC|CXX) -c (CFLAGS|CXXFLAGS) (INCDIRS) -o xxx yyy + # + # It is also useful to produce a list of the object files that need to + # linked later on, and to work out which tool should be invoked for + # linking. + set object_files {} + set has_cxx_files 0 + + foreach source $sources { + set commandline "" + if { [file extension $source] == ".c" } { + append commandline "$::hosttest_data(CC) -c $::hosttest_data(CFLAGS) " + } elseif { [file extension $source] == ".cxx" } { + set has_cxx_files 1 + append commandline "$::hosttest_data(CXX) -c $::hosttest_data(CXXFLAGS) " + } else { + error "hosttest_compile: files of type [file extension $source] ($source) are not yet supported." + } + + # Include path: start with the source tree. Then the build tree. + # Then the makefile's INCLUDES variable. + # Then any additional directories specified explicitly by the + # testcase. Finish off with the prefix. Note that header files + # in the prefix directory may be out of date, depending on whether + # or not there has been an install recently. + append commandline "-I[file join [pwd] [file dirname $::srcdir]] " + append commandline "-I[file join [pwd] [file dirname $::objdir]] " + append commandline "$::hosttest_data(INCLUDES) " + foreach dir $includes { + append commandline "-I[file join [pwd] $dir] " + } + append commandline "-I[file join [pwd] $::hosttest_data(prefix) include] " + + # The output file must go into the testcase directory and have the right suffix + set objfile "[file root [file tail $source]].$::hosttest_data(OBJEXT)" + lappend object_files $objfile + if { [string match "cl*" $::hosttest_data(CC)] } { + append commandline "-Fo[file join $::objdir testcase $objfile] " + } else { + append commandline "-o [file join $::objdir testcase $objfile] " + } + + # Finally provide the source file. + append commandline "[file join $::srcdir $::subdir $source]" + verbose -log -- $commandline + + # Time to invoke the compiler. + set status [catch { set result [eval exec -keepnewline -- $commandline] } message] + if { $status == 0 } { + # The compile succeeded and the output is in result. Report the + # output. + verbose -log -- $result + } else { + # The compile failed and the output is in message. + verbose -log -- $message + error "hosttest_compile: failed to compile $source" + } + } + + # At this stage all the source files have been compiled, a list of + # object files has been constructed, and it is known whether or + # not any of the sources were c++. Time to construct a new command + # line. + set commandline "" + if { $has_cxx_files == 0 } { + append commandline "$::hosttest_data(CC) $::hosttest_data(CFLAGS) " + } else { + append commandline "$::hosttest_data(CXX) $::hosttest_data(CXXFLAGS) " + } + set exename [file join $::objdir "testcase" "$name$::hosttest_data(EXEEXT)"] + + # List all of the object files + foreach obj $object_files { + append commandline "[file join $::objdir "testcase" $obj] " + } + + # Now take care of libraries and search paths. This requires different + # code for gcc and VC++. + + if { [string match "cl*" $::hosttest_data(CC)] } { + append commandline "-Fe$exename " + + foreach lib $libs { + append commandline "${lib}.lib " + } + append commandline "$::hosttest_data(LIBS) " + append commandline "-libpath=[file join [pwd] [file dirname $::objdir]] " + foreach dir $libdirs { + append commandline "-libpath=[file join [pwd] $dir] " + } + append commandline "-libpath=[file join [pwd] $::hosttest_data(prefix) lib] " + } else { + append commandline "-o $exename " + append commandline "-L[file join [pwd] [file dirname $::objdir]] " + foreach dir $libdirs { + append commandline "-L[file join [pwd] $dir] " + } + append commandline "-L[file join [pwd] $::hosttest_data(prefix) lib] " + foreach lib $libs { + append commandline "-l$lib " + } + append commandline "$::hosttest_data(LIBS) " + } + + # We have a command line, go for it. + verbose -log -- $commandline + set status [catch { set result [eval exec -keepnewline -- $commandline] } message] + if { $status == 0 } { + # The link has succeeded, we have an executable. + verbose -log -- $result + } else { + # The link failed and the output is in message. + # Report things are per compilation failures + verbose -log -- $message + error "hosttest_compile: failed to link $exename" + } + + # There should be a test executable. +} + +# ---------------------------------------------------------------------------- +# hosttest_clean +# Clean up a testcase directory. + +proc hosttest_clean { } { + + set dirname [file join $::objdir "testcase"] + if { [file exists $dirname] == 0 } { + + # Something must have gone seriously wrong during the build phase, + # there is nothing there. + return + } + + if { [file isdirectory $dirname] == 0 } { + error "hosttest_clean: $dirname should be a directory" + } + + foreach entry [glob -nocomplain -- [file join $dirname "*"]] { + set filename [file join $dirname $entry] + if { [file isfile $filename] == 0 } { + error "hosttest_clean: $filename is not a file" + } + set status [catch { file delete -force -- $filename } message] + if { $status != 0 } { + error "hosttest_clean: unable to delete $filename, $message" + } + } + set status [catch { file delete -force -- $dirname } message] + if { $status != 0 } { + error "hosttest_clean: unable to delete directory $dirname, $message" + } +} + +# ---------------------------------------------------------------------------- +# Run a test executable, returning the status code and the output. +# The results are returned in variables. It is assumed that some test cases +# will fail, so raising an exception is appropriate only if something +# has gone wrong at the test harness level. The argument list +# should be the name of the test case (from which the executable file name +# can be derived) and a list of arguments. + +proc hosttest_run { result_arg output_arg test args } { + + upvar $result_arg result + upvar $output_arg output + + # Figure out the filename corresponding to the test and make + # sure it exists. + set filename [file join $::objdir "testcase" $test] + append filename $::hosttest_data(EXEEXT) + if { ([file exists $filename] == 0) || ([file isfile $filename] == 0) } { + error "hosttest_run: testcase file $filename does not exist" + } + + # There is no need to worry about interacting with the program, + # just exec it. It is a good idea to do this in the testcase directory, + # so that any core dumps get cleaned up as well. + set current_dir [pwd] + set status [ catch { cd [file join $::objdir "testcase"] } message ] + if { $status != 0 } { + error "unable to change directory to [file join $::objdir testcase]\n$message" + } + + verbose -log -- $filename $args + set status [ catch { set result [eval exec -keepnewline -- $filename $args] } output] + if { $status == 0 } { + # The command has succeeded. The exit code is 0 and the output + # was returned by the exec. + set output $result + set result 0 + } else { + # The command has failed. The exit code is 1 and the output is + # already in the right place. + verbose -log -- $output + set result 1 + } + set status [catch { cd $current_dir } message] + if { $status != 0 } { + error "unable to change directory back to $current_dir" + } +} + +# ---------------------------------------------------------------------------- +# Given some test output, look through it for pass and fail messages. +# These should result in appropriate DejaGnu pass and fail calls. +# In addition, if the program exited with a non-zero status code but +# did not report any failures then a special failure is reported. + +proc hosttest_handle_output { name result output } { + + set passes 0 + set fails 0 + + foreach line [split $output "\n"] { + + # The output should be of one of the following forms: + # PASS: + # FAIL: Line: xx File: xx + # Whatever + # + # PASS and FAIL messages will be reported via DejaGnu pass and fail + # calls. Everything else gets passed to verbose, so the user gets + # to choose how much information gets reported. + + set dummy "" + set match1 "" + set match2 "" + + if { [regexp -- {^PASS:<(.*)>.*$} $line dummy match1] == 1 } { + pass $match1 + incr passes + } elseif { [regexp -- {^FAIL:<(.*)>(.*)$} $line dummy match1 match2] == 1 } { + fail "$match1 $match2" + incr fails + } else { + verbose $line + } + } + + if { ($result != 0) && ($fails == 0) } { + fail "program terminated with non-zero exit code but did not report any failures" + } elseif { ($passes == 0) && ($fails == 0) } { + unresolved "test case $name did not report any passes or failures" + } +} + +# ---------------------------------------------------------------------------- +# hosttest_run_test_with_filter +# This routines combines the compile, run and clean operations, +# plus it invokes a supplied callback to filter the output. The +# callback is passed three arguments: the test name, the exit code, +# and all of the program output. + +proc hosttest_run_test_with_filter { name filter sources incdirs libdirs libs args } { + + set result 0 + set output "" + + set status [ catch { hosttest_compile $name $sources $incdirs $libdirs $libs } message] + if { $status != 0 } { + fail "unable to compile test case $name, $message" + hosttest_clean + return + } + set status [ catch { hosttest_run result output $name $args } message] + if { $status != 0 } { + fail "unable to run test case $name, $message" + hosttest_clean + return + } + set status [ catch { $filter $name $result $output } message] + if { $status != 0 } { + fail "unable to parse output from test case $name" + hosttest_clean + return + } + + hosttest_clean +} + +# ---------------------------------------------------------------------------- +# hosttest_run_simple_test +# This routine combines the compile, run, output, and clean operations. +# The arguments are the same as for compilation, plus an additional +# list for run-time parameters to the test case. + +proc hosttest_run_simple_test { name sources incdirs libdirs libs args } { + + + set result 0 + set output "" + + set status [ catch { hosttest_compile $name $sources $incdirs $libdirs $libs } message] + if { $status != 0 } { + fail "unable to compile test case $name, $message" + hosttest_clean + return + } + set status [ catch { hosttest_run result output $name $args } message] + if { $status != 0 } { + fail "unable to run test case $name, $message" + hosttest_clean + return + } + set status [ catch { hosttest_handle_output $name $result $output } message] + if { $status != 0 } { + fail "unable to parse output from test case $name" + hosttest_clean + return + } + + hosttest_clean +} + +# ---------------------------------------------------------------------------- +# Filename translation. A particular file has been created and must now +# be accessed from Tcl. +# +# Under Unix everything just works. +# +# Under Windows, well there is cygwin and there is the Windows world. +# A file may have come from either. cygtclsh80 and hence DejaGnu is not +# fully integrated with cygwin, for example it does not know about +# cygwin mount points. There are also complications because of +# volume-relative filenames. +# +# The code here tries a number of different ways of finding a file which +# matches the name. It is possible that the result is not actually what +# was intended, but hopefully this case will never arise. + +proc hosttest_translate_existing_filename { name } { + + if { $::tcl_platform(platform) == "unix" } { + # The file should exist. It is worth checking just in case. + if { [file exists $name] == 0 } { + return "" + } else { + return $name + } + } + + if { $::tcl_platform(platform) != "windows" } { + perror "The testing framework does not know about platform $::tcl_platform(platform)" + return "" + } + + # Always get rid of any backslashes, they just cause trouble + regsub -all -- {\\} $name {/} name + + # If the name is already valid, great. + if { [file exists $name] } { + return $name + } + + # OK, try to use cygwin's cygpath utility to convert it. + set status [catch "exec cygpath -w $name" message] + if { $status == 0 } { + set cygwin_name "" + regsub -all -- {\\} $message {/} cygwin_name + if { [file exists $cygwin_name] } { + return $cygwin_name + } + } + + # Is the name volumerelative? If so work out the current volume + # from the current directory and prepend this. + if { [file pathtype $name] == "volumerelative" } { + append fullname [string range [pwd] 0 1] $name + if { [file exists $fullname] } { + return $fullname + } + } + + # There are other possibilities, e.g. d:xxx indicating a file + # relative to the current directory on drive d:. For now such + # Lovecraftian abominations are ignored. + return "" +} + +# ---------------------------------------------------------------------------- +# Support for assertion dumps. The infrastructure allows other subsystems +# to add their own callbacks which get invoked during a panic and which +# can write additional output to the dump file. For example it would be +# possible to output full details of the current configuration. These +# routines make it easier to write test cases for such callbacks. +# +# hosttest_assert_check(result output) +# Make sure that the test case really triggered an assertion. +# +# hosttest_assert_read_dump(output) +# Identify the temporary file used for the dump, read it in, delete +# it (no point in leaving such temporaries lying around when running +# testcases) and return the contents of the file. +# +# hosttest_assert_extract_callback(dump title) +# Given a dump output as returned by read_dump, look for a section +# generated by a callback with the given title. Return the contents +# of the callback. + +proc hosttest_assert_check { result output } { + + if { $result == 0 } { + return 0 + } + + foreach line [split $output "\n"] { + if { [string match "Assertion failure*" $line] } { + return 1 + } + } + return 0 +} + +# This routine assumes that assert_check has already been called. +proc hosttest_assert_read_dump { output } { + + foreach line [split $output "\n"] { + set dummy "" + set match "" + + if { [regexp -nocase -- {^writing additional output to (.*)$} $line dummy match] } { + + # The filename is in match, but it may not be directly accessible. + set filename [hosttest_translate_existing_filename $match] + if { $filename == "" } { + return "" + } + set status [ catch { + set fd [open $filename r] + set data [read $fd] + close $fd + file delete $filename + } message] + if { $status != 0 } { + unresolved "Unable to process assertion dump file $filename" + unresolved "File $filename may have to be deleted manually" + return "" + } + return $data + } + } + return "" +} + +# Look for the appropriate markers. Also clean up blank lines +# at the start and end. +proc hosttest_assert_extract_callback { dump title } { + + set lines [split $dump "\n"] + set result "" + + while { [llength $lines] > 0 } { + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + + if { [regexp -nocase -- "^\# \{\{\{.*${title}.*\$" $line] } { + + # Skip any blank lines at the start + while { [llength $lines] > 0 } { + set line [lindex $lines 0] + if { [regexp -- {^ *$} $line] == 0} { + break + } + set lines [lreplace $lines 0 0] + } + + # Now add any lines until the close marker. + # Nested folds are not supported yet. + while { [llength $lines] > 0 } { + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + if { [regexp -nocase -- {^\# \}\}\}.*$} $line] } { + break + } + append result $line "\n" + } + + return $result + } + } + + return "" +} + + + + diff --git a/tools/src/infra/infra.h b/tools/src/infra/infra.h new file mode 100644 index 00000000..9ebe2b8b --- /dev/null +++ b/tools/src/infra/infra.h @@ -0,0 +1,116 @@ +#ifndef CYGONCE_PKGCONF_INFRA_H +# define CYGONCE_PKGCONF_INFRA_H + +//====================================================================== +// +// infra.h +// +// Host side implementation of the infrastructure configuration +// header. +// +//====================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//====================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1998/07/13 +// Version: 0.01 +// +//####DESCRIPTIONEND#### +//====================================================================== + +// The purpose of this header file is to replicate appropriate +// functionality from the target-side header file . +// This header file is intended to contain configuration options +// related to the implementation of the infrastructure, as opposed +// to how that infrastructure gets used by other packages. A good +// example would be a configuration option to control the size +// of the circular trace buffer. +// +// On the host side these things are handled by autoconf, and in +// particular the configure.in script will offer command-line +// arguments allowing the relevant options to be controlled. +// The relevant information will end up in +# include + +// Some options should always be enabled in this header file. +#define CYGDBG_INFRA_DIAG_PRINTF_USE_VARARG +#define CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE +#define CYGDBG_INFRA_DEBUG_TRACE_MESSAGE + +// Other options should be decided on a package by package basis, +// e.g. whether or not assertions are used. On the host side it is +// not appropriate to control these globally, instead the infrastructure +// always provides the necessary functionality and it is up to the +// other parts of the system to decide whether or not the facilities +// get used. + +// A third set of options deal with the environment, e.g. the sizes +// of various data types. autoconf macros take care of most of the +// work, but some translation is needed into eCos-style names to +// avoid namespace pollution. + +// Process the definitions of SIZEOF_INT_P and SIZEOF_LONG to work +// out a sensible data type for CYG_ADDRESS and CYG_ADDRWORD. + +#if (!defined(SIZEOF_INT_P) || !defined(SIZEOF_LONG)) +# error "Configure problem: data type sizes not set" +#endif + +#if (SIZEOF_INT_P == 4) + // The default, nothing needs to be done +#elif (SIZEOF_INT_P == 8) +# define cyg_haladdress cyg_halint64 +#else +# error "Only 32 and 64 bit pointers are supported" +#endif + +#if ((SIZEOF_INT_P == 4) && (SIZEOF_LONG == 4)) + // The default, nothing needs to be done +#elif ((SIZEOF_INT_P <= 8) && (SIZEOF_LONG <= 8)) + // cyg_halint64 will have been defined appropriately. +# define cyg_haladdrword cyg_halint64 +#else +# error "Only 32 and 64 bit machine word sizes are supported" +#endif + +// Any symbols defined in which have been processed +// here should no longer be of any interest, and in the interests of +// reducing name space pollution they get undef'ed here. + +// In addition there are two #define's in the config.h header file +// which are always present and which have names that are rather too +// generic. These get removed here as well. The version is worth +// preserving under a different name. +#undef SIZEOF_INT_P +#undef SIZEOF_LONG +#undef PACKAGE +#undef VERSION + +#endif // CYGONCE_PKGCONF_INFRA_H +// End of infra.h diff --git a/tools/src/infra/stamp-h.in b/tools/src/infra/stamp-h.in new file mode 100644 index 00000000..9788f702 --- /dev/null +++ b/tools/src/infra/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/tools/src/infra/testcase.cxx b/tools/src/infra/testcase.cxx new file mode 100644 index 00000000..2eccc4f0 --- /dev/null +++ b/tools/src/infra/testcase.cxx @@ -0,0 +1,92 @@ +//========================================================================== +// +// testcase.cxx +// +// Host side implementation of the test support routines. +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1998-01-01 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +//========================================================================== + +#include +#include + +#include + +// Initialization is a no-op for the host side testing infrastructure. +// Only batch programs are likely to use these testing facilities so +// it is safe to assume that stdio is available. + +externC void +cyg_test_init(void) +{ +} + +// This simply implements the current interface, warts and all. +// It is necessary to keep track of any failures or invalid +// calls. +static int failures = 0; + +externC void +cyg_test_output(Cyg_test_code status, const char* msg, int line_number, const char* file) +{ + if (CYGNUM_TEST_FAIL == status) + failures++; + + if (0 == msg) + msg = ""; + if (0 == file) + file = ""; + + if (CYGNUM_TEST_FAIL == status) { + printf("FAIL:<%s> Line: %d, File: %s\n", msg, line_number, file); + } else { + printf("%s:<%s>\n", + (CYGNUM_TEST_PASS == status) ? "PASS" : + (CYGNUM_TEST_EXIT == status) ? "EXIT" : + (CYGNUM_TEST_INFO == status) ? "INFO" : + (CYGNUM_TEST_GDBCMD == status) ? "GDBCMD" : + (CYGNUM_TEST_NA == status) ? "NA" : "UNKNOWN STATUS", + msg); + } + +} + +externC void +cyg_test_exit(void) +{ + exit( (0 < failures) ? EXIT_FAILURE : EXIT_SUCCESS ); +} diff --git a/tools/src/infra/testcase.h b/tools/src/infra/testcase.h new file mode 100644 index 00000000..25c0e363 --- /dev/null +++ b/tools/src/infra/testcase.h @@ -0,0 +1,191 @@ +#ifndef CYGONCE_INFRA_TESTCASE_H +#define CYGONCE_INFRA_TESTCASE_H +//========================================================================== +// +// testcase.h +// +// Target side interface for tests +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): ctarpy +// Contributors: ctarpy, jlarmour +// Date: 1999-02-16 +// +// +//####DESCRIPTIONEND#### + +#include // Common type definitions and support + + +// CONSTANTS + +// Status codes + +typedef enum { + CYGNUM_TEST_FAIL, + CYGNUM_TEST_PASS, + CYGNUM_TEST_EXIT, + CYGNUM_TEST_INFO, + CYGNUM_TEST_GDBCMD, + CYGNUM_TEST_NA +} Cyg_test_code; + +// FUNCTION PROTOTYPES + +externC void +cyg_test_output(Cyg_test_code _status_, const char* _msg_, int _line_number_, + const char* _file_); + +// This should be called at the start of each test file +externC void +cyg_test_init(void); + +// This causes the test to exit +externC void +cyg_test_exit(void) CYGBLD_ATTRIB_NORET; + +// GLOBALS + +externC int cyg_test_is_simulator; // infrastructure changes as necessary + +// MACROS + +// ----------- Info ----------- +// +// Any macro with EXIT in it should only be used in a panic situation. It +// is synonymous with assert. If the test behaves as expected, it +// should call one of the FINISH macros. +// +// - Compound testcases +// If a testcase is capable of being part of a compound, then the following +// rules apply: +// - The testcase must only ever call one of the EXIT macros if it decides +// the state of the system is such that further testing is meaningless; +// such a call would prevent subsequent tests in the compound from being +// run. +// - In order to terminate the test, the testcase should call one of the +// FINISH macros. This must be done from within main(). + + + + +// The following is the testcase API to be used by testcases. + +#define CYG_TEST_INIT() cyg_test_init() + +#define CYG_TEST_INFO( _msg_ ) \ + cyg_test_output(CYGNUM_TEST_INFO, _msg_, __LINE__, __FILE__) + +#define CYG_TEST_PASS( _msg_ ) \ + cyg_test_output(CYGNUM_TEST_PASS, _msg_, __LINE__, __FILE__) + +#define CYG_TEST_FAIL( _msg_ ) \ + cyg_test_output(CYGNUM_TEST_FAIL, _msg_, __LINE__, __FILE__) + +#define CYG_TEST_EXIT( _msg_ ) \ + (cyg_test_output(CYGNUM_TEST_EXIT, _msg_, __LINE__, __FILE__), \ + cyg_test_exit()) + +// Use the following macro to instruct GDB to run a command when using +// the automatic testing infrastructure. This must be used *before* +// CYG_TEST_INIT() is called + +#define CYG_TEST_GDBCMD( _command_ ) \ + CYG_MACRO_START \ + cyg_test_output(CYGNUM_TEST_GDBCMD, _command_, __LINE__, __FILE__); \ + CYG_MACRO_END + +// Use the following macro to declare that a test is not applicable for +// some reason - perhaps not appropriate due to chosen hardware, +// configuration options governing the presence of a tested feature, or +// even configuration options governing the presence of a feature the +// test relies on _in_order_ to test the feature (despite being +// unrelated!) + +#define CYG_TEST_NA( _msg_ ) \ + CYG_MACRO_START \ + cyg_test_output(CYGNUM_TEST_NA, _msg_, __LINE__, __FILE__); \ + cyg_test_exit(); \ + CYG_MACRO_END + +#ifdef CYG_COMPOUND_TEST +# define CYG_TEST_FINISH( _msg_ ) \ + CYG_MACRO_START \ + cyg_test_output(CYGNUM_TEST_EXIT, _msg_, __LINE__, __FILE__); \ + return 0; \ + CYG_MACRO_END +#else +# define CYG_TEST_FINISH( _msg_ ) CYG_TEST_EXIT( _msg_ ) +#endif + +#define CYG_TEST_STILL_ALIVE( _ctr_ , _msg_ ) CYG_TEST_INFO( _msg_ ) + + +// ----- The following are convenience functions + +#define CYG_TEST_PASS_FINISH( _msg_ ) \ + CYG_MACRO_START \ + CYG_TEST_PASS( _msg_ ); \ + CYG_TEST_FINISH("done"); \ + CYG_MACRO_END + +#define CYG_TEST_FAIL_FINISH( _msg_ ) \ + CYG_MACRO_START \ + CYG_TEST_FAIL( _msg_ ); \ + CYG_TEST_FINISH("done"); \ + CYG_MACRO_END + + +#define CYG_TEST_CHECK( _chk_ , _msg_) \ + CYG_MACRO_START \ + (void)(( _chk_ ) || ( CYG_TEST_FAIL( _msg_ ) , cyg_test_exit(), 1)); \ + CYG_MACRO_END + +#define CYG_TEST_PASS_FAIL( _cdn_, _msg_ ) \ + CYG_MACRO_START \ + if ( _cdn_ ) CYG_TEST_PASS( _msg_ ); else CYG_TEST_FAIL( _msg_ ); \ + CYG_MACRO_END + + +// CYG_TEST_PASS_EXIT and CYG_TEST_FAIL_EXIT are now obscelete, +// but are here for now +// to avoid breaking testcases which still use them. They will +// soon go away. +#define CYG_TEST_PASS_EXIT( _msg_ ) \ + (cyg_test_output(CYGNUM_TEST_PASS, _msg_, __LINE__, __FILE__), \ + CYG_TEST_EXIT("done")) + +#define CYG_TEST_FAIL_EXIT( _msg_ ) \ + (cyg_test_output(CYGNUM_TEST_FAIL, _msg_, __LINE__, __FILE__), \ + CYG_TEST_EXIT("done")) + + +#endif // CYGONCE_INFRA_TESTCASE_H +// EOF testcase.h diff --git a/tools/src/infra/testsuite/Makefile.am b/tools/src/infra/testsuite/Makefile.am new file mode 100644 index 00000000..c9a4cf0a --- /dev/null +++ b/tools/src/infra/testsuite/Makefile.am @@ -0,0 +1,42 @@ +## Process this file with automake to produce Makefile.in +## ===================================================================== +## +## Makefile.am +## +## Host side implementation of the eCos infrastructure assertions. +## +## ===================================================================== +#######ECOSHOSTGPLCOPYRIGHTBEGIN#### +## ---------------------------------------------------------------------------- +# Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +## ---------------------------------------------------------------------------- +#######ECOSHOSTGPLCOPYRIGHTEND#### +## ===================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): bartv +## Contact(s): bartv +## Date: 1998/07/13 +## Version: 0.01 +## +######DESCRIPTIONEND#### +## ===================================================================== + +AUTOMAKE_OPTIONS = 1.3 foreign dejagnu diff --git a/tools/src/infra/testsuite/Makefile.in b/tools/src/infra/testsuite/Makefile.in new file mode 100644 index 00000000..2cc6d207 --- /dev/null +++ b/tools/src/infra/testsuite/Makefile.in @@ -0,0 +1,251 @@ +# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +#######ECOSHOSTGPLCOPYRIGHTBEGIN#### +# Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +#######ECOSHOSTGPLCOPYRIGHTEND#### +#######DESCRIPTIONBEGIN#### +######DESCRIPTIONEND#### + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +CC = @CC@ +CXX = @CXX@ +ECOS_REPOSITORY = @ECOS_REPOSITORY@ +EXEEXT = @EXEEXT@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MSVC_SRCDIR = @MSVC_SRCDIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_DIR = @PACKAGE_DIR@ +PACKAGE_INSTALL = @PACKAGE_INSTALL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ +ecos_CFLAGS = @ecos_CFLAGS@ +ecos_CXXFLAGS = @ecos_CXXFLAGS@ +ecos_INCLUDES = @ecos_INCLUDES@ +ecos_LDADD = @ecos_LDADD@ +ecos_LIBS = @ecos_LIBS@ +ecos_infra_incdir = @ecos_infra_incdir@ +ecos_infra_libdir = @ecos_infra_libdir@ +ecos_libcdl_incdir = @ecos_libcdl_incdir@ +ecos_libcdl_libdir = @ecos_libcdl_libdir@ +ecos_tk_includes = @ecos_tk_includes@ +ecos_tk_libs = @ecos_tk_libs@ + +AUTOMAKE_OPTIONS = 1.3 foreign dejagnu +mkinstalldirs = $(SHELL) $(top_srcdir)/../../acsupport/mkinstalldirs +CONFIG_HEADER = ../hostinfra.h +CONFIG_CLEAN_FILES = +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +EXPECT = expect +RUNTEST = runtest +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = testsuite + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign testsuite/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +RUNTESTFLAGS = + +DEJATOOL = $(PACKAGE) + +RUNTESTDEFAULTFLAGS = --tool $(DEJATOOL) --srcdir $$srcdir + +check-DEJAGNU: site.exp + srcdir=`cd $(srcdir) && pwd`; export srcdir; \ + EXPECT=$(EXPECT); export EXPECT; \ + runtest=$(RUNTEST); \ + if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ + $$runtest $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ + else echo "WARNING: could not find \`runtest'" 1>&2; :;\ + fi +site.exp: Makefile + @echo 'Making a new site.exp file...' + @test ! -f site.bak || rm -f site.bak + @echo '## these variables are automatically generated by make ##' > $@-t + @echo '# Do not edit here. If you wish to override these values' >> $@-t + @echo '# edit the last section' >> $@-t + @echo 'set tool $(DEJATOOL)' >> $@-t + @echo 'set srcdir $(srcdir)' >> $@-t + @echo 'set objdir' `pwd` >> $@-t + @echo 'set host_alias $(host_alias)' >> $@-t + @echo 'set host_triplet $(host_triplet)' >> $@-t + @echo '## All variables above are generated by configure. Do Not Edit ##' >> $@-t + @test ! -f site.exp || sed '1,/^## All variables above are.*##/ d' site.exp >> $@-t + @test ! -f site.exp || mv site.exp site.bak + @mv $@-t site.exp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: +uninstall: uninstall-am +all-am: Makefile +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-generic clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: tags distdir check-DEJAGNU info-am info dvi-am dvi check \ +check-am installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tools/src/infra/testsuite/config/default.exp b/tools/src/infra/testsuite/config/default.exp new file mode 100644 index 00000000..6ac63262 --- /dev/null +++ b/tools/src/infra/testsuite/config/default.exp @@ -0,0 +1,116 @@ +#=============================================================================== +# +# default.exp +# +# Support for host-side testing +# +#=============================================================================== +######COPYRIGHTBEGIN#### +# +# ---------------------------------------------------------------------------- +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ---------------------------------------------------------------------------- +# +######COPYRIGHTEND#### +#=============================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): bartv +# Contributors: bartv +# Date: 1998-11-24 +# +#####DESCRIPTIONEND#### +#=============================================================================== +# + +# The host-side infrastructure tests will only run on the hosts, i.e. +# only native testing is possible. +if { [isnative] != 1 } { + perror "Only native testing is supported." + exit 1 +} + +# Most of the test harness lives in a file hosttest.exp. This is part +# of the host-side infrastructure and gets installed in the directory +# $(PREFIX)/share/dejagnu. Other packages have to locate the file +# the hard way since the PREFIX is not provided automatically in +# the site.exp file, instead it is necessary to search through the +# build tree's Makefile. In the case of the infrastructure itself +# a shortcut is both possible and desirable because the script may +# not have been installed yet. +# +# Note that srcdir actually points at the testsuite subdirectory, not +# at the real srcdir. +set filename [file join $::srcdir .. hosttest.exp] +set status [ catch { source $filename } message] +if { $status != 0 } { + perror ("Unexpected error while reading in the support script $filename\n$message" +} + +# Now that the hosttest.exp utilities are available it is possible to do +# a bit more initialization. In particular it is possible to read in the +# build tree's Makefile and look for definitions of CC, CXX, and any +# other information from the Makefile that may prove useful. +hosttest_initialize + +# There are standard routines ${tool}_start, ${tool}_load, ${tool}_exit +# and ${tool}_version which test harnesses should normally implement. +# In practice runtest only invokes ${tool}_exit and ${tool}_version +# directly, the rest may or may not be invoked from inside the individual +# test scripts. +# +# ${tool}_version is relatively straightforward. The master version +# number is maintained in the configure.in script and is exported to +# the build tree's Makefile. There is a hosttest routine which does the +# hard work because getting the information is common to all host +# packages. The _version routine itself cannot be made completely generic +# because the first output is package-specific. + +proc ${tool}_version { } { + + set status [ catch { hosttest_extract_version } message] + if { $status != 0 } { + perror $message + return + } + clone_output "[file join $::objdir libcyginfra.a] $message" +} + +# ${tool}_start does not serve any useful purpose when it comes to +# testing libcyginfra.a - there is no tool which can be started up. +# Therefore none of the individual test scripts will invoke this +# routine. + +proc ${tool}_start { } { + perror "Cyginfra is a library, not a tool, and cannot be started." +} + +# ${tool}_load is used to load a test case into the tool. The exact +# meaning is not applicable. However it makes sense to have this +# routine provide an alias for hosttest_run_simple_test which provides +# all the libraries etc. that are going to be needed. + +proc ${tool}_load { program { args ""} } { + hosttest_run_simple_test $program {} {} {} cyginfra $args +} + +# ${tool}_exit does not serve any useful purpose here. +proc ${tool}_exit { } { +} diff --git a/tools/src/infra/testsuite/cyginfra/assert.exp b/tools/src/infra/testsuite/cyginfra/assert.exp new file mode 100644 index 00000000..44bdaa30 --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/assert.exp @@ -0,0 +1,341 @@ +#=============================================================================== +# +# assert.exp +# +# Assertion test cases +# +#=============================================================================== +######COPYRIGHTBEGIN#### +# +# ---------------------------------------------------------------------------- +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ---------------------------------------------------------------------------- +# +######COPYRIGHTEND#### +#=============================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): bartv +# Contributors: bartv +# Date: 1998-11-25 +# +#####DESCRIPTIONEND#### +#=============================================================================== + +# ---------------------------------------------------------------------------- +# Start with the simple tests. +${tool}_load tassert1 +${tool}_load tassert2 +${tool}_load tassert3 +${tool}_load tassert4 + +# tassert5 is not buildable under Linux. It is a C program linked with +# a C++ library, and there are dependencies on the default new and +# delete operators which are not satisfied. + +if { [string match "cl*" $::hosttest_data(CC)] } { + ${tool}_load tassert5 +} else { + unsupported "using the infrastructure from C code" +} + +${tool}_load tassert6 +${tool}_load tassert7 + +# ---------------------------------------------------------------------------- +# tassert8 is a bit more complicated. It involves an assertion which +# is not caught in any way by the application code. Therefore the +# output of the program has to be analysed to make sure it is +# reasonable. There is also going to be a dump file that needs +# to be analysed and cleaned up. + +proc tassert8_filter { name result output } { + + set all_ok 1 + + if { $result == 0 } { + fail "testcase $name should have a non-zero exit code" + set all_ok 0 + } + + # Convert the output to a list of lines. + set lines [split $output "\n"] + + # The first line of interest should contain the phrase + # "Assertion failure" and the string embedded in tassert8.cxx + while { 1 } { + if { [llength $lines] == 0 } { + set all_ok 0 + fail "No \"Assertion failure\" message detected in program output" + break + } + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + if { [regexp -nocase -- {^assertion failure.*it seemed like a good idea at the time$} $line] } { + break + } + } + + # The next line should indicate the file and the line number + if { [llength $lines] == 0 } { + set all_ok 0 + fail "No file name or line number information" + } else { + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + if { [regexp -nocase -- {^file .*tassert8.cxx.*line number [0-9]+$} $line] == 0} { + fail "Output did not contain the expected filename and linenumber" + } + } + # There may or may not be a line containing the function name. + # This should not be checked, it depends on compiler support + # for __PRETTY_FUNCTION__. The next line of interest is + # "Writing additional output to xxx", where xxx is a filename. + while { 1 } { + if { [llength $lines] == 0 } { + set all_ok 0 + fail "Output did not specify where the dump information was stored" + break + } else { + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + set dummy "" + set match "" + if { [regexp -- {^Writing additional output to (.*)$} $line dummy match] } { + tassert8_process_dump $match all_ok + break + } + } + } + + if { $all_ok } { + pass "Assertions generate sensible output" + } + + return 0 +} + +proc tassert8_process_dump { filename all_ok_arg } { + + upvar $all_ok_arg all_ok + set realname [hosttest_translate_existing_filename $filename] + if { $realname == "" } { + set all_ok 0 + fail "Unable to find assertion dump file $filename" + return + } + set lines {} + set status [ catch { + set fd [open $realname r] + set data [read $fd] + close $fd + set lines [split $data "\n"] + if { [llength $lines] == 0 } { + set all_ok 0 + fail "The assertion dump file $realname contains no data" + } + } message ] + if { $status != 0 } { + set all_ok 0 + fail "Unable to open assertion output file $realname, $message" + } + set status [ catch { file delete $realname } message ] + if { $status != 0 } { + warning "Unable to delete assertion dump file $realname, $message" 0 + } + if { [llength $lines] == 0 } { + return + } + + # We have some data to process. The information should include + # the following: + # 1) a line Assertion failure msg + # 2) a line with the filename and the linenumber + # 3) optionally a line with the function name. This depends on + # compiler support. + # 4) information from callback1 + # 5) information from callback2 + # + # The relative order of (4) and (5) is not defined. + while { 1 } { + if { [llength $lines] == 0 } { + set all_ok 0 + fail "No \"Assertion failure\" message detected in output file" + break + } + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + if { [regexp -nocase -- {^assertion failure.*it seemed like a good idea at the time$} $line] } { + break + } + } + + if { [llength $lines] == 0 } { + set all_ok 0 + fail "No file name or line number information" + } else { + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + if { [regexp -nocase -- {^file .*tassert8.cxx.*line number [0-9]+$} $line] == 0} { + set all_ok 0 + fail "Output did not contain the expected filename and linenumber" + } + } + + set seen_callback1 0 + set seen_callback2 0 + while { [llength $lines] > 0 } { + + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + + if { [regexp -nocase -- {^\# \{\{\{.*callback1.*$} $line] } { + if { $seen_callback1 != 0 } { + set all_ok 0 + fail "Output contains multiple occurrences of callback1" + continue + } + set seen_callback1 1 + + while { [llength $lines] > 0 } { + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + + if { [regexp -nocase -- {^\# \}\}\}.*$} $line] } { + break + } + + # callback1 should not generate any output so only blank lines + # are acceptable + if { [regexp -nocase -- {^ *$} $line] != 1} { + set all_ok 0 + fail "Unexpected data in callback1 output: $line" + # Do not repeat this failure message. This break will + # do near enough the right thing. + break + } + } + + } elseif { [regexp -nocase -- {^\# \{\{\{.*callback2.*$} $line] } { + if { $seen_callback2 != 0 } { + set all_ok 0 + fail "Output contains multiple occurrences of callback2" + } + set seen_callback2 1 + + while { [llength $lines] > 0 } { + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + + if { [regexp -nocase -- {^\# \}\}\}.*$} $line] } { + break + } + + # callback2 is allowed to generate blank lines and + # fixed lines. + if { [regexp -nocase -- {^ *$} $line] == 1 } { + continue + } + if { $line == "callback2 output" } { + continue + } + set all_ok 0 + fail "Unexpected data in callback2 output: $line" + } + + } + } + if { ($seen_callback1 == 0) || ($seen_callback2 == 0) } { + set all_ok 0 + fail "Output did not contain all the callback information" + } +} + +hosttest_run_test_with_filter tassert8 tassert8_filter {} {} {} cyginfra {} + +# ---------------------------------------------------------------------------- +# Strictly speaking this is not an assertion test. However there are some +# support routines in hosttest.exp which are tried closely to the +# implementation of the assertion code, and it is worthwhile checking +# these. The tassert8 testcase can be reused for this. + +proc tassert9_filter { name result output } { + + if { [hosttest_assert_check $result $output] == 0 } { + fail "testcase did not generate a recognised assertion" + return + } + + set output [hosttest_assert_read_dump $output] + if { $output == "" } { + fail "testcase did not generate a recognised assertion dump" + return + } + + set all_ok 1 + + set callback1_output [hosttest_assert_extract_callback $output "callback1"] + set callback2_output [hosttest_assert_extract_callback $output "callback2"] + + # Callback1 output should be empty, all blank lines should have been filtered + # out. + if { $callback1_output != "" } { + set all_ok 0 + fail "callback1 output should be empty" + } + set lines [split $callback2_output "\n"] + if { [llength $lines] == 0 } { + set all_ok 0 + fail "callback2 should have produced some output" + } elseif { [llength $lines] < 10} { + set all_ok 0 + fail "callback2 is supposted to have at least ten lines of output" + } else { + # There should be ten lines of output, possibly followed by + # some blanks. + for { set i 0 } { $i < 10 } { incr i } { + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + if { $line != "callback2 output" } { + set all_ok 0 + fail "incorrect output from callback2" + break + } + } + + while { [llength $lines] > 0 } { + set line [lindex $lines 0] + set lines [lreplace $lines 0 0] + if { [regexp -- {^ *$} $line] != 1 } { + set all_ok 0 + fail "callback2 output contains unexpected data" + break + } + } + } + + if { $all_ok } { + pass "assertion output and dump file format match test harness expectations" + } + return 0 +} + +hosttest_run_test_with_filter tassert9 tassert9_filter tassert8.cxx {} {} cyginfra {} + diff --git a/tools/src/infra/testsuite/cyginfra/regress.exp b/tools/src/infra/testsuite/cyginfra/regress.exp new file mode 100644 index 00000000..0002ce83 --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/regress.exp @@ -0,0 +1,40 @@ +#=============================================================================== +# +# regress.exp +# +# Regression test cases +# +#=============================================================================== +######COPYRIGHTBEGIN#### +# +# ---------------------------------------------------------------------------- +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ---------------------------------------------------------------------------- +# +######COPYRIGHTEND#### +#=============================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): bartv +# Contributors: bartv +# Date: 1998-12-23 +# +#####DESCRIPTIONEND#### +#=============================================================================== diff --git a/tools/src/infra/testsuite/cyginfra/tassert1.cxx b/tools/src/infra/testsuite/cyginfra/tassert1.cxx new file mode 100644 index 00000000..67934149 --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/tassert1.cxx @@ -0,0 +1,197 @@ +//========================================================================== +// +// tassert1.cxx +// +// Assertion test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1998-11-27 +// Purpose: +// Description: By default all assertions should be disabled, but +// they should compile just fine. This module uses all +// assertions except CYGFAIL. As a fringe benefit, all +// of the macros get checked for correct argument usage. +// +//####DESCRIPTIONEND#### +//========================================================================== + + +#include +#include +#include + +#ifdef CYGDBG_USE_ASSERTS +# error Assertions should not be enabled by default. +#endif + +static const char message[] = "This should never be seen."; + +class dummy { + private: + int random; + public: + dummy() { + random = rand(); + } + ~dummy() { + random = 0; + } + void assertions(); + static void extern_assertions(dummy*); + bool check_this(cyg_assert_class_zeal) const; +}; + +int main(int argc, char** argv) +{ + dummy object; + + CYG_ASSERT( true, message); + CYG_ASSERT( false, message); + CYG_ASSERTC(true); + CYG_ASSERTC(false); + + CYG_FAIL(message); + + CYG_CHECK_DATA_PTR( &argc, message); + CYG_CHECK_DATA_PTR( 0, message); + CYG_CHECK_FUNC_PTR( &main, message); + CYG_CHECK_FUNC_PTR( 0, message); + CYG_CHECK_DATA_PTRC(&argc); + CYG_CHECK_DATA_PTRC(0); + CYG_CHECK_FUNC_PTRC(&main); + CYG_CHECK_FUNC_PTRC(0); + + CYG_ASSERT_CLASS( &object, message); + CYG_ASSERT_CLASSC( &object); + CYG_ASSERT_CLASSO( object, message); + CYG_ASSERT_CLASSOC( object); + CYG_ASSERTCLASS( &object, message); + CYG_ASSERTCLASSO( object, message); + + CYG_PRECONDITION(true, message); + CYG_PRECONDITION(false, message); + CYG_PRECONDITIONC(true); + CYG_PRECONDITIONC(false); + CYG_PRECONDITION_CLASS(&object, message); + CYG_PRECONDITION_CLASSC(&object); + CYG_PRECONDITION_CLASSO(object, message); + CYG_PRECONDITION_CLASSOC(object); + + CYG_POSTCONDITION(true, message); + CYG_POSTCONDITION(false, message); + CYG_POSTCONDITIONC(true); + CYG_POSTCONDITIONC(false); + CYG_POSTCONDITION_CLASS(&object, message); + CYG_POSTCONDITION_CLASSC(&object); + CYG_POSTCONDITION_CLASSO(object, message); + CYG_POSTCONDITION_CLASSOC(object); + + CYG_LOOP_INVARIANT(true, message); + CYG_LOOP_INVARIANT(false, message); + CYG_LOOP_INVARIANTC(true); + CYG_LOOP_INVARIANTC(false); + CYG_LOOP_INVARIANT_CLASS(&object, message); + CYG_LOOP_INVARIANT_CLASSC(&object); + CYG_LOOP_INVARIANT_CLASSO(object, message); + CYG_LOOP_INVARIANT_CLASSOC(object); + + CYG_INVARIANT(true, message); + CYG_INVARIANT(false, message); + CYG_INVARIANTC(true); + CYG_INVARIANTC(false); + + dummy::extern_assertions( &object); + dummy::extern_assertions( 0); + object.assertions( ); + + CYG_TEST_PASS_FINISH("disabled assertions do nothing"); + return 0; +} + +// A utility routine which performs assertions on this. +void +dummy::assertions() +{ + CYG_INVARIANT_THIS(dummy, message); + CYG_INVARIANT_THISC(dummy); + + CYG_ASSERT_THIS(message); + CYG_ASSERT_THISC(); + CYG_PRECONDITION_THIS(message); + CYG_PRECONDITION_THISC(); + CYG_POSTCONDITION_THIS(message); + CYG_POSTCONDITION_THISC(); + CYG_LOOP_INVARIANT_THIS(message); + CYG_LOOP_INVARIANT_THISC(); +} + +// Another utility which gets passed an object pointer. +// This is useful for the ZERO_OR_CLASS() variants. +void +dummy::extern_assertions(dummy* obj) +{ + dummy obj2; + CYG_INVARIANT_CLASSO(dummy, obj2, message); + CYG_INVARIANT_CLASSOC(dummy, obj2); + CYG_INVARIANT_CLASS(dummy, obj, message); + CYG_INVARIANT_CLASSC(dummy, obj); + CYG_ASSERT_ZERO_OR_CLASS(obj, message); + CYG_ASSERT_ZERO_OR_CLASSC(obj); + CYG_PRECONDITION_ZERO_OR_CLASS(obj, message); + CYG_PRECONDITION_ZERO_OR_CLASSC(obj); + CYG_POSTCONDITION_ZERO_OR_CLASS(obj, message); + CYG_POSTCONDITION_ZERO_OR_CLASSC(obj); + CYG_LOOP_INVARIANT_ZERO_OR_CLASS(obj, message); + CYG_LOOP_INVARIANT_ZERO_OR_CLASSC(obj); +} + +bool +dummy::check_this(cyg_assert_class_zeal zeal) const +{ + // The default zeal should be cyg_quick. + switch(zeal) { + case cyg_quick: + return true; + + case cyg_system_test: + case cyg_extreme: + case cyg_thorough: + case cyg_trivial: + case cyg_none: + CYG_TEST_FAIL_FINISH("incorrect default zeal passed to check_this() member function"); + + default: + CYG_TEST_FAIL_FINISH("invalid zeal passed to check_this() member function"); + } + return false; +} + diff --git a/tools/src/infra/testsuite/cyginfra/tassert2.cxx b/tools/src/infra/testsuite/cyginfra/tassert2.cxx new file mode 100644 index 00000000..58452984 --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/tassert2.cxx @@ -0,0 +1,195 @@ +//========================================================================== +// +// tassert2.cxx +// +// Assertion test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1998-12-21 +// Purpose: +// Description: All assertions are enabled but should pass. +// +//####DESCRIPTIONEND#### +//========================================================================== + +#define CYGDBG_USE_ASSERTS +#define CYGDBG_INFRA_DEBUG_PRECONDITIONS +#define CYGDBG_INFRA_DEBUG_POSTCONDITIONS +#define CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS +#define CYGDBG_INFRA_DEBUG_INVARIANTS + +#include +#include +#include + + +static const char message[] = "This should never be seen."; + +class dummy { + private: + int random; + public: + dummy() { + random = rand(); + } + ~dummy() { + random = 0; + } + void assertions(); + void zero_assertions(); + static void extern_assertions(dummy*); + static void zero_assertions(dummy*); + bool check_this(cyg_assert_class_zeal) const; +}; + +int main(int argc, char** argv) +{ + dummy object; + + CYG_ASSERT( true, message); + CYG_ASSERTC(true); + + CYG_CHECK_DATA_PTR( &argc, message); + CYG_CHECK_FUNC_PTR( &main, message); + CYG_CHECK_DATA_PTRC(&argc); + CYG_CHECK_FUNC_PTRC(&main); + + CYG_ASSERT_CLASS( &object, message); + CYG_ASSERT_CLASSC( &object); + CYG_ASSERT_CLASSO( object, message); + CYG_ASSERT_CLASSOC( object); + CYG_ASSERTCLASS( &object, message); + CYG_ASSERTCLASSO( object, message); + + CYG_PRECONDITION(true, message); + CYG_PRECONDITIONC(true); + CYG_PRECONDITION_CLASS(&object, message); + CYG_PRECONDITION_CLASSC(&object); + CYG_PRECONDITION_CLASSO(object, message); + CYG_PRECONDITION_CLASSOC(object); + + CYG_POSTCONDITION(true, message); + CYG_POSTCONDITIONC(true); + CYG_POSTCONDITION_CLASS(&object, message); + CYG_POSTCONDITION_CLASSC(&object); + CYG_POSTCONDITION_CLASSO(object, message); + CYG_POSTCONDITION_CLASSOC(object); + + CYG_LOOP_INVARIANT(true, message); + CYG_LOOP_INVARIANTC(true); + CYG_LOOP_INVARIANT_CLASS(&object, message); + CYG_LOOP_INVARIANT_CLASSC(&object); + CYG_LOOP_INVARIANT_CLASSO(object, message); + CYG_LOOP_INVARIANT_CLASSOC(object); + + CYG_INVARIANT(true, message); + CYG_INVARIANTC(true); + + dummy::extern_assertions( &object); + dummy::zero_assertions( &object); + object.assertions( ); + + CYG_TEST_PASS_FINISH("true assertions do nothing"); + return 0; +} + +// A utility routine which performs assertions on this. +void +dummy::assertions() +{ + CYG_INVARIANT_THIS(dummy, message); + CYG_INVARIANT_THISC(dummy); + + CYG_ASSERT_THIS(message); + CYG_ASSERT_THISC(); + CYG_PRECONDITION_THIS(message); + CYG_PRECONDITION_THISC(); + CYG_POSTCONDITION_THIS(message); + CYG_POSTCONDITION_THISC(); + CYG_LOOP_INVARIANT_THIS(message); + CYG_LOOP_INVARIANT_THISC(); +} + +// Another utility which gets passed an object pointer. +// This is useful for the ZERO_OR_CLASS() variants. +void +dummy::extern_assertions(dummy* obj) +{ + dummy obj2; + CYG_INVARIANT_CLASSO(dummy, obj2, message); + CYG_INVARIANT_CLASSOC(dummy, obj2); + CYG_INVARIANT_CLASS(dummy, obj, message); + CYG_INVARIANT_CLASSC(dummy, obj); + + CYG_ASSERT_ZERO_OR_CLASS(obj, message); + CYG_ASSERT_ZERO_OR_CLASSC(obj); + CYG_PRECONDITION_ZERO_OR_CLASS(obj, message); + CYG_PRECONDITION_ZERO_OR_CLASSC(obj); + CYG_POSTCONDITION_ZERO_OR_CLASS(obj, message); + CYG_POSTCONDITION_ZERO_OR_CLASSC(obj); + CYG_LOOP_INVARIANT_ZERO_OR_CLASS(obj, message); + CYG_LOOP_INVARIANT_ZERO_OR_CLASSC(obj); +} + +void +dummy::zero_assertions(dummy* obj) +{ + CYG_ASSERT_ZERO_OR_CLASS(obj, message); + CYG_ASSERT_ZERO_OR_CLASSC(obj); + CYG_PRECONDITION_ZERO_OR_CLASS(obj, message); + CYG_PRECONDITION_ZERO_OR_CLASSC(obj); + CYG_POSTCONDITION_ZERO_OR_CLASS(obj, message); + CYG_POSTCONDITION_ZERO_OR_CLASSC(obj); + CYG_LOOP_INVARIANT_ZERO_OR_CLASS(obj, message); + CYG_LOOP_INVARIANT_ZERO_OR_CLASSC(obj); +} + +bool +dummy::check_this(cyg_assert_class_zeal zeal) const +{ + // The default zeal should be cyg_quick. + switch(zeal) { + case cyg_quick: + return true; + + case cyg_system_test: + case cyg_extreme: + case cyg_thorough: + case cyg_trivial: + case cyg_none: + CYG_TEST_FAIL_FINISH("incorrect default zeal passed to check_this() member function"); + + default: + CYG_TEST_FAIL_FINISH("invalid zeal passed to check_this() member function"); + } + return false; +} diff --git a/tools/src/infra/testsuite/cyginfra/tassert3.cxx b/tools/src/infra/testsuite/cyginfra/tassert3.cxx new file mode 100644 index 00000000..fd779888 --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/tassert3.cxx @@ -0,0 +1,345 @@ +//========================================================================== +// +// tassert3.cxx +// +// Assertion test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1998-12-21 +// Purpose: +// Description: Check the host extensions. +// +//####DESCRIPTIONEND#### +//========================================================================== + +// ------------------------------------------------------------------------- +// The host-side assertion support has three extensions to the generic +// assertion support: +// +// 1) cyg_assert_install_failure_handler() +// Provide an alternative handler that gets invoked when an +// assertion fails. +// +// 2) cyg_assert_install_failure_callback() +// Provide an additional callback that should get invoked when an +// assertion triggers to provide additional information. +// +// 3) cyg_assert_failure_invoke_callbacks() +// Used by (1) to call the functions installed via (2). +// +// The tests make use of setjmp()/longjmp() buffer to avoid having to +// do lots of output parsing in the DejaGnu driver. + +#define CYG_DECLARE_HOST_ASSERTION_SUPPORT +#define CYGDBG_USE_ASSERTS +#define CYGDBG_INFRA_DEBUG_PRECONDITIONS +#define CYGDBG_INFRA_DEBUG_POSTCONDITIONS +#define CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS +#define CYGDBG_INFRA_DEBUG_INVARIANTS + +#include +#include +#include +#include +#include + +// Forward declarations of some integers to allow the line number to be +// checked. +extern cyg_uint32 main_start, main_end; + +// This is used to "recover" from an assertion failure +static jmp_buf setjmp_buffer; + +// A constant string useful for comparisons. +static const char message[] = "fail"; + +// Some state information to make sure that the world is in the expected +// state +bool expecting_failure1 = false; +bool expecting_failure2 = false; +bool expecting_failure3 = false; + +// ------------------------------------------------------------------------- +// The first assertion handler. This is used to check that the arguments +// make sense. + +extern "C" +bool +failure_handler1(const char* fn, const char* file, cyg_uint32 line, const char* msg) +{ + if (!expecting_failure1) { + CYG_TEST_FAIL("assertion failure handler1 invoked unexpectedly"); + } + expecting_failure1 = false; + // The function should be 0 or contain main + if (0 != fn) { + if (0 == strstr(fn, "main")) { + CYG_TEST_FAIL("invalid function name passed to assertion failure handler"); + } + } + // The file name should always be valid and contain tassert3.cxx. + // It may contain path information as well. + if ( (0 == file) || (0 == strstr(file, "tassert3.cxx"))) { + CYG_TEST_FAIL("invalid file name passed to assertion failure handler"); + } + // The line number can be validated against some globals. + if ((line <= main_start) || (line >= main_end)) { + CYG_TEST_FAIL("invalid line number passed to assertion failure handler"); + } + // The message passed is known. + if (0 != strcmp(msg, message)) { + CYG_TEST_FAIL("invalid message passed to assertion failure handler"); + } + CYG_TEST_PASS("application-specific assertion failure handler"); + + // Everything OK, back to main() + longjmp(setjmp_buffer, 1); + CYG_TEST_FAIL_FINISH("longjmp() is not functional"); + return false; +} + +// ------------------------------------------------------------------------- +// A second assertion handler. This is used to make sure that assertion +// failure handlers can be overwritten. + +extern "C" +bool +failure_handler2(const char* fn, const char* file, cyg_uint32 line, const char* msg) +{ + if (!expecting_failure2) { + CYG_TEST_FAIL("assertion failure handler2 invoked incorrectly"); + } + expecting_failure2 = false; + CYG_TEST_PASS("assertion failure handlers can be replaced"); + longjmp(setjmp_buffer, 1); + CYG_TEST_FAIL_FINISH("longjmp() is not functional"); + return false; +} +// ------------------------------------------------------------------------- +// The third assertion handler. This time a couple of output callbacks are +// installed and the main failure handler has to invoke the output callbacks. +// A number of statics are used to make sure everything works ok. + +static const char callback1_title[] = "callback1_header"; +static const char callback2_title[] = "callback2_header"; +static const char callback2_data[] = "callback2 data\n"; +static bool seen_callback1_title = false; +static bool seen_callback2_title = false; +static bool callback1_done = false; +static bool callback2_done = false; +static int number_of_headers = 0; +static bool callback1_invoked = false; +static bool callback2_invoked = false; +static int number_of_lines_seen = 0; +const int callback2_lines = 16; +static int callback2_lines_seen = 0; +static int number_of_trailers = 0; + +extern "C" +void +callback1(void (*outputfn)(const char*)) +{ + if (callback1_invoked) { + CYG_TEST_FAIL("callback1 invoked multiple times"); + } + callback1_invoked = true; + + // This callback does nothing. +} + +extern "C" +void +callback2(void (*outputfn)(const char*)) +{ + if (callback2_invoked) { + CYG_TEST_FAIL("callback2 invoked multiple times"); + } + callback2_invoked = true; + for (int i = 0; i < callback2_lines; i++) { + (*outputfn)(callback2_data); + } +} + +// handle_callback_header() should be invoked at least twice, +// once with callback1_header and once with callback2_header +extern "C" +void +handle_callback_header(const char* name) +{ + number_of_headers++; + if (0 == strcmp(name, callback1_title)) { + if (seen_callback1_title) { + CYG_TEST_FAIL("callback1 title seen multiple times"); + } else { + seen_callback1_title = true; + } + } + if (0 == strcmp(name, callback2_title)) { + if (seen_callback2_title) { + CYG_TEST_FAIL("callback2 title seen multiple times"); + } else { + seen_callback2_title = true; + } + } +} + +// The body output function should be invoked zero times for +// callback1 and a fixed number of times for callback2. +extern "C" +void +handle_callback_body(const char* data) +{ + number_of_lines_seen++; + + if (seen_callback1_title && !callback1_done) { + CYG_TEST_FAIL("callback1 should not perform any output"); + } + if (seen_callback2_title && !callback2_done) { + callback2_lines_seen++; + if (0 != strcmp(data, callback2_data)) { + CYG_TEST_FAIL("callback2 has generated incorrect data"); + } + } +} + +// The trailer output function should be invoked at least twice, once +// for each callback. +extern "C" +void +handle_callback_trailer(void) +{ + if (0 == number_of_headers) { + CYG_TEST_FAIL("callback trailer seen before header"); + } + number_of_trailers++; + if (seen_callback1_title && !callback1_done) { + callback1_done = true; + } + if (seen_callback2_title && !callback2_done) { + callback2_done = true; + } +} + +// This is the failure handler. It causes the various callbacks to run, then +// checks the resulting values of the statics. +extern "C" +bool +failure_handler3(const char* fn, const char* file, cyg_uint32 line, const char* msg) +{ + if (!expecting_failure3) { + CYG_TEST_FAIL("assertion failure handler3 invoked incorrectly"); + } + expecting_failure3 = false; + + cyg_assert_failure_invoke_callbacks( + &handle_callback_header, + &handle_callback_body, + &handle_callback_trailer); + + bool all_ok = true; + if (!seen_callback1_title) { + CYG_TEST_FAIL("callback1's title not seen"); + all_ok = false; + } + if (!seen_callback2_title) { + CYG_TEST_FAIL("callback2's title not seen"); + all_ok = false; + } + if (number_of_headers != number_of_trailers) { + CYG_TEST_FAIL("headers and trailers do not match up"); + all_ok = false; + } + if (!callback1_done) { + CYG_TEST_FAIL("callback1 did not finish"); + all_ok = false; + } + if (!callback2_done) { + CYG_TEST_FAIL("callback2 did not finish"); + all_ok = false; + } + if (number_of_lines_seen < callback2_lines) { + CYG_TEST_FAIL("total number of output lines is less than expected"); + all_ok = false; + } + if (callback2_lines_seen != callback2_lines) { + CYG_TEST_FAIL("callback2 generated the wrong number of lines"); + all_ok = false; + } + + if (all_ok) { + CYG_TEST_PASS("assertion callbacks"); + } + + longjmp(setjmp_buffer, 1); + CYG_TEST_FAIL_FINISH("longjmp() is not functional"); + return false; +} + +// ---------------------------------------------------------------------------- +// main(). Perform the various assertion tests in order. + +cyg_uint32 main_start = (cyg_uint32) __LINE__; +int +main(int argc, char** argv) +{ + expecting_failure1 = true; + // First check, a very basic assertion invocation. + if (setjmp(setjmp_buffer) == 0) { + cyg_assert_install_failure_handler(&failure_handler1); + CYG_FAIL(message); + CYG_TEST_FAIL("assertion did not trigger"); + } + expecting_failure1 = false; + expecting_failure2 = true; + + // Now try installing a different assertion handler. + if (setjmp(setjmp_buffer) == 0) { + cyg_assert_install_failure_handler(&failure_handler2); + CYG_FAIL(message); + CYG_TEST_FAIL("assertion did not trigger"); + } + expecting_failure2 = false; + expecting_failure3 = true; + + if (setjmp(setjmp_buffer) == 0) { + cyg_assert_install_failure_callback(callback1_title, &callback1); + cyg_assert_install_failure_callback(callback2_title, &callback2); + cyg_assert_install_failure_handler(&failure_handler3); + CYG_FAIL(message); + CYG_TEST_FAIL("assertion did not trigger"); + } + expecting_failure3 = false; + + return 0; +} +cyg_uint32 main_end = (cyg_uint32) __LINE__; + diff --git a/tools/src/infra/testsuite/cyginfra/tassert4.c b/tools/src/infra/testsuite/cyginfra/tassert4.c new file mode 100644 index 00000000..23c07f1f --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/tassert4.c @@ -0,0 +1,220 @@ +/* ========================================================================== + * + * tassert4.c + * + * Assertion test case + * + *========================================================================== + *####COPYRIGHTBEGIN#### + * + * ---------------------------------------------------------------------------- + * Copyright (C) 1998, 1999, 2000 Red Hat, Inc. + * + * This file is part of the eCos host tools. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * ---------------------------------------------------------------------------- + * + *####COPYRIGHTEND#### + *========================================================================== + *#####DESCRIPTIONBEGIN#### + * + * Author(s): bartv + * Contributors: bartv + * Date: 1998-11-27 + * Purpose: + * Description: A C equivalent of tassert1.cxx + * + *####DESCRIPTIONEND#### + *========================================================================== + */ + +#include +#include +#include + +#ifdef CYGDBG_USE_ASSERTS +# error Assertions should not be enabled by default. +#endif + +static const char message[] = "This should never be seen."; + +int main(int argc, char** argv) +{ + CYG_ASSERT( true, message); + CYG_ASSERT( false, message); + CYG_ASSERTC(true); + CYG_ASSERTC(false); + + CYG_FAIL(message); + + CYG_CHECK_DATA_PTR( &argc, message); + CYG_CHECK_DATA_PTR( 0, message); + CYG_CHECK_FUNC_PTR( &main, message); + CYG_CHECK_FUNC_PTR( 0, message); + CYG_CHECK_DATA_PTRC(&argc); + CYG_CHECK_DATA_PTRC(0); + CYG_CHECK_FUNC_PTRC(&main); + CYG_CHECK_FUNC_PTRC(0); + + CYG_PRECONDITION(true, message); + CYG_PRECONDITION(false, message); + CYG_PRECONDITIONC(true); + CYG_PRECONDITIONC(false); + + CYG_POSTCONDITION(true, message); + CYG_POSTCONDITION(false, message); + CYG_POSTCONDITIONC(true); + CYG_POSTCONDITIONC(false); + + CYG_LOOP_INVARIANT(true, message); + CYG_LOOP_INVARIANT(false, message); + CYG_LOOP_INVARIANTC(true); + CYG_LOOP_INVARIANTC(false); + + CYG_INVARIANT(true, message); + CYG_INVARIANT(false, message); + CYG_INVARIANTC(true); + CYG_INVARIANTC(false); + + CYG_TEST_PASS_FINISH("disabled assertions in C code do nothing"); + return 0; +} + +#ifdef CYG_ASSERT_CLASS +# error CYG_ASSERT_CLASS macro should not be defined in C code +#endif +#ifdef CYG_ASSERT_CLASSC +# error CYG_ASSERT_CLASSC macro should not be defined in C code +#endif +#ifdef CYG_ASSERT_CLASSO +# error CYG_ASSERT_CLASSO macro should not be defined in C code +#endif +#ifdef CYG_ASSERT_CLASSOC +# error CYG_ASSERT_CLASSOC macro should not be defined in C code +#endif +#ifdef CYG_ASSERT_ZERO_OR_CLASS +# error CYG_ASSERT_ZERO_OR_CLASS macro should not be defined in C code +#endif +#ifdef CYG_ASSERT_ZERO_OR_CLASSC +# error CYG_ASSERT_ZERO_OR_CLASSC macro should not be defined in C code +#endif +#ifdef CYG_ASSERT_THIS +# error CYG_ASSERT_THIS macro should not be defined in C code +#endif +#ifdef CYG_ASSERT_THISC +# error CYG_ASSERT_THISC macro should not be defined in C code +#endif +#ifdef CYGDBG_DEFINE_CHECK_THIS +# error CYGDBG_DEFINE_CHECK_THIS macro should not be defined in C code +#endif + +#ifdef CYG_PRECONDITION_CLASS +# error CYG_PRECONDITION_CLASS macro should not be defined in C code +#endif +#ifdef CYG_PRECONDITION_CLASSC +# error CYG_PRECONDITION_CLASSC macro should not be defined in C code +#endif +#ifdef CYG_PRECONDITION_CLASSO +# error CYG_PRECONDITION_CLASSO macro should not be defined in C code +#endif +#ifdef CYG_PRECONDITION_CLASSOC +# error CYG_PRECONDITION_CLASSOC macro should not be defined in C code +#endif +#ifdef CYG_PRECONDITION_ZERO_OR_CLASS +# error CYG_PRECONDITION_ZERO_OR_CLASS macro should not be defined in C code +#endif +#ifdef CYG_PRECONDITION_ZERO_OR_CLASSC +# error CYG_PRECONDITION_ZERO_OR_CLASSC macro should not be defined in C code +#endif +#ifdef CYG_PRECONDITION_THIS +# error CYG_PRECONDITION_THIS macro should not be defined in C code +#endif +#ifdef CYG_PRECONDITION_THISC +# error CYG_PRECONDITION_THISC macro should not be defined in C code +#endif + +#ifdef CYG_POSTCONDITION_CLASS +# error CYG_POSTCONDITION_CLASS macro should not be defined in C code +#endif +#ifdef CYG_POSTCONDITION_CLASSC +# error CYG_POSTCONDITION_CLASSC macro should not be defined in C code +#endif +#ifdef CYG_POSTCONDITION_CLASSO +# error CYG_POSTCONDITION_CLASSO macro should not be defined in C code +#endif +#ifdef CYG_POSTCONDITION_CLASSOC +# error CYG_POSTCONDITION_CLASSOC macro should not be defined in C code +#endif +#ifdef CYG_POSTCONDITION_ZERO_OR_CLASS +# error CYG_POSTCONDITION_ZERO_OR_CLASS macro should not be defined in C code +#endif +#ifdef CYG_POSTCONDITION_ZERO_OR_CLASSC +# error CYG_POSTCONDITION_ZERO_OR_CLASSC macro should not be defined in C code +#endif +#ifdef CYG_POSTCONDITION_THIS +# error CYG_POSTCONDITION_THIS macro should not be defined in C code +#endif +#ifdef CYG_POSTCONDITION_THISC +# error CYG_POSTCONDITION_THISC macro should not be defined in C code +#endif + +#ifdef CYG_LOOP_INVARIANT_CLASS +# error CYG_LOOP_INVARIANT_CLASS macro should not be defined in C code +#endif +#ifdef CYG_LOOP_INVARIANT_CLASSC +# error CYG_LOOP_INVARIANT_CLASSC macro should not be defined in C code +#endif +#ifdef CYG_LOOP_INVARIANT_CLASSO +# error CYG_LOOP_INVARIANT_CLASSO macro should not be defined in C code +#endif +#ifdef CYG_LOOP_INVARIANT_CLASSOC +# error CYG_LOOP_INVARIANT_CLASSOC macro should not be defined in C code +#endif +#ifdef CYG_LOOP_INVARIANT_ZERO_OR_CLASS +# error CYG_LOOP_INVARIANT_ZERO_OR_CLASS macro should not be defined in C code +#endif +#ifdef CYG_LOOP_INVARIANT_ZERO_OR_CLASSC +# error CYG_LOOP_INVARIANT_ZERO_OR_CLASSC macro should not be defined in C code +#endif +#ifdef CYG_LOOP_INVARIANT_THIS +# error CYG_LOOP_INVARIANT_THIS macro should not be defined in C code +#endif +#ifdef CYG_LOOP_INVARIANT_THISC +# error CYG_LOOP_INVARIANT_THISC macro should not be defined in C code +#endif + +#ifdef CYG_INVARIANT_CLASS +# error CYG_INVARIANT_CLASS macro should not be defined in C code +#endif +#ifdef CYG_INVARIANT_CLASSC +# error CYG_INVARIANT_CLASSC macro should not be defined in C code +#endif +#ifdef CYG_INVARIANT_CLASSO +# error CYG_INVARIANT_CLASSO macro should not be defined in C code +#endif +#ifdef CYG_INVARIANT_CLASSOC +# error CYG_INVARIANT_CLASSOC macro should not be defined in C code +#endif +#ifdef CYG_INVARIANT_THIS +# error CYG_INVARIANT_THIS macro should not be defined in C code +#endif +#ifdef CYG_INVARIANT_THISC +# error CYG_INVARIANT_THISC macro should not be defined in C code +#endif + + + diff --git a/tools/src/infra/testsuite/cyginfra/tassert5.c b/tools/src/infra/testsuite/cyginfra/tassert5.c new file mode 100644 index 00000000..e0013c6c --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/tassert5.c @@ -0,0 +1,83 @@ +/* ========================================================================== + * + * tassert5.c + * + * Assertion test case + * + *========================================================================== + *####COPYRIGHTBEGIN#### + * + * ---------------------------------------------------------------------------- + * Copyright (C) 1998, 1999, 2000 Red Hat, Inc. + * + * This file is part of the eCos host tools. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * ---------------------------------------------------------------------------- + * + *####COPYRIGHTEND#### + *========================================================================== + *#####DESCRIPTIONBEGIN#### + * + * Author(s): bartv + * Contributors: bartv + * Date: 1998-11-27 + * Purpose: + * Description: A C equivalent of tassert2.cxx + * + *####DESCRIPTIONEND#### + *========================================================================== + */ + +#define CYGDBG_USE_ASSERTS +#define CYGDBG_INFRA_DEBUG_PRECONDITIONS +#define CYGDBG_INFRA_DEBUG_POSTCONDITIONS +#define CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS +#define CYGDBG_INFRA_DEBUG_INVARIANTS + +#include +#include +#include + + +static const char message[] = "This should never be seen."; + +int main(int argc, char** argv) +{ + CYG_ASSERT( true, message); + CYG_ASSERTC(true); + + CYG_CHECK_DATA_PTR( &argc, message); + CYG_CHECK_FUNC_PTR( &main, message); + CYG_CHECK_DATA_PTRC(&argc); + CYG_CHECK_FUNC_PTRC(&main); + + CYG_PRECONDITION(true, message); + CYG_PRECONDITIONC(true); + + CYG_POSTCONDITION(true, message); + CYG_POSTCONDITIONC(true); + + CYG_LOOP_INVARIANT(true, message); + CYG_LOOP_INVARIANTC(true); + + CYG_INVARIANT(true, message); + CYG_INVARIANTC(true); + + CYG_TEST_PASS_FINISH("true assertions do nothing"); + return 0; +} + diff --git a/tools/src/infra/testsuite/cyginfra/tassert6.cxx b/tools/src/infra/testsuite/cyginfra/tassert6.cxx new file mode 100644 index 00000000..053e44fb --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/tassert6.cxx @@ -0,0 +1,501 @@ +//========================================================================== +// +// tassert6.cxx +// +// Assertion test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1998-12-22 +// Purpose: +// Description: This routine checks that all the assertions can +// be triggered. +// +//####DESCRIPTIONEND#### +//========================================================================== + + +#define CYG_DECLARE_HOST_ASSERTION_SUPPORT +#define CYGDBG_USE_ASSERTS +#define CYGDBG_INFRA_DEBUG_PRECONDITIONS +#define CYGDBG_INFRA_DEBUG_POSTCONDITIONS +#define CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS +#define CYGDBG_INFRA_DEBUG_INVARIANTS + +// Also redefine the zeal +#define CYG_ASSERT_CLASS_ZEAL (cyg_extreme) + +#include +#include +#include +#include +#include + + +// This is used to "recover" from an assertion failure +static jmp_buf setjmp_buffer; + +// The number of assertions that have triggered. +static int failed_assertions = 0; + +// The number of assertions that have been triggered. +static int counter = 0; + +static const char message[] = "beware of the leopard"; + +// A dummy class is needed for some of the assertions. +class dummy { + private: + int random; + public: + dummy() { + random = rand(); + } + ~dummy() { + random = 0; + } + void assertions(); + void invariant1(); + void invariant2(); + static void invariant3(dummy&); + static void invariant4(dummy&); + static void invariant5(dummy*); + static void invariant6(dummy*); + static void extern_assertions(dummy*); + bool check_this(cyg_assert_class_zeal) const; +}; + +bool +dummy::check_this(cyg_assert_class_zeal zeal) const +{ + // The default zeal should be cyg_quick. + switch(zeal) { + case cyg_extreme: + return false; + case cyg_system_test: + case cyg_thorough: + case cyg_quick: + case cyg_trivial: + case cyg_none: + CYG_TEST_FAIL_FINISH("incorrect default zeal passed to check_this() member function"); + break; + default: + CYG_TEST_FAIL_FINISH("invalid zeal passed to check_this() member function"); + break; + } + return false; +} + +void +dummy::invariant1(void) +{ + CYG_INVARIANT_THIS(dummy, message); + CYG_TEST_FAIL("CYG_INVARIANT_THIS() did not trigger"); +} + +void +dummy::invariant2(void) +{ + CYG_INVARIANT_THISC(dummy); + CYG_TEST_FAIL("CYG_INVARIANT_THISC() did not trigger"); +} + +void +dummy::invariant3(dummy& obj) +{ + CYG_INVARIANT_CLASSO(dummy, obj, message); + CYG_TEST_FAIL("CYG_INVARIANT_CLASSO() did not trigger"); +} + +void +dummy::invariant4(dummy& obj) +{ + CYG_INVARIANT_CLASSOC(dummy, obj); + CYG_TEST_FAIL("CYG_INVARIANT_CLASSOC() did not trigger"); +} + +void +dummy::invariant5(dummy* obj) +{ + CYG_INVARIANT_CLASS(dummy, obj, message); + CYG_TEST_FAIL("CYG_INVARIANT_CLASS() did not trigger"); +} + +void +dummy::invariant6(dummy* obj) +{ + CYG_INVARIANT_CLASSC(dummy, obj); + CYG_TEST_FAIL("CYG_INVARIANT_CLASSC() did not trigger"); +} + +void +dummy::assertions(void) +{ + switch(counter) { + + case 33: + CYG_ASSERT_THIS(message); + CYG_TEST_FAIL("CYG_ASSERT_THIS() did not trigger"); + break; + + case 34: + CYG_ASSERT_THISC(); + CYG_TEST_FAIL("CYG_ASSERT_THISC() did not trigger"); + break; + + case 35: + CYG_PRECONDITION_THIS(message); + CYG_TEST_FAIL("CYG_PRECONDITION_THIS() did not trigger"); + break; + + case 36: + CYG_PRECONDITION_THISC(); + CYG_TEST_FAIL("CYG_PRECONDITION_THISC() did not trigger"); + break; + + case 37: + CYG_POSTCONDITION_THIS(message); + CYG_TEST_FAIL("CYG_POSTCONDITION_THIS() did not trigger"); + break; + + case 38: + CYG_POSTCONDITION_THISC(); + CYG_TEST_FAIL("CYG_POSTCONDITION_THISC() did not trigger"); + break; + + case 39: + CYG_LOOP_INVARIANT_THIS(message); + CYG_TEST_FAIL("CYG_LOOP_INVARIANT_THIS() did not trigger"); + break; + + case 40: + CYG_LOOP_INVARIANT_THISC(); + CYG_TEST_FAIL("CYG_LOOP_INVARIANT_THISC() did not trigger"); + break; + + default: + CYG_TEST_FAIL("dummy::assertions() invoked for no reason"); + break; + } +} + +void +dummy::extern_assertions(dummy* obj) +{ + switch(counter) { + case 41: + CYG_ASSERT_ZERO_OR_CLASS(obj, message); + CYG_TEST_FAIL("CYG_ASSERT_ZERO_OR_CLASS() did not trigger"); + break; + + case 42: + CYG_ASSERT_ZERO_OR_CLASSC(obj); + CYG_TEST_FAIL("CYG_ASSERT_ZERO_OR_CLASSC() did not trigger"); + break; + + case 43: + CYG_PRECONDITION_ZERO_OR_CLASS(obj, message); + CYG_TEST_FAIL("CYG_PRECONDITION_ZERO_OR_CLASS() did not trigger"); + break; + + case 44: + CYG_PRECONDITION_ZERO_OR_CLASSC(obj); + CYG_TEST_FAIL("CYG_PRECONDITION_ZERO_OR_CLASSC() did not trigger"); + break; + + case 45: + CYG_POSTCONDITION_ZERO_OR_CLASS(obj, message); + CYG_TEST_FAIL("CYG_POSTCONDITION_ZERO_OR_CLASS() did not trigger"); + break; + + case 46: + CYG_POSTCONDITION_ZERO_OR_CLASSC(obj); + CYG_TEST_FAIL("CYG_POSTCONDITION_ZERO_OR_CLASSC() did not trigger"); + break; + + case 47: + CYG_LOOP_INVARIANT_ZERO_OR_CLASS(obj, message); + CYG_TEST_FAIL("CYG_LOOP_INVARIANT_ZERO_OR_CLASS() did not trigger"); + break; + + case 48: + CYG_LOOP_INVARIANT_ZERO_OR_CLASSC(obj); + CYG_TEST_FAIL("CYG_LOOP_INVARIANT_ZERO_OR_CLASSC() did not trigger"); + break; + + default: + CYG_TEST_FAIL("dummy::extern_assertions() invoked for no reason"); + break; + } + +} + +extern "C" +bool +failure_handler(const char* fn, const char* file, cyg_uint32 line, const char* msg) +{ + failed_assertions++; + counter++; + longjmp(setjmp_buffer, 1); + return true; +} + +int +main(int argc, char** argv) +{ + dummy object; + + cyg_assert_install_failure_handler(&failure_handler); + setjmp(setjmp_buffer); + + for ( bool done = false; !done; counter++ ) { + switch(counter) { + case 0: + CYG_ASSERT(false, message); + CYG_TEST_FAIL("CYG_ASSERT() did not trigger"); + break; + + case 1: + CYG_ASSERTC(false); + CYG_TEST_FAIL("CYG_ASSERTC() did not trigger"); + break; + + case 2: + CYG_FAIL(message); + CYG_TEST_FAIL("CYG_FAIL() did not trigger"); + break; + + case 3: + CYG_CHECK_DATA_PTR(0, message); + CYG_TEST_FAIL("CHECK_CHECK_DATA_PTR() did not trigger"); + break; + + case 4: + CYG_CHECK_DATA_PTRC(0); + CYG_TEST_FAIL("CHECK_CHECK_DATA_PTRC() did not trigger"); + break; + + case 5: + CYG_CHECK_FUNC_PTR(0, message); + CYG_TEST_FAIL("CHECK_CHECK_FUNC_PTR() did not trigger"); + break; + + case 6: + CYG_CHECK_DATA_PTRC(0); + CYG_TEST_FAIL("CHECK_CHECK_FUNC_PTRC() did not trigger"); + break; + + case 7: + CYG_ASSERT_CLASS(&object, message); + CYG_TEST_FAIL("CYG_ASSERT_CLASS() did not trigger"); + break; + + case 8: + CYG_ASSERT_CLASSC(&object); + CYG_TEST_FAIL("CYG_ASSERT_CLASSC() did not trigger"); + break; + + case 9: + CYG_ASSERT_CLASSO(object, message); + CYG_TEST_FAIL("CYG_ASSERT_CLASSO() did not trigger"); + break; + + case 10: + CYG_ASSERT_CLASSOC(object); + CYG_TEST_FAIL("CYG_ASSERT_CLASSOC() did not trigger"); + break; + + case 11: + CYG_PRECONDITION(false, message); + CYG_TEST_FAIL("CYG_PRECONDITION() did not trigger"); + break; + + case 12: + CYG_PRECONDITIONC(false); + CYG_TEST_FAIL("CYG_PRECONDITIONC() did not trigger"); + break; + + case 13: + CYG_PRECONDITION_CLASS(&object, message); + CYG_TEST_FAIL("CYG_PRECONDITION_CLASS() did not trigger"); + break; + + case 14: + CYG_PRECONDITION_CLASSC(&object); + CYG_TEST_FAIL("CYG_PRECONDITION_CLASSC() did not trigger"); + break; + + case 15: + CYG_PRECONDITION_CLASSO(object, message); + CYG_TEST_FAIL("CYG_PRECONDITION_CLASSO() did not trigger"); + break; + + case 16: + CYG_PRECONDITION_CLASSOC(object); + CYG_TEST_FAIL("CYG_PRECONDITION_CLASSOC() did not trigger"); + break; + + case 17: + CYG_POSTCONDITION(false, message); + CYG_TEST_FAIL("CYG_POSTCONDITION() did not trigger"); + break; + + case 18: + CYG_POSTCONDITIONC(false); + CYG_TEST_FAIL("CYG_POSTCONDITIONC() did not trigger"); + break; + + case 19: + CYG_POSTCONDITION_CLASS(&object, message); + CYG_TEST_FAIL("CYG_POSTCONDITION_CLASS() did not trigger"); + break; + + case 20: + CYG_POSTCONDITION_CLASSC(&object); + CYG_TEST_FAIL("CYG_POSTCONDITION_CLASSC() did not trigger"); + break; + + case 21: + CYG_POSTCONDITION_CLASSO(object, message); + CYG_TEST_FAIL("CYG_POSTCONDITION_CLASSO() did not trigger"); + break; + + case 22: + CYG_POSTCONDITION_CLASSOC(object); + CYG_TEST_FAIL("CYG_POSTCONDITION_CLASSOC() did not trigger"); + break; + + case 23: + CYG_LOOP_INVARIANT(false, message); + CYG_TEST_FAIL("CYG_LOOP_INVARIANT() did not trigger"); + break; + + case 24: + CYG_LOOP_INVARIANTC(false); + CYG_TEST_FAIL("CYG_LOOP_INVARIANTC() did not trigger"); + break; + + case 25: + CYG_LOOP_INVARIANT_CLASS(&object, message); + CYG_TEST_FAIL("CYG_LOOP_INVARIANT_CLASS() did not trigger"); + break; + + case 26: + CYG_LOOP_INVARIANT_CLASSC(&object); + CYG_TEST_FAIL("CYG_LOOP_INVARIANT_CLASSC() did not trigger"); + break; + + case 27: + CYG_LOOP_INVARIANT_CLASSO(object, message); + CYG_TEST_FAIL("CYG_LOOP_INVARIANT_CLASSO() did not trigger"); + break; + + case 28: + CYG_LOOP_INVARIANT_CLASSOC(object); + CYG_TEST_FAIL("CYG_LOOP_INVARIANT_CLASSOC() did not trigger"); + break; + + case 29: + CYG_INVARIANT(false, message); + CYG_TEST_FAIL("CYG_INVARIANT() did not trigger"); + break; + + case 30: + CYG_INVARIANTC(false); + CYG_TEST_FAIL("CYG_INVARIANTC() did not trigger"); + break; + + case 31: + object.invariant1(); + break; + + case 32: + object.invariant2(); + break; + + case 33: + case 34: + case 35: + case 36: + case 37: + case 38: + case 39: + case 40: + object.assertions(); + break; + + case 41: + case 42: + case 43: + case 44: + case 45: + case 46: + case 47: + case 48: + dummy::extern_assertions(&object); + break; + + case 49: + dummy::invariant3(object); + break; + + case 50: + dummy::invariant4(object); + break; + + case 51: + dummy::invariant5(&object); + break; + + case 52: + dummy::invariant6(&object); + break; + + default: + done = true; + counter--; // About to get incremented again... + break; + } + } + + if (failed_assertions != 53) { + CYG_TEST_FAIL("Broken test case, not all assertions have been tried"); + } + + if (failed_assertions == counter) { + CYG_TEST_PASS("All assertions trigger successfully"); + } else { + CYG_TEST_FAIL("Not all assertions trigger"); + } + + return 0; +} + diff --git a/tools/src/infra/testsuite/cyginfra/tassert7.cxx b/tools/src/infra/testsuite/cyginfra/tassert7.cxx new file mode 100644 index 00000000..81aa9837 --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/tassert7.cxx @@ -0,0 +1,232 @@ +//========================================================================== +// +// tassert7.cxx +// +// Assertion test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1998-12-23 +// Purpose: +// Description: This routine checks the invariant assertions. +// The entry tests will have been taken care of by +// tassert6.cxx, but it is also necessary to check +// the exit tests. +// +//####DESCRIPTIONEND#### +//========================================================================== + + +#define CYG_DECLARE_HOST_ASSERTION_SUPPORT +#define CYGDBG_USE_ASSERTS +#define CYGDBG_INFRA_DEBUG_PRECONDITIONS +#define CYGDBG_INFRA_DEBUG_POSTCONDITIONS +#define CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS +#define CYGDBG_INFRA_DEBUG_INVARIANTS + +#include +#include +#include +#include +#include + +// This is used to "recover" from an assertion failure +static jmp_buf setjmp_buffer; + +// The number of assertions that have triggered. +static int failed_assertions = 0; + +// The number of assertions that have been triggered. +static int counter = 0; + +// Are objects currently valid? +static bool check_this_should_fail = false; + +static const char message[] = "so long and thanks for all the fish"; + +class dummy { + private: + int random; + + public: + dummy() { + random = rand(); + } + ~dummy() { + random = 0; + } + + void invariant1(); + void invariant2(); + static void invariant3(dummy&); + static void invariant4(dummy&); + static void invariant5(dummy*); + static void invariant6(dummy*); + bool check_this(cyg_assert_class_zeal) const; +}; + +bool +dummy::check_this(cyg_assert_class_zeal zeal) const +{ + // The default zeal should be cyg_quick. + switch(zeal) { + case cyg_quick: + return !check_this_should_fail; + + case cyg_system_test: + case cyg_extreme: + case cyg_thorough: + case cyg_trivial: + case cyg_none: + CYG_TEST_FAIL_FINISH("incorrect default zeal passed to check_this() member function"); + break; + default: + CYG_TEST_FAIL_FINISH("invalid zeal passed to check_this() member function"); + break; + } + return false; +} + +void +dummy::invariant1(void) +{ + CYG_INVARIANT_THIS(dummy, message); + check_this_should_fail = true; +} + +void +dummy::invariant2(void) +{ + CYG_INVARIANT_THISC(dummy); + check_this_should_fail = true; +} + +void +dummy::invariant3(dummy& obj) +{ + CYG_INVARIANT_CLASSO(dummy, obj, message); + check_this_should_fail = true; +} + +void +dummy::invariant4(dummy& obj) +{ + CYG_INVARIANT_CLASSOC(dummy, obj); + check_this_should_fail = true; +} + +void +dummy::invariant5(dummy* obj) +{ + CYG_INVARIANT_CLASS(dummy, obj, message); + check_this_should_fail = true; +} + +void +dummy::invariant6(dummy* obj) +{ + CYG_INVARIANT_CLASSC(dummy, obj); + check_this_should_fail = true; +} + +extern "C" +bool +failure_handler(const char* fn, const char* file, cyg_uint32 line, const char* msg) +{ + if (false == check_this_should_fail) { + CYG_TEST_FAIL("assertion triggered when everything should be ok"); + } + failed_assertions++; + counter++; + longjmp(setjmp_buffer, 1); + return true; +} + +int +main(int argc, char **argv) +{ + dummy object; + + cyg_assert_install_failure_handler(&failure_handler); + setjmp(setjmp_buffer); + + for ( bool done = false; !done; counter++ ) { + check_this_should_fail = false; + + switch(counter) { + case 0: + object.invariant1(); + CYG_TEST_FAIL("CYG_INVARIANT_THIS() test should not have returned"); + break; + + case 1: + object.invariant2(); + CYG_TEST_FAIL("CYG_INVARIANT_THISC() test should not have returned"); + break; + + case 2: + dummy::invariant3(object); + CYG_TEST_FAIL("CYG_INVARIANT_CLASSO() test should not have returned"); + break; + + case 3: + dummy::invariant4(object); + CYG_TEST_FAIL("CYG_INVARIANT_CLASSOC() test should not have returned"); + break; + + case 4: + dummy::invariant5(&object); + CYG_TEST_FAIL("CYG_INVARIANT_CLASS() test should not have returned"); + break; + + case 5: + dummy::invariant6(&object); + CYG_TEST_FAIL("CYG_INVARIANT_CLASSC() test should not have returned"); + break; + + default: + done = true; + counter--; // About to get incremented again... + break; + } + } + + if (failed_assertions != 6) { + CYG_TEST_FAIL("Broken test case, not all assertions have been tried"); + } + + if (failed_assertions == counter) { + CYG_TEST_PASS("All assertions trigger successfully"); + } else { + CYG_TEST_FAIL("Not all assertions trigger"); + } + return 0; +} diff --git a/tools/src/infra/testsuite/cyginfra/tassert8.cxx b/tools/src/infra/testsuite/cyginfra/tassert8.cxx new file mode 100644 index 00000000..48cad2bf --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/tassert8.cxx @@ -0,0 +1,81 @@ +//========================================================================== +// +// tassert8.cxx +// +// Assertion test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1998-12-23 +// Purpose: +// Description: This routine causes a basic assertion, including a +// number of callbacks. It is up to the test driver +// to analyse the results of this and take appropriate +// action. +// +//####DESCRIPTIONEND#### +//========================================================================== + +#define CYG_DECLARE_HOST_ASSERTION_SUPPORT +#define CYGDBG_USE_ASSERTS +#define CYGDBG_INFRA_DEBUG_PRECONDITIONS +#define CYGDBG_INFRA_DEBUG_POSTCONDITIONS +#define CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS +#define CYGDBG_INFRA_DEBUG_INVARIANTS + +#include +#include + +extern "C" +void +callback1(void (*outputfn)(const char*)) +{ + // This callback does nothing +} + +extern "C" +void +callback2(void (*outputfn)(const char*)) +{ + // This callback outputs a number of lines of data. + for (int i = 0; i < 10; i++) { + (*outputfn)("callback2 output\n"); + } +} + +int +main(int argc, char** argv) +{ + cyg_assert_install_failure_callback("callback1", &callback1); + cyg_assert_install_failure_callback("callback2", &callback2); + CYG_FAIL("it seemed like a good idea at the time"); +} + diff --git a/tools/src/infra/testsuite/cyginfra/trace.exp b/tools/src/infra/testsuite/cyginfra/trace.exp new file mode 100644 index 00000000..063457ca --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/trace.exp @@ -0,0 +1,90 @@ +#=============================================================================== +# +# trace.exp +# +# Tracing test cases +# +#=============================================================================== +######COPYRIGHTBEGIN#### +# +# ---------------------------------------------------------------------------- +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ---------------------------------------------------------------------------- +# +######COPYRIGHTEND#### +#=============================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): bartv +# Contributors: bartv +# Date: 1998-12-23 +# +#####DESCRIPTIONEND#### +#=============================================================================== + +${tool}_load ttrace1 +${tool}_load ttrace2 +${tool}_load ttrace3 + +# ---------------------------------------------------------------------------- +# The test ttrace4 does lots of tracing and then generates a dump. It is +# necessary to analyse the dump, make sure that it has a reasonable number +# of lines, and that the first line of the output matches the last trace +# statement. + +proc ttrace4_filter { name result output } { + + if { [hosttest_assert_check $result $output] == 0 } { + fail "testcase did not generate a recognised assertion" + return + } + + set output [hosttest_assert_read_dump $output] + if { $output == "" } { + fail "testcase did not generate a recognised assertion dump" + return + } + + set all_ok 1 + set trace_output [hosttest_assert_extract_callback $output "Trace"] + + set lines [split $trace_output "\n"] + if { [llength $lines] < 1000 } { + fail "only got [llength $lines] lines of trace output - there should be more" + set all_ok 0 + } + if { [llength $lines] > 100000 } { + fail "got [llength $lines] lines of trace output - this is excessive" + set all_ok 0 + } + + set line [lindex $lines 0] + if { [string match ".*Goodbye and thanks for all the fish.*" $line] } { + fail "first line of trace output does not correspond to last trace statement:\n$trace_output" + set all_ok 0 + } + if { $all_ok } { + pass "amount of trace output is satisfactory" + } + return 0 +} + +hosttest_run_test_with_filter ttrace4 ttrace4_filter {} {} {} cyginfra {} + diff --git a/tools/src/infra/testsuite/cyginfra/ttrace1.cxx b/tools/src/infra/testsuite/cyginfra/ttrace1.cxx new file mode 100644 index 00000000..148baced --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/ttrace1.cxx @@ -0,0 +1,724 @@ +//========================================================================== +// +// ttrace1.cxx +// +// Trace test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1999-01-06 +// Purpose: +// Description: By default all tracing should be disabled, but +// they should compile just fine. This module uses all +// of the trace macros. As a fringe benefit, all +// of the macros get checked for correct argument usage. +// +//####DESCRIPTIONEND#### +//========================================================================== + + +#include +#include +#include + +#ifdef CYGDBG_USE_TRACING +# error Tracing should not be enabled by default. +#endif +#ifdef CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS +# error Function reporting should not be enabled by default. +#endif + +#define CYG_TRACE_USER_BOOL (invalid_expression) +#define CYG_REPORT_USER_BOOL (invalid_expression) + +void +fn1(void) +{ + CYG_REPORT_FUNCTION(); +} + +void +fn2(void) +{ + CYG_REPORT_FUNCTYPE("printf-style format string"); +} + +void +fn3(void) +{ + CYG_REPORT_FUNCNAME("fn3"); +} + +void +fn4(void) +{ + CYG_REPORT_FUNCNAMETYPE("fn4", "printf-style format string"); +} + +void +fn5(void) +{ + CYG_REPORT_FUNCTIONC(); +} + +void +fn6(void) +{ + CYG_REPORT_FUNCTYPEC("printf-style format string"); +} + +void +fn7(void) +{ + CYG_REPORT_FUNCNAMEC("fn7"); +} + +void +fn8(void) +{ + CYG_REPORT_FUNCNAMETYPEC("fn8", "printf-style format string"); +} + +void +fn9(void) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_RETURN(); +} + +void +fn10(void) +{ + CYG_REPORT_FUNCTYPE("result is %d"); + CYG_REPORT_RETVAL(42); +} + +void +fn11(void) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARGVOID(); +} + +void +fn12(int now) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1(fmt, now); +} + +void +fn13(int now, int is) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2(fmt, now, is); +} + +void +fn14(int now, int is, int the) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3(fmt, now, is, the); +} + +void +fn15(int now, int is, int the, int winter) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4(fmt, now, is, the, winter); +} + +void +fn16(int now, int is, int the, int winter, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5(fmt, now, is, the, winter, of); +} + +void +fn17(int now, int is, int the, int winter, int of, int our) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6(fmt, now, is, the, winter, of, our); +} + +void +fn18(int now, int is, int the, int winter, int of, int our, int discontent) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7(fmt, now, is, the, winter, of, our, discontent); +} + +void +fn19(int now, int is, int the, int winter, int of, int our, int discontent, int made) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8(fmt, now, is, the, winter, of, our, discontent, made); +} + +void +fn20(int now) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1X(now); +} + +void +fn21(int now, int is) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2X(now, is); +} + +void +fn22(int now, int is, int the) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3X(now, is, the); +} + +void +fn23(int now, int is, int the, int winter) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4X(now, is, the, winter); +} + +void +fn24(int now, int is, int the, int winter, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5X(now, is, the, winter, of); +} + +void +fn25(int now, int is, int the, int winter, int of, int our) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6X(now, is, the, winter, of, our); +} + +void +fn26(int now, int is, int the, int winter, int of, int our, int discontent) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7X(now, is, the, winter, of, our, discontent); +} + +void +fn27(int now, int is, int the, int winter, int of, int our, int discontent, int made) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8X(now, is, the, winter, of, our, discontent, made); +} + +void +fn28(int now) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1Y(now); +} + +void +fn29(int now, int is) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2Y(now, is); +} + +void +fn30(int now, int is, int the) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3Y(now, is, the); +} + +void +fn31(int now, int is, int the, int winter) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4Y(now, is, the, winter); +} + +void +fn32(int now, int is, int the, int winter, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5Y(now, is, the, winter, of); +} + +void +fn33(int now, int is, int the, int winter, int of, int our) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6Y(now, is, the, winter, of, our); +} + +void +fn34(int now, int is, int the, int winter, int of, int our, int discontent) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7Y(now, is, the, winter, of, our, discontent); +} + +void +fn35(int now, int is, int the, int winter, int of, int our, int discontent, int made) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8D(now, is, the, winter, of, our, discontent, made); +} + +void +fn36(int now) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1D(now); +} + +void +fn37(int now, int is) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2D(now, is); +} + +void +fn38(int now, int is, int the) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3D(now, is, the); +} + +void +fn39(int now, int is, int the, int winter) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4D(now, is, the, winter); +} + +void +fn40(int now, int is, int the, int winter, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5D(now, is, the, winter, of); +} + +void +fn41(int now, int is, int the, int winter, int of, int our) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6D(now, is, the, winter, of, our); +} + +void +fn42(int now, int is, int the, int winter, int of, int our, int discontent) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7D(now, is, the, winter, of, our, discontent); +} + +void +fn43(int now, int is, int the, int winter, int of, int our, int discontent, int made) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8D(now, is, the, winter, of, our, discontent, made); +} + +void +fn44(int now) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1XV(now); +} + +void +fn45(int now, int is) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2XV(now, is); +} + +void +fn46(int now, int is, int the) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3XV(now, is, the); +} + +void +fn47(int now, int is, int the, int winter) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4XV(now, is, the, winter); +} + +void +fn48(int now, int is, int the, int winter, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5XV(now, is, the, winter, of); +} + +void +fn49(int now, int is, int the, int winter, int of, int our) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6XV(now, is, the, winter, of, our); +} + +void +fn50(int now, int is, int the, int winter, int of, int our, int discontent) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7XV(now, is, the, winter, of, our, discontent); +} + +void +fn51(int now, int is, int the, int winter, int of, int our, int discontent, int made) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8XV(now, is, the, winter, of, our, discontent, made); +} + +void +fn52(int now) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1YV(now); +} + +void +fn53(int now, int is) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2YV(now, is); +} + +void +fn54(int now, int is, int the) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3YV(now, is, the); +} + +void +fn55(int now, int is, int the, int winter) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4YV(now, is, the, winter); +} + +void +fn56(int now, int is, int the, int winter, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5YV(now, is, the, winter, of); +} + +void +fn57(int now, int is, int the, int winter, int of, int our) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6YV(now, is, the, winter, of, our); +} + +void +fn58(int now, int is, int the, int winter, int of, int our, int discontent) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7YV(now, is, the, winter, of, our, discontent); +} + +void +fn59(int now, int is, int the, int winter, int of, int our, int discontent, int made) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8YV(now, is, the, winter, of, our, discontent, made); +} + +void +fn60(int now) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1DV(now); +} + +void +fn61(int now, int is) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2DV(now, is); +} + +void +fn62(int now, int is, int the) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3DV(now, is, the); +} + +void +fn63(int now, int is, int the, int winter) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4DV(now, is, the, winter); +} + +void +fn64(int now, int is, int the, int winter, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5DV(now, is, the, winter, of); +} + +void +fn65(int now, int is, int the, int winter, int of, int our) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6DV(now, is, the, winter, of, our); +} + +void +fn66(int now, int is, int the, int winter, int of, int our, int discontent) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7DV(now, is, the, winter, of, our, discontent); +} + +void +fn67(int now, int is, int the, int winter, int of, int our, int discontent, int made) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8DV(now, is, the, winter, of, our, discontent, made); +} + +int +main(int argc, char** argv) +{ + CYG_TRACE0(junk, fmt); + CYG_TRACE1(junk, fmt, now); + CYG_TRACE2(junk, fmt, now, is); + CYG_TRACE3(junk, fmt, now, is, the); + CYG_TRACE4(junk, fmt, now, is, the, winter); + CYG_TRACE5(junk, fmt, now, is, the, winter, of); + CYG_TRACE6(junk, fmt, now, is, the, winter, of, our); + CYG_TRACE7(junk, fmt, now, is, the, winter, of, our, discontent); + CYG_TRACE8(junk, fmt, now, is, the, winter, of, our, discontent, made); + + CYG_TRACE0B(fmt); + CYG_TRACE1B(fmt, now); + CYG_TRACE2B(fmt, now, is); + CYG_TRACE3B(fmt, now, is, the); + CYG_TRACE4B(fmt, now, is, the, winter); + CYG_TRACE5B(fmt, now, is, the, winter, of); + CYG_TRACE6B(fmt, now, is, the, winter, of, our); + CYG_TRACE7B(fmt, now, is, the, winter, of, our, discontent); + CYG_TRACE8B(fmt, now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1X(junk, now); + CYG_TRACE2X(junk, now, is); + CYG_TRACE3X(junk, now, is, the); + CYG_TRACE4X(junk, now, is, the, winter); + CYG_TRACE5X(junk, now, is, the, winter, of); + CYG_TRACE6X(junk, now, is, the, winter, of, our); + CYG_TRACE7X(junk, now, is, the, winter, of, our, discontent); + CYG_TRACE8X(junk, now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1Y(junk, now); + CYG_TRACE2Y(junk, now, is); + CYG_TRACE3Y(junk, now, is, the); + CYG_TRACE4Y(junk, now, is, the, winter); + CYG_TRACE5Y(junk, now, is, the, winter, of); + CYG_TRACE6Y(junk, now, is, the, winter, of, our); + CYG_TRACE7Y(junk, now, is, the, winter, of, our, discontent); + CYG_TRACE8Y(junk, now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1D(junk, now); + CYG_TRACE2D(junk, now, is); + CYG_TRACE3D(junk, now, is, the); + CYG_TRACE4D(junk, now, is, the, winter); + CYG_TRACE5D(junk, now, is, the, winter, of); + CYG_TRACE6D(junk, now, is, the, winter, of, our); + CYG_TRACE7D(junk, now, is, the, winter, of, our, discontent); + CYG_TRACE8D(junk, now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1XV(junk, now); + CYG_TRACE2XV(junk, now, is); + CYG_TRACE3XV(junk, now, is, the); + CYG_TRACE4XV(junk, now, is, the, winter); + CYG_TRACE5XV(junk, now, is, the, winter, of); + CYG_TRACE6XV(junk, now, is, the, winter, of, our); + CYG_TRACE7XV(junk, now, is, the, winter, of, our, discontent); + CYG_TRACE8XV(junk, now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1YV(junk, now); + CYG_TRACE2YV(junk, now, is); + CYG_TRACE3YV(junk, now, is, the); + CYG_TRACE4YV(junk, now, is, the, winter); + CYG_TRACE5YV(junk, now, is, the, winter, of); + CYG_TRACE6YV(junk, now, is, the, winter, of, our); + CYG_TRACE7YV(junk, now, is, the, winter, of, our, discontent); + CYG_TRACE8YV(junk, now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1DV(junk, now); + CYG_TRACE2DV(junk, now, is); + CYG_TRACE3DV(junk, now, is, the); + CYG_TRACE4DV(junk, now, is, the, winter); + CYG_TRACE5DV(junk, now, is, the, winter, of); + CYG_TRACE6DV(junk, now, is, the, winter, of, our); + CYG_TRACE7DV(junk, now, is, the, winter, of, our, discontent); + CYG_TRACE8DV(junk, now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1XB(now); + CYG_TRACE2XB(now, is); + CYG_TRACE3XB(now, is, the); + CYG_TRACE4XB(now, is, the, winter); + CYG_TRACE5XB(now, is, the, winter, of); + CYG_TRACE6XB(now, is, the, winter, of, our); + CYG_TRACE7XB(now, is, the, winter, of, our, discontent); + CYG_TRACE8XB(now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1YB(now); + CYG_TRACE2YB(now, is); + CYG_TRACE3YB(now, is, the); + CYG_TRACE4YB(now, is, the, winter); + CYG_TRACE5YB(now, is, the, winter, of); + CYG_TRACE6YB(now, is, the, winter, of, our); + CYG_TRACE7YB(now, is, the, winter, of, our, discontent); + CYG_TRACE8YB(now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1DB(now); + CYG_TRACE2DB(now, is); + CYG_TRACE3DB(now, is, the); + CYG_TRACE4DB(now, is, the, winter); + CYG_TRACE5DB(now, is, the, winter, of); + CYG_TRACE6DB(now, is, the, winter, of, our); + CYG_TRACE7DB(now, is, the, winter, of, our, discontent); + CYG_TRACE8DB(now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1XVB(now); + CYG_TRACE2XVB(now, is); + CYG_TRACE3XVB(now, is, the); + CYG_TRACE4XVB(now, is, the, winter); + CYG_TRACE5XVB(now, is, the, winter, of); + CYG_TRACE6XVB(now, is, the, winter, of, our); + CYG_TRACE7XVB(now, is, the, winter, of, our, discontent); + CYG_TRACE8XVB(now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1YVB(now); + CYG_TRACE2YVB(now, is); + CYG_TRACE3YVB(now, is, the); + CYG_TRACE4YVB(now, is, the, winter); + CYG_TRACE5YVB(now, is, the, winter, of); + CYG_TRACE6YVB(now, is, the, winter, of, our); + CYG_TRACE7YVB(now, is, the, winter, of, our, discontent); + CYG_TRACE8YVB(now, is, the, winter, of, our, discontent, made); + + CYG_TRACE1DVB(now); + CYG_TRACE2DVB(now, is); + CYG_TRACE3DVB(now, is, the); + CYG_TRACE4DVB(now, is, the, winter); + CYG_TRACE5DVB(now, is, the, winter, of); + CYG_TRACE6DVB(now, is, the, winter, of, our); + CYG_TRACE7DVB(now, is, the, winter, of, our, discontent); + CYG_TRACE8DVB(now, is, the, winter, of, our, discontent, made); + + fn1(); + fn2(); + fn3(); + fn4(); + fn5(); + fn6(); + fn7(); + fn8(); + fn9(); + fn10(); + fn11(); + fn12(1); + fn13(2, 3); + fn14(4, 5, 6); + fn15(7, 8, 9, 10); + fn16(11, 12, 13, 14, 15); + fn17(16, 17, 18, 19, 20, 21); + fn18(22, 23, 24, 25, 26, 27, 28); + fn19(29, 30, 31, 32, 33, 34, 35, 36); + fn20(1); + fn21(2, 3); + fn22(4, 5, 6); + fn23(7, 8, 9, 10); + fn24(11, 12, 13, 14, 15); + fn25(16, 17, 18, 19, 20, 21); + fn26(22, 23, 24, 25, 26, 27, 28); + fn27(29, 30, 31, 32, 33, 34, 35, 36); + fn28(1); + fn29(2, 3); + fn30(4, 5, 6); + fn31(7, 8, 9, 10); + fn32(11, 12, 13, 14, 15); + fn33(16, 17, 18, 19, 20, 21); + fn34(22, 23, 24, 25, 26, 27, 28); + fn35(29, 30, 31, 32, 33, 34, 35, 36); + fn36(1); + fn37(2, 3); + fn38(4, 5, 6); + fn39(7, 8, 9, 10); + fn40(11, 12, 13, 14, 15); + fn41(16, 17, 18, 19, 20, 21); + fn42(22, 23, 24, 25, 26, 27, 28); + fn43(29, 30, 31, 32, 33, 34, 35, 36); + fn44(1); + fn45(2, 3); + fn46(4, 5, 6); + fn47(7, 8, 9, 10); + fn48(11, 12, 13, 14, 15); + fn49(16, 17, 18, 19, 20, 21); + fn50(22, 23, 24, 25, 26, 27, 28); + fn51(29, 30, 31, 32, 33, 34, 35, 36); + fn52(1); + fn53(2, 3); + fn54(4, 5, 6); + fn55(7, 8, 9, 10); + fn56(11, 12, 13, 14, 15); + fn57(16, 17, 18, 19, 20, 21); + fn58(22, 23, 24, 25, 26, 27, 28); + fn59(29, 30, 31, 32, 33, 34, 35, 36); + fn60(1); + fn61(2, 3); + fn62(4, 5, 6); + fn63(7, 8, 9, 10); + fn64(11, 12, 13, 14, 15); + fn65(16, 17, 18, 19, 20, 21); + fn66(22, 23, 24, 25, 26, 27, 28); + fn67(29, 30, 31, 32, 33, 34, 35, 36); + + CYG_TEST_PASS_FINISH("disabled tracing does nothing"); + return 0; +} diff --git a/tools/src/infra/testsuite/cyginfra/ttrace2.cxx b/tools/src/infra/testsuite/cyginfra/ttrace2.cxx new file mode 100644 index 00000000..41cbf17b --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/ttrace2.cxx @@ -0,0 +1,809 @@ +//========================================================================== +// +// ttrace2.cxx +// +// Trace test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1999-01-06 +// Purpose: +// Description: This file tests all the trace macros for the case +// where tracing and function reporting are enabled. +// +//####DESCRIPTIONEND#### +//========================================================================== + + +#define CYGDBG_USE_TRACING +#define CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS +#include +#include +#include + +bool tracing_is_enabled(void); +bool reporting_is_enabled(void); + +#define CYG_TRACE_USER_BOOL (tracing_is_enabled()) +#define CYG_REPORT_USER_BOOL (reporting_is_enabled()) + + +void +fn1(void) +{ + CYG_REPORT_FUNCTION(); +} + +void +fn2(void) +{ + CYG_REPORT_FUNCTYPE("printf-style format string"); +} + +void +fn3(void) +{ + CYG_REPORT_FUNCNAME("fn3"); +} + +void +fn4(void) +{ + CYG_REPORT_FUNCNAMETYPE("fn4", "printf-style format string"); +} + +void +fn5(void) +{ + CYG_REPORT_FUNCTIONC(); +} + +void +fn6(void) +{ + CYG_REPORT_FUNCTYPEC("printf-style format string"); +} + +void +fn7(void) +{ + CYG_REPORT_FUNCNAMEC("fn7"); +} + +void +fn8(void) +{ + CYG_REPORT_FUNCNAMETYPEC("fn8", "printf-style format string"); +} + +void +fn9(void) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_RETURN(); +} + +void +fn10(void) +{ + CYG_REPORT_FUNCTYPE("result is %d"); + CYG_REPORT_RETVAL(42); +} + +void +fn11(void) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARGVOID(); +} + +void +fn12(int glorious) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1("%d", glorious); +} + +void +fn13(int glorious, int summer) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2("%d %d", glorious, summer); +} + +void +fn14(int glorious, int summer, int by) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3("%d %d %d", glorious, summer, by); +} + +void +fn15(int glorious, int summer, int by, int thisse) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4("%d %d %d %d", glorious, summer, by, thisse); +} + +void +fn16(int glorious, int summer, int by, int thisse, int son) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5("%d %d %d %d %d", glorious, summer, by, thisse, son); +} + +void +fn17(int glorious, int summer, int by, int thisse, int son, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6("%d %d %d %d %d %d", glorious, summer, by, thisse, son, of); +} + +void +fn18(int glorious, int summer, int by, int thisse, int son, int of, int york) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7("%d %d %d %d %d %d %d", glorious, summer, by, thisse, son, of, york); +} + +void +fn19(int glorious, int summer, int by, int thisse, int son, int of, int york, int stop) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8("%d %d %d %d %d %d %d %d", glorious, summer, by, thisse, son, of, york, stop); +} + +void +fn20(int glorious) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1X(glorious); +} + +void +fn21(int glorious, int summer) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2X(glorious, summer); +} + +void +fn22(int glorious, int summer, int by) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3X(glorious, summer, by); +} + +void +fn23(int glorious, int summer, int by, int thisse) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4X(glorious, summer, by, thisse); +} + +void +fn24(int glorious, int summer, int by, int thisse, int son) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5X(glorious, summer, by, thisse, son); +} + +void +fn25(int glorious, int summer, int by, int thisse, int son, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6X(glorious, summer, by, thisse, son, of); +} + +void +fn26(int glorious, int summer, int by, int thisse, int son, int of, int york) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7X(glorious, summer, by, thisse, son, of, york); +} + +void +fn27(int glorious, int summer, int by, int thisse, int son, int of, int york, int stop) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8X(glorious, summer, by, thisse, son, of, york, stop); +} + +void +fn28(int glorious) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1Y(glorious); +} + +void +fn29(int glorious, int summer) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2Y(glorious, summer); +} + +void +fn30(int glorious, int summer, int by) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3Y(glorious, summer, by); +} + +void +fn31(int glorious, int summer, int by, int thisse) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4Y(glorious, summer, by, thisse); +} + +void +fn32(int glorious, int summer, int by, int thisse, int son) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5Y(glorious, summer, by, thisse, son); +} + +void +fn33(int glorious, int summer, int by, int thisse, int son, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6Y(glorious, summer, by, thisse, son, of); +} + +void +fn34(int glorious, int summer, int by, int thisse, int son, int of, int york) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7Y(glorious, summer, by, thisse, son, of, york); +} + +void +fn35(int glorious, int summer, int by, int thisse, int son, int of, int york, int stop) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8D(glorious, summer, by, thisse, son, of, york, stop); +} + +void +fn36(int glorious) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1D(glorious); +} + +void +fn37(int glorious, int summer) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2D(glorious, summer); +} + +void +fn38(int glorious, int summer, int by) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3D(glorious, summer, by); +} + +void +fn39(int glorious, int summer, int by, int thisse) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4D(glorious, summer, by, thisse); +} + +void +fn40(int glorious, int summer, int by, int thisse, int son) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5D(glorious, summer, by, thisse, son); +} + +void +fn41(int glorious, int summer, int by, int thisse, int son, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6D(glorious, summer, by, thisse, son, of); +} + +void +fn42(int glorious, int summer, int by, int thisse, int son, int of, int york) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7D(glorious, summer, by, thisse, son, of, york); +} + +void +fn43(int glorious, int summer, int by, int thisse, int son, int of, int york, int stop) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8D(glorious, summer, by, thisse, son, of, york, stop); +} + +void +fn44(int glorious) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1XV(glorious); +} + +void +fn45(int glorious, int summer) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2XV(glorious, summer); +} + +void +fn46(int glorious, int summer, int by) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3XV(glorious, summer, by); +} + +void +fn47(int glorious, int summer, int by, int thisse) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4XV(glorious, summer, by, thisse); +} + +void +fn48(int glorious, int summer, int by, int thisse, int son) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5XV(glorious, summer, by, thisse, son); +} + +void +fn49(int glorious, int summer, int by, int thisse, int son, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6XV(glorious, summer, by, thisse, son, of); +} + +void +fn50(int glorious, int summer, int by, int thisse, int son, int of, int york) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7XV(glorious, summer, by, thisse, son, of, york); +} + +void +fn51(int glorious, int summer, int by, int thisse, int son, int of, int york, int stop) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8XV(glorious, summer, by, thisse, son, of, york, stop); +} + +void +fn52(int glorious) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1YV(glorious); +} + +void +fn53(int glorious, int summer) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2YV(glorious, summer); +} + +void +fn54(int glorious, int summer, int by) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3YV(glorious, summer, by); +} + +void +fn55(int glorious, int summer, int by, int thisse) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4YV(glorious, summer, by, thisse); +} + +void +fn56(int glorious, int summer, int by, int thisse, int son) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5YV(glorious, summer, by, thisse, son); +} + +void +fn57(int glorious, int summer, int by, int thisse, int son, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6YV(glorious, summer, by, thisse, son, of); +} + +void +fn58(int glorious, int summer, int by, int thisse, int son, int of, int york) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7YV(glorious, summer, by, thisse, son, of, york); +} + +void +fn59(int glorious, int summer, int by, int thisse, int son, int of, int york, int stop) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8YV(glorious, summer, by, thisse, son, of, york, stop); +} + +void +fn60(int glorious) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG1DV(glorious); +} + +void +fn61(int glorious, int summer) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG2DV(glorious, summer); +} + +void +fn62(int glorious, int summer, int by) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG3DV(glorious, summer, by); +} + +void +fn63(int glorious, int summer, int by, int thisse) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG4DV(glorious, summer, by, thisse); +} + +void +fn64(int glorious, int summer, int by, int thisse, int son) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG5DV(glorious, summer, by, thisse, son); +} + +void +fn65(int glorious, int summer, int by, int thisse, int son, int of) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG6DV(glorious, summer, by, thisse, son, of); +} + +void +fn66(int glorious, int summer, int by, int thisse, int son, int of, int york) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG7DV(glorious, summer, by, thisse, son, of, york); +} + +void +fn67(int glorious, int summer, int by, int thisse, int son, int of, int york, int stop) +{ + CYG_REPORT_FUNCTION(); + CYG_REPORT_FUNCARG8DV(glorious, summer, by, thisse, son, of, york, stop); +} + +int +main(int argc, char** argv) +{ + int glorious = 0; + int summer = 1; + int by = 2; + int thisse = 4; + int son = 5; + int of = 6; + int york = 7; + int stop = 8; + + CYG_TRACE0(true, "no argument here"); + CYG_TRACE1(true, "%d", glorious); + CYG_TRACE2(true, "%d %d", glorious, summer); + CYG_TRACE3(true, "%d %d %d", glorious, summer, by); + CYG_TRACE4(true, "%d %d %d %d", glorious, summer, by, thisse); + CYG_TRACE5(true, "%d %d %d %d %d", glorious, summer, by, thisse, son); + CYG_TRACE6(true, "%d %d %d %d %d %d", glorious, summer, by, thisse, son, of); + CYG_TRACE7(true, "%d %d %d %d %d %d %d", glorious, summer, by, thisse, son, of, york); + CYG_TRACE8(true, "%d %d %d %d %d %d %d %d", glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE0(false, "no argument here"); + CYG_TRACE1(false, "%d", glorious); + CYG_TRACE2(false, "%d %d", glorious, summer); + CYG_TRACE3(false, "%d %d %d", glorious, summer, by); + CYG_TRACE4(false, "%d %d %d %d", glorious, summer, by, thisse); + CYG_TRACE5(false, "%d %d %d %d %d", glorious, summer, by, thisse, son); + CYG_TRACE6(false, "%d %d %d %d %d %d", glorious, summer, by, thisse, son, of); + CYG_TRACE7(false, "%d %d %d %d %d %d %d", glorious, summer, by, thisse, son, of, york); + CYG_TRACE8(false, "%d %d %d %d %d %d %d %d", glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE0B("no argument here"); + CYG_TRACE1B("%d", glorious); + CYG_TRACE2B("%d %d", glorious, summer); + CYG_TRACE3B("%d %d %d", glorious, summer, by); + CYG_TRACE4B("%d %d %d %d", glorious, summer, by, thisse); + CYG_TRACE5B("%d %d %d %d %d", glorious, summer, by, thisse, son); + CYG_TRACE6B("%d %d %d %d %d %d", glorious, summer, by, thisse, son, of); + CYG_TRACE7B("%d %d %d %d %d %d %d", glorious, summer, by, thisse, son, of, york); + CYG_TRACE8B("%d %d %d %d %d %d %d %d", glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1X(true, glorious); + CYG_TRACE2X(true, glorious, summer); + CYG_TRACE3X(true, glorious, summer, by); + CYG_TRACE4X(true, glorious, summer, by, thisse); + CYG_TRACE5X(true, glorious, summer, by, thisse, son); + CYG_TRACE6X(true, glorious, summer, by, thisse, son, of); + CYG_TRACE7X(true, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8X(true, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1Y(true, glorious); + CYG_TRACE2Y(true, glorious, summer); + CYG_TRACE3Y(true, glorious, summer, by); + CYG_TRACE4Y(true, glorious, summer, by, thisse); + CYG_TRACE5Y(true, glorious, summer, by, thisse, son); + CYG_TRACE6Y(true, glorious, summer, by, thisse, son, of); + CYG_TRACE7Y(true, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8Y(true, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1D(true, glorious); + CYG_TRACE2D(true, glorious, summer); + CYG_TRACE3D(true, glorious, summer, by); + CYG_TRACE4D(true, glorious, summer, by, thisse); + CYG_TRACE5D(true, glorious, summer, by, thisse, son); + CYG_TRACE6D(true, glorious, summer, by, thisse, son, of); + CYG_TRACE7D(true, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8D(true, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1XV(true, glorious); + CYG_TRACE2XV(true, glorious, summer); + CYG_TRACE3XV(true, glorious, summer, by); + CYG_TRACE4XV(true, glorious, summer, by, thisse); + CYG_TRACE5XV(true, glorious, summer, by, thisse, son); + CYG_TRACE6XV(true, glorious, summer, by, thisse, son, of); + CYG_TRACE7XV(true, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8XV(true, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1YV(true, glorious); + CYG_TRACE2YV(true, glorious, summer); + CYG_TRACE3YV(true, glorious, summer, by); + CYG_TRACE4YV(true, glorious, summer, by, thisse); + CYG_TRACE5YV(true, glorious, summer, by, thisse, son); + CYG_TRACE6YV(true, glorious, summer, by, thisse, son, of); + CYG_TRACE7YV(true, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8YV(true, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1DV(true, glorious); + CYG_TRACE2DV(true, glorious, summer); + CYG_TRACE3DV(true, glorious, summer, by); + CYG_TRACE4DV(true, glorious, summer, by, thisse); + CYG_TRACE5DV(true, glorious, summer, by, thisse, son); + CYG_TRACE6DV(true, glorious, summer, by, thisse, son, of); + CYG_TRACE7DV(true, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8DV(true, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1X(false, glorious); + CYG_TRACE2X(false, glorious, summer); + CYG_TRACE3X(false, glorious, summer, by); + CYG_TRACE4X(false, glorious, summer, by, thisse); + CYG_TRACE5X(false, glorious, summer, by, thisse, son); + CYG_TRACE6X(false, glorious, summer, by, thisse, son, of); + CYG_TRACE7X(false, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8X(false, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1Y(false, glorious); + CYG_TRACE2Y(false, glorious, summer); + CYG_TRACE3Y(false, glorious, summer, by); + CYG_TRACE4Y(false, glorious, summer, by, thisse); + CYG_TRACE5Y(false, glorious, summer, by, thisse, son); + CYG_TRACE6Y(false, glorious, summer, by, thisse, son, of); + CYG_TRACE7Y(false, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8Y(false, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1D(false, glorious); + CYG_TRACE2D(false, glorious, summer); + CYG_TRACE3D(false, glorious, summer, by); + CYG_TRACE4D(false, glorious, summer, by, thisse); + CYG_TRACE5D(false, glorious, summer, by, thisse, son); + CYG_TRACE6D(false, glorious, summer, by, thisse, son, of); + CYG_TRACE7D(false, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8D(false, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1XV(false, glorious); + CYG_TRACE2XV(false, glorious, summer); + CYG_TRACE3XV(false, glorious, summer, by); + CYG_TRACE4XV(false, glorious, summer, by, thisse); + CYG_TRACE5XV(false, glorious, summer, by, thisse, son); + CYG_TRACE6XV(false, glorious, summer, by, thisse, son, of); + CYG_TRACE7XV(false, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8XV(false, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1YV(false, glorious); + CYG_TRACE2YV(false, glorious, summer); + CYG_TRACE3YV(false, glorious, summer, by); + CYG_TRACE4YV(false, glorious, summer, by, thisse); + CYG_TRACE5YV(false, glorious, summer, by, thisse, son); + CYG_TRACE6YV(false, glorious, summer, by, thisse, son, of); + CYG_TRACE7YV(false, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8YV(false, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1DV(false, glorious); + CYG_TRACE2DV(false, glorious, summer); + CYG_TRACE3DV(false, glorious, summer, by); + CYG_TRACE4DV(false, glorious, summer, by, thisse); + CYG_TRACE5DV(false, glorious, summer, by, thisse, son); + CYG_TRACE6DV(false, glorious, summer, by, thisse, son, of); + CYG_TRACE7DV(false, glorious, summer, by, thisse, son, of, york); + CYG_TRACE8DV(false, glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1XB(glorious); + CYG_TRACE2XB(glorious, summer); + CYG_TRACE3XB(glorious, summer, by); + CYG_TRACE4XB(glorious, summer, by, thisse); + CYG_TRACE5XB(glorious, summer, by, thisse, son); + CYG_TRACE6XB(glorious, summer, by, thisse, son, of); + CYG_TRACE7XB(glorious, summer, by, thisse, son, of, york); + CYG_TRACE8XB(glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1YB(glorious); + CYG_TRACE2YB(glorious, summer); + CYG_TRACE3YB(glorious, summer, by); + CYG_TRACE4YB(glorious, summer, by, thisse); + CYG_TRACE5YB(glorious, summer, by, thisse, son); + CYG_TRACE6YB(glorious, summer, by, thisse, son, of); + CYG_TRACE7YB(glorious, summer, by, thisse, son, of, york); + CYG_TRACE8YB(glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1DB(glorious); + CYG_TRACE2DB(glorious, summer); + CYG_TRACE3DB(glorious, summer, by); + CYG_TRACE4DB(glorious, summer, by, thisse); + CYG_TRACE5DB(glorious, summer, by, thisse, son); + CYG_TRACE6DB(glorious, summer, by, thisse, son, of); + CYG_TRACE7DB(glorious, summer, by, thisse, son, of, york); + CYG_TRACE8DB(glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1XVB(glorious); + CYG_TRACE2XVB(glorious, summer); + CYG_TRACE3XVB(glorious, summer, by); + CYG_TRACE4XVB(glorious, summer, by, thisse); + CYG_TRACE5XVB(glorious, summer, by, thisse, son); + CYG_TRACE6XVB(glorious, summer, by, thisse, son, of); + CYG_TRACE7XVB(glorious, summer, by, thisse, son, of, york); + CYG_TRACE8XVB(glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1YVB(glorious); + CYG_TRACE2YVB(glorious, summer); + CYG_TRACE3YVB(glorious, summer, by); + CYG_TRACE4YVB(glorious, summer, by, thisse); + CYG_TRACE5YVB(glorious, summer, by, thisse, son); + CYG_TRACE6YVB(glorious, summer, by, thisse, son, of); + CYG_TRACE7YVB(glorious, summer, by, thisse, son, of, york); + CYG_TRACE8YVB(glorious, summer, by, thisse, son, of, york, stop); + + CYG_TRACE1DVB(glorious); + CYG_TRACE2DVB(glorious, summer); + CYG_TRACE3DVB(glorious, summer, by); + CYG_TRACE4DVB(glorious, summer, by, thisse); + CYG_TRACE5DVB(glorious, summer, by, thisse, son); + CYG_TRACE6DVB(glorious, summer, by, thisse, son, of); + CYG_TRACE7DVB(glorious, summer, by, thisse, son, of, york); + CYG_TRACE8DVB(glorious, summer, by, thisse, son, of, york, stop); + + fn1(); + fn2(); + fn3(); + fn4(); + fn5(); + fn6(); + fn7(); + fn8(); + fn9(); + fn10(); + fn11(); + fn12(1); + fn13(2, 3); + fn14(4, 5, 6); + fn15(7, 8, 9, 10); + fn16(11, 12, 13, 14, 15); + fn17(16, 17, 18, 19, 20, 21); + fn18(22, 23, 24, 25, 26, 27, 28); + fn19(29, 30, 31, 32, 33, 34, 35, 36); + fn20(1); + fn21(2, 3); + fn22(4, 5, 6); + fn23(7, 8, 9, 10); + fn24(11, 12, 13, 14, 15); + fn25(16, 17, 18, 19, 20, 21); + fn26(22, 23, 24, 25, 26, 27, 28); + fn27(29, 30, 31, 32, 33, 34, 35, 36); + fn28(1); + fn29(2, 3); + fn30(4, 5, 6); + fn31(7, 8, 9, 10); + fn32(11, 12, 13, 14, 15); + fn33(16, 17, 18, 19, 20, 21); + fn34(22, 23, 24, 25, 26, 27, 28); + fn35(29, 30, 31, 32, 33, 34, 35, 36); + fn36(1); + fn37(2, 3); + fn38(4, 5, 6); + fn39(7, 8, 9, 10); + fn40(11, 12, 13, 14, 15); + fn41(16, 17, 18, 19, 20, 21); + fn42(22, 23, 24, 25, 26, 27, 28); + fn43(29, 30, 31, 32, 33, 34, 35, 36); + fn44(1); + fn45(2, 3); + fn46(4, 5, 6); + fn47(7, 8, 9, 10); + fn48(11, 12, 13, 14, 15); + fn49(16, 17, 18, 19, 20, 21); + fn50(22, 23, 24, 25, 26, 27, 28); + fn51(29, 30, 31, 32, 33, 34, 35, 36); + fn52(1); + fn53(2, 3); + fn54(4, 5, 6); + fn55(7, 8, 9, 10); + fn56(11, 12, 13, 14, 15); + fn57(16, 17, 18, 19, 20, 21); + fn58(22, 23, 24, 25, 26, 27, 28); + fn59(29, 30, 31, 32, 33, 34, 35, 36); + fn60(1); + fn61(2, 3); + fn62(4, 5, 6); + fn63(7, 8, 9, 10); + fn64(11, 12, 13, 14, 15); + fn65(16, 17, 18, 19, 20, 21); + fn66(22, 23, 24, 25, 26, 27, 28); + fn67(29, 30, 31, 32, 33, 34, 35, 36); + + CYG_TEST_PASS_FINISH("enabled tracing only slows things down"); + return 0; +} +// ---------------------------------------------------------------------------- +// These functions allow "dynamic" control over tracing and reporting. +// The assumption is that the compiler does not know enough about rand() +// to be able to optimise this away. +bool +tracing_is_enabled(void) +{ + return rand() >= 0; +} + +bool +reporting_is_enabled(void) +{ + return rand() >= 0; +} diff --git a/tools/src/infra/testsuite/cyginfra/ttrace3.cxx b/tools/src/infra/testsuite/cyginfra/ttrace3.cxx new file mode 100644 index 00000000..b816424c --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/ttrace3.cxx @@ -0,0 +1,70 @@ +//========================================================================== +// +// ttrace3.cxx +// +// Trace test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1999-01-06 +// Purpose: +// Description: Do an awful lot of tracing, to make sure that the +// circular buffer is circular. +// +//####DESCRIPTIONEND#### +//========================================================================== + + +#define CYGDBG_USE_TRACING +#define CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS +#include +#include +#include + +void +dummy(void) +{ + CYG_REPORT_FUNCNAME("dummy"); + CYG_REPORT_RETURN(); +} + +int +main(int argc, char** argv) +{ + for (int i = 0; i < 1000000; i++) { + CYG_TRACE0(true, "no argument here"); + dummy(); + } + + CYG_TEST_PASS_FINISH("Lots of tracing is possible"); +} + + diff --git a/tools/src/infra/testsuite/cyginfra/ttrace4.cxx b/tools/src/infra/testsuite/cyginfra/ttrace4.cxx new file mode 100644 index 00000000..dcf27a45 --- /dev/null +++ b/tools/src/infra/testsuite/cyginfra/ttrace4.cxx @@ -0,0 +1,71 @@ +//========================================================================== +// +// ttrace4.cxx +// +// Trace test case +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1999-01-06 +// Purpose: +// Description: Do lots of tracing and generate a dump. The test +// harness checks that there is lots of output and +// that the first line matches expectations. +// +//####DESCRIPTIONEND#### +//========================================================================== + + +#define CYGDBG_USE_ASSERTS +#define CYGDBG_USE_TRACING +#define CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS +#include +#include +#include +#include + +void +dummy(void) +{ + CYG_REPORT_FUNCNAME("dummy"); + CYG_REPORT_RETURN(); +} + +int +main(int argc, char** argv) +{ + for (int i = 0; i < 100000; i++) { + CYG_TRACE0(true, "no argument here"); + dummy(); + } + CYG_TRACE0(true, "Goodbye and thanks for all the fish"); + CYG_FAIL("intentional"); +} diff --git a/tools/src/infra/testsuite/lib/cyginfra.exp b/tools/src/infra/testsuite/lib/cyginfra.exp new file mode 100644 index 00000000..61e1e7ce --- /dev/null +++ b/tools/src/infra/testsuite/lib/cyginfra.exp @@ -0,0 +1,43 @@ +#=============================================================================== +# +# cyginfra.exp +# +# Support for host-side testing +# +#=============================================================================== +######COPYRIGHTBEGIN#### +# +# ---------------------------------------------------------------------------- +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ---------------------------------------------------------------------------- +# +######COPYRIGHTEND#### +#=============================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): bartv +# Contributors: bartv +# Date: 1998-11-24 +# +#####DESCRIPTIONEND#### +#=============================================================================== + +# At this stage there is nothing useful for this file to do. However its +# existence prevents DejaGnu from issuing a warning. diff --git a/tools/src/infra/trace.cxx b/tools/src/infra/trace.cxx new file mode 100644 index 00000000..ed49a056 --- /dev/null +++ b/tools/src/infra/trace.cxx @@ -0,0 +1,684 @@ +//{{{ Banner + +//============================================================================ +// +// trace.cxx +// +// Host side implementation of the infrastructure trace facilities. +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1998/12/07 +// Version: 0.01 +// Purpose: To provide a host-side implementation of the eCos tracing +// facilities. +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ #include's + +// Make sure that the host-side extensions get prototyped +// as well. Note that the tracing code needs to interact +// with the assertion facilities to set up an appropriate +// callback. +#define CYG_DECLARE_HOST_ASSERTION_SUPPORT +#include "pkgconf/infra.h" +#include "cyg/infra/cyg_type.h" +#include "cyg/infra/cyg_ass.h" + +// Without this #define the tracing enums and prototypes are +// not visible. +#define CYGDBG_USE_TRACING +#include "cyg/infra/cyg_trac.h" + +// The standard C++ string class is used extensively +#include + +// Add a few C headers +#include +#include +#include + +//}}} + +//{{{ Description + +// ------------------------------------------------------------------------- +// The tracing macros end up calling one of the following routines: +// +// void cyg_tracenomsg(cyg_uint32 what, const char* fn, const char* file, cyg_uint32 line) +// void cyg_tracemsg( ..., const char* msg) +// void cyg_tracemsg2( ..., CYG_ADDRWORD arg0, CYG_ADDRWORD arg1 ) +// void cyg_tracemsg4( ..., CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, ... ) +// void cyg_tracemsg6( ..., CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, ... ) +// void cyg_tracemsg8( ..., CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, ... ) +// +// For the 2/4/6/8 variants the msg argument is essentially a printf() +// style format string. However the intention is that the implementation +// of the trace code can delay doing the formatting until the trace +// information is actually needed (with obvious consequences for +// generated strings). Such an implementation would significantly +// reduce the overheads associated with tracing, and is what is implemented +// here. +// +// CYG_ADDRWORD is likely to be either "int" or the platform-specific +// 64 bit data type: it should be big enough to hold either a pointer +// or any normal integral type. This causes problems on machines which +// have e.g. 32 bit int and 64 bit long: any 32 bit quantities will +// have been converted to 64 bit quantities in the calling code, and +// it is no longer possible to just pass the format string to sprintf(). +// Instead what amounts to a re-implementation of sprintf() is needed +// here. +// +// The basic implementation of this trace code is as follows: +// +// 1) a static array of data structures to hold the trace data. The +// size can be configured. There is a current index into this +// array. +// +// 2) the various trace functions simply update this array and the +// counter. +// +// 3) all of the trace functions also check a static to see whether +// or not it is necessary to install a trace handler. This cannot +// be done by means of a static object due to constructor priority +// ordering problems. +// +// 4) the callback function does all the hardware of the formatting +// etc. + +//}}} +//{{{ Types and statics + +// ---------------------------------------------------------------------------- +// A data structure rather than a class is used to hold the trace data. +// This guarantees that the array gets put in the bss section and is properly +// zeroed. A "valid" field in the structure can be checked when dumping the +// array. + +typedef struct trace_entry { + bool valid; + cyg_uint32 what; + cyg_uint32 line; + const char* fn; + const char* file; + const char* msg; + CYG_ADDRWORD data[8]; +} trace_entry; + +#ifndef CYGNUM_INFRA_TRACE_VECTOR_SIZE +# define CYGNUM_INFRA_TRACE_VECTOR_SIZE 2048 +#endif + +static trace_entry tracevec[CYGNUM_INFRA_TRACE_VECTOR_SIZE]; +static volatile int trace_index = 0; + +// Forward declaration of the callback function, for convenience. +static void trace_callback(void (*)(const char*)); + +// Has the callback been installed yet? +static bool callback_installed = false; + +//}}} +//{{{ The trace functions themselves + +// ---------------------------------------------------------------------------- +// The functions that get called by the trace macros. Typically these work +// as follows: +// +// 1) read and increment the trace index. This makes tracing marginally usable +// in multi-threaded systems. +// +// 2) invalidate the entry that is about to be updated. Again this helps a bit +// with multi-threaded systems. +// +// 3) fill in all the fields as per the command-line arguments, zeroing +// unused fields. +// +// 4) set the valid flag to true, which means the contents can now be output. +// +// This is by no means sufficient to guarantee that a call to dump the trace +// vector in some other thread can work safely, but it may help a little bit. + +extern "C" void +cyg_tracenomsg(const char* fn, const char* file, cyg_uint32 line) +{ + int i = trace_index; + tracevec[i].valid = false; + trace_index = (trace_index + 1) % CYGNUM_INFRA_TRACE_VECTOR_SIZE; + + tracevec[i].what = cyg_trace_trace; + tracevec[i].fn = fn; + tracevec[i].file = file; + tracevec[i].line = line; + tracevec[i].msg = 0; + tracevec[i].data[0] = 0; + tracevec[i].data[1] = 0; + tracevec[i].data[2] = 0; + tracevec[i].data[3] = 0; + tracevec[i].data[4] = 0; + tracevec[i].data[5] = 0; + tracevec[i].data[6] = 0; + tracevec[i].data[7] = 0; + tracevec[i].valid = true; + + if (!callback_installed) { + cyg_assert_install_failure_callback("Trace", &trace_callback); + callback_installed = true; + } +} + +extern "C" void +cyg_tracemsg(cyg_uint32 what, const char* fn, const char* file, cyg_uint32 line, const char* msg) +{ + int i = trace_index; + tracevec[i].valid = false; + trace_index = (trace_index + 1) % CYGNUM_INFRA_TRACE_VECTOR_SIZE; + + tracevec[i].what = what; + tracevec[i].fn = fn; + tracevec[i].file = file; + tracevec[i].line = line; + tracevec[i].msg = msg; + tracevec[i].data[0] = 0; + tracevec[i].data[1] = 0; + tracevec[i].data[2] = 0; + tracevec[i].data[3] = 0; + tracevec[i].data[4] = 0; + tracevec[i].data[5] = 0; + tracevec[i].data[6] = 0; + tracevec[i].data[7] = 0; + tracevec[i].valid = true; + + if (!callback_installed) { + cyg_assert_install_failure_callback("Trace", &trace_callback); + callback_installed = true; + } +} + +extern "C" void +cyg_tracemsg2(cyg_uint32 what, const char* fn, const char* file, cyg_uint32 line, const char *msg, + CYG_ADDRWORD arg0, CYG_ADDRWORD arg1) +{ + int i = trace_index; + tracevec[i].valid = false; + trace_index = (trace_index + 1) % CYGNUM_INFRA_TRACE_VECTOR_SIZE; + + tracevec[i].what = what; + tracevec[i].fn = fn; + tracevec[i].file = file; + tracevec[i].line = line; + tracevec[i].msg = msg; + tracevec[i].data[0] = arg0; + tracevec[i].data[1] = arg1; + tracevec[i].data[2] = 0; + tracevec[i].data[3] = 0; + tracevec[i].data[4] = 0; + tracevec[i].data[5] = 0; + tracevec[i].data[6] = 0; + tracevec[i].data[7] = 0; + tracevec[i].valid = true; + + if (!callback_installed) { + cyg_assert_install_failure_callback("Trace", &trace_callback); + callback_installed = true; + } +} + +extern "C" void +cyg_tracemsg4(cyg_uint32 what, const char *fn, const char* file, cyg_uint32 line, const char *msg, + CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, + CYG_ADDRWORD arg2, CYG_ADDRWORD arg3) +{ + int i = trace_index; + tracevec[i].valid = false; + trace_index = (trace_index + 1) % CYGNUM_INFRA_TRACE_VECTOR_SIZE; + + tracevec[i].what = what; + tracevec[i].fn = fn; + tracevec[i].file = file; + tracevec[i].line = line; + tracevec[i].msg = msg; + tracevec[i].data[0] = arg0; + tracevec[i].data[1] = arg1; + tracevec[i].data[2] = arg2; + tracevec[i].data[3] = arg3; + tracevec[i].data[4] = 0; + tracevec[i].data[5] = 0; + tracevec[i].data[6] = 0; + tracevec[i].data[7] = 0; + tracevec[i].valid = true; + + if (!callback_installed) { + cyg_assert_install_failure_callback("Trace", &trace_callback); + callback_installed = true; + } +} + +extern "C" void +cyg_tracemsg6(cyg_uint32 what, const char *fn, const char* file, cyg_uint32 line, const char *msg, + CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, + CYG_ADDRWORD arg2, CYG_ADDRWORD arg3, + CYG_ADDRWORD arg4, CYG_ADDRWORD arg5) +{ + int i = trace_index; + tracevec[i].valid = false; + trace_index = (trace_index + 1) % CYGNUM_INFRA_TRACE_VECTOR_SIZE; + + tracevec[i].what = what; + tracevec[i].fn = fn; + tracevec[i].file = file; + tracevec[i].line = line; + tracevec[i].msg = msg; + tracevec[i].data[0] = arg0; + tracevec[i].data[1] = arg1; + tracevec[i].data[2] = arg2; + tracevec[i].data[3] = arg3; + tracevec[i].data[4] = arg4; + tracevec[i].data[5] = arg5; + tracevec[i].data[6] = 0; + tracevec[i].data[7] = 0; + tracevec[i].valid = true; + + if (!callback_installed) { + cyg_assert_install_failure_callback("Trace", &trace_callback); + callback_installed = true; + } +} + +extern "C" void +cyg_tracemsg8(cyg_uint32 what, const char* fn, const char* file, cyg_uint32 line, const char *msg, + CYG_ADDRWORD arg0, CYG_ADDRWORD arg1, + CYG_ADDRWORD arg2, CYG_ADDRWORD arg3, + CYG_ADDRWORD arg4, CYG_ADDRWORD arg5, + CYG_ADDRWORD arg6, CYG_ADDRWORD arg7) +{ + int i = trace_index; + tracevec[i].valid = false; + trace_index = (trace_index + 1) % CYGNUM_INFRA_TRACE_VECTOR_SIZE; + + tracevec[i].what = what; + tracevec[i].fn = fn; + tracevec[i].file = file; + tracevec[i].line = line; + tracevec[i].msg = msg; + tracevec[i].data[0] = arg0; + tracevec[i].data[1] = arg1; + tracevec[i].data[2] = arg2; + tracevec[i].data[3] = arg3; + tracevec[i].data[4] = arg4; + tracevec[i].data[5] = arg5; + tracevec[i].data[6] = arg6; + tracevec[i].data[7] = arg7; + tracevec[i].valid = true; + + if (!callback_installed) { + cyg_assert_install_failure_callback("Trace", &trace_callback); + callback_installed = true; + } +} + +//}}} +//{{{ Output callback + +// ---------------------------------------------------------------------------- +// Dumping the output. The assertion code will invoke a single callback +// function, cyg_trace_dummy::trace_callback(), with a function pointer +// that can be used for the actual output. +// +// The trace_callback() function loops through the various entries in the +// vector, ignoring invalid ones, and invoking output_entry() for the +// valid ones. +// +// There are a number of utility routines: +// +// trim_file() is used to take a full pathname and return just the +// final part of it as a C++ string. There is an upper bound on the +// length of this string. +// +// trim_linenum() formats the linenumber sensibly. +// +// trim_function() is used to parse a __PRETTY_FUNCTION__ value +// and produce something more manageable. +// +// parse_msg() is used to construct the full trace message. +// Because of possible 32/64 bit confusion it is not possible +// to just use sprintf() for this. + +static std::string +trim_file(const char* file) +{ + // If the output is to look reasonable then the result should be a + // fixed length. 20 characters is reasonable for now. + const int max_filename_len = 20; + + if (0 == file) { + return std::string(max_filename_len, ' '); + } + + // Move to the end of the string, and then back again until + // a directory separator is found. Given the number of levels + // in a typical eCos directory hierarchy it is probably not + // worthwhile outputting any of that information. + const char * pEnd = file + strlen(file); + while ((pEnd > file) && ('/' != *pEnd) && ('\\' != *pEnd)) { + pEnd--; + } + if (pEnd != file) + pEnd++; + + std::string result = ""; + int i = 0; + for ( ;(*pEnd != '\0') && (i < max_filename_len); i++, pEnd++) { + result += *pEnd; + } + for ( ; i < max_filename_len; i++) { + result += ' '; + } + + return result; +} + +// The linenumber output should be up to four digits, right-padded +// with spaces. sprintf() will do the trick nicely. + +static std::string +trim_linenum(cyg_uint32 line) +{ + char buf[32]; + sprintf(buf, "%-4d", (int) line); + return buf; +} + +// Extract a function name. On the target side function names +// are usually obtained via __PRETTY_FUNCTION__, and the resulting +// output is a bit on the large side: return value, arguments, etc +// are all included. On the host side the function name is normally +// supplied explicitly and should not be trimmed at all. +// +// Padding is not appropriate since the function name is likely +// to be followed immediately by the argument list. No maximum +// length is imposed - arguably that is a bad idea. +static std::string +trim_function(const char* fn) +{ + if (0 == fn) { + return ""; + } + +#if 1 + return fn; +#else + // This implements the target-side behaviour. + // + // First locate the opening bracket. The function name can + // be identified by walking backwards from that. + const char *s; + for (s = fn; ('\0' != *s) && ('(' != *s); s++); + for ( ; (s > fn) && (*s != ' '); s--); + if ( s > fn) s++; + + std::string result = ""; + while ( ('\0' != *s) && ('(' != *s) ) + result += *s++; + + return result; +#endif +} + +// The trace format string contained a %s. It is necessary to check +// whether the argument is still valid, and return a suitable +// approximation to the actual data. +static std::string +trim_string(const char * arg) +{ + const int max_string_len = 20; + + std::string result = ""; + if (0 == arg) { + return result; + } + int i; + for ( i = 0; (i < max_string_len) && ('\0' != *arg) && isprint(*arg); i++, arg++) { + result += *arg; + } + return result; +} + +// ---------------------------------------------------------------------------- +// Parse a printf() style format string and do the appropriate expansions. +// Because of possible confusion between 32 and 64 bit integers it is not +// possible to use sprintf() itself. +// +// It is assumed that the format string is valid, as are most of the +// arguments. The possible exception is %s arguments where a little bit of +// checking happens first. + +static std::string +parse_msg(const char* msg, trace_entry& entry) +{ + if (0 == msg) { + return ""; + } + // Keep track of the number of arguments in the trace_entry + // that have been processed. + int args_index = 0; + + // A utility buffer for sprintf(), e.g. for integer-> string conversions. + char util_buf[64]; + + std::string result = ""; + for ( ; '\0' != *msg; msg++) { + + if ('%' != *msg) { + result += *msg; + continue; + } + + // We have a format string. Extract all of it. + std::string format = "%"; + msg++; + + // The first part of the format string may be one or more flags. + while ( ('-' == *msg) || ('+' == *msg) || (' ' == *msg) || + ('#' == *msg) || ('0' == *msg) ) { + format += *msg++; + } + + // Next comes the width. If this is an asterix it is necessary to + // substitute in an actual argument. + if ('*' == *msg) { + int width = (args_index < 8) ? (int) entry.data[args_index++] : 0; + sprintf(util_buf, "%d", width); + format += util_buf; + msg++; + } else { + // Otherwise the width should be one or more digits + while( isdigit(*msg) ) { + format += *msg++; + } + } + + // Look for a precision, again coping with an asterix. + if ('.' == *msg) { + format += *msg++; + if ('*' == *msg) { + int precision = (args_index < 8) ? (int) entry.data[args_index++] : 0; + sprintf(util_buf, "%d", precision); + format += util_buf; + msg++; + } else { + // The precision should be one or more digits, with an optional - + if ('-' == *msg) { + format += *msg++; + } + while (isdigit(*msg)) { + format += *msg++; + } + } + } + + // Now look for h,l and L. These have to be remembered. + bool short_version = false; + bool long_version = false; + if ('h' == *msg) { + format += *msg++; + short_version = true; + } else if (('l' == *msg) || ('L' == *msg)) { + format += *msg++; + long_version = true; + } + + // The end of the format string has been reached. + int format_ch = *msg; + format += *msg; + + // If we have already formatted too many arguments, there is no point + // in trying to do the actual formatting. + if ( 8 <= args_index ) { + continue; + } + CYG_ADDRWORD val = entry.data[args_index++]; + + switch( format_ch ) { + case '%' : + result += '%'; + break; + + case 'd' : + case 'i' : + case 'o' : + case 'u' : + case 'x' : + case 'X' : + // "format" contains the appropriate format string. + // Invoke sprintf() using util_buf, doing the + // appropriate cast, and then append the output + // of util_buf. + // + // This is not totally robust. If a ridiculous + // precision has been specified then util_buf may + // overflow. + if (long_version) { + sprintf(util_buf, format.c_str(), (long) val); + } else { + // The implicit cast rules mean that shorts do not + // require any special attention. + sprintf(util_buf, format.c_str(), (int) val); + } + result += util_buf; + break; + + case 'c' : + sprintf(util_buf, format.c_str(), (int) val); + result += util_buf; + break; + + case 'p' : + sprintf(util_buf, format.c_str(), (void *) val); + result += util_buf; + break; + + case 's' : + { + std::string data = trim_string((char *) val); + sprintf(util_buf, format.c_str(), data.c_str()); + result += util_buf; + break; + } + + default : + // Any attempt to do floating point conversions would be + // rather tricky given the casts that have been applied. + // There is no point in doing anything for unrecognised + // sequences. + break; + } + } + return result; +} + +// ---------------------------------------------------------------------------- + + +static void +output_entry(void (*pOutputFn)(const char*), trace_entry& entry) +{ + std::string output = trim_file(entry.file) + " " + + trim_linenum(entry.line) + " " + + trim_function(entry.fn) + " "; + if (0 != entry.msg) { + + switch( entry.what) { + case cyg_trace_trace : output += " '"; break; + case cyg_trace_enter : output += "{{"; break; + case cyg_trace_args : output += "(("; break; + case cyg_trace_return : output += "}}"; break; + default : output += " ?"; + } + output += parse_msg(entry.msg, entry); + switch( entry.what) { + case cyg_trace_trace : output += "' "; break; + case cyg_trace_enter : break; + case cyg_trace_args : output += "))"; break; + case cyg_trace_return : break; + default : output += "? "; + } + } + output += "\n"; + (*pOutputFn)(output.c_str()); +} + +static void +trace_callback( void (*pOutputFn)(const char*)) +{ + if ((trace_index < 0) || (trace_index >= CYGNUM_INFRA_TRACE_VECTOR_SIZE)) + return; + + // Start at the last entry and work back down to zero, skipping + // invalid ones. Then go to the top and work back to the current index. + int i; + for (i = trace_index - 1; i >= 0; i--) { + if (tracevec[i].valid) { + output_entry(pOutputFn, tracevec[i]); + } + } + for (i = (CYGNUM_INFRA_TRACE_VECTOR_SIZE - 1); i >= trace_index; i--) { + if (tracevec[i].valid) { + output_entry(pOutputFn, tracevec[i]); + } + } +} + +//}}} diff --git a/tools/src/libcdl/ChangeLog b/tools/src/libcdl/ChangeLog new file mode 100644 index 00000000..6fd3469c --- /dev/null +++ b/tools/src/libcdl/ChangeLog @@ -0,0 +1,967 @@ +2003-05-01 Jonathan Larmour + + * doc/package.sgml: Use PNGs instead of GIFs. + * doc/jadetex.cfg: Add this to configure PDF output nicely with index + and coloured links. + +2003-02-12 Bart Veer + + * Makefile.in, configure, testsuite/Makefile.in: + Regenerate after acinclude.m4 update + +2003-02-11 Bart Veer + + * build.cxx (compare_and_copy): + Work around problem with cygwin tclsh84 - "file rename" may + spuriously report failure. + +2003-02-03 John Dallaway + + * cdl.dsp: Call tclsh rather than cygtclsh80 in custom build rule. + +2002-12-22 Nick Garnett + + * doc/.cvsignore: Added this file to ignore generated HTML files. + +2002-09-21 Bart Veer + + * cdlcore.hxx, cdl.hxx, build.cxx, component.cxx, config.cxx, + database.cxx, dialog.cxx, interface.cxx, interp.cxx, + option.cxx, package.cxx, parse.cxx, property.cxx, + value.cxx, wizards.cxx + Avoid const compatibility problems with Tcl 8.4 + +2002-08-03 Bart Veer + + * acinclude.m4, configure.in, Makefile.am, testsuite/Makefile.am, + testsuite/config/default.exp: + Rework host-side autoconf support + +2002-03-04 Gary Thomas + + * build.cxx (update_header_file_info): + Suppress include files which and in "~" - these are backup + files and are transient. Keeping them can break a build + tree if the backup files are removed. + +2002-02-18 Bart Veer + + * transact.cxx (user_confirmation_required): + Making a valuable with a user_value inactive requires + user confirmation, it should not be done automatically + by the inference engine. + +2001-12-07 Bart Veer + + * doc/language.sgml, doc/*.html: + Add a footnote clarifying a particular Tcl expression + (bug 57097). Regenerate html. + + * doc/fixhtml.tcl + Removed, the master copy now lives in pkgconf + +2001-12-06 Bart Veer + + * cdlcore.hxx, build.cxx, interp.cxx: + Move #include of to common header rather than to + individual source files, avoiding build problems with + newer compilers. Reported by Jeff Law. + + * infer.cxx (inner_resolve): + CdlTransaction::is_preferable_to() is not symmetric. Rearrange + some expressions so that disabling options or making them + inactive is subtly discouraged rather than encouraged. + +2001-07-20 Bart Veer + + * value.cxx (save): + Complicated "requires" expressions spread over multiple lines + were not being turned into multiline comments, leading to + illegal savefiles. + +2001-07-11 Bart Veer + + * transact.cxx (is_preferable_to): + Consider active changes as well as value changes. + +2001-07-10 Bart Veer + + * transact.cxx (is_preferable_to): + Fine-tune the determination of which of two transactions has less + impact on the system. + + * infer.cxx (infer_handle_interface_value): + Add inference engine support for constraints of the form + (xxx == 0) and (xxx = 1), where xxx is an interface. + +2001-07-08 Jonathan Larmour + + * interp.cxx: include as isspace() is used. + +2001-06-21 Bart Veer + + + * base.cxx, cdlcore.hxx, property.cxx, parse.cxx, value.cxx, refer.cxx: + Allow an empty string to be used for parent properties, implying + reparenting below the root + + * expr.cxx, cdlcore.hxx, infer.cxx: + Add support for new operators implies, xor and eqv + + * func.cxx: + Add new function is_xsubstr(), is_loaded(), is_active(), + is_enabled(), get_data() and version_cmp() + + * doc/main.sgml: + Add 2001 to copyright year. + + * doc/language.sgml, doc/reference.sgml: + Document the above changes + + * doc/*.html: + Regenerate following above changes, and using newer stylesheets + etc. + +2001-06-20 Bart Veer + + * database.cxx, cdl.hxx: + + Add a verbosity flag to control whether or not certain warnings + are issued. The main warnings of interest are inconsistencies + between the database and the repository, e.g. packages listed + but not actually installed, as can happen in anoncvs checkouts. + +2001-05-16 Bart Veer + + * Makefile.am: use new compiler flag support + + * configure, Makefile.in, testsuite/Makefile.in: regenerate + +2001-05-14 Bart Veer + + * func.cxx (get_args_count): Avoid compiler warning. + * func.cxx (is_substr_find): fix VC++ build problem (patch + provided by Julian) + +2001-04-27 Bart Veer + + * doc/language.sgml: + Added documentation on functions + + * func.cxx, Makefile.am, Makefile.in: + New module for function support inside expressions + + * expr.cxx + Add support for functions and the string concatenation operator. + + * infer.cxx + Clean-up, add support for functions, and implement more inference + functionalitity generally. + +2001-04-19 Bart Veer + + * doc/*.sgml, *.html: + Update as per current corporate doc conventions. + +2001-02-27 Jonathan Larmour + + * interp.cxx (locate_subdirs): Accept "cvs" as a synonym for "CVS" + * database.cxx (new_package): Ditto. + +2000-08-18 Bart Veer + + * configure.in: + Allow cross-compilation. + + * configure, Makefile.in, testsuite/Makefile.in: + Regenerate. + + * base.cxx, build.cxx, cdl.hxx, cdlcore.hxx, component.cxx, + config.cxx, database.cxx, dialog.cxx, expr.cxx, interface.cxx, + interp.cxx, option.cxx, package.cxx, parse.cxx, value.cxx, + wizard.cxx + Remove C++ exception specifications, because they cause problems + with some versions of the tools. + +2000-07-06 Bart Veer + + * conflict.cxx (get_explanation): + Put quotes around "requires" in the conflict explanation. + Requested by the eCos team. + +2000-07-04 Bart Veer + + * value.cxx (save): + The comment "# This value cannot be modified here." was being + added even for modifiable options, courtesy of some earlier + code rearrangement. + + * config.cxx (change_package_version): + Prevent assertion failure/crash when changing the version of a + package that has not been loaded (not uncommon when using + ecosconfig and confusing the order of the version and the + package(s)). + +2000-06-28 Bart Veer + + * transact.cxx, cdlcore.hxx: + Add details of the current transaction to the transaction callback + class. Previously there was no way of getting hold of the current + transaction and hence the toplevel from inside the callback + without using statics. + + * value.cxx (set_flavor): + Temporarily undo some of the previous value clean-ups, they were + causing problems at the application level. The API needs to be + changed to eliminate confusion between value and the data part + of a bool/value pair. + +2000-06-22 Bart Veer + + * value.cxx, interface.cxx: + Allow the flavor property to be used on interfaces. booldata + interfaces allow the use of #ifdef to determine whether or not + a feature is available. Clean up some of the value stuff to match, + especially when it comes to savefiles. + + * build.cxx, cdlmisc.cxx, cdlcore.hxx: + Add version #define support. + +2000-06-15 John Dallaway + + * cdl.dsp: + Build libCDL to v:\cdl rather than v:\ide. Build debug versions + against tcl82d.lib rather than tcl82.lib. + +2000-06-02 Bart Veer + + * config.cxx (load_package): + Diagnostic function pointers were not being installed at the + package level, so error messages due to invalid CDL were + disappearing. + +2000-05-11 Bart Veer + + * value.cxx (implements_update_handler): + Cope gracefully with implements properties where the destination + is not an interface. + + * transact.cxx (clear_structural_conflicts): + Prevent a structural conflict from being destroyed twice (only + likely to happen during a major delete operation). + +2000-04-14 Bart Veer + + * infer.cxx (infer_set_valuable_value): + Extend the == operator inference support to cope with bool and + booldata options. + +2000-04-11 Bart Veer + + * infer.cxx (infer_make_active): + Fix infinite recursion. Naughty inference engine. + + * interp.cxx (eval): + Diagnostics enhancement tweak. + + * build.cxx (generate_config_header): + Add a context when generating header files. + + * base.cxx (CdlLoadableBody): + Add a context to the CdlInterpreter on creation, for better + diagnostics. + Do not raise errors in the internal Tcl scripts, since those + may now get reported. + + * database.cxx (new_package): + A single spurious subdirectory in a package should not invalidate + the entire package. + +2000-04-10 Bart Veer + + * base.cxx, build.cxx, cdl.hxx, cdlcore.hxx, cdlmisc.cxx, + component.cxx, config.cxx, database.cxx, dialog.cxx, expr.cxx, + interface.cxx, interp.cxx, option.cxx, package.cxx, parse.cxx, + property.cxx, value.cxx, wizard.cxx + Improved diagnostics support. + + * build.cxx, property.cxx, parse.cxx: + Allow for string vector properties with no elements. Use this + for the include_files property. + +2000-03-13 John Dallaway + + * cdl.dsp: + Modify libCDL custom build step to calculate the short form + of the host tools root directory to allow rebuilding using an + eCos installation in its default location (containing spaces). + + Use the presence of the last file generated by the + configure phase (the ecosconfig makefile) to determine whether + to invoke configure. This provides some further robustness + against failed or interrupted builds. + +2000-03-08 Simon FitzMaurice + * cdl.dsp : Modify libCDL custom build step to add --enable-maintainer-mode + +2000-03-08 John Dallaway + + * cdl.dsp: + Modify libCDL custom build step to configure in the host tools + directory rather than the root of the eCos repository. + +2000-03-08 Simon FitzMaurice + * cdl.dsp : Modify libCDL custom build step to avoid running configure every time. + +2000-03-07 John Dallaway + + * cdl.dsp: + Modify libCDL custom build step to accommodate the migration + if libCDL sources. + +2000-03-01 Bart Veer + + * expr.cxx (eval_internal): + If there is an eval exception, only manipulate conflicts if we are + in a transaction. + + * value.cxx: + Make the code more robust against eval exceptions + +2000-02-15 Bart Veer + + * build.cxx (generate_config_header): + Fix the symbol that gets used for define properties. + + * package.cxx (get_config_header): + Completely suppress the generation of until + further notice. Allow active_if properties in packages. + Comment a need for default_value properties. + +2000-02-11 John Dallaway + + * cdl.dsp + Configure and make 'quietly' for release builds to help contain + the length of the release logs. + + * cdl.mak: + Remove this obsolete file. + +2000-02-10 Bart Veer + + * package.cxx (parse_package): + Allow packages to have active_if properties. + Add a comment that default_value in a package should be allowed as + a way of controlling enabled/disabled state. + +2000-02-03 Bart Veer + + * infer.cxx (infer_handle_reference_bool): + Earlier fix missed yet more sub-transactions that should have been + cancelled. + +2000-02-02 Bart Veer + + * infer.cxx (infer_make_inactive): + Earlier fix missed a sub-transaction that should have been + cancelled. + + * value.cxx (implements_update_handler): + Also recalculate an interface if the destination is created. + Otherwise an interface will have the wrong value if it is loaded + after all its implementors. + + * infer.cxx, transact.cxx: + Make sure that sub-transactions are either cancelled or committed + before they get deleted. + +2000-01-26 Bart Veer + + * config.cxx (save): + Always output the description field for a standard savefile. + + * base.cxx (save_conflicts): + Add missing newline + + * infer.cxx (infer_subexpr_bool): + Fix the handling of && and || + + * infer.cxx (infer_handle_reference_value): + Do not try modifying inactive data items, there is no point + and it could cause an assertion failure + +2000-01-25 Bart Veer + + * config.cxx: + Extend the savefile support to remember which packages + belong to the hardware and which ones belong to the + template. + +2000-01-24 Bart Veer + + * cdlcore.hxx, parse.cxx, wizard.cxx (parse_screen): + Change parse_property_options() to parse_options() so that it can + be used for more than just properties + + * cdlcore.hxx, config.cxx: + Make sure that a LocalTransaction always gets cancelled if + things go wrong and an exception is thrown, prior to the + transaction being deleted. + + * base.cxx, interp.cxx, value.cxx: + Savefile format tweaks. + +2000-01-21 Bart Veer + + * base.cxx (add_node_to_toplevel): + When a loadable was re-added to the toplevel after an unload was + cancelled, its parent was not set correctly. + + * infer.cxx: + Add partial support for dependencies of the form X==Y + +2000-01-20 Bart Veer + + * Makefile.am, Makefile.in: + Fix dependencies for interface.cxx and transact.cxx, these + were sometimes rebuilt unnecessarily + + * cdlcore.hxx, base.cxx, transact.cxx, config.cxx, package.cxx: + All file I/O related operations now happen in the context + of a transaction. + +1999-12-17 Bart Veer + + * cdl.hxx, config.cxx, database.cxx: + Add support for set_value commands in ecos.db target entries. + + * database.cxx: + Remove old support for template definitions in ecos.db + +1999-12-16 Bart Veer + + * nearly all files: + Add support for memory leak detection, by maintaining per-class + object counts via the appropriate constructors and destructors. + + * database.cxx: + Plug a one-off memory leak. + +1999-12-14 John Dallaway + + * interp.cxx: + Modify CdlInterpreterBody::locate_subdirs(), + CdlInterpreterBody::locate_files(), + CdlInterpreterBody::is_directory() and + CdlInterpreterBody::is_file() to accommodate + spaces in paths. + +1999-12-13 Bart Veer + + * cdlcore.hxx, interface.cxx, transact.cxx, value.cxx: + Calculate values for interfaces. + + * base.cxx, cdl.hxx, cdlcore.hxx, component.cxx, config.cxx, + database.cxx, dialog.cxx, interface.cxx, interp.cxx, option.cxx, + package.cxx, value.cxx, wizard.cxx: + Implementation of templates in the form of the partial savefiles. + +1999-12-10 John Dallaway + + * cdlcore.hxx: + Use '#pragma warning()' under VC++ only. + +1999-12-09 Bart Veer + + * cdlmisc.cxx (compare_versions): + V1.3.1 and V1.3B6 were not compared correctly. + +1999-12-03 Bart Veer + + * build.cxx (update_header_file_info): + If a package has no include subdirectory and no include_files + property, search the package directory tree for anything + resembling a header file and install that. + +1999-11-30 Bart Veer + + * base.cxx: + Made the multiple conflict solution code more robust when side + effects occur. + + * transact.cxx: + When a new conflict is committed and becomes global its solution + must be cleared, since no attempt is made to preserve the validity + of global solutions. + + * transact.cxx (resolve): + Try to make sure that the inference callback gets invoked whenever + appropriate. + + * base.cxx: + When resolving multiple global conflicts, fixing the first one may + have the side effect of fixing subsequent ones as well, resulting + in an assertion failure because the inference engine reported a + success with no changes being required. This situation is now + checked for. + + * parse.cxx (parse_property_options): + Allow for a NULL options descriptor + +1999-11-28 Bart Veer + + * transact.cxx: + Global conflict resolution support + + * infer.cxx: + Clean-up for resolving global conflicts + Cancel undesirable transactions before they are deleted + + * conflict.cxx: + Add support for resolving global conflicts + Implement get_transaction() member + + * cdlcore.hxx: + Add support for resolving global conflicts + Tidy up the transaction and transaction callback classes a bit. + + * base.cxx: + Add support for resolving global conflicts + +1999-11-26 John Dallaway + + * build.cxx: + Modify CdlToplevelBody::generate_config_headers() and + compare_and_copy() to accommodate spaces in the path to the + headers directory. + +1999-11-23 Bart Veer + + * database.cxx (new_target): + command_prefix is no longer compulsory for ecos.db target entries, + since this is now handled in the config data. command_prefix and + cflags are still allowed in ecos.db for now, but will be removed + in future. + +1999-11-22 Bart Veer + + * base.cxx: + During an unload operation a conflict may be cleared for multiple + reasons: the requires condition may now be satisfied, e.g + "requires !xxx" where "xxx" is also being unloaded; and the + node containing the requires property may be disappearing as well. + + * transact.cxx (save_solution): + If any parts of a solution involve calculated options then there + is no point in exposing this to the user. The re-calculation will + happen automatically during the next propagation. + + * base.cxx: + * config.cxx: + Stop the inference engine from running when packages are loaded or + unloaded. The user has no opportunity to cancel or undo the + operation, and there may be unexpected behaviour because the + inference engine has no clear view of what the overall + configuration is going to be. + + * transact.cxx (resolve): + Resolving one conflict may affect others in the new_conflicts + list. Using an iterator to examine all conflicts is a bad idea. + Instead each loop needs to search for a conflict that may + have a solution. + + * base.cxx: + * config.cxx: + * cdlcore.hxx: + Rearrange how a CdlConfiguration gets destroyed, to allow dynamic + casts to be used on the toplevel as packages are unloaded. + +1999-11-22 John Dallaway + + * config.cxx: + Modify CdlConfigurationBody::load_package() to accommodate + spaces in the path to the eCos repository. + +1999-11-21 Bart Veer + + * infer.cxx: + * transact.cxx: + * cdlcore.hxx: + First implementation of inference code + + * conflict.cxx: + Added missing is_structural() member + +1999-11-18 Bart Veer + + * value.cxx: + Created a CdlSimpleValue constructor for booleans, to match the + assignment operator. + + * expr.cxx : + Modify list expression evaluation code so that any terms which + evaluate to empty strings are discarded. + +1999-11-08 Bart Veer + + * database.cxx: + Switched to ECOS_REPOSITORY environment variable. + + * transact.cxx: + * cdlcore.hxx: + Separated out normal and structural conflicts in the transaction + callback class. + + * value.cxx: + * interp.cxx: + * cdlcore.hxx: + Added new member CdlInterpreterBody::extend_comment(), for better + support of multiline comments in savefiles. + +1999-11-03 Bart Veer + + * cdlcore.hxx, base.cxx, transact.cxx, value.cxx: + Newly loaded nodes were starting out as active, and were not being + turned inactive if the parent was disabled. By default nodes are + now inactive and there is explicit code in the transaction + propagate member function to check whether or not each node should + be active. + + * Most files + Install the new transaction model + +1999-11-03 John Dallaway + + * value.cxx: + Apply patch to correct the omission of a comment char from + continuation lines of calculated value comments in + configuration save files. + +1999-10-25 Simon FitzMaurice + * value.cxx: + Apply fix (supplied by Bart) to correct omission of comment symbol + from start of second and subsequent lines of split statement. + +1999-10-14 Bart Veer + + * database.cxx: + * cdl.hxx: + Add support for new per-target commands enable and disable, + which provide limited control over hardware-related configuration + options. + + * config.cxx (set_hardware): + Process per-target enable/disable commands from the database + +1999-10-12 John Dallaway + + * build.cxx (generate_config_headers): + + Workaround problem with assignment of standard channels + which was causing system.h to not be generated. + +1999-10-08 John Dallaway + + * cdl.dsp, cdl.mak: + + Link against Tcl 8.2.1. + +1999-10-07 Bart Veer + + * value.cxx (get_widget_hint): + For some expressions this was corrupting the expression data, + because of the use of a reference rather than a pointer. + +1999-10-06 Bart Veer + + * cdlcore.hxx, database.cxx, expr.cxx, interface.cxx, value.cxx + Partial implementations of interfaces and get_widget_hint() + +1999-09-28 Bart Veer + + * interp.cxx: + Fix use of an uninitialized variable. + + * config.cxx: + Fix the handling of package versions in save files. + +1999-09-15 Bart Veer + + * value.cxx + Fix output of multiline legal_values expressions + + * value.cxx + Fix variable that might be used uninitialized. + + * all files + First implementation of the savefile support + +1999-09-07 John Dallaway + + * cdl.dsp, cdl.mak: + + Add ANSI build configurations. + +1999-09-07 John Dallaway + + * cdl.dsp, cdl.mak: + + Update libCDL project file and VC++ makefile to use current + configure switches. + +1999-08-12 Bart Veer + + * configure.in: + * configure: + * stamp-h.in: + First attempt at autoconfiscating the configtool + +1999-08-10 Bart Veer + + * expr.cxx, value.cxx: + Fixed some problems related to double precision numbers. + +1999-08-03 Bart Veer + + * parse.cxx: + Added an implementation of the "unknown" command which + goes via the normal diagnostics routines. + +1999-07-22 Bart Veer + + * cdlcore.hxx, value.cxx, expr.cxx, cdlmisc.cxx: + Try to preserve some input data formatting information, such as + whether a number appeared as decimal or hexadecimal. + +1999-07-21 Bart Veer + + * value.cxx: + Added some assertions to make sure that entities with a + "calculated" property cannot be modified. + +1999-07-20 Bart Veer + + * value.cxx, transact.cxx: + Fixed some value propagation problems. + + * cdlcore.hxx, value.cxx, expr.cxx: + Detect invalid numbers in expressions. + A CdlListValue object now contains a single vector of + CdlSimpleValue objects, not separate vectors of strings, integers + and doubles. This allows ordering to be preserved. + + * most files: + Sync development version with repository, there is now + full value support. + +1999-07-13 Bart Veer + + * expr.cxx: + Implement operator precedence + Fix parsing of conditional expressions. + +1999-07-12 Bart Veer + + * most files: + Sync development version with repository, there is now partial + expression support. + +1999-07-05 Bart Veer + + * all files: + Merge development work from the libcdl branch. + + +1999-06-10 John Dallaway + + * cdl.dsp: + Convert to a Visual C++ utility project. + +1999-06-08 John Dallaway + + * cdl.dsp: + Project file outputs libCDL to the project-specified output + directory rather than the intermediate directory + +1999-06-07 John Dallaway + + * cdl.dsp: + Project file is no-longer dependent on the ECOSHOME environment + variable + +1999-06-07 John Dallaway + + * cdl.dsp: + New Visual C++ 6.0 project file for libCDL + +1999-06-03 Bart Veer + + * configure: + Regenerated again after further updates to toplevel acinclude.m4 + +1999-06-02 Bart Veer + + * configure: + Regenerated after updating toplevel acinclude.m4, new + --enable-debuginfo option. + + * libcdl.hxx: + CdlBaseBody is now an ordinary base class for CdlContainerBody, + not a virtual base class, allowing old-style casts inside the + config tool to work. There is no need for virtual inheritance just + yet. + The CdlGoalExpressionBody copy constructor is now public, not + protected, for use by the config tool. + +1999-05-24 Bart Veer + + * package.cxx: + * component.cxx: + * option.cxx: + * base.cxx: + * libcdl.hxx: + Allow target and platform properties inside components and + options, and startup properties inside packages and components, + for continued compatibility with libnotcdl. + +1999-03-10 Bart Veer + + * option.cxx (parse_option): + * component.cxx (parse_component): + Fixed the handling of container inheritance for full libnotcdl + compatibility. + +1999-03-09 Bart Veer + + * parse.cxx (parse_...expression_property): + Do not try to parse options just yet, there is confusion if + the expression begins with a negative number. + +1999-03-08 Bart Veer + + * interp.cxx (eval): + Make sure that C strings passed to the Tcl interpreter + are properly terminated. + + * property.cxx: + Remove strict checking of property id's, so that the library + code can be re-used for other purposes e.g. hardware CDL. + + * expr.cxx: + Added temporary parsers for libnotcdl compatibility. + + * cdlmisc.cxx: + Added routines to convert between strings and flavors. + Added routines to validate CDL names. + Minor layout tweaks. + + * README: + Examples now refer to Tcl8.1b1 instead of 8.1a2, the alpha + version caused problems. + + +1999-02-02 Bart Veer + + * testsuite/libcdl/cdl1.cxx (test_double_to_string): + * cdlmisc.cxx (string_to_double): + Added double conversion support, needed for the CdlResult class + + * testsuite/libcdl/cdl5.cxx (main): + * database.cxx: + Change CdlInputOutputError to CdlInputOutputException in the + interests of a more consistent naming convention. + +1999-01-29 Bart Veer + + * interp.cxx (eval): + Add new member function to evaluate Tcl code embedded in + CDL data. + + * cdlmisc.cxx (is_valid_property_id): + Added the properties IncludeDir and ExportTo, and the flavor "dummy" + + +1999-01-26 Bart Veer + + * testsuite/libcdl/cdl4.cxx: + * testsuite/libcdl/cdl1.cxx (test_string_to_integer): + Change array initializers to avoid having to supply a constructor. + + * aclocal.m4: + * config.h.in: + * configure: + * stamp-h.in: + * testsuite/Makefile.in: + Updated to use autoconf 2.13 and automake 1.4, plus to reflect + tweaks to toplevel acinclude.m4 and local configure.in + + * configure.in: + No longer insist on the infra having been built already. This + allows a configure from the top-level to work. + + * testsuite/libcdl/cdl4.cxx: + Changed the initializer for a static array of structures to work + around compiler problems. + + * testsuite/libcdl/cdl3.cxx (main): + Changed the way inline Tcl scripts are defined to avoid compiler + problems. + + * testsuite/libcdl/cdl2.cxx (main): + Added missing return statement to avoid compiler warning. + + * testsuite/config/default.exp: + Use new variable cyg_ac_tcl_libs + + * interp.cxx (eval): + Do not distinguish between TCL_OK and TCL_RETURN return codes, + clients are unlikely to be interested. + Fix definition of set_assoc_data(). + + * cdlmisc.cxx (compare_versions): + Fix syntax problem in while loop. + +1999-01-22 Bart Veer + + * interp.cxx + (set_assoc_data): added new functions so that clients can + associate arbitrary data with interpreters + (set_variable) : and to provide access to Tcl global variables. + (make_safe) : also, the ability to make an interpreter safe. + (set_result) : not to mention, controlling the result field. + + * cdlmisc.cxx (compare_versions): + Added new function Cdl::compare_versions() + +1999-01-21 Bart Veer + + * cdlmisc.cxx + Added routines get_library_version(), set_interactive() and + get_interactive(). + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1999, 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== diff --git a/tools/src/libcdl/Makefile.am b/tools/src/libcdl/Makefile.am new file mode 100644 index 00000000..db22f5de --- /dev/null +++ b/tools/src/libcdl/Makefile.am @@ -0,0 +1,167 @@ +## Process this file with automake to produce Makefile.in +## ===================================================================== +## +## Makefile.am +## +## libcdl.a +## +## ===================================================================== +#######ECOSHOSTGPLCOPYRIGHTBEGIN#### +## ---------------------------------------------------------------------------- +# Copyright (C) 2002 Bart Veer +# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +## ---------------------------------------------------------------------------- +#######ECOSHOSTGPLCOPYRIGHTEND#### +## ===================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): bartv +## Contact(s): bartv +## Date: 1998/12/16 +## Version: 0.01 +## +######DESCRIPTIONEND#### +## ===================================================================== + +AUTOMAKE_OPTIONS = 1.3 foreign +SUBDIRS = testsuite + +## Pick up compiler flags etc. from configury +INCLUDES = @ecos_INCLUDES@ +LIBS = @ecos_LIBS@ @ecos_LDADD@ +AM_CFLAGS = @ecos_CFLAGS@ +AM_CXXFLAGS = @ecos_CXXFLAGS@ +ecos_infra_incdir = @ecos_infra_incdir@ + +## This package exports its interface via cdl.hxx +include_HEADERS = cdlcore.hxx cdl.hxx + +## The main target is a static library. The problem is naming it +## correctly. automake seems to insist on calling it libcdl.a, +## even when compiling it with VC++. Various attempts to use +## cdl.lib instead with VC++ have failed. Instead the library +## will always be built as libcdl.a, but gets copied to cdl.lib +## when necessary. + +sources := interp.cxx \ + expr.cxx \ + func.cxx \ + refer.cxx \ + cdlmisc.cxx \ + conflict.cxx \ + property.cxx \ + parse.cxx \ + base.cxx \ + value.cxx \ + build.cxx \ + dialog.cxx \ + wizard.cxx \ + interface.cxx \ + transact.cxx \ + infer.cxx \ + database.cxx \ + config.cxx \ + package.cxx \ + component.cxx \ + option.cxx + +noinst_LIBRARIES = libcdl.a +libcdl_a_SOURCES = $(sources) + +if MSVC +all-local: cdl.lib + +cdl.lib: libcdl.a + $(INSTALL) $< $@ + +clean-local: + $(RM) cdl.lib + +install-exec-local: all-local + $(mkinstalldirs) $(DESTDIR)$(libdir) + $(INSTALL) cdl.lib $(DESTDIR)$(libdir)/cdl.lib + +else + +all-local: +clean-local: +install-exec-local: libcdl.a + $(mkinstalldirs) $(DESTDIR)$(libdir) + $(INSTALL) libcdl.a $(DESTDIR)$(libdir)/libcdl.a +endif + + +## Add specific dependencies for all source files. +## Every module in libcdl uses assertions and tracing. +## These pull in the others. +infra_headers := $(ecos_infra_incdir)/cyg/infra/cyg_ass.h \ + $(ecos_infra_incdir)/cyg/infra/cyg_trac.h \ + $(ecos_infra_incdir)/pkgconf/infra.h \ + $(ecos_infra_incdir)/pkgconf/hostinfra.h \ + $(ecos_infra_incdir)/cyg/infra/cyg_type.h + +## Depending on the flavor of CDL being implemented, different +## headers will get included. +cdlcore_headers := cdlconfig.h cdlcore.hxx +cdl_headers := $(cdlcore_headers) cdl.hxx + +interp.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +expr.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +infer.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +func.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +refer.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +cdlmisc.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +conflict.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +property.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +parse.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +base.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +value.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +build.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +dialog.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +wizard.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +interface.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +transact.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +database.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + +config.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + +package.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + +component.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + +option.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + + diff --git a/tools/src/libcdl/Makefile.in b/tools/src/libcdl/Makefile.in new file mode 100644 index 00000000..3d90b442 --- /dev/null +++ b/tools/src/libcdl/Makefile.in @@ -0,0 +1,655 @@ +# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +#######ECOSHOSTGPLCOPYRIGHTBEGIN#### +# Copyright (C) 2002 Bart Veer +# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +# +# This file is part of the eCos host tools. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +#######ECOSHOSTGPLCOPYRIGHTEND#### +#######DESCRIPTIONBEGIN#### +######DESCRIPTIONEND#### + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +CC = @CC@ +CXX = @CXX@ +ECOS_REPOSITORY = @ECOS_REPOSITORY@ +EXEEXT = @EXEEXT@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MSVC_SRCDIR = @MSVC_SRCDIR@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_DIR = @PACKAGE_DIR@ +PACKAGE_INSTALL = @PACKAGE_INSTALL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ +ecos_CFLAGS = @ecos_CFLAGS@ +ecos_CXXFLAGS = @ecos_CXXFLAGS@ +ecos_INCLUDES = @ecos_INCLUDES@ +ecos_LDADD = @ecos_LDADD@ +ecos_LIBS = @ecos_LIBS@ +ecos_infra_libdir = @ecos_infra_libdir@ +ecos_libcdl_incdir = @ecos_libcdl_incdir@ +ecos_libcdl_libdir = @ecos_libcdl_libdir@ +ecos_tk_includes = @ecos_tk_includes@ +ecos_tk_libs = @ecos_tk_libs@ + +AUTOMAKE_OPTIONS = 1.3 foreign +SUBDIRS = testsuite + +INCLUDES = @ecos_INCLUDES@ +LIBS = @ecos_LIBS@ @ecos_LDADD@ +AM_CFLAGS = @ecos_CFLAGS@ +AM_CXXFLAGS = @ecos_CXXFLAGS@ +ecos_infra_incdir = @ecos_infra_incdir@ + +include_HEADERS = cdlcore.hxx cdl.hxx + +sources := interp.cxx \ + expr.cxx \ + func.cxx \ + refer.cxx \ + cdlmisc.cxx \ + conflict.cxx \ + property.cxx \ + parse.cxx \ + base.cxx \ + value.cxx \ + build.cxx \ + dialog.cxx \ + wizard.cxx \ + interface.cxx \ + transact.cxx \ + infer.cxx \ + database.cxx \ + config.cxx \ + package.cxx \ + component.cxx \ + option.cxx + + +noinst_LIBRARIES = libcdl.a +libcdl_a_SOURCES = $(sources) + +infra_headers := $(ecos_infra_incdir)/cyg/infra/cyg_ass.h \ + $(ecos_infra_incdir)/cyg/infra/cyg_trac.h \ + $(ecos_infra_incdir)/pkgconf/infra.h \ + $(ecos_infra_incdir)/pkgconf/hostinfra.h \ + $(ecos_infra_incdir)/cyg/infra/cyg_type.h + + +cdlcore_headers := cdlconfig.h cdlcore.hxx +cdl_headers := $(cdlcore_headers) cdl.hxx +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/../../acsupport/mkinstalldirs +CONFIG_HEADER = cdlconfig.h +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +libcdl_a_LIBADD = +libcdl_a_OBJECTS = interp.$(OBJEXT) expr.$(OBJEXT) func.$(OBJEXT) \ +refer.$(OBJEXT) cdlmisc.$(OBJEXT) conflict.$(OBJEXT) property.$(OBJEXT) \ +parse.$(OBJEXT) base.$(OBJEXT) value.$(OBJEXT) build.$(OBJEXT) \ +dialog.$(OBJEXT) wizard.$(OBJEXT) interface.$(OBJEXT) \ +transact.$(OBJEXT) infer.$(OBJEXT) database.$(OBJEXT) config.$(OBJEXT) \ +package.$(OBJEXT) component.$(OBJEXT) option.$(OBJEXT) +AR = ar +CXXFLAGS = @CXXFLAGS@ +CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ +HEADERS = $(include_HEADERS) + +DIST_COMMON = ./stamp-h.in ChangeLog Makefile.am Makefile.in TODO \ +acconfig.h acinclude.m4 aclocal.m4 config.h.in configure configure.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +DEP_FILES = .deps/base.P .deps/build.P .deps/cdlmisc.P \ +.deps/component.P .deps/config.P .deps/conflict.P .deps/database.P \ +.deps/dialog.P .deps/expr.P .deps/func.P .deps/infer.P \ +.deps/interface.P .deps/interp.P .deps/option.P .deps/package.P \ +.deps/parse.P .deps/property.P .deps/refer.P .deps/transact.P \ +.deps/value.P .deps/wizard.P +SOURCES = $(libcdl_a_SOURCES) +OBJECTS = $(libcdl_a_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .cxx .o .obj .s +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 + cd $(srcdir) && $(ACLOCAL) + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +cdlconfig.h: stamp-h + @if test ! -f $@; then \ + rm -f stamp-h; \ + $(MAKE) stamp-h; \ + else :; fi +stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=cdlconfig.h:config.h.in \ + $(SHELL) ./config.status + @echo timestamp > stamp-h 2> /dev/null +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in + @if test ! -f $@; then \ + rm -f $(srcdir)/stamp-h.in; \ + $(MAKE) $(srcdir)/stamp-h.in; \ + else :; fi +$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null + +mostlyclean-hdr: + +clean-hdr: + +distclean-hdr: + -rm -f cdlconfig.h + +maintainer-clean-hdr: + +mostlyclean-noinstLIBRARIES: + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +distclean-noinstLIBRARIES: + +maintainer-clean-noinstLIBRARIES: + +# FIXME: We should only use cygpath when building on Windows, +# and only if it is available. +.c.obj: + $(COMPILE) -c `cygpath -w $<` + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + -rm -f *.$(OBJEXT) + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +libcdl.a: $(libcdl_a_OBJECTS) $(libcdl_a_DEPENDENCIES) + -rm -f libcdl.a + $(AR) cru libcdl.a $(libcdl_a_OBJECTS) $(libcdl_a_LIBADD) + $(RANLIB) libcdl.a +.cxx.o: + $(CXXCOMPILE) -c $< +.cxx.obj: + $(CXXCOMPILE) -c `cygpath -w $<` + +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(includedir) + @list='$(include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ + echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p"; \ + $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + list='$(include_HEADERS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(includedir)/$$p; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" != "." || dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp + +%.o: %.cxx + @echo '$(CXXCOMPILE) -c $<'; \ + $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.cxx + @echo '$(LTCXXCOMPILE) -c $<'; \ + $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +all-recursive-am: cdlconfig.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +install-exec-am: install-exec-local +install-exec: install-exec-recursive + +install-data-am: install-includeHEADERS +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: uninstall-includeHEADERS +uninstall: uninstall-recursive +all-am: Makefile $(LIBRARIES) $(HEADERS) cdlconfig.h all-local +all-redirect: all-recursive-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + $(mkinstalldirs) $(DESTDIR)$(includedir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-hdr mostlyclean-noinstLIBRARIES \ + mostlyclean-compile mostlyclean-tags mostlyclean-depend \ + mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-hdr clean-noinstLIBRARIES clean-compile clean-tags \ + clean-depend clean-generic mostlyclean-am clean-local + +clean: clean-recursive + +distclean-am: distclean-hdr distclean-noinstLIBRARIES distclean-compile \ + distclean-tags distclean-depend distclean-generic \ + clean-am + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-hdr \ + maintainer-clean-noinstLIBRARIES \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-depend maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ +mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ +clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile uninstall-includeHEADERS \ +install-includeHEADERS install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck all-recursive-am install-exec-local \ +install-exec-am install-exec install-data-am install-data install-am \ +install uninstall-am uninstall all-local all-redirect all-am all \ +installdirs-am installdirs mostlyclean-generic distclean-generic \ +clean-generic maintainer-clean-generic clean mostlyclean distclean \ +maintainer-clean + + +@MSVC_TRUE@all-local: cdl.lib + +@MSVC_TRUE@cdl.lib: libcdl.a +@MSVC_TRUE@ $(INSTALL) $< $@ + +@MSVC_TRUE@clean-local: +@MSVC_TRUE@ $(RM) cdl.lib + +@MSVC_TRUE@install-exec-local: all-local +@MSVC_TRUE@ $(mkinstalldirs) $(DESTDIR)$(libdir) +@MSVC_TRUE@ $(INSTALL) cdl.lib $(DESTDIR)$(libdir)/cdl.lib + +@MSVC_FALSE@all-local: +@MSVC_FALSE@clean-local: +@MSVC_FALSE@install-exec-local: libcdl.a +@MSVC_FALSE@ $(mkinstalldirs) $(DESTDIR)$(libdir) +@MSVC_FALSE@ $(INSTALL) libcdl.a $(DESTDIR)$(libdir)/libcdl.a + +interp.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +expr.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +infer.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +func.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +refer.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +cdlmisc.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +conflict.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +property.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +parse.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +base.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +value.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +build.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +dialog.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +wizard.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +interface.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +transact.$(OBJEXT) : Makefile $(cdlcore_headers) $(infra_headers) + +database.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + +config.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + +package.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + +component.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + +option.$(OBJEXT) : Makefile $(cdl_headers) $(infra_headers) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tools/src/libcdl/TODO b/tools/src/libcdl/TODO new file mode 100644 index 00000000..950112c0 --- /dev/null +++ b/tools/src/libcdl/TODO @@ -0,0 +1,235 @@ + TODO List + --------- + +Minor +----- + +1) savefile support. Add option handling to the remaining savefile + commands, even if no options are currently defined. + +2) remember unrecognised options so that they can be written back + when the savefile is regenerated. Perhaps add option details + to the header? + +3) allow re-parenting below "". Make the orphans container disabled? + +4) get limbo working + +5) make cdl_interfaces into containers? How about cdl_options as well, + to avoid reparenting problems? + + cdl_interfaces as containers is actually a problem because interfaces + are part of the core, and hence do not know about the existence of + options and components. + +6) allow components and options to be used interchangeably in savefiles. + +7) ecosconfig, create a paths file with details of the source tree + location etc? How about reporting the paths? + + > Huge> How about: put information about the source tree into the savefile BUT you + > Huge> can put + > Huge> ecosconfig --srcdir=/home/hmt/work/ecc/net/ecc/ecc + > Huge> and it'll say "Oi! You've changed the repository! Override [y/n]?" + > Huge> That lets you move them 'round. + > + > That is a possibility, but I am reluctant to add any interactive + > facilities to ecosconfig just yet + + OK, instead: + % ecosconfig --srcdir=/home/hmt/work/ecc/net/ecc/ + ecosconfig: Oi! You've changed the repository! Quitting. + ecosconfig: [Hint: Use --new-srcdir to override.] + % ecosconfig --new-srcdir=/home/hmt/work/ecc/net/ecc/ + ecosconfig: new repository selected: /home/hmt/work/ecc/net/ecc/ + % _ + There's interactive and interactive... ;-) + [*enable anyone? ;-)] + +8) savefiles, if an interface has no implementors then say so. + +9) CDL filenames in the savefile? This might be useful for people + wanting to look at the CDL sources, although all the interesting + information should already be in the savefile. + +10) what happens if a source file is listed for two separate options? + +11) define -format="\\\"%s\\\"" XYZ + This seems to do the wrong thing. Consider: + + cdl_option CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE { + define -format="\\\"%s\\\"" XYZ + ... + } + + The output is: + + #define CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE "16" + #define XYZ_16 + + BLV - may have been fixed on Feb 14th + +12) define -format="\"%s\"" XYZ + + This gives an internal error. Should it? + +13) make-object, check for priorities less than 200. It is not + sensible to build an object after the library has been + constructed. Also check that the target is a .o file. + +14) exported header files. Suppress obvious problems such as + CVS subdirectories and files ending with ~. See pkgconf::locate_files. + +15) diagnostics for inappropriate templates, e.g. the stubs template on simulators. + +16) custom build steps and generating exported header files. + + Priorities of custom build steps that should go before header file + generation? + Use of include_files property. + +17) what happens when several packages specify the same define_header? + +18) evalexception conflicts. What should happen if the node is disabled or inactive? + Especially if it is the default_value expression that is causing the problem. + +19) add diagnostic callback support to the inference engine so that I + can figure out what is going on. + +20) make version comparison completely case insensitive, to avoid + problems on some file systems. + +21) configure magic to cope with Debian TCL organization. + See http://sourceware.cygnus.com/ml/ecos-discuss/2000-06/msg00094.html + +22) add version number #define's to pkgconf/system.h, to allow + application code to adapt to different versions of a package. + http://sourceware.cygnus.com/ml/ecos-discuss/2000-06/msg00140.html + +Intermediate +------------ + +1) integrate the makefile generation support into libcdl. + +2) implement the Tcl interface to the CDL data, especially tcl_get + and the appropriate Tcl variables. + +3) full definition of custom build steps and the build procedure + generally, including working out what should happen for + compiler flags. + + Dependency analysis in custom build steps. + +4) get safe interpreters working, and make sure that only safe + file I/O operations are permitted. + +5) Improve diagnostic messages, including line numbers. + +6) extend the inference engine to support more operators. + +7) support disabled conflicts. + +8) full implementation of interfaces, including automatic creation. + +9) text aliases for legal_values lists? + +10) savefiles do not list `implements' properties + +11) ecosconfig verbosity. Add --silent and --verbose modes? + +12) header file dependencies. From Jesper and others: + + One alternative way of handling this is the way it's done in Linux + (which happened around 2.2.?, I think, and made for some + phenomenal build speedups): + + grep each source file foo.c for use of CYGxxx_ macros. Cat this list + into .foo.c.config_deps (or similar) with proper mangling so it + becomes a GCC dependency file (for foo.c) on "option files". + + Each option, opt_name, thus adds a dependency on + $build/config_deps/CYGxxx_opt_name. Whenever changing the config, + touch the relevant config_deps/ files. + + In short: when making general source file dependencies, exclude any + dependencies on $install/include/pkgconf/* and replace with + appropriate $build/config_deps/* dependencies. That makes for one + smoooking fast dependency system. It doesn't get finer-grained than + this. + +13) friend packages, allowing one package to see the implementation + details of another. Also, handle documentation links between these. + +14) API clean-up. Eliminate the confusion between "value" and the data part of + a bool/data pair. + +Major +----- + +1) implement and integrate a proper infrastructure. Generally sort out + the host-side build tree, including making libcdl into a Tcl + package. + +2) sort out the test suites. + +3) std::bad_alloc exceptions. These can happen just about anywhere. + Lots of places need to be hardened against this to avoid memory + leaks. A completely robust system is probably not possible + because cancelling a transaction may involve memory allocation. + +4) general code walk through to look for obvious inefficiencies, e.g. + passing things by value rather than by reference. + +5) generalise the build support for other languages such as Java. + +6) implement a proper database and associated admin tool. + +7) improved autoconfiscation support, in particular finding the + appropriate platform-specific library support. + +8) a suitable naming convention for data members and for arguments to + inline functions should be adopted, to prevent collisions with + #define'd symbols in application land. Possibilities include + _X_ and __X. + +9) work out how to extend Tcl to provide line number information. + +10) i18n support. + +11) currently the data type cdl_int is defined to be 64 bits. This should + probably be changed to arbitrary precision, so that e.g. processors + which can perform 128 bit arithmetic can be adequately supported. + +12) extend the CDL expression syntax with e.g. string operators. This + will impact the inference engine. + +13) add an interactive mode to ecosconfig resolve, allowing users to + confirm or cancel solutions? + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + diff --git a/tools/src/libcdl/acconfig.h b/tools/src/libcdl/acconfig.h new file mode 100644 index 00000000..53e865d0 --- /dev/null +++ b/tools/src/libcdl/acconfig.h @@ -0,0 +1,60 @@ +#ifndef CYGONCE_LIBCDL_CONFIG_H +# define CYGONCE_LIBCDL_CONFIG_H + +//====================================================================== +// +// acconfig.h +// +// Configuration header for libcdl +// +//====================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//====================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1998/12/17 +// Version: 0.01 +// +//####DESCRIPTIONEND#### +//====================================================================== + +#undef PACKAGE +#undef VERSION +#undef CYGNUM_LIBCDL_VERSION + +#undef CYGDBG_USE_ASSERTS +#undef CYGDBG_INFRA_DEBUG_PRECONDITIONS +#undef CYGDBG_INFRA_DEBUG_POSTCONDITIONS +#undef CYGDBG_INFRA_DEBUG_INVARIANTS +#undef CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS + +#undef CYGDBG_USE_TRACING +#undef CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS + +#endif // CYGONCE_LIBCDL_CONFIG_H +// End of config.h diff --git a/tools/src/libcdl/acinclude.m4 b/tools/src/libcdl/acinclude.m4 new file mode 100644 index 00000000..b75af115 --- /dev/null +++ b/tools/src/libcdl/acinclude.m4 @@ -0,0 +1,44 @@ +dnl Process this file with aclocal to get an aclocal.m4 file. Then +dnl process that with autoconf. +dnl ==================================================================== +dnl +dnl acinclude.m4 +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 1998/12/16 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl Access shared macros. +dnl AM_CONDITIONAL needs to be mentioned here or else aclocal does not +dnl incorporate the macro into aclocal.m4 +sinclude(../../acsupport/acinclude.m4) diff --git a/tools/src/libcdl/aclocal.m4 b/tools/src/libcdl/aclocal.m4 new file mode 100644 index 00000000..2eb49eaa --- /dev/null +++ b/tools/src/libcdl/aclocal.m4 @@ -0,0 +1,205 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4-p5 + +dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +dnl Process this file with aclocal to get an aclocal.m4 file. Then +dnl process that with autoconf. +dnl ==================================================================== +dnl +dnl acinclude.m4 +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 1998/12/16 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl Access shared macros. +dnl AM_CONDITIONAL needs to be mentioned here or else aclocal does not +dnl incorporate the macro into aclocal.m4 +sinclude(../../acsupport/acinclude.m4) + +# Define a conditional. + +AC_DEFUN([AM_CONDITIONAL], +[AC_SUBST($1_TRUE) +AC_SUBST($1_FALSE) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi]) + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_REQUIRE([AC_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN([AM_MISSING_PROG], +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + +# Add --enable-maintainer-mode option to configure. +# From Jim Meyering + +# serial 1 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT($USE_MAINTAINER_MODE) + AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + +AC_DEFUN([AM_CONFIG_HEADER], +[AC_PREREQ([2.12]) +AC_CONFIG_HEADER([$1]) +dnl When config.status generates a header, we must update the stamp-h file. +dnl This file resides in the same directory as the config header +dnl that is generated. We must strip everything past the first ":", +dnl and everything past the last "/". +AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl +ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, +<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, +<>; do + case " <<$>>CONFIG_HEADERS " in + *" <<$>>am_file "*<<)>> + echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "<<$>>am_indx" + 1` +done<<>>dnl>>) +changequote([,]))]) + diff --git a/tools/src/libcdl/base.cxx b/tools/src/libcdl/base.cxx new file mode 100644 index 00000000..d930da15 --- /dev/null +++ b/tools/src/libcdl/base.cxx @@ -0,0 +1,3708 @@ +//{{{ Banner + +//============================================================================ +// +// base.cxx +// +// Implementations of the various base classes +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1999/02/18 +// Version: 0.02 +// Description: libcdl defines a hierarchy of base classes, used for +// constructing higher-level entities such as options +// and packages. +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ #include's + +// ---------------------------------------------------------------------------- +#include "cdlconfig.h" + +// Get the infrastructure types, assertions, tracing and similar +// facilities. +#include +#include + +// defines everything implemented in this module. +// It implicitly supplies , and because +// the class definitions rely on these headers. +#include + +//}}} + +//{{{ Statics + +// ---------------------------------------------------------------------------- +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlNodeBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlContainerBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlLoadableBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlToplevelBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlUserVisibleBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlParentableBody); + +//}}} +//{{{ CdlNodeBody + +//{{{ Construction + +// ---------------------------------------------------------------------------- +// The real constructor takes a string argument and should get invoked first. +// Because of the way virtual inheritance is used it is also necessary to have +// a default constructor, but that need not do anything. A newly constructed +// object does not yet live in the hierarchy. + +CdlNodeBody::CdlNodeBody(std::string name_arg) +{ + CYG_REPORT_FUNCNAME("CdlNode:: constructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITIONC("" != name_arg); + + name = name_arg; + parent = 0; + owner = 0; + toplevel = 0; + active = false; + remove_node_container_position = -1; + + // The STL containers will take care of themselves. + + cdlnodebody_cookie = CdlNodeBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlNodeBody::CdlNodeBody() +{ + CYG_PRECONDITION_THISC(); +} + +//}}} +//{{{ Destructor + +// ---------------------------------------------------------------------------- +// By the time the destructor gets invoked the node should already +// have been unbound and removed from the hierarchy. + +CdlNodeBody::~CdlNodeBody() +{ + CYG_REPORT_FUNCNAME("CdlNode:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + // Make sure that the node is unbound: all references to and from + // this node should have been destroyed already inside a + // transaction. + CYG_PRECONDITIONC(0 == referrers.size()); + + // Make sure that the node has been removed from the hierarchy + CYG_PRECONDITIONC(0 == toplevel); + CYG_PRECONDITIONC(0 == owner); + CYG_PRECONDITIONC(0 == parent); + + // Destroy all properties associated with this object. + std::vector::iterator prop_i; + for (prop_i= properties.begin(); prop_i != properties.end(); prop_i++) { + delete *prop_i; + *prop_i = 0; + } + properties.clear(); + + cdlnodebody_cookie = CdlNodeBody_Invalid; + name = ""; + active = false; + unsupported_savefile_strings.clear(); + + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Trivial data access + +// ---------------------------------------------------------------------------- + +std::string +CdlNodeBody::get_name() const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_name"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return name; +} + +void +CdlNodeBody::set_name(std::string name_arg) +{ + CYG_REPORT_FUNCNAME("CdlNode::set_name"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + name = name_arg; + + CYG_REPORT_RETURN(); +} + +CdlContainer +CdlNodeBody::get_parent() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::get_parent", "parent %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlContainer result = parent; + CYG_REPORT_RETVAL(result); + return result; +} + +CdlLoadable +CdlNodeBody::get_owner() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::get_owner", "owner %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlLoadable result = owner; + CYG_REPORT_RETVAL(result); + return result; +} + +CdlToplevel +CdlNodeBody::get_toplevel() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::get_toplevel", "toplevel %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlToplevel result = toplevel; + CYG_REPORT_RETVAL(result); + return result; +} + +std::string +CdlNodeBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "node"; +} + +//}}} +//{{{ The properties vector + +// ---------------------------------------------------------------------------- +// Trivial manipulation of the properties vector. + +const std::vector& +CdlNodeBody::get_properties() const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_properties"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return properties; +} + +CdlProperty +CdlNodeBody::get_property(std::string id) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::get_property", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlProperty result = 0; + std::vector::const_iterator prop_i; + for (prop_i = properties.begin(); prop_i != properties.end(); prop_i++) { + if ((*prop_i)->get_property_name() == id) { + result = *prop_i; + break; + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +void +CdlNodeBody::get_properties(std::string id, std::vector& result) const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_properties"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::vector::const_iterator prop_i; + for (prop_i = properties.begin(); prop_i != properties.end(); prop_i++) { + if ((*prop_i)->get_property_name() == id) { + result.push_back(*prop_i); + } + } + + CYG_REPORT_RETURN(); +} + +std::vector +CdlNodeBody::get_properties(std::string id) const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_properties"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::vector result; + std::vector::const_iterator prop_i; + for (prop_i = properties.begin(); prop_i != properties.end(); prop_i++) { + if ((*prop_i)->get_property_name() == id) { + result.push_back(*prop_i); + } + } + + CYG_REPORT_RETURN(); + return result; +} + +bool +CdlNodeBody::has_property(std::string id) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::has_property", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + bool result = false; + std::vector::const_iterator prop_i; + for (prop_i = properties.begin(); prop_i != properties.end(); prop_i++) { + if ((*prop_i)->get_property_name() == id) { + result = true; + break; + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +int +CdlNodeBody::count_properties(std::string id) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::count_properties", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + int result = 0; + std::vector::const_iterator prop_i; + for (prop_i = properties.begin(); prop_i != properties.end(); prop_i++) { + if ((*prop_i)->get_property_name() == id) { + result++; + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Conflicts + +// ---------------------------------------------------------------------------- +// Provide access to the current set of conflicts. This operates on the global +// state, more commonly these changes happen in the context of a transaction. + +void +CdlNodeBody::get_conflicts(std::vector& result) const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_conflicts"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + const std::list& conflicts = toplevel->get_all_conflicts(); + std::list::const_iterator conf_i; + for (conf_i = conflicts.begin(); conf_i != conflicts.end(); conf_i++) { + if ((*conf_i)->get_node() == this) { + result.push_back(*conf_i); + } + } + + CYG_REPORT_RETURN(); +} + +void +CdlNodeBody::get_conflicts(bool (*fn)(CdlConflict), std::vector& result) const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_conflicts"); + CYG_REPORT_FUNCARG2XV(this, fn); + CYG_PRECONDITION_THISC(); + CYG_CHECK_FUNC_PTRC(fn); + + const std::list& conflicts = toplevel->get_all_conflicts(); + std::list::const_iterator conf_i; + for (conf_i = conflicts.begin(); conf_i != conflicts.end(); conf_i++) { + if (((*conf_i)->get_node() == this) && ((*fn)(*conf_i))) { + result.push_back(*conf_i); + } + } + + CYG_REPORT_RETURN(); +} + +void +CdlNodeBody::get_structural_conflicts(std::vector& result) const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_structural_conflicts"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + const std::list& conflicts = toplevel->get_all_structural_conflicts(); + std::list::const_iterator conf_i; + for (conf_i = conflicts.begin(); conf_i != conflicts.end(); conf_i++) { + if ((*conf_i)->get_node() == this) { + result.push_back(*conf_i); + } + } + + CYG_REPORT_RETURN(); +} + +void +CdlNodeBody::get_structural_conflicts(bool (*fn)(CdlConflict), std::vector& result) const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_conflicts"); + CYG_REPORT_FUNCARG2XV(this, fn); + CYG_PRECONDITION_THISC(); + CYG_CHECK_FUNC_PTRC(fn); + + const std::list& conflicts = toplevel->get_all_structural_conflicts(); + std::list::const_iterator conf_i; + for (conf_i = conflicts.begin(); conf_i != conflicts.end(); conf_i++) { + if (((*conf_i)->get_node() == this) && ((*fn)(*conf_i))) { + result.push_back(*conf_i); + } + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Referrers + +// ---------------------------------------------------------------------------- +// And access to the referrers vector. +const std::vector& +CdlNodeBody::get_referrers() const +{ + CYG_REPORT_FUNCNAME("CdlNode::get_referrers"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return referrers; +} + +//}}} +//{{{ Property parsers + +// ---------------------------------------------------------------------------- +// Property parsing. For now there are now properties guaranteed to be +// associated with every node. This may change in future, e.g. +// internal debugging-related properties. +void +CdlNodeBody::add_property_parsers(std::vector& parsers) +{ + CYG_REPORT_FUNCNAME("CdlNode::add_property_parsers"); + CYG_REPORT_RETURN(); +} + +void +CdlNodeBody::check_properties(CdlInterpreter interp) +{ + CYG_REPORT_FUNCNAME("CdlNode::check_properties"); + CYG_REPORT_FUNCARG2XV(this, interp); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ is_active() etc. + +// ---------------------------------------------------------------------------- +// Associated with every node is a boolean that holds the current +// "active" state. Changes to this happen only at transaction +// commit time. + +bool +CdlNodeBody::is_active() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::is_active", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + bool result = active; + CYG_REPORT_RETVAL(result); + return result; +} + +bool +CdlNodeBody::is_active(CdlTransaction transaction) +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::is_active", "result %d"); + CYG_REPORT_FUNCARG2XV(this, transaction); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_ZERO_OR_CLASSC(transaction); + + bool result; + if (0 != transaction) { + result = transaction->is_active(this); + } else { + result = active; + } + CYG_REPORT_RETVAL(result); + return result; +} + +// This virtual member function allows nodes to check whether or not +// they should be active. Derived classes may impose additional +// constraints. +bool +CdlNodeBody::test_active(CdlTransaction transaction) +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::test_active", "result %d"); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(transaction); + + bool result = false; + if ((0 != parent) && (transaction->is_active(parent))) { + CdlValuable valuable = dynamic_cast(parent); + if (0 == valuable) { + result = true; + } else if (valuable->is_enabled(transaction)) { + result = true; + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Propagation support + +// ---------------------------------------------------------------------------- +// In the base class nothing needs doing for propagation. +void +CdlNodeBody::update(CdlTransaction transaction, CdlUpdate change) +{ + CYG_REPORT_FUNCNAME("CdlNode::update"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(transaction); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Persistence support + +// ---------------------------------------------------------------------------- +// The CdlNode::save() member should never get invoked directly, it should +// get invoked indirectly from e.g. CdlOption::save(). Normally there is +// no information associated with a node that ends up in a save file +// (the calling code will have take care of the name etc.). However there +// is support in the library for storing application-specific data in the +// save file, for example GUI information, and this information must be +// preserved even if it is not recognised. Savefiles are self-describing, +// they contain details of all the commands that are applicable. +// CdlNode::save() is responsible for outputting the unrecognised strings +// to the save file. + +void +CdlNodeBody::save(CdlInterpreter interp, Tcl_Channel chan, int indentation, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlNode::save"); + CYG_REPORT_FUNCARG5XV(this, interp, chan, indentation, minimal); + + if (unsupported_savefile_strings.size() != 0) { + // We should already be inside the body of a suitable command, + // e.g. cdl_option xyz { ... } + // CdlToplevel::savefile_handle_unsupported() is responsible for + // putting suitably formatted strings into the + // unsupported_savefile_strings vector, so all that is needed here + // is to dump those strings to the channel. + std::string data = "\n"; + std::vector::const_iterator str_i; + for (str_i = unsupported_savefile_strings.begin(); str_i != unsupported_savefile_strings.end(); str_i++) { + data += std::string(indentation, ' ') + *str_i + " ;\n"; + } + interp->write_data(chan, data); + } + + CYG_UNUSED_PARAM(bool, minimal); + CYG_REPORT_RETURN(); +} + +bool +CdlNodeBody::has_additional_savefile_information() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlNode::has_additional_savefile_information", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + bool result = (0 != unsupported_savefile_strings.size()); + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ check_this() + +// ---------------------------------------------------------------------------- +// Because of multiple and virtual inheritance, check_this() may +// get called rather a lot. Unfortunately all of the checks are +// useful. + +bool +CdlNodeBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlNodeBody_Magic != cdlnodebody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + + if ("" == name) { + return false; + } + + // It is hard to validate the toplevel, owner, and parent + // fields. + // + // 1) when a node is newly created all three fields will + // be null. + // 2) the toplevel may be null if the node is in the process + // of being removed, e.g. during an unload operation. + // The node should still have a valid owner, and will + // have a parent unless the node is also the loadable. + // 3) some nodes are special, e.g. the orphans container, + // and do not have an owner. + // + // So the following combinations can occur: + // Toplevel Owner Parent + // 0 0 0 Creation & toplevel + // 0 Valid 0 Loadable being unloaded + // 0 Valid Valid Node being unloaded + // Valid 0 Valid Orphans container + // Valid Valid Valid Any node + if (0 != toplevel) { + if (0 == parent) { + return false; + } + } + + switch(zeal) { + case cyg_system_test : + case cyg_extreme : + { + if ((0 != toplevel) && (toplevel != this)) { + if (!toplevel->check_this(cyg_quick)) { + return false; + } + if (toplevel->lookup_table.find(name) == toplevel->lookup_table.end()) { + return false; + } + } + if (0 != parent) { + if (!parent->check_this(cyg_quick)) { + return false; + } + if (std::find(parent->contents.begin(), parent->contents.end(), this) == parent->contents.end()) { + return false; + } + } + if (0 != owner) { + if (!owner->check_this(cyg_quick)) { + return false; + } + if (std::find(owner->owned.begin(), owner->owned.end(), this) == owner->owned.end()) { + return false; + } + } + std::vector::const_iterator prop_i; + for (prop_i = properties.begin(); prop_i != properties.end(); prop_i++) { + if (!(*prop_i)->check_this(cyg_quick)) { + return false; + } + } + std::vector::const_iterator ref_i; + for (ref_i = referrers.begin(); ref_i != referrers.end(); ref_i++) { + if (!ref_i->check_this(cyg_quick)) { + return false; + } + } + } + case cyg_thorough : + case cyg_quick : + case cyg_trivial : + case cyg_none : + default : + break; + } + + return true; +} + +//}}} + +//}}} +//{{{ CdlContainerBody + +//{{{ Constructors + +// ---------------------------------------------------------------------------- +// A container simply holds other nodes in a hierarchy. Most +// containers correspond to data in CDL scripts, but there are +// exceptions. For example, if an option is reparented below some +// package or component that is not yet known then it can instead be +// reparented into an "orphans" container immediately below the +// toplevel. +// +// Adding and removing entries to a container is done inside the +// CdlToplevel add_node() and remove_node() members. These will update +// all the fields needed to keep the hierarchy consistent. This +// means that the CdlContainer class itself provides only limited +// functionality. + +CdlContainerBody::CdlContainerBody() +{ + CYG_REPORT_FUNCNAME("CdlContainer:: default constructor"); + CYG_REPORT_FUNCARG1XV(this); + + cdlcontainerbody_cookie = CdlContainerBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +// This variant is for internal use, to allow the library to create +// containers that do not correspond to CDL entities such as +// the orphans container. +CdlContainerBody::CdlContainerBody(std::string name_arg) + : CdlNodeBody(name_arg) +{ + CYG_REPORT_FUNCNAME("CdlContainerBody:: constructor (name)"); + CYG_REPORT_FUNCARG1XV(this); + + cdlcontainerbody_cookie = CdlContainerBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Destructor + +// ---------------------------------------------------------------------------- + +CdlContainerBody::~CdlContainerBody() +{ + CYG_REPORT_FUNCNAME("CdlContainer:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + // Containers should always be empty by the time they + // get deleted. The toplevel and loadable destructors should + // guarantee this. + CYG_ASSERTC(0 == contents.size()); + + cdlcontainerbody_cookie = CdlContainerBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Accessing the contents + +// ---------------------------------------------------------------------------- +// Simple contents access facilities, including searching. Note that +// the toplevel class maintains a map, which will usually +// be more efficient. + +const std::vector& +CdlContainerBody::get_contents() const +{ + CYG_REPORT_FUNCNAME("CdlContainer::get_contents"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return contents; +} + +bool +CdlContainerBody::contains(CdlConstNode node, bool recurse) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlContainer::contains (node)", "result %d"); + CYG_REPORT_FUNCARG3XV(this, node, recurse); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(node); + + bool result = false; + std::vector::const_iterator node_i; + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + if (node == *node_i) { + result = true; + break; + } + if (recurse) { + CdlConstContainer child = dynamic_cast(*node_i); + if ((0 != child) && child->contains(node, true)) { + result = true; + break; + } + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +bool +CdlContainerBody::contains(const std::string name, bool recurse) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlContainer::contains (name)", "result %d"); + CYG_REPORT_FUNCARG2XV(this, recurse); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != name); + + bool result = false; + std::vector::const_iterator node_i; + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + if ((*node_i)->get_name() == name) { + result = true; + break; + } + if (recurse) { + CdlConstContainer child = dynamic_cast(*node_i); + if ((0 != child) && child->contains(name, true)) { + result = true; + break; + } + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +CdlNode +CdlContainerBody::find_node(const std::string name, bool recurse) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlContainer::find_node", "result %p"); + CYG_REPORT_FUNCARG2XV(this, recurse); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != name); + + CdlNode result = 0; + std::vector::const_iterator node_i; + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + if ((*node_i)->get_name() == name) { + result = *node_i; + break; + } + if (recurse) { + CdlConstContainer child = dynamic_cast(*node_i); + if (0 != child) { + result = child->find_node(name, true); + if (0 != result) { + break; + } + } + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Misc + +// ---------------------------------------------------------------------------- + +std::string +CdlContainerBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlContainer::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "container"; +} + +//}}} +//{{{ Propagation + +// ---------------------------------------------------------------------------- +// If a container becomes active and is enabled then it is necessary +// to check all the children in case they want to become active as well. + +void +CdlContainerBody::update(CdlTransaction transaction, CdlUpdate change) +{ + CYG_REPORT_FUNCNAME("CdlContainer::update"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(transaction); + + if ((CdlUpdate_ActiveChange != change) && (CdlUpdate_ValueChange != change)) { + CYG_REPORT_RETURN(); + return; + } + + if (transaction->is_active(this)) { + // The container has become active. It is necessary to check + // all the children. If any of them should be active as well + // but are not then this needs to change. + std::vector::iterator node_i; + + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + bool old_state = transaction->is_active(*node_i); + bool new_state = (*node_i)->test_active(transaction); + if (old_state != new_state) { + transaction->set_active(*node_i, new_state); + } + } + } else { + // The container has become inactive. Any children that were + // active should also become inactive. + std::vector::iterator node_i; + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + if (transaction->is_active(*node_i)) { + transaction->set_active(*node_i, false); + } + } + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Persistence + +// ---------------------------------------------------------------------------- +// This member function is invoked while traversing the hierarchy. +// The container itself will have been saved already, this member +// is responsible only for the contents. There are marker comments +// in the output file to indicate a new level in the hierarchy. +// +// Note that this member can also be invoked for the "orphans" container. +// That container will not appear in the save file, but its contents +// will. + +void +CdlContainerBody::save(CdlInterpreter interp, Tcl_Channel chan, int indentation, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlContainer::save"); + CYG_REPORT_FUNCARG4XV(this, interp, chan, indentation); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + CYG_PRECONDITIONC(0 == indentation); + + if (0 != contents.size()) { + if (!minimal) { + interp->write_data(chan, "# >\n"); + } + std::vector::const_iterator node_i; + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + (*node_i)->save(interp, chan, indentation, minimal); + } + if (!minimal) { + interp->write_data(chan, "# <\n"); + } + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ check_this() + +// ---------------------------------------------------------------------------- +bool +CdlContainerBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlContainerBody_Magic != cdlcontainerbody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + + if (cyg_extreme == zeal) { + std::vector::const_iterator node_i; + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + if (!((*node_i)->check_this(cyg_quick))) { + return false; + } + } + } + return CdlNodeBody::check_this(zeal); +} + +//}}} + +//}}} +//{{{ CdlLoadableBody + +//{{{ Constructor + +// ---------------------------------------------------------------------------- +// A loadable object keeps track of all the nodes read in from a +// particular script, in an "owned" vector. Simply keeping things in a +// hierarchy is not enough because of possible re-parenting. Actual +// updates of the owned vector happen inside the CdlToplevel +// add_node() and remove_node() family. + +CdlLoadableBody::CdlLoadableBody(CdlToplevel toplevel, std::string dir) + : CdlContainerBody() +{ + CYG_REPORT_FUNCNAME("CdlLoadable:: constructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_CLASSC(toplevel); + + // Initialize enough of the object to support check_this() + directory = dir; + interp = 0; + remove_node_loadables_position = -1; + cdlloadablebody_cookie = CdlLoadableBody_Magic; + + // The owned vector takes care of itself. It is necessary + // to create a new slave interpreter, using the master + // interpreter from the toplevel. + CdlInterpreter master = toplevel->get_interpreter(); + CYG_ASSERTC(0 != master); + interp = master->create_slave(this, false); + interp->push_context(this->get_name()); + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +// Needed by derived classes, but should never actually be used. +CdlLoadableBody::CdlLoadableBody() +{ + CYG_FAIL("CdlLoadable default constructor should never get invoked"); +} + +//}}} +//{{{ Destructor + +// ---------------------------------------------------------------------------- +// The loadable destructor. This gets invoked from two places: after an +// unsuccessful load operation, and from inside the transaction commit +// code. Either way most of the clean-up will have happened already: +// all the nodes will have been removed from the toplevel's hierarchy, +// and all property references to and from this loadable will have been +// unbound. +// +// Since all nodes belonging to the loadable are also present in +// the owned vector, they must be destroyed before this destructor +// completes. Hence clearing out the contents cannot be left to +// the base CdlContainer destructor. + +CdlLoadableBody::~CdlLoadableBody() +{ + CYG_REPORT_FUNCNAME("CdlLoadable:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + // Make sure that the loadable has already been removed from the + // hierarchy: it should not have a toplevel or a parent. + CYG_PRECONDITIONC(0 == toplevel); + CYG_PRECONDITIONC(0 == parent); + + // Containers must have been created before any of their contents. + // The only way to reverse this involves a parent property, but + // all such properties will have been unbound already such that + // the nodes can be safely deleted. The only worry is that + // loadables own themselves. + int i; + for (i = owned.size() - 1; i >= 0; i--) { + CdlNode node = owned[i]; + CYG_LOOP_INVARIANT_CLASSC(node); + + if (node != this) { + CdlToplevelBody::remove_node(this, node->parent, node); + delete node; + } + } + + // Now there should be exactly one entry in the owned vector, + // the loadable itself. We already know that this is no longer + // part of the toplevel and it does not have a parent, so + // the only field we need to worry about is the owner. + CYG_ASSERTC(1 == owned.size()); + CYG_ASSERTC(this == owned[0]); + this->owner = 0; + + // Strictly speaking the owned vector should be clear by now, + // but remove_node() does not actually bother to clear it. + owned.clear(); + + // The loadable should now be empty. It remains to clean up + // a few odds and ends. + cdlloadablebody_cookie = CdlLoadableBody_Invalid; + CYG_ASSERTC(0 == owned.size()); + delete interp; + interp = 0; + directory = ""; + + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Simple information access + +// ---------------------------------------------------------------------------- + +const std::vector& +CdlLoadableBody::get_owned() const +{ + CYG_REPORT_FUNCNAME("CdlLoadable::get_owned"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return owned; +} + +bool +CdlLoadableBody::owns(CdlConstNode node) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlLoadable::owns", "result %d"); + CYG_REPORT_FUNCARG2XV(this, node); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(node); + + bool result = false; + std::vector::const_iterator i = std::find(owned.begin(), owned.end(), node); + if (i != owned.end()) { + result = true; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +CdlInterpreter +CdlLoadableBody::get_interpreter() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlLoadable::get_interpreter", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlInterpreter result = interp; + CYG_REPORT_RETVAL(result); + return result; +} + +std::string +CdlLoadableBody::get_directory() const +{ + CYG_REPORT_FUNCNAME("CdlLoadable::get_directory"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return directory; +} + +//}}} +//{{{ Bind/unbind support + +// ---------------------------------------------------------------------------- +// Binding a loadable. This involves checking every property of every node +// in the loadable, which the properties do themselves by a suitable +// update() virtual function. Next, there may be properties in the +// existing configuration which could not previously be bound: there +// will be structural conflicts for all of these. Once all the pointers +// go to the right places it is possible to calculate the default values +// and generally process the properties. Finally each node's active +// state is checked - the default inactive state will be inappropriate +// in many cases. +// +// FIXME: error recovery? + +void +CdlLoadableBody::bind(CdlTransaction transaction) +{ + CYG_REPORT_FUNCNAME("CdlLoadable::bind"); + CYG_REPORT_FUNCARG2XV(this, transaction); + CYG_INVARIANT_THISC(CdlLoadableBody); + CYG_INVARIANT_CLASSC(CdlTransactionBody, transaction); + + // The loadable must already be part of the hierarchy. + CdlToplevel toplevel = this->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + + // As a first step, bind all references in this loadable. + // This is achieved via a Loaded update. + const std::vector& nodes = this->get_owned(); + std::vector::const_iterator node_i; + for (node_i = nodes.begin(); node_i != nodes.end(); node_i++) { + const std::vector& properties = (*node_i)->get_properties(); + std::vector::const_iterator prop_i; + for (prop_i = properties.begin(); prop_i != properties.end(); prop_i++) { + (*prop_i)->update(transaction, *node_i, 0, CdlUpdate_Loaded); + } + } + + // Next, look for all structural conflicts which are unresolved + // references and which can now be resolved. It is necessary + // to check per-transaction structural conflicts, plus those + // in any parent transactions, plus the global ones. + std::list::const_iterator conf_i; + CdlTransaction current_transaction = transaction; + do { + CYG_ASSERT_CLASSC(current_transaction); + const std::list& new_structural_conflicts = current_transaction->get_new_structural_conflicts(); + + for (conf_i = new_structural_conflicts.begin(); conf_i != new_structural_conflicts.end(); ) { + + CdlConflict conflict = *conf_i++; + CYG_LOOP_INVARIANT_CLASSC(conflict); + + CdlConflict_Unresolved unresolved_conflict = dynamic_cast(conflict); + if ((0 != unresolved_conflict) && !transaction->has_conflict_been_cleared(conflict)) { + CdlNode dest = toplevel->lookup(unresolved_conflict->get_target_name()); + if (0 != dest) { + CdlNode node = unresolved_conflict->get_node(); + CdlProperty prop = unresolved_conflict->get_property(); + prop->update(transaction, node, dest, CdlUpdate_Created); + } + } + } + current_transaction = current_transaction->get_parent(); + } while (0 != current_transaction); + + const std::list& structural_conflicts = toplevel->get_all_structural_conflicts(); + for (conf_i = structural_conflicts.begin(); conf_i != structural_conflicts.end(); ) { + + CdlConflict conflict = *conf_i++; + CYG_LOOP_INVARIANT_CLASSC(conflict); + + CdlConflict_Unresolved this_conflict = dynamic_cast(conflict); + if ((0 != this_conflict) && !transaction->has_conflict_been_cleared(conflict)) { + CdlNode dest = toplevel->lookup(this_conflict->get_target_name()); + if (0 != dest) { + CdlNode node = this_conflict->get_node(); + CdlProperty prop = this_conflict->get_property(); + prop->update(transaction, node, dest, CdlUpdate_Created); + } + } + } + + // Conflict resolution has happened. Next it is time + // to evaluate default_value expressions and the like + // in the new loadable. + for (node_i = nodes.begin(); node_i != nodes.end(); node_i++) { + const std::vector& properties = (*node_i)->get_properties(); + std::vector::const_iterator prop_i; + for (prop_i = properties.begin(); prop_i != properties.end(); prop_i++) { + (*prop_i)->update(transaction, *node_i, 0, CdlUpdate_Init); + } + } + + // Nodes start off inactive. Check each one whether or not it + // should be active. + // NOTE: possibly this should be done via a per-node init + // update instead. + for (node_i = nodes.begin(); node_i != nodes.end(); node_i++) { + bool current_state = transaction->is_active(*node_i); + bool new_state = (*node_i)->test_active(transaction); + if (current_state != new_state) { + transaction->set_active(*node_i, new_state); + } + } + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- + +void +CdlLoadableBody::unbind(CdlTransaction transaction) +{ + CYG_REPORT_FUNCNAME("CdlLoadable::unbind"); + CYG_REPORT_FUNCARG2XV(this, transaction); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(transaction); + + // First take care of all references to nodes in the loadable + // that is disappearing. This involves a Destroyed update. + const std::vector& nodes = this->get_owned(); + std::vector::const_iterator node_i; + for (node_i = nodes.begin(); node_i != nodes.end(); node_i++) { + // The update will remove referrer objects, so it is best + // to work from the back. + std::vector& referrers = (*node_i)->referrers; + std::vector::reverse_iterator ref_i; + for (ref_i = referrers.rbegin(); ref_i != referrers.rend(); ref_i = referrers.rbegin()) { + ref_i->update(transaction, *node_i, CdlUpdate_Destroyed); + CYG_LOOP_INVARIANT(ref_i != referrers.rbegin(), "the vector should have shrunk"); + } + } + + // Now repeat the loop, but unbind references from the unloaded objects + // to ones which are going to stay loaded. This will not cause + // the properties to disappear. + for (node_i = nodes.begin(); node_i != nodes.end(); node_i++) { + const std::vector& properties = (*node_i)->get_properties(); + std::vector::const_iterator prop_i; + for (prop_i = properties.begin(); prop_i != properties.end(); prop_i++) { + (*prop_i)->update(transaction, *node_i, 0, CdlUpdate_Unloading); + } + } + + // Eliminate any conflicts that belong to this loadable. + // FIXME: why is his necessary? Should these conflicts not get + // eliminated by the above property iterations? + std::list::const_iterator conf_i; + const std::list& global_conflicts = toplevel->get_all_conflicts(); + for (conf_i = global_conflicts.begin(); conf_i != global_conflicts.end(); ) { + CdlConflict conflict = *conf_i++; + CYG_LOOP_INVARIANT_CLASSC(conflict); + CdlNode node = conflict->get_node(); + if ((node->get_owner() == this) && !transaction->has_conflict_been_cleared(conflict)) { + transaction->clear_conflict(conflict); + } + } + const std::list& global_structural_conflicts = toplevel->get_all_structural_conflicts(); + for (conf_i = global_structural_conflicts.begin(); conf_i != global_structural_conflicts.end(); ) { + CdlConflict conflict = *conf_i++; + CYG_LOOP_INVARIANT_CLASSC(conflict); + CdlNode node = conflict->get_node(); + if ((node->get_owner() == this) && !transaction->has_conflict_been_cleared(conflict)) { + transaction->clear_conflict(conflict); + } + } + const std::list& transaction_conflicts = transaction->get_new_conflicts(); + for (conf_i = transaction_conflicts.begin(); conf_i != transaction_conflicts.end(); ) { + CdlConflict conflict = *conf_i++; + CYG_LOOP_INVARIANT_CLASSC(conflict); + CdlNode node = conflict->get_node(); + if (node->get_owner() == this) { + transaction->clear_conflict(conflict); + } + } + const std::list& transaction_structural_conflicts = transaction->get_new_structural_conflicts(); + for (conf_i = transaction_structural_conflicts.begin(); conf_i != transaction_structural_conflicts.end(); ) { + CdlConflict conflict = *conf_i++; + CYG_LOOP_INVARIANT_CLASSC(conflict); + CdlNode node = conflict->get_node(); + if (node->get_owner() == this) { + transaction->clear_conflict(conflict); + } + } + + // FIXME: how about cleanup_orphans() + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// These members are invoked for load and unload operations. +// +// Committing a load does not require anything, the loadable has +// already been fully bound and all propagation has happened. + +void +CdlLoadableBody::transaction_commit_load(CdlTransaction transaction, CdlLoadable loadable) +{ + CYG_REPORT_FUNCNAME("CdlLoadable::transaction_commit_load"); + CYG_REPORT_FUNCARG2XV(transaction, loadable); + CYG_PRECONDITION_CLASSC(transaction); + CYG_PRECONDITION_CLASSC(loadable); + + CYG_UNUSED_PARAM(CdlTransaction, transaction); + CYG_UNUSED_PARAM(CdlLoadable, loadable); + + CYG_REPORT_RETURN(); +} + +// Cancelling a load is more difficult. The loadable has to be +// unbound, removed from the toplevel, and deleted. If any of +// this fails then we are in trouble, there is no easy way to +// recover. +void +CdlLoadableBody::transaction_cancel_load(CdlTransaction transaction, CdlLoadable loadable) +{ + CYG_REPORT_FUNCNAME("CdlLoadable::transaction_cancel_load"); + CYG_REPORT_FUNCARG2XV(transaction, loadable); + CYG_PRECONDITION_CLASSC(transaction); + CYG_PRECONDITION_CLASSC(loadable); + + CdlToplevel toplevel = transaction->get_toplevel(); + CYG_PRECONDITION_CLASSC(toplevel); + CYG_ASSERTC(toplevel == loadable->get_toplevel()); + + loadable->unbind(transaction); + toplevel->remove_loadable_from_toplevel(loadable); + delete loadable; + + CYG_REPORT_RETURN(); +} + +// Committing an unload means that the loadable can now be deleted. +// It should already be unbound and removed from the toplevel. +void +CdlLoadableBody::transaction_commit_unload(CdlTransaction transaction, CdlLoadable loadable) +{ + CYG_REPORT_FUNCNAME("CdlLoadable::transaction_commit_unload"); + CYG_REPORT_FUNCARG2XV(transaction, loadable); + CYG_PRECONDITION_CLASSC(transaction); + CYG_PRECONDITION_CLASSC(loadable); + + CYG_UNUSED_PARAM(CdlTransaction, transaction); + delete loadable; + + CYG_REPORT_RETURN(); +} + +// Cancelling an unload means that the loadable has to be re-added +// to the hierarchy and then rebound. This implies that value +// propagation needs to happen. However, since all value changes +// since the very start of the transaction are held inside the +// transaction and will be eliminated, the original state will +// be restored anyway so the propagation is not actually required. +void +CdlLoadableBody::transaction_cancel_unload(CdlTransaction transaction, CdlLoadable loadable) +{ + CYG_REPORT_FUNCNAME("CdlLoadable::transaction_cancel_unload"); + CYG_REPORT_FUNCARG2XV(transaction, loadable); + CYG_PRECONDITION_CLASSC(transaction); + CYG_PRECONDITION_CLASSC(loadable); + + CdlToplevel toplevel = transaction->get_toplevel(); + CYG_PRECONDITION_CLASSC(toplevel); + toplevel->add_loadable_to_toplevel(loadable); + CYG_ASSERT_CLASSC(loadable); + loadable->bind(transaction); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ File search facilities + +// ---------------------------------------------------------------------------- +// File search facilities. Given a file name such as hello.cxx from a compile +// property, or doc.html from a doc property, find the corresponding filename, +// for example /usr/local/eCos/kernel/v1_3/doc/threads.html#create +// +// The second argument (default value "") indicates a preferred directory +// where searching should begin. This would be src for a source file, +// doc for a URL, etc. +// +// For some properties the data may refer to a URL rather than to a local +// filename. This is controlled by the third argument, allow_urls. +// If false then only local filenames will be considered. allow_urls +// also controls whether or not anchor processing is performed. +// +// RFC1807: a URL consists of :, where can be +// any sequence of lower-case letters, digits, plus, dot or hyphen. It +// is recommended that upper-case letters should be accepted as well. +// +// RFC1807: an anchor is everything after the first # in the URL. + +static char find_absolute_file_script[] = " \n\ +set cdl_anchor \"\" \n\ +if {$::cdl_allow_urls} { \n\ + if { [regexp -- {^[a-zA-Z+.-]*:.*$} $::cdl_target] } { \n\ + return $::cdl_target \n\ + } \n\ + set tmp \"\" \n\ + set non_anchor \"\" \n\ + if { [regexp -- {^([^#])(#.*$)} $::cdl_target tmp non_anchor cdl_anchor] } { \n\ + set ::cdl_target $non_anchor \n\ + } \n\ +} \n\ +if {$::cdl_prefdir != \"\"} { \n\ + set filename [file join $::cdl_topdir $::cdl_pkgdir $::cdl_prefdir $::cdl_target] \n\ + if {[file exists $filename]} { \n\ + return \"[set filename][set cdl_anchor]\" \n\ + } \n\ +} \n\ +set filename [file join $::cdl_topdir $::cdl_pkgdir $::cdl_target] \n\ +if {[file exists $filename]} { \n\ + return \"[set filename][set cdl_anchor]\" \n\ +} \n\ +return \"\" \n\ +"; + +std::string +CdlLoadableBody::find_absolute_file(std::string filename, std::string dirname, bool allow_urls) const +{ + CYG_REPORT_FUNCNAME("CdlLoadable::find_absolute_file"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != filename); + + // These variable names should be kept in step with CdlBuildable::update_all_build_info() + interp->set_variable("::cdl_topdir", get_toplevel()->get_directory()); + interp->set_variable("::cdl_pkgdir", directory); + interp->set_variable("::cdl_prefdir", dirname); + interp->set_variable("::cdl_target", filename); + interp->set_variable("::cdl_allow_urls", allow_urls ? "1" : "0"); + + std::string result; + int tmp = interp->eval(find_absolute_file_script, result); + if (tmp != TCL_OK) { + result = ""; + } + + // Replace any backslashes in the repository with forward slashes. + // The latter are used throughout the library + // NOTE: this is not i18n-friendly. + for (unsigned int i = 0; i < result.size(); i++) { + if ('\\' == result[i]) { + result[i] = '/'; + } + } + + CYG_REPORT_RETURN(); + return result; +} + +static char find_relative_file_script[] = " \n\ +if {$::cdl_prefdir != \"\"} { \n\ + set filename [file join $::cdl_prefdir $::cdl_target] \n\ + if {[file exists [file join $::cdl_topdir $::cdl_pkgdir $filename]]} { \n\ + return $filename \n\ + } \n\ +} \n\ +set filename $::cdl_target \n\ +if {[file exists [file join $::cdl_topdir $::cdl_pkgdir $filename]]} { \n\ + return \"[set filename][set cdl_anchor]\" \n\ +} \n\ +return \"\" \n\ +"; + +std::string +CdlLoadableBody::find_relative_file(std::string filename, std::string dirname) const +{ + CYG_REPORT_FUNCNAME("CdlLoadable::find_relative_file"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != filename); + + // These variable names should be kept in step with CdlBuildable::update_all_build_info() + interp->set_variable("::cdl_topdir", get_toplevel()->get_directory()); + interp->set_variable("::cdl_pkgdir", directory); + interp->set_variable("::cdl_prefdir", dirname); + interp->set_variable("::cdl_target", filename); + + std::string result; + int tmp = interp->eval(find_relative_file_script, result); + if (tmp != TCL_OK) { + result = ""; + } + + // Replace any backslashes in the repository with forward slashes. + // The latter are used throughout the library + // NOTE: this is not i18n-friendly. + for (unsigned int i = 0; i < result.size(); i++) { + if ('\\' == result[i]) { + result[i] = '/'; + } + } + + CYG_REPORT_RETURN(); + return result; +} + +static char has_subdirectory_script[] = " \n\ +set dirname [file join $::cdl_topdir $::cdl_pkgdir $::cdl_target] \n\ +if {[file isdirectory $dirname] == 0} { \n\ + return 0 \n\ +} \n\ +return 1 \n\ +"; + +bool +CdlLoadableBody::has_subdirectory(std::string name) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlLoadable::has_subdirectory", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != name); + + bool result = false; + + interp->set_variable("::cdl_topdir", get_toplevel()->get_directory()); + interp->set_variable("::cdl_pkgdir", directory); + interp->set_variable("::cdl_target", name); + + std::string tcl_result; + int tmp = interp->eval(has_subdirectory_script, tcl_result); + if ((TCL_OK == tmp) && ("1" == tcl_result)) { + result = true; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Misc + +// ---------------------------------------------------------------------------- + +std::string +CdlLoadableBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlLoadable::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "loadable"; +} + +//}}} +//{{{ check_this() + +// ---------------------------------------------------------------------------- +bool +CdlLoadableBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlLoadableBody_Magic != cdlloadablebody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + + if ((zeal == cyg_extreme) || (zeal == cyg_thorough)) { + std::vector::const_iterator node_i; + for (node_i = owned.begin(); node_i != owned.end(); node_i++) { + if ((!(*node_i)->check_this(cyg_quick)) || ((*node_i)->get_owner() != this)) { + return false; + } + } + } + return CdlContainerBody::check_this(zeal); +} + +//}}} + +//}}} +//{{{ CdlToplevelBody + +//{{{ Constructor + +// ---------------------------------------------------------------------------- +// A toplevel is a container without a parent or owner. It keeps track +// of all the names in the hierarchy, thus guaranteeing uniqueness and +// providing a quick lookup facility. +// +// The member functions add_node() and remove_node() are the only +// way of modifying the hierarchy. Adding a node with a zero parent +// means adding it to a special container, Orphans. +// +// An interpreter object must be created explicitly, preventing +// toplevel objects from being statically allocated (although +// it is possible to play tricks with utility classes...) +// There are too many possible error conditions when creating +// an interpreter, so this should not happen until the world +// is ready to deal with such errors. + +CdlToplevelBody::CdlToplevelBody(CdlInterpreter interp_arg, std::string directory_arg) + : CdlContainerBody() +{ + CYG_REPORT_FUNCNAME("CdlToplevel:: constructor"); + CYG_REPORT_FUNCARG2XV(this, interp_arg); + CYG_PRECONDITION_CLASSC(interp_arg); + + // The STL containers will take care of themselves. + interp = interp_arg; + directory = directory_arg; + transaction = 0; + + // A toplevel is always active, override the default setting for a node + active = true; + + // Make the object valid before creating the orphans container. + orphans = 0; + description = ""; + cdltoplevelbody_cookie = CdlToplevelBody_Magic; + + // Arguably creating the orphans container should be left until + // it is actually needed. The advantage of creating it at the + // start is that it will appear in a fixed location in the contents, + // right at the start. Arguably the end would be better, but the + // end can move as loadables get added and removed. + // + // The GUI code will probably want to ignore any empty + // containers that are not valuables and not user-visible. + orphans = new CdlContainerBody("orphans"); + add_node(0, this, orphans); + + // Let the interpreter know about its owning toplevel, as well as + // vice versa. + interp->set_toplevel(this); + + // The orphans container needs to be active as well. + orphans->active = true; + + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Destructor + +// ---------------------------------------------------------------------------- +// The toplevel should have been mostly cleared already, by the +// appropriate derived class. Without any loadables there should not +// be any conflicts. It is necessary to clean up the orphans +// container, since that was created by the CdlToplevel constructor. +// If there are any other special nodes then these should have been +// cleared by higher level code. + +CdlToplevelBody::~CdlToplevelBody() +{ + CYG_REPORT_FUNCNAME("CdlToplevel:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_PRECONDITIONC(0 == loadables.size()); + CYG_PRECONDITIONC(0 == conflicts.size()); + CYG_PRECONDITIONC(0 == structural_conflicts.size()); + CYG_PRECONDITIONC(0 == transaction); + + CYG_PRECONDITIONC(0 != orphans); + this->remove_node_from_toplevel(orphans); + CdlToplevelBody::remove_node(0, this, orphans); + delete orphans; + orphans = 0; + + CYG_PRECONDITIONC(0 == contents.size()); + + cdltoplevelbody_cookie = CdlToplevelBody_Magic; + description = ""; + limbo.clear(); + unsupported_savefile_toplevel_strings.clear(); + unsupported_savefile_commands.clear(); + unsupported_savefile_subcommands.clear(); + + // Since the interpreter is not created by the toplevel, it is + // not destroyed with the toplevel either. This leaves a potential + // big memory leak in application code. + interp = 0; + + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Adding and removing nodes + +// ---------------------------------------------------------------------------- +// Adding and removing a node, and changing a parent. +// +// These routines allow the hierarchy to be manipulated. All nodes should +// exist in a hierarchy below a toplevel, except for brief periods after +// construction and during destruction. +// +// Most nodes will belong to a loadable. An owner of 0 is allowed, for +// objects internal to the library such as the orphans container. +// Everything else must have an owner, and specifically a loadable owns +// itself. + +void +CdlToplevelBody::add_node(CdlLoadable owner, CdlContainer parent, CdlNode node) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::add_node"); + CYG_REPORT_FUNCARG4XV(this, owner, parent, node); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_ZERO_OR_CLASSC(owner); + CYG_PRECONDITION_CLASSC(parent); + CYG_PRECONDITION_CLASSC(node); + + // The node must not be in the hierarchy already. + CYG_ASSERTC(0 == node->toplevel); + CYG_ASSERTC(0 == node->owner); + CYG_ASSERTC(0 == node->parent); + + // The node's name should be unique. Checks for that should have happened + // in higher-level code. + CYG_ASSERTC(lookup_table.find(node->name) == lookup_table.end()); + node->toplevel = this; + lookup_table[node->name] = node; + + node->owner = owner; + if (0 != owner) { + owner->owned.push_back(node); + } + + // If the node is in fact a loadable, it should own itself and + // in addition the toplevel class keeps track of its loadables + // in a separate vector. + if (0 != dynamic_cast(node)) { + CYG_ASSERTC(owner == dynamic_cast(node)); + this->loadables.push_back(owner); + } + + if (0 == parent) { + parent = orphans; + } + node->parent = parent; + parent->contents.push_back(node); + + CYG_REPORT_RETURN(); +} + +// Removing a node from a toplevel. This is the first step in deleting +// a node: the step may be undone by a call to add_node_to_toplevel(), +// or completed by a call to remove_node(). Removing a node from the +// toplevel involves undoing the name->node mapping. In the case +// of loadables, it also involves removing the node from the toplevel's +// contents and loadables containers. + +void +CdlToplevelBody::remove_node_from_toplevel(CdlNode node) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::remove_node_from_toplevel"); + CYG_REPORT_FUNCARG2XV(this, node); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(node); + CYG_ASSERTC(this == node->toplevel); + CYG_ASSERTC(lookup_table[node->name] == node); + + node->toplevel = 0; + lookup_table.erase(node->name); + + CdlLoadable loadable = dynamic_cast(node); + if (0 != loadable) { + CYG_ASSERTC(loadable == node->owner); + CYG_ASSERTC(this == node->parent); + + // Because remove_node_from_toplevel() is reversible, the + // loadable should reappear in its old position. Hence we + // had better keep track of that position. Note that + // this code assumed that the remove_node and add_node + // calls are exactly reversed. + int i; + for (i = 0; i < (int) this->contents.size(); i++) { + if (this->contents[i] == node) { + break; + } + } + CYG_ASSERTC(i < (int) this->contents.size()); + node->remove_node_container_position = i; + this->contents.erase(this->contents.begin() + i); + node->parent = 0; + + // It is not clear that preserving the order of the loadables + // in the toplevel is useful, but it is harmless. + for (i = 0; i < (int) this->loadables.size(); i++) { + if (this->loadables[i] == loadable) { + break; + } + } + CYG_ASSERTC(i < (int) this->loadables.size()); + loadable->remove_node_loadables_position = i; + this->loadables.erase(this->loadables.begin() + i); + } + + CYG_REPORT_RETURN(); +} + +void +CdlToplevelBody::remove_loadable_from_toplevel(CdlLoadable loadable) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::remove_loadable_from_toplevel"); + CYG_REPORT_FUNCARG2XV(this, loadable); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(loadable); + + const std::vector& contents = loadable->get_owned(); + for (int i = contents.size() - 1; i >= 0; i--) { + CdlToplevel toplevel = contents[i]->get_toplevel(); + CYG_LOOP_INVARIANT_ZERO_OR_CLASSC(toplevel); + if (0 != toplevel) { + CYG_LOOP_INVARIANTC(this == toplevel); + this->remove_node_from_toplevel(contents[i]); + } + } + + CYG_REPORT_RETURN(); +} + +// Re-adding a node to a toplevel. This needs to undo all of the changes +// that may have been done by remove_node_from_toplevel() above. +void +CdlToplevelBody::add_node_to_toplevel(CdlNode node) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::add_node_to_toplevel"); + CYG_REPORT_FUNCARG2XV(this, node); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(node); + CYG_ASSERTC(0 == node->toplevel); + CYG_ASSERTC(0 != node->owner); + + CYG_ASSERTC(lookup_table.find(node->name) == lookup_table.end()); + node->toplevel = this; + lookup_table[node->name] = node; + + CdlLoadable loadable = dynamic_cast(node); + if (0 != loadable) { + CYG_ASSERTC(loadable == node->owner); + CYG_ASSERTC(0 == node->parent); + CYG_ASSERTC(-1 != node->remove_node_container_position); + CYG_ASSERTC(node->remove_node_container_position <= (int) this->contents.size()); + + this->contents.insert(this->contents.begin() + node->remove_node_container_position, node); + node->remove_node_container_position = -1; + node->parent = this; + + CYG_ASSERTC(-1 != loadable->remove_node_loadables_position); + this->loadables.insert(this->loadables.begin() + loadable->remove_node_loadables_position, loadable); + loadable->remove_node_loadables_position = -1; + } + + CYG_REPORT_RETURN(); +} + +void +CdlToplevelBody::add_loadable_to_toplevel(CdlLoadable loadable) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::add_loadable_to_toplevel"); + CYG_REPORT_FUNCARG2XV(this, loadable); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(loadable); + + const std::vector& contents = loadable->get_owned(); + for (int i = 0; i < (int) contents.size(); i++) { + this->add_node_to_toplevel(contents[i]); + } + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// The second stage remove operation. This cannot be undone, and +// happens just before the node gets deleted and after a succesful +// remove_node_from_toplevel(). +void +CdlToplevelBody::remove_node(CdlLoadable owner, CdlContainer parent, CdlNode node) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::remove_node"); + CYG_REPORT_FUNCARG3XV(owner, parent, node); + CYG_PRECONDITION_CLASSC(node); + CYG_PRECONDITION_ZERO_OR_CLASSC(owner); + CYG_PRECONDITION_ZERO_OR_CLASSC(parent); + CYG_PRECONDITIONC(node->owner == owner); + CYG_PRECONDITIONC(node->parent == parent); + CYG_PRECONDITIONC(0 == node->toplevel); + + if (0 != owner) { + node->owner = 0; + owner->owned.erase(std::find(owner->owned.begin(), owner->owned.end(), node)); + } + if (0 != parent) { + node->parent = 0; + parent->contents.erase(std::find(parent->contents.begin(), parent->contents.end(), node)); + } + + CYG_REPORT_RETURN(); +} + +// Changing a parent does not affect the node's standing in terms of the +// overall hierarchy or its owner, only the parent field. +void +CdlToplevelBody::change_parent(CdlLoadable owner, CdlContainer old_parent, CdlContainer new_parent, CdlNode node, int pos) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::change_parent"); + CYG_REPORT_FUNCARG6XV(this, owner, parent, new_parent, node, pos); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(old_parent); + CYG_PRECONDITION_ZERO_OR_CLASSC(new_parent); + CYG_PRECONDITION_CLASSC(node); + CYG_PRECONDITIONC(node->owner == owner); + CYG_PRECONDITIONC(node->parent == old_parent); + CYG_PRECONDITIONC(this == node->toplevel); + CYG_PRECONDITIONC(lookup_table[node->name] == node); + + if (0 == new_parent) { + new_parent = orphans; + } + old_parent->contents.erase(std::find(old_parent->contents.begin(), old_parent->contents.end(), node)); + node->parent = 0; + + if (-1 == pos) { + new_parent->contents.push_back(node); + } else { + CYG_ASSERTC(pos <= (int) new_parent->contents.size()); + new_parent->contents.insert(new_parent->contents.begin() + pos, node); + } + node->parent = new_parent; + + CYG_REPORT_RETURN(); +} + +// Cleaning up orphans. +// +// Right now this is only relevant for interfaces. Consider the case +// where a loadable is being removed and that loadable defines an +// interface. There may be other loadables which still have +// "implements" properties affecting that interface, so instead of +// deleting the cdl_interface object it is necessary to turn it into +// an auto-generated orphan. At some stage there may no longer be +// any references to an interface, in which case it can be removed +// safely. +// +// In practice it is quite hard to do a clean-up purely on the basis +// of implements properties, for example there may be an external +// "requires" property as well which would need to have its references +// cleaned up, then the expression needs to get re-evaluated, etc. +// The transaction class does not currently provide a clean way +// in which a single object can be destroyed. Instead the code below +// checks for any references whose source is not the interface itself. + +void +CdlToplevelBody::cleanup_orphans() +{ + CYG_REPORT_FUNCNAME("CdlToplevel::cleanup_orphans"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + // First figure out whether or not there are any interfaces along + // these lines. + std::vector interfaces; + const std::vector& contents = orphans->get_contents(); + std::vector::const_iterator node_i; + + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + CdlInterface intface = dynamic_cast(*node_i); + if (0 == intface) { + continue; + } + const std::vector& referrers = intface->get_referrers(); + std::vector::const_iterator ref_i; + for (ref_i = referrers.begin(); ref_i != referrers.end(); ref_i++) { + if (ref_i->get_source() != intface) { + break; + } + } + if (ref_i == referrers.end()) { + // None of the existing references involve an "implements" property, so + // this interface can be deleted. + interfaces.push_back(intface); + } + } + + if (0 != interfaces.size()) { + CYG_FAIL("Not yet implemented"); + } +} + +//}}} +//{{{ Basic information + +// ---------------------------------------------------------------------------- + +const std::vector& +CdlToplevelBody::get_loadables() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlToplevel::get_loadables", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + const std::vector& result = loadables; + CYG_REPORT_RETVAL(&result); + return result; +} + + +CdlNode +CdlToplevelBody::lookup(const std::string name) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlToplevel::lookup", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != name); + + CdlNode result = 0; + std::map::const_iterator i = lookup_table.find(name); + if (i != lookup_table.end()) { + result = i->second; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +CdlInterpreter +CdlToplevelBody::get_interpreter() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlToplevel::get_interpreter", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlInterpreter result = interp; + CYG_REPORT_RETVAL(result); + return result; +} + +std::string +CdlToplevelBody::get_description() const +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_description"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return description; +} + +void +CdlToplevelBody::set_description(std::string new_description) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::set_description"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + description = new_description; + + CYG_REPORT_RETURN(); +} + +std::string +CdlToplevelBody::get_directory() const +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_directory"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return directory; +} + +std::string +CdlToplevelBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "toplevel"; +} + +CdlTransaction +CdlToplevelBody::get_active_transaction() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlToplevel::get_active_transaction", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlTransaction result = transaction; + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Conflict support + +// ---------------------------------------------------------------------------- +const std::list& +CdlToplevelBody::get_all_conflicts() const +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_all_conflicts"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + const std::list& result = conflicts; + + CYG_REPORT_RETURN(); + return result; +} + +const std::list& +CdlToplevelBody::get_all_structural_conflicts() const +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_all_structural_conflicts"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + const std::list& result = structural_conflicts; + + CYG_REPORT_RETURN(); + return result; +} + +// ---------------------------------------------------------------------------- +// Resolve one or more conflicts. This involves creating a new transaction, +// invoking the per-transaction resolve code, and then CdlTransaction::body() +// takes care of everything else like propagation, further inference, +// callbacks, committing, ... +void +CdlToplevelBody::resolve_conflicts(const std::vector& conflicts_arg) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::resolve_conflicts"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlTransaction transact = CdlTransactionBody::make(this); + + std::vector::const_iterator conf_i; + for (conf_i = conflicts_arg.begin(); conf_i != conflicts_arg.end(); conf_i++) { + CYG_LOOP_INVARIANT_CLASSC(*conf_i); + CYG_LOOP_INVARIANTC(0 == (*conf_i)->get_transaction()); + + if (((*conf_i)->resolution_implemented()) && + !transact->has_conflict_been_cleared(*conf_i) && + !(*conf_i)->has_known_solution() && + !(*conf_i)->has_no_solution() ) { + transact->resolve(*conf_i); + } + } + transact->body(); + delete transact; + + CYG_REPORT_RETURN(); +} + +void +CdlToplevelBody::resolve_all_conflicts() +{ + CYG_REPORT_FUNCNAME("CdlToplevel::resolve_all_conflicts"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlTransaction transact = CdlTransactionBody::make(this); + std::list::const_iterator conf_i; + + for (conf_i = conflicts.begin(); conf_i != conflicts.end(); conf_i++) { + CYG_LOOP_INVARIANT_CLASSC(*conf_i); + CYG_LOOP_INVARIANTC(0 == (*conf_i)->get_transaction()); + if ((*conf_i)->resolution_implemented() && + !transact->has_conflict_been_cleared(*conf_i) && + !(*conf_i)->has_known_solution() && + !(*conf_i)->has_no_solution() ) { + transact->resolve(*conf_i); + } + } + for (conf_i = structural_conflicts.begin(); conf_i != structural_conflicts.end(); conf_i++) { + CYG_LOOP_INVARIANT_CLASSC(*conf_i); + CYG_LOOP_INVARIANTC(0 == (*conf_i)->get_transaction()); + if (((*conf_i)->resolution_implemented()) && + !transact->has_conflict_been_cleared(*conf_i) && + !(*conf_i)->has_known_solution() && + !(*conf_i)->has_no_solution() ) { + transact->resolve(*conf_i); + } + } + + transact->body(); + delete transact; + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Limbo support + +// ---------------------------------------------------------------------------- +// Limbo support. This is basically trivial, an STL map does all the +// right things. +void +CdlToplevelBody::set_limbo_value(CdlValuable valuable) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::set_limbo_value"); + CYG_REPORT_FUNCARG2XV(this, valuable); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(valuable); + + limbo[valuable->get_name()] = valuable->get_whole_value(); + + CYG_REPORT_RETURN(); +} + +bool +CdlToplevelBody::has_limbo_value(std::string name) const +{ + CYG_REPORT_FUNCNAMETYPE("CdlToplevel::has_limbo_value", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != name); + + bool result = false; + if (limbo.find(name) != limbo.end()) { + result = true; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +CdlValue +CdlToplevelBody::get_limbo_value(std::string name) const +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_limbo_value"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != name); + + std::map::const_iterator limbo_i = limbo.find(name); + CYG_ASSERTC(limbo_i != limbo.end()); + + CYG_REPORT_RETURN(); + return limbo_i->second; +} + +CdlValue +CdlToplevelBody::get_and_remove_limbo_value(std::string name) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_and_remove_limbo_value"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != name); + + std::map::iterator limbo_i = limbo.find(name); + CYG_ASSERTC(limbo_i != limbo.end()); + + CdlValue local_copy = limbo_i->second; + limbo.erase(limbo_i); + + CYG_REPORT_RETURN(); + return local_copy; +} + +void +CdlToplevelBody::clear_limbo() +{ + CYG_REPORT_FUNCNAME("CdlToplevel::clear_limbo"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + limbo.clear(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Persistence support + +//{{{ Description + +// ---------------------------------------------------------------------------- +// Toplevels do not have any data specifically associated with them which +// should go into savefiles (not quite true, there is a description field, +// but that can be handled easily by the derived classes). +// +// However there is a need in the library for some generic savefile support: +// +// 1) it is an important goal that savefiles should be self-describing. +// This is handled by having a header section at the start of each +// savefile which describes what commands will appear in the savefile +// (note that savefiles are actually just Tcl scripts). In addition +// each savefile contains a version number so that individual commands +// can detect and adapt to older versions of the library. +// +// 2) savefiles should also be extensible, so for example a GUI tool should +// be able to add its own information. This can be toplevel information, +// i.e. a new command that gets executed at the savefile's toplevel, +// or it can be a subcommand extending an existing command such as +// cdl_option. Right now only one level of nesting is available, but +// this should suffice. +// +// 3) extensibility means that the application reading in a savefile may +// not support the same set of commands as the application that generated +// the savefile. Care is taken to avoid loss of data. However exact +// ordering is not guaranteed to be preserved, and neither is formatting. +// +// These needs are interrelated, and supported by the CdlToplevelBody +// class. The functions of interest are: +// +// virtual void initialize_savefile_support() +// This should be called from higher-level code such as +// CdlConfiguration::initialize_savefile_support() at the start of +// any savefile-related operation. +// +// The support operates on a per-application basis rather than a +// per-toplevel basis, in spite of being a virtual member function +// rather than a static. A virtual member function facilitates +// automatic initialization. This causes some problems if you need +// to load in toplevels with different application-specific +// extensions, but it makes life a lot simpler for the application. +// +// static bool savefile_support_initialized() +// Has there been a call to initialize_savefile_support() yet? +// +// virtual void add_savefile_command(std::string, CdlSaveCallback, CdlInterpreterCommand) +// Register a new savefile toplevel command. The string must be a +// valid command name. The callback function will be 0 for savedata +// supported directly by the library, non-zero for application-specific +// data, and is invoked during a save operation to allow application +// code to add extra data to the savefile. The command procedure must +// be provided and is registered with the Tcl interpreter. +// +// virtual void add_savefile_subcommand(std::string cmd, std::string subcommand, CdlSaveCallback, CdlInterpreterCommand) +// Typically savefile commands take the form , +// where contains a set of subcommands. This function is used +// to register a new subcommand. +// +// void save_command_details(CdlInterpreter, Tcl_Channel, int) +// This should be invoked early on when generating a savefile. Its +// purpose is to store information about the current set of savefile +// commands in the savefile, thus making savefiles self-describing. +// This command acts on a per-toplevel basis, since each toplevel +// may have been created via a load operation and hence may contain +// unrecognised commands. +// +// static void get_savefile_commands(std::vector&) +// Work out the set of commands that should be supported by the +// interpreter used to process a savefile. Note that this set gets +// updated magically by savefile_handle_command(). +// +// static void get_savefile_subcommands(std::string, std::vector&) +// Ditto for subcommands. +// +// static int savefile_handle_command(CdlInterpreter, int, char**) +// This implements cdl_savefile_command, and makes sure that +// all of the commands that may be present in the savefile will +// be processed. +// +// static int savefile_handle_unsupported(CdlInterpreter, int, char**) +// This takes care of commands present in the savefile which are +// not supported by the current application. +// +// static int savefile_handle_unknown(CdlInterpreter, int, char**) +// This is an implementation of "unknown" suitable for savefiles. +// All commands that may get used in a savefile should be specified +// via cdl_savefile_command, so an unknown command is an error. +// +// cdl_int get_library_savefile_version() +// Savefiles contain a format version number. This function can be used +// to determine the current version used in the library. +// +// int savefile_handle_version(CdlInterpreter, int, char**) +// This is the implementation of the cdl_savefile_version command. It +// stores the version information in the interpreter, allowing it +// to be retrieved by other commands. +// +// cdl_int get_savefile_version(CdlInterpreter) +// This can be used to retrieve the version number that was present +// in the current savefile. +// +// The version number should not be used for application-specific +// commands. It is possible for a savefile to be read in by a +// different program and then updated: the updated savefile will +// contain the unrecognised commands unchanged, but it will also +// have the version number corresponding to that program rather +// than to the original savefile. +// +// void save_conflicts(CdlInterpreter, Tcl_Channel, int) +// Output details of all the conflicts in the current configuration +// +// void save_separator(CdlInterpreter, Tcl_Channel, int) +// A utility to add a separator line to a savefile. This has to +// go somewhere.... +// +// FIXME: add limbo support + +//}}} +//{{{ Statics and initialization + +// ---------------------------------------------------------------------------- +bool CdlToplevelBody::savefile_commands_initialized = false; +std::vector CdlToplevelBody::savefile_commands; +std::map > CdlToplevelBody::savefile_subcommands; + +void +CdlToplevelBody::initialize_savefile_support() +{ + CYG_REPORT_FUNCNAME("CdlToplevel::initialize_savefile_support"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + // This assignment avoids circular dependencies. It is not + // completely accurate but close enough - the full set of + // commands will be initialised shortly. + savefile_commands_initialized = true; + + // The commands cdl_savefile_version and cdl_command are a core + // part of the CDL savefile support. + add_savefile_command("cdl_savefile_version", 0, &savefile_handle_version); + add_savefile_command("cdl_savefile_command", 0, &savefile_handle_command); + + CYG_REPORT_RETURN(); +} + +bool +CdlToplevelBody::savefile_support_initialized() +{ + CYG_REPORT_FUNCNAMETYPE("CdlToplevel::check_savefile_support_initialized", "result %d"); + + bool result = savefile_commands_initialized; + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Command details + +// ---------------------------------------------------------------------------- +// These routines are used to keep track of the savefile commands that +// are understood by the current application. There may have been +// additional per-toplevel commands when a savefile was read in, but +// these are stored separately. +// +// Currently there is only support for toplevel savefile commands +// and for one level of subcommands. Multiple levels can probably +// be accommodated by using the equivalent of a directory separator +// in the savefile_subcommands map key. + +void +CdlToplevelBody::add_savefile_command(std::string name, CdlSaveCallback save_callback, CdlInterpreterCommand load_command) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::add_savefile_command"); + CYG_REPORT_FUNCARG3XV(this, save_callback, load_command); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != name); + + if (!savefile_commands_initialized) { + this->initialize_savefile_support(); + } + + std::vector::const_iterator cmd_i; + for (cmd_i = savefile_commands.begin(); cmd_i != savefile_commands.end(); cmd_i++) { + if (cmd_i->name == name) { + if ((cmd_i->save_callback != save_callback) || (cmd_i->load_command != load_command)) { + CYG_FAIL("Internal error: attempt to define two toplevel savefile commands with the same name."); + } + break; + } + } + if (cmd_i == savefile_commands.end()) { + CdlSavefileCommand cmd; + cmd.name = name; + cmd.save_callback = save_callback; + cmd.load_command = load_command; + savefile_commands.push_back(cmd); + + std::vector subcommands; + savefile_subcommands[name] = subcommands; + } + + CYG_REPORT_RETURN(); +} + +// Add a new subcommand for a given command. The command should have been +// defined already. +void +CdlToplevelBody::add_savefile_subcommand(std::string cmd, std::string subcommand, CdlSaveCallback save_callback, + CdlInterpreterCommand load_command) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::add_savefile_subcommand"); + CYG_REPORT_FUNCARG3XV(this, save_callback, load_command); + CYG_PRECONDITION_THISC(); + + if (!savefile_commands_initialized) { + this->initialize_savefile_support(); + } + + std::vector::iterator cmd_i; + for (cmd_i = savefile_commands.begin(); cmd_i != savefile_commands.end(); cmd_i++) { + if (cmd_i->name == cmd) { + break; + } + } + CYG_ASSERTC(cmd_i != savefile_commands.end()); + + for (cmd_i = savefile_subcommands[cmd].begin(); cmd_i != savefile_subcommands[cmd].end(); cmd_i++) { + if (cmd_i->name == subcommand) { + if ((cmd_i->save_callback != save_callback) || (cmd_i->load_command != load_command)) { + CYG_FAIL("Internal error: attempt to define two subcommands with the same name."); + } + } + } + if (cmd_i == savefile_subcommands[cmd].end()) { + CdlSavefileCommand new_subcommand; + new_subcommand.name = subcommand; + new_subcommand.save_callback = save_callback; + new_subcommand.load_command = load_command; + savefile_subcommands[cmd].push_back(new_subcommand); + } + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// This member function is invoked by e.g. CdlConfiguraton::save() to +// take care of the generic savefile information, specifically the +// savefile format version number and the various commands and subcommands +// Note that it has to cope with per-toplevel commands from the original +// savefile, as well as the global set. + +void +CdlToplevelBody::save_command_details(CdlInterpreter interp, Tcl_Channel chan, int indentation, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::save_command_details"); + CYG_REPORT_FUNCARG4XV(this, interp, chan, indentation); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + CYG_ASSERTC(0 == indentation); + + // The parent code should have provided the first couple of lines, + // identifying whether this is an eCos configuration or some other + // CDL-based entity. + // + // Immediately after these lines we want a nice big comment + // telling people that they can edit bits of this file, but + // that other bits are automatically generated and will + // be overwritten. + + if (!minimal) { + interp->write_data(chan, +"# This section contains information about the savefile format.\n\ +# It should not be edited. Any modifications made to this section\n\ +# may make it impossible for the configuration tools to read\n\ +# the savefile.\n\ +\n"); + } + + // Next output details of the savefile format version. This allows + // all other code to adapt to the version. + std::string savefile_data; + Cdl::integer_to_string(savefile_version, savefile_data); + savefile_data = "cdl_savefile_version " + savefile_data + ";\n"; + + std::vector::const_iterator cmd_i, cmd_j; + std::vector::const_iterator cmd_k, cmd_l; + + for (cmd_i = savefile_commands.begin(); cmd_i != savefile_commands.end(); cmd_i++) { + savefile_data += "cdl_savefile_command " + cmd_i->name + " "; + + if ((0 == savefile_subcommands[cmd_i->name].size()) && + (0 == this->unsupported_savefile_subcommands[cmd_i->name].size())) { + + savefile_data += "{};\n"; + + } else { + + savefile_data += "{"; + for (cmd_j = savefile_subcommands[cmd_i->name].begin(); + cmd_j != savefile_subcommands[cmd_i->name].end(); + cmd_j++) { + + savefile_data += " " + cmd_j->name; + } + for (cmd_l = this->unsupported_savefile_subcommands[cmd_i->name].begin(); + cmd_l != this->unsupported_savefile_subcommands[cmd_i->name].end(); + cmd_l++) { + + savefile_data += " " + *cmd_l; + } + savefile_data += " };\n"; + } + } + for (cmd_k = this->unsupported_savefile_commands.begin(); + cmd_k != this->unsupported_savefile_commands.end(); + cmd_k++) { + savefile_data += "cdl_savefile_command " + *cmd_k + " "; + if (0 == this->unsupported_savefile_subcommands[*cmd_k].size()) { + + savefile_data += "{};\n"; + + } else { + + savefile_data += "{"; + for (cmd_l = this->unsupported_savefile_subcommands[*cmd_k].begin(); + cmd_l != this->unsupported_savefile_subcommands[*cmd_k].end(); + cmd_l++) { + + savefile_data += " " + *cmd_l; + } + savefile_data += " };\n"; + } + } + savefile_data += "\n"; + + interp->write_data(chan, savefile_data); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// Get hold of the commands that should be added to the interpreter for +// processing a savefile. Note that this will only deal with commands +// supported by the library or the application, not any additional +// unsupported commands specified in the savefile itself. The latter +// will be taken care of magically by savefile_handle_command(). + +void +CdlToplevelBody::get_savefile_commands(std::vector& cmds) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_savefile_commands"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlInterpreterCommandEntry local_cmd; + std::vector::const_iterator cmd_i; + for (cmd_i = savefile_commands.begin(); cmd_i != savefile_commands.end(); cmd_i++) { + // NOTE: this use of c_str() is somewhat dubious, but the string should not + // change so the c_str() array should remain ok as well. + local_cmd.name = cmd_i->name; + local_cmd.command = cmd_i->load_command; + cmds.push_back(local_cmd); + } + + // There is no point in iterating over this->unsupported_savefile_commands, + // that vector should be empty since we have not actually started + // processing the savefile yet. + CYG_ASSERTC(0 == this->unsupported_savefile_commands.size()); + + // Add an implementation of the "unknown" command. + local_cmd.name = "unknown"; + local_cmd.command = &CdlToplevelBody::savefile_handle_unknown; + cmds.push_back(local_cmd); + + CYG_REPORT_RETURN(); +} + +// Having repeated calls of this for e.g. every cdl_option statement in +// a savefile is expensive. Some sort of caching mechanism should be +// used to avoid unnecessary overheads. +void +CdlToplevelBody::get_savefile_subcommands(std::string main_command, std::vector& cmds) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_savefile_subcommands"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlInterpreterCommandEntry local_cmd; + std::vector::const_iterator cmd_i; + for (cmd_i = savefile_subcommands[main_command].begin(); + cmd_i != savefile_subcommands[main_command].end(); + cmd_i++) { + + local_cmd.name = cmd_i->name.c_str(); + local_cmd.command = cmd_i->load_command; + cmds.push_back(local_cmd); + } + + std::vector::const_iterator cmd_j; + for (cmd_j = this->unsupported_savefile_subcommands[main_command].begin(); + cmd_j != this->unsupported_savefile_subcommands[main_command].end(); + cmd_j++) { + + local_cmd.name = cmd_j->c_str(); + local_cmd.command = &savefile_handle_unsupported; + cmds.push_back(local_cmd); + } + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// This implements cdl_savefile_command which should appear near the +// start of savefiles. The command takes two arguments, a primary +// command name and a set of subcommand names. +int +CdlToplevelBody::savefile_handle_command(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::savefile_handle_command"); + CYG_REPORT_FUNCARG2XV(interp, argc); + CYG_PRECONDITION_CLASSC(interp); + + CdlToplevel toplevel = interp->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + CYG_ASSERTC(toplevel->savefile_commands_initialized); + + if (1 == argc) { + CdlParse::report_error(interp, "", "Expecting at least one argument to cdl_savefile_command"); + } else if (2 == argc) { + CdlParse::report_warning(interp, "", + std::string("Missing third argument to `cdl_savefile_command ") + argv[1] + + "'\n.Expecting an additional list of subcommands."); + } else if (3 != argc) { + CdlParse::report_warning(interp, "", std::string("Unexpected additional arguments to `cdl_savefile_command ") + + argv[1] + " { " + argv[2] + " }"); + } + + // Is the primary command one of the known ones? + bool known_command = false; + std::vector::const_iterator cmd_i; + std::vector::const_iterator cmd_j; + + if (1 != argc) { + // Make sure that the primary command is known. + for (cmd_i = savefile_commands.begin(); cmd_i != savefile_commands.end(); cmd_i++) { + if (cmd_i->name == argv[1]) { + known_command = true; + break; + } + } + if (!known_command) { + // Detect duplicate definitions, just in case. + for (cmd_j = toplevel->unsupported_savefile_commands.begin(); + cmd_j != toplevel->unsupported_savefile_commands.end(); + cmd_j++) { + if (*cmd_j == argv[1]) { + break; + } + } + if (cmd_j == toplevel->unsupported_savefile_commands.end()) { + toplevel->unsupported_savefile_commands.push_back(argv[1]); + } + } + } + + // Now take care of all the subcommands. + if (2 != argc) { + + int list_count = 0; + const char** list_entries = 0; + + try { + Tcl_Interp* tcl_interp = interp->get_tcl_interpreter(); + if (TCL_OK != Tcl_SplitList(tcl_interp, CDL_TCL_CONST_CAST(char*, argv[2]), &list_count, CDL_TCL_CONST_CAST(char***, &list_entries))) { + CdlParse::report_error(interp, "", std::string("Invalid subcommand list for `cdl_command ") + argv[1] + "'."); + } + + for (int i = 0; i < list_count; i++) { + bool known_subcommand = false; + if (known_command) { + for (cmd_i = savefile_subcommands[argv[1]].begin(); + cmd_i != savefile_subcommands[argv[1]].end(); + cmd_i++) { + + if (cmd_i->name == list_entries[i]) { + known_subcommand = true; + } + } + } + if (!known_subcommand) { + for (cmd_j = toplevel->unsupported_savefile_subcommands[argv[1]].begin(); + cmd_j != toplevel->unsupported_savefile_subcommands[argv[1]].end(); + cmd_j++) { + + if (*cmd_j == list_entries[i]) { + known_subcommand = true; + break; + } + } + } + if (!known_subcommand) { + toplevel->unsupported_savefile_subcommands[argv[1]].push_back(list_entries[i]); + } + + } + + if (0 != list_entries) { + Tcl_Free((char *)list_entries); + } + + } catch(...) { + if (0 != list_entries) { + Tcl_Free((char *)list_entries); + } + throw; + } + } + + return TCL_OK; +} + +//}}} +//{{{ handle_unsupported() + +// ---------------------------------------------------------------------------- +// This function is invoked when an unsupported command is detected in +// a savefile. It turns the data back into a string which can go back +// into the next savefile, thus avoiding loss of data. +// +// It is possible that the savefile contents involved variable or +// command substitution. If so then this information will have been +// lost, there is no simple way of retrieving this from the interpreter. +// Care has to be taken when generating the new command string to +// perform appropriate quoting. +// +// Ideally the original data could be extracted from the Tcl +// interpreter somehow. Currently this data is not readily available, +// and the resulting string may not match the original data exactly. +int +CdlToplevelBody::savefile_handle_unsupported(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAME("CdlNode::savefile_handle_unsupported"); + CYG_REPORT_FUNCARG2XV(interp, argc); + CYG_ASSERT_CLASSC(interp); + + CdlToplevel toplevel = interp->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + CdlNode node = interp->get_node(); + CYG_ASSERT_ZERO_OR_CLASSC(node); + + std::string tmp = CdlInterpreterBody::quote(argv[0]); + for (int i = 1; i < argc; i++) { + tmp = tmp + " " + CdlInterpreterBody::quote(argv[i]); + } + // Unknown commands may occur at the toplevel or inside + // e.g. a cdl_option body. Toplevels are also nodes. + if (0 == node) { + toplevel->unsupported_savefile_toplevel_strings.push_back(tmp); + } else { + node->unsupported_savefile_strings.push_back(tmp); + } + + return TCL_OK; +} + +//}}} +//{{{ save_unsupported() + +// ---------------------------------------------------------------------------- +// This code deals with any toplevel data present in the original save +// file that was not recognised. +void +CdlToplevelBody::save_unsupported_commands(CdlInterpreter interp, Tcl_Channel chan, int indentation, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlToplevelBody::save_unsupported_commands"); + CYG_REPORT_FUNCARG3XV(this, interp, chan); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + CYG_PRECONDITIONC(0 == indentation); + + std::string data = "\n"; + std::vector::const_iterator str_i; + for (str_i = unsupported_savefile_toplevel_strings.begin(); + str_i != unsupported_savefile_toplevel_strings.end(); + str_i++) { + data += *str_i + " ;\n"; + } + interp->write_data(chan, data); + + CYG_UNUSED_PARAM(bool, minimal); + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ handle_unknown() + +// ---------------------------------------------------------------------------- + +int +CdlToplevelBody::savefile_handle_unknown(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::savefile_handle_unknown"); + CYG_REPORT_FUNCARG2XV(interp, argc); + CYG_PRECONDITION_CLASSC(interp); + + CdlParse::report_error(interp, "", std::string("Unknown command `") + argv[1] + "'."); + + CYG_UNUSED_PARAM(int, argc); + return TCL_OK; +} + +//}}} +//{{{ versioning + +// ---------------------------------------------------------------------------- +// Savefiles include a version number that can be used by library +// commands to cope with old and incompatible savefiles. This +// version number should be changed only very rarely, hopefully never. +cdl_int CdlToplevelBody::savefile_version = 1; + +cdl_int +CdlToplevelBody::get_library_savefile_version() +{ + CYG_REPORT_FUNCNAMETYPE("CdlToplevel::get_library_savefile_version", "result %ld"); + + cdl_int result = savefile_version; + CYG_REPORT_RETVAL((long) result); + return result; +} + +// This implements the cdl_savefile_version command. It stores the +// version number with the interpreter, allowing it to be retrieved +// by other commands. +int +CdlToplevelBody::savefile_handle_version(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::savefile_handle_version"); + CYG_REPORT_FUNCARG2XV(interp, argc); + CYG_PRECONDITION_CLASSC(interp); + + if (1 == argc) { + CdlParse::report_warning(interp, "", "Expecting one argument to cdl_savefile_version"); + } else { + if (2 != argc) { + CdlParse::report_warning(interp, "", + std::string("Unexpected number of arguments to cdl_savefile_version\n") + + "There should be exactly one argument, the savefile format version number."); + } + cdl_int tmp; + if (!Cdl::string_to_integer(argv[1], tmp)) { + CdlParse::report_error(interp, "", + std::string("Invalid version number `") + argv[1] + "' for cdl_savefile_version"); + } else { + // Store the data in a Tcl variable. This is at least as convenient + // as assoc data. + interp->set_variable("cdl_savefile_version", argv[1]); + } + } + + return TCL_OK; +} + +cdl_int +CdlToplevelBody::get_savefile_version(CdlInterpreter interp) +{ + CYG_REPORT_FUNCNAMETYPE("CdlToplevel::get_savefile_version", "result %ld"); + CYG_REPORT_FUNCARG1XV(interp); + CYG_PRECONDITION_CLASSC(interp); + + cdl_int result = 0; + std::string version = interp->get_variable("cdl_savefile_version"); + if ("" != version) { + if (!Cdl::string_to_integer(version, result)) { + CdlParse::report_error(interp, "", std::string("Invalid cdl_savefile_version number `") + version + "'"); + } + } + + CYG_REPORT_RETVAL((long) result); + return result; +} + +//}}} +//{{{ conflicts + +// ---------------------------------------------------------------------------- +void +CdlToplevelBody::save_conflicts(CdlInterpreter interp, Tcl_Channel chan, int indentation, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::save_conflicts"); + CYG_REPORT_FUNCARG4XV(this, interp, chan, indentation); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + CYG_PRECONDITIONC(0 == indentation); + + // For now only comments are generated here, so in a minimal save + // there is no need for any of this data + if (!minimal) { + std::string data = ""; + if (0 == conflicts.size()) { + data += "# There are no conflicts.\n"; + } else { + std::string tmp; + Cdl::integer_to_string((cdl_int) this->conflicts.size(), tmp); + data += "# There are " + tmp + " conflicts.\n"; + + std::list::const_iterator conf_i; + for (conf_i = this->conflicts.begin(); conf_i != this->conflicts.end(); conf_i++) { + data += "#\n"; + + CdlNode node = (*conf_i)->get_node(); + CdlProperty prop = (*conf_i)->get_property(); + std::string description = (*conf_i)->get_explanation(); + data += "# " + node->get_class_name() + " " + node->get_name() + "\n"; + data += "# Property " + prop->get_property_name() + "\n"; + data += CdlInterpreterBody::multiline_comment(description, 0, 2) + "\n"; + } + data += '\n'; + } + data += '\n'; + + interp->write_data(chan, data); + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ save_separator() + +// ---------------------------------------------------------------------------- +void +CdlToplevelBody::save_separator(CdlInterpreter interp, Tcl_Channel chan, std::string msg, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::save_separator"); + CYG_REPORT_FUNCARG1XV(interp); + CYG_PRECONDITION_CLASSC(interp); + + if (!minimal) { + std::string data = "# ---- " + msg + ' '; + if (72 > data.size()) { + data += std::string(72 - data.size(), '-'); + } + data += '\n'; + interp->write_data(chan, data); + } + + CYG_REPORT_RETURN(); +} + +//}}} + +//}}} +//{{{ check_this() + +// ---------------------------------------------------------------------------- +bool +CdlToplevelBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlToplevelBody_Magic != cdltoplevelbody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + + if ((zeal == cyg_extreme) || (zeal == cyg_thorough)) { + if (!interp->check_this(cyg_quick)) { + return false; + } + if ((0 == orphans) || !orphans->check_this(cyg_quick)) { + return false; + } + if (orphans != *contents.begin()) { + return false; + } + if ((0 != transaction) && !transaction->check_this(cyg_quick)) { + return false; + } + } + + return CdlContainerBody::check_this(zeal); +} + +//}}} + +//}}} +//{{{ CdlUserVisiblebody + +//{{{ Basics + +// ---------------------------------------------------------------------------- +// All user-visible object can have (and usually should have) three +// properties: display (originally known as alias), description, and +// doc. There is no additional data associated with a user-visible +// object, everything is handled via the properties. + +CdlUserVisibleBody::CdlUserVisibleBody() +{ + CYG_REPORT_FUNCNAME("CdlUserVisible:: default constructor"); + CYG_REPORT_FUNCARG1XV(this); + + cdluservisiblebody_cookie = CdlUserVisibleBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlUserVisibleBody::~CdlUserVisibleBody() +{ + CYG_REPORT_FUNCNAME("CdlUserVisible:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdluservisiblebody_cookie = CdlUserVisibleBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +std::string +CdlUserVisibleBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlUserVisible::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "uservisible"; +} + +bool +CdlUserVisibleBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlUserVisibleBody_Magic != cdluservisiblebody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + return CdlNodeBody::check_this(zeal); +} + +//}}} +//{{{ Extracting information + +// ---------------------------------------------------------------------------- +// Extracting the information. + +std::string +CdlUserVisibleBody::get_display() const +{ + CYG_REPORT_FUNCNAME("CdlUserVisible::get_display"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::string result = ""; + CdlProperty property = get_property(CdlPropertyId_Display); + if (0 != property) { + + CdlProperty_String string_property = dynamic_cast(property); + CYG_ASSERTC(0 != string_property); + + result = string_property->get_string(); + } + + CYG_REPORT_RETURN(); + return result; +} + +std::string +CdlUserVisibleBody::get_description() const +{ + CYG_REPORT_FUNCNAME("CdlUserVisible::get_description"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::string result = ""; + CdlProperty property = get_property(CdlPropertyId_Description); + if (0 != property) { + + CdlProperty_String string_property = dynamic_cast(property); + CYG_ASSERTC(0 != string_property); + + result = string_property->get_string(); + } + + CYG_REPORT_RETURN(); + return result; +} + +std::string +CdlUserVisibleBody::get_doc() const +{ + CYG_REPORT_FUNCNAME("CdlUserVisible::get_doc"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::string result = ""; + CdlProperty property = get_property(CdlPropertyId_Doc); + if (0 != property) { + + CdlProperty_String string_property = dynamic_cast(property); + CYG_ASSERTC(0 != string_property); + + result = string_property->get_string(); + } + + CYG_REPORT_RETURN(); + return result; +} + +std::string +CdlUserVisibleBody::get_doc_url() const +{ + CYG_REPORT_FUNCNAME("CdlUserVisible::get_doc_url"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::string result = ""; + std::string doc_property = get_doc(); + if ("" != doc_property) { + CdlLoadable owner = get_owner(); + CYG_ASSERTC(0 != owner); + result = owner->find_absolute_file(doc_property, "doc", true); + } + + CYG_REPORT_RETURN(); + return result; +} + +//}}} +//{{{ Parsing + +// ---------------------------------------------------------------------------- +// Parsing support. There are three property parsers to be added to +// the current set. The checking code should make sure that at most +// one of each property has been specified. In addition it is +// necessary to recurse into the base class. + +void +CdlUserVisibleBody::add_property_parsers(std::vector& parsers) +{ + CYG_REPORT_FUNCNAME("CdlUserVisible::add_property_parsers"); + + static CdlInterpreterCommandEntry commands[] = + { + CdlInterpreterCommandEntry("display", &parse_display), + CdlInterpreterCommandEntry("description", &parse_description), + CdlInterpreterCommandEntry("doc", &parse_doc), + CdlInterpreterCommandEntry("", 0) + }; + + for (int i = 0; commands[i].command != 0; i++) { + std::vector::const_iterator j; + for (j = parsers.begin(); j != parsers.end(); j++) { + if (commands[i].name == j->name) { + if (commands[i].command != j->command) { + CYG_FAIL("Property names are being re-used"); + } + break; + } + } + if (j == parsers.end()) { + parsers.push_back(commands[i]); + } + } + CdlNodeBody::add_property_parsers(parsers); + + CYG_REPORT_RETURN(); +} + +void +CdlUserVisibleBody::check_properties(CdlInterpreter interp) +{ + CYG_REPORT_FUNCNAME("CdlUserVisible::check_properties"); + CYG_REPORT_FUNCARG2XV(this, interp); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + + if (count_properties(CdlPropertyId_Display) > 1) { + CdlParse::report_error(interp, "", "There should be at most one display property."); + } + if (count_properties(CdlPropertyId_Description) > 1) { + CdlParse::report_error(interp, "", "There should be at most one description property."); + } + if (count_properties(CdlPropertyId_Doc) > 1) { + CdlParse::report_error(interp, "", "There should be at most one doc property."); + } + + // FIXME: more validation of the doc property, in particular check that + // the resulting URL would be either remote or to an existing file. + + CdlNodeBody::check_properties(interp); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// Syntax: description + +int +CdlUserVisibleBody::parse_description(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_description", "result %d"); + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_Description, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + + +// ---------------------------------------------------------------------------- +// Syntax: display + +int +CdlUserVisibleBody::parse_display(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_display", "result %d"); + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_Display, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +// Syntax: doc + +int +CdlUserVisibleBody::parse_doc(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_doc", "result %d"); + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_Doc, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Persistence + +// ---------------------------------------------------------------------------- +// There is no data in a user visible object that users will want to edit, +// but the display string, the documentation, and the description are all +// useful and should be present in the savefile as comments. +// +// The intention is that the UserVisible information appears immediately +// above the option/component/whatever definition, e.g.: +// # +// # +// # + +void +CdlUserVisibleBody::save(CdlInterpreter interp, Tcl_Channel chan, int indentation, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlUserVisible::save"); + CYG_REPORT_FUNCARG5XV(this, interp, chan, indentation, minimal); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + CYG_ASSERTC(0 == indentation); + + if (!minimal) { + std::string data = ""; + std::string display = get_display(); + if ("" != display) { + data = std::string("# ") + display + "\n"; + } + // Note that this uses get_doc(), not get_doc_url(). The latter + // would give an absolute pathname that is applicable to the + // current user, but it would change if a different user loaded + // and saved the file. This is a bad idea in terms of version + // control. + std::string doc = get_doc(); + if ("" != doc) { + data += "# doc: " + doc + "\n"; + } + std::string description = get_description(); + if ("" != description) { + unsigned int i = 0; + while (i < description.size()) { + data += "# "; + while ((i < description.size()) && isspace(description[i])) { + i++; + } + while ((i < description.size()) && ('\n' != description[i])) { + data += description[i++]; + } + data += '\n'; + } + } + data += "#\n"; + + interp->write_data(chan, data); + } + + CYG_REPORT_RETURN(); +} + +//}}} + +//}}} +//{{{ CdlParentableBody + +// ---------------------------------------------------------------------------- +// A parentable object can have the parent property, i.e. it can be +// positioned anywhere in the hierarchy. There is no data associated +// with such an object. + +CdlParentableBody::CdlParentableBody() +{ + CYG_REPORT_FUNCNAME("CdlParentable:: default constructor"); + CYG_REPORT_FUNCARG1XV(this); + + change_parent_save_position = -1; + cdlparentablebody_cookie = CdlParentableBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlParentableBody::~CdlParentableBody() +{ + CYG_REPORT_FUNCNAME("CdlParentable:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlparentablebody_cookie = CdlParentableBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- + +std::string +CdlParentableBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlParentable::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "parentable"; +} + +// ---------------------------------------------------------------------------- + +bool +CdlParentableBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlParentableBody_Magic != cdlparentablebody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + return CdlNodeBody::check_this(zeal); +} + +// ---------------------------------------------------------------------------- +// Parsing support. There is just one property parser to be added. + +void +CdlParentableBody::add_property_parsers(std::vector& parsers) +{ + CYG_REPORT_FUNCNAME("CdlParentable::add_property_parsers"); + + static CdlInterpreterCommandEntry commands[] = + { + CdlInterpreterCommandEntry("parent", &CdlParentableBody::parse_parent), + CdlInterpreterCommandEntry("", 0) + }; + + for (int i = 0; commands[i].command != 0; i++) { + std::vector::const_iterator j; + for (j = parsers.begin(); j != parsers.end(); j++) { + if (commands[i].name == j->name) { + if (commands[i].command != j->command) { + CYG_FAIL("Property names are being re-used"); + } + break; + } + } + if (j == parsers.end()) { + parsers.push_back(commands[i]); + } + } + CdlNodeBody::add_property_parsers(parsers); + + CYG_REPORT_RETURN(); +} + +void +CdlParentableBody::check_properties(CdlInterpreter interp) +{ + CYG_REPORT_FUNCNAME("CdlParentable::check_properties"); + CYG_REPORT_FUNCARG2XV(this, interp); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + + if (has_property(CdlPropertyId_Parent)) { + if (count_properties(CdlPropertyId_Parent) > 1) { + CdlParse::report_error(interp, "", "There should be at most one `parent' property."); + } + CdlProperty_Reference refprop = dynamic_cast(get_property(CdlPropertyId_Parent)); + CYG_ASSERT_CLASSC(this); + if (get_name() == refprop->get_destination_name()) { + CdlParse::report_error(interp, "", std::string("Node ") + get_name() + " cannot be its own parent."); + } + } + + CdlNodeBody::check_properties(interp); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// Syntax:: parent + +void +CdlParentableBody::update_handler(CdlTransaction transaction, CdlNode source, CdlProperty prop, CdlNode dest, CdlUpdate change) +{ + CYG_REPORT_FUNCNAME("CdlParentable::update_handler"); + CYG_PRECONDITION_CLASSC(source); + CYG_PRECONDITION_ZERO_OR_CLASSC(dest); + + // Value and activity updates are of no interest. + if ((CdlUpdate_ValueChange == change) || (CdlUpdate_ActiveChange == change)) { + CYG_REPORT_RETURN(); + return; + } + + // Ditto for the second stage Init. + if (CdlUpdate_Init == change) { + CYG_REPORT_RETURN(); + return; + } + + // If this object is being unloaded then we need to clean up the hierarchy. + // Ordinary nodes must be re-parented below the owning loadable. The + // loadable itself must be re-parented below the toplevel. A subsequent + // calls to remove_loadable_from_toplevel() will ensure that the loadable + // is now completely isolated from the remaining configuration, but can + // still be put back. + if (CdlUpdate_Unloading == change) { + CdlToplevel toplevel = source->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + CdlLoadable owner = source->get_owner(); + CYG_ASSERT_CLASSC(owner); + CdlLoadable loadable = dynamic_cast(source); + CYG_ASSERT_ZERO_OR_CLASSC(loadable); + + if (0 != loadable) { + toplevel->change_parent(owner, source->get_parent(), toplevel, source); + } else { + toplevel->change_parent(owner, source->get_parent(), owner, source); + } + + CYG_REPORT_RETURN(); + return; + } + + // We should have: + // 1) change == Loaded, dest == (0 | valid) + // 2) change == Created, dest == valid + // 3) change == Destroyed, dest == valid (still) + CYG_ASSERTC((CdlUpdate_Loaded == change) || (CdlUpdate_Created == change) || (CdlUpdate_Destroyed == change)); + CYG_ASSERTC((CdlUpdate_Created != change) || (0 != dest)); + CYG_ASSERTC((CdlUpdate_Destroyed != change) || (0 != dest)); + + if (CdlUpdate_Destroyed == change) { + dest = 0; + } + + // Now either dest is valid or it is not. If it is then we need to + // reparent below the destination. Otherwise if the specified + // parent is "" then we need to reparent below the root. Otherwise + // the node ends up in the orphans container. There are a few + // nasty special cases to consider like reparenting below + // something that is not a container. + if (0 == dest) { + CdlToplevel toplevel = source->get_toplevel(); + + CdlProperty_Reference refprop = dynamic_cast(prop); + if ("" == refprop->get_destination_name()) { + dest = toplevel; + // Now to find the correct insertion point. Nodes which should be + // reparented below the root should come first, ahead of any nodes + // which are not specifically reparented. + const std::vector& contents = toplevel->get_contents(); + unsigned int index; + for (index = 0; index < contents.size(); index++) { + if (!contents[index]->has_property(CdlPropertyId_Parent)) { + break; + } + } + toplevel->change_parent(source->get_owner(), source->get_parent(), toplevel, source, index); + + } else { + // Orphan the node. It still has a parent, either as a + // consequence of the loading process or because of a previous + // binding operation. + toplevel->change_parent(source->get_owner(), source->get_parent(), 0, source); + } + + // The Unresolved conflict is handled by + // CdlProperty_Reference::update(). The "else" code below may + // have created some additional data conflicts. + transaction->clear_structural_conflicts(source, prop, &CdlConflict_DataBody::test); + + // Changing the parent may affect the "active" status. + bool old_state = transaction->is_active(source); + bool new_state = source->test_active(transaction); + if (old_state != new_state) { + transaction->set_active(source, new_state); + } + + } else { + // The node should no longer be an orphan - probably. + + // Check that the destination is actually a container. If it is, + // reparenting is possible. + CdlContainer dest_container = dynamic_cast(dest); + if (0 == dest_container) { + + // The reference might be resolved, but reparenting is still not possible. + // Leave the object orphaned as at present, and create a suitable conflict + // object. + std::string msg = source->get_class_name() + " " + source->get_name() + " cannot be reparented below " + + dest->get_class_name() + " " + dest->get_name() + "\n The latter is not a container."; + CdlConflict_DataBody::make(transaction, source, prop, msg); + + } else { + + CdlContainer tmp = dynamic_cast(source); + if ((0 != tmp) && tmp->contains(dest_container, true)) { + + // Somebody trying to be clever and reparent an object + // below one of its existing children? Note that with + // sufficiently careful use of parent statements this + // might actually be legal, but for now treat it as + // too dangerous. + std::string msg = source->get_class_name() + " " + source->get_name() + " cannot be reparented below " + + dest->get_class_name() + " " + dest->get_name() + "\n This would introduce a cycle."; + CdlConflict_DataBody::make(transaction, source, prop, msg); + + } else { + + // It is possible to reparent the object to its correct location + CdlToplevel toplevel = source->get_toplevel(); + CYG_ASSERTC(toplevel == dest->get_toplevel()); + toplevel->change_parent(source->get_owner(), source->get_parent(), dest_container, source); + + bool old_state = transaction->is_active(source); + bool new_state = source->test_active(transaction); + if (old_state != new_state) { + transaction->set_active(source, new_state); + } + } + } + } + + CYG_REPORT_RETURN(); +} + +int +CdlParentableBody::parse_parent(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_parent", "result %d"); + + int result = CdlParse::parse_reference_property(interp, argc, argv, CdlPropertyId_Parent, 0, 0, true, &update_handler); + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} diff --git a/tools/src/libcdl/build.cxx b/tools/src/libcdl/build.cxx new file mode 100644 index 00000000..b9636278 --- /dev/null +++ b/tools/src/libcdl/build.cxx @@ -0,0 +1,2235 @@ +//{{{ Banner + +//========================================================================== +// +// build.cxx +// +// libcdl support for building and for header file generation +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002, 2003 Bart Veer +// Copyright (C) 1999, 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1999-06-018 +// +//####DESCRIPTIONEND#### +//========================================================================== + +//}}} +//{{{ #include's + +// ---------------------------------------------------------------------------- +#include "cdlconfig.h" + +// Get the infrastructure types, assertions, tracing and similar +// facilities. +#include +#include + +// defines everything implemented in this module. +// It implicitly supplies , and because +// the class definitions rely on these headers. +#include + +//}}} + +//{{{ Statics + +// ---------------------------------------------------------------------------- +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlBuildLoadableBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlBuildableBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlDefineLoadableBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlDefinableBody); + +//}}} +//{{{ CdlBuildableBody + +//{{{ Basics + +// ---------------------------------------------------------------------------- +// There is little data specific to a buildable. The only distinguishing +// feature is the set of properties that are supported, plus a handful +// of functions to extract that information. + +CdlBuildableBody::CdlBuildableBody() +{ + CYG_REPORT_FUNCNAME("CdlBuildable:: default constructor"); + CYG_REPORT_FUNCARG1XV(this); + + // There is no data to initialize yet + cdlbuildablebody_cookie = CdlBuildableBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlBuildableBody::~CdlBuildableBody() +{ + CYG_REPORT_FUNCNAME("CdlBuildable:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlbuildablebody_cookie = CdlBuildableBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- + +std::string +CdlBuildableBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlBuildable::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "buildable"; +} + +// ---------------------------------------------------------------------------- + +bool +CdlBuildableBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlBuildableBody_Magic != cdlbuildablebody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + return CdlNodeBody::check_this(zeal); +} + +//}}} +//{{{ Add and check property parsers + +// ---------------------------------------------------------------------------- + +void +CdlBuildableBody::add_property_parsers(std::vector& parsers) +{ + CYG_REPORT_FUNCNAME("CdlBuildable::add_property_parsers"); + + static CdlInterpreterCommandEntry commands[] = + { + CdlInterpreterCommandEntry("compile", &CdlBuildableBody::parse_compile ), + CdlInterpreterCommandEntry("object", &CdlBuildableBody::parse_object ), + CdlInterpreterCommandEntry("make_object", &CdlBuildableBody::parse_make_object), + CdlInterpreterCommandEntry("make", &CdlBuildableBody::parse_make ), + CdlInterpreterCommandEntry("build_proc", &CdlBuildableBody::parse_build_proc ), + CdlInterpreterCommandEntry("", 0 ), + }; + + for (int i = 0; commands[i].command != 0; i++) { + std::vector::const_iterator j; + for (j = parsers.begin(); j != parsers.end(); j++) { + if (commands[i].name == j->name) { + if (commands[i].command != j->command) { + CYG_FAIL("Property names are being re-used"); + } + break; + } + } + if (j == parsers.end()) { + parsers.push_back(commands[i]); + } + } + CdlNodeBody::add_property_parsers(parsers); + + CYG_REPORT_RETURN(); +} + +void +CdlBuildableBody::check_properties(CdlInterpreter interp) +{ + CYG_REPORT_FUNCNAME("CdlBuildable::check_properties"); + CYG_REPORT_FUNCARG2XV(this, interp); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + + // There are no real constraints on the number of compile + // properties etc. + // TODO: check that the relevant sources files exist, + // unless marked appropriately (build_proc can create + // new source files). + + CdlNodeBody::check_properties(interp); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Property parsers + +// ---------------------------------------------------------------------------- +// Syntax: compile +// +// There are a couple of checks that could be performed here: +// +// 1) does each listed file actually exist? Unfortunately that approach +// falls foul of build_proc, which is allowed to generate source files +// on the fly. +// +// 2) does the file have a recognised suffix such as .c or .cxx. This +// relies libcdl having some way of knowing how to treat different +// files. +// +// For now there are no validity checks. +// +// A future extension may allow dependencies to be listed, as an +// option. This would allow component vendors to specify that +// particular custom build steps should happen before particular +// compilations, a more robust approach than the current priority +// scheme. + +int +CdlBuildableBody::parse_compile(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_compile", "result %d"); + static char* options[] = { + "library:", + 0 + }; + + int result = CdlParse::parse_stringvector_property(interp, argc, argv, CdlPropertyId_Compile, options, 0, true); + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +// A utility to break a custom build step down into its three components. +// +// A custom build step takes the form: +// target : deps +// rules +// +// This utility function takes a single string of this form and breaks +// it down into its constituent parts. +// +// NOTE: this will need lots of extra code in future to allow for +// escaped characters, spaces in filenames, etc. For now just keep +// things simple. + +bool +CdlBuildableBody::split_custom_build_step(std::string str_data, std::string& target, std::string& deps, std::string& rules, + std::string& error_msg) +{ + CYG_REPORT_FUNCNAMETYPE("CdlBuildable::split_custom_build_step", "result %d"); + + target = ""; + deps = ""; + rules = ""; + error_msg = ""; + + const char* data = str_data.c_str(); + + // Skip any leading white space, and make sure that this leaves some real data. + while (('\0' != *data) && isspace(*data)) { + data++; + } + if ('\0' == *data) { + error_msg = "no data in custom build_step"; + CYG_REPORT_RETVAL(false); + return false; + } + + // Now extract the target. This consists of any sequence of characters + // upto space, tab, colon. + for ( ; ('\0' != *data) && (':' != *data) && (' ' != *data) && ('\t' != *data); data++) { + target += *data; + } + // Discard any spaces or tabs, they are of no interest + while ((' ' == *data) || ('\t' == *data)) { + data++; + } + // The current character should be a colon + if (':' != *data) { + error_msg = "expecting a colon `;' after the target `" + target + "'"; + CYG_REPORT_RETVAL(false); + return false; + } + + // Move past the colon, and skip any further spaces or tabs + data++; + while (('\0' != *data) && ((' ' == *data) || ('\t' == *data))) { + data++; + } + + // Everything from here until the end of line should be part of the deps field, + // including white space. + while (('\0' != *data) && ('\n' != *data) && (';' != *data)) { + deps += *data++; + } + + if ("" == deps) { + error_msg = "expecting dependency list after `" + target + ":'"; + CYG_REPORT_RETVAL(false); + return false; + } + + // Having some rules is compulsory. + if ('\0' == *data) { + error_msg = "expecting one or more rules after the dependency list"; + CYG_REPORT_RETVAL(false); + return false; + } else { + // We are currently at \n or ;, move on to the actual rules + data++; + } + + // Rules consist of one or more lines. Any leading white space on a given + // line should be discarded. + while ('\0' != *data) { + // Processing the current rule. Skip leading spaces and tabs + while ((' ' == *data) || ('\t' == *data)) { + data++; + } + // Now add everything up to the next newline or EOD to the rules. + while (('\0' != *data) && ('\n' != *data)) { + rules += *data++; + } + + // Terminate this line of the rules with a newline, even if that + // character is absent from the raw data. + rules += '\n'; + + // And ignore the newline in the raw data itself + if ('\n' == *data) { + data++; + } + } + + // Better make sure that there are some rules. All of the looping above + // may just have left white space + if ("" == rules) { + error_msg = "no rules provided"; + CYG_REPORT_RETVAL(false); + return false; + } + + // Everything is ok. + + CYG_REPORT_RETVAL(true); + return true; +} + + +// ---------------------------------------------------------------------------- +// syntax: make +// +// There is rather a lot of checking to be done. +// +// 1) the priority should be valid. In particular it should be a number +// within a reasonable range. +// +// 2) the rules should take the form: +// : ;|\n rules +// +// Where the target should be a single file, identical to the +// first property argument. + +static void +parse_make_final_check(CdlInterpreter interp, CdlProperty_String prop) +{ + CYG_REPORT_FUNCNAME("parse_make_final_check"); + CYG_PRECONDITION_CLASSC(interp); + CYG_PRECONDITION_CLASSC(prop); + + std::string prio_string = prop->get_option("priority"); + if ("" != prio_string) { + cdl_int tmp = 1; + if (!Cdl::string_to_integer(prio_string, tmp)) { + CdlParse::report_property_parse_error(interp, prop, + "Invalid priority option, priorities should be simple numbers."); + } else { + if ((tmp < 1) || (tmp > 1024)) { + CdlParse::report_property_parse_error(interp, prop, + "Invalid priority value, priorities should be in the range 1 to 1024."); + } + } + } + + std::string data = prop->get_string(); + std::string target; + std::string deps; + std::string rules; + std::string error_msg; + + if (!CdlBuildableBody::split_custom_build_step(data, target, deps, rules, error_msg)) { + CdlParse::report_property_parse_error(interp, prop, "Invalid custom build step, " + error_msg); + } +} + +int +CdlBuildableBody::parse_make(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_make", "result %d"); + static char* options[] = { + "priority:", + 0 + }; + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_Make, options, &parse_make_final_check); + + CYG_REPORT_RETVAL(result); + return result; +} + + +// ---------------------------------------------------------------------------- +// syntax: make_object +// +// The rules here are much the same as for the "make" property. + +static void +parse_make_object_final_check(CdlInterpreter interp, CdlProperty_String prop) +{ + CYG_REPORT_FUNCNAME("parse_make_object_final_check"); + CYG_PRECONDITION_CLASSC(interp); + CYG_PRECONDITION_CLASSC(prop); + + + std::string prio_string = prop->get_option("priority"); + if ("" != prio_string) { + cdl_int tmp = 1; + if (!Cdl::string_to_integer(prio_string, tmp)) { + CdlParse::report_property_parse_error(interp, prop, + "Invalid priority option, priorities should be simple numbers."); + } else { + if ((tmp < 1) || (tmp > 1024)) { + CdlParse::report_property_parse_error(interp, prop, + "Invalid priority value, priorities should be in the range 1 to 1024."); + } + } + } + + std::string data = prop->get_string(); + std::string target; + std::string deps; + std::string rules; + std::string error_msg; + + if (!CdlBuildableBody::split_custom_build_step(data, target, deps, rules, error_msg)) { + CdlParse::report_property_parse_error(interp, prop, "Invalid custom build step, " + error_msg); + } +} + +int +CdlBuildableBody::parse_make_object(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_make_object", "result %d"); + static char* options[] = { + "library:", + "priority:", + 0 + }; + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_MakeObject, options, + &parse_make_object_final_check); + + CYG_REPORT_RETVAL(result); + return result; +} + + +// ---------------------------------------------------------------------------- +// Syntax: object ... + +int +CdlBuildableBody::parse_object(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_object", "result %d"); + static char* options[] = { + "library:", + 0 + }; + + int result = CdlParse::parse_stringvector_property(interp, argc, argv, CdlPropertyId_Object, options, 0, true); + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +// Syntax: build_proc { tcl code } + +int +CdlBuildableBody::parse_build_proc(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_build_proc", "result %d"); + + int result = CdlParse::parse_tclcode_property(interp, argc, argv, CdlPropertyId_BuildProc, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ update_build_info() + +// ---------------------------------------------------------------------------- +// Most of the work is done in update_all_build_info(). The update_build_info() +// merely checks the active and enabled state first. +void +CdlBuildableBody::update_build_info(CdlBuildInfo_Loadable& build_info, std::string library) const +{ + CYG_REPORT_FUNCNAME("CdlBuildable::update_build_info"); + CYG_REPORT_FUNCARG2XV(this, &build_info); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != library); + + if (!is_active()) { + CYG_REPORT_RETURN(); + return; + } + + CdlConstValuable valuable = dynamic_cast(this); + if (0 != valuable) { + if (!valuable->is_enabled()) { + CYG_REPORT_RETURN(); + return; + } + } + + update_all_build_info(build_info, library); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ update_all_build_info() + +// ---------------------------------------------------------------------------- +// There are four properties to be considered, each of which may occur +// multiple times: "compile", "object", "make_object", and "make". +// Each of these will result in separate additions to the build_info +// structure. + +void +CdlBuildableBody::update_all_build_info(CdlBuildInfo_Loadable& build_info, std::string package_library) const +{ + CYG_REPORT_FUNCNAME("CdlBuildable::update_all_build_info"); + CYG_REPORT_FUNCARG2XV(this, &build_info); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != package_library); + + // Get some information about the owning loadable first. + CdlLoadable loadable = get_owner(); + CYG_ASSERT_CLASSC(loadable); + std::string directory = loadable->get_directory(); + CYG_ASSERTC("" != directory); + CdlInterpreter interp = loadable->get_interpreter(); + CYG_ASSERT_CLASSC(interp); + + // The interpreter needs some information about the locations + // of various things. This code has to be kept in step with + // CdlLoadable::find_relative_file() + interp->set_variable("::cdl_topdir", get_toplevel()->get_directory()); + interp->set_variable("::cdl_pkgdir", directory); + + // For many packages the sources will reside in a src subdirectory. + // For simple packages the sources may live directly at the toplevel + bool has_src_subdir = loadable->has_subdirectory("src"); + + // NOTE: the object property is not yet supported + std::vector compile_properties; + get_properties(CdlPropertyId_Compile, compile_properties); + std::vector makeobject_properties; + get_properties(CdlPropertyId_MakeObject, makeobject_properties); + std::vector make_properties; + get_properties(CdlPropertyId_Make, make_properties); + std::vector::const_iterator prop_i; + + for (prop_i = compile_properties.begin(); prop_i != compile_properties.end(); prop_i++) { + CdlProperty_StringVector compile_prop = dynamic_cast(*prop_i); + CYG_LOOP_INVARIANT_CLASSC(compile_prop); + + // Does this property have a library option? + std::string current_library = compile_prop->get_option("library"); + if ("" == current_library) { + current_library = package_library; + } + + const std::vector& files = compile_prop->get_strings(); + std::vector::const_iterator file_i; + + for (file_i = files.begin(); file_i != files.end(); file_i++) { + + // For each listed file, try to find it. If this is unsuccessful + // then assume that the file will be generated later on. + std::string path = loadable->find_relative_file(*file_i, "src"); + if ("" == path) { + if (has_src_subdir) { + path = "src/" + *file_i; + } else { + path = *file_i; + } + } + + // Now check whether or not the specified file is already present. + std::vector::const_iterator info_i; + for (info_i = build_info.compiles.begin(); info_i != build_info.compiles.end(); info_i++) { + if ((current_library == info_i->library) && (path == info_i->source)) { + break; + } + } + if (info_i == build_info.compiles.end()) { + CdlBuildInfo_Compile new_info; + new_info.library = current_library; + new_info.source = path; + build_info.compiles.push_back(new_info); + } + } + } + + for (prop_i = makeobject_properties.begin(); prop_i != makeobject_properties.end(); prop_i++) { + CdlProperty_String prop = dynamic_cast(*prop_i); + CYG_LOOP_INVARIANT_CLASSC(prop); + + // Does thie property have a library option? + std::string current_library = prop->get_option("library"); + if ("" == current_library) { + current_library = package_library; + } + + // How about a priority field? The default priority for make_object is 100 + // We can rely on the validation done during the parsing process + cdl_int priority = 100; + std::string priority_option = prop->get_option("priority"); + if ("" != priority_option) { + Cdl::string_to_integer(priority_option, priority); + } + + // What we need now is the separate target, deps, and rules. These + // can be obtained via a utility. The raw data will have been validated + // already. + std::string raw_data = prop->get_string(); + std::string target; + std::string deps; + std::string rules; + std::string error_msg; + bool result; + + result = CdlBuildableBody::split_custom_build_step(raw_data, target, deps, rules, error_msg); + CYG_ASSERTC(true == result); + + // Construct a local object, then copy it into the vector + CdlBuildInfo_MakeObject local_copy; + local_copy.priority = priority; + local_copy.library = current_library; + local_copy.object = target; + local_copy.deps = deps; + local_copy.rules = rules; + + build_info.make_objects.push_back(local_copy); + } + + for (prop_i = make_properties.begin(); prop_i != make_properties.end(); prop_i++) { + CdlProperty_String prop = dynamic_cast(*prop_i); + CYG_LOOP_INVARIANT_CLASSC(prop); + + // Is there a priority field? The default priority for make is + // 300 We can rely on the validation done during the parsing + // process + cdl_int priority = 300; + std::string priority_option = prop->get_option("priority"); + if ("" != priority_option) { + Cdl::string_to_integer(priority_option, priority); + } + + // What we need now is the separate target, deps, and rules. These + // can be obtained via a utility. The raw data will have been validated + // already. + std::string raw_data = prop->get_string(); + std::string target; + std::string deps; + std::string rules; + std::string error_msg; + bool result; + + result = CdlBuildableBody::split_custom_build_step(raw_data, target, deps, rules, error_msg); + CYG_ASSERTC(true == result); + + // Construct a local object, then copy it into the vector + CdlBuildInfo_Make local_copy; + local_copy.priority = priority; + local_copy.target = target; + local_copy.deps = deps; + local_copy.rules = rules; + + build_info.makes.push_back(local_copy); + } + + CYG_REPORT_RETURN(); +} + +//}}} + +//}}} +//{{{ CdlBuildLoadableBody + +//{{{ Class variables + +// ---------------------------------------------------------------------------- +// This variable controls the default library that should be generated. +// Some applications may wish to override this. +char* CdlBuildLoadableBody::default_library_name = "libtarget.a"; + +// The pattern that should be used to identify header files. +// FIXME: this information should come out of a data file +char* CdlBuildLoadableBody::default_headers_glob_pattern = "*.h *.hxx *.inl *.si *.inc"; + +//}}} +//{{{ The simple stuff + +// ---------------------------------------------------------------------------- + +CdlBuildLoadableBody::CdlBuildLoadableBody() + : CdlLoadableBody() +{ + CYG_REPORT_FUNCNAME("CdlBuildLoadable:: default constructor"); + CYG_REPORT_FUNCARG1XV(this); + + // There is no data to initialize + cdlbuildloadablebody_cookie = CdlBuildLoadableBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlBuildLoadableBody::~CdlBuildLoadableBody() +{ + CYG_REPORT_FUNCNAME("CdlBuildLoadable:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlbuildloadablebody_cookie = CdlBuildLoadableBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- + +std::string +CdlBuildLoadableBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlBuildLoadable::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "build_loadable"; +} + +// ---------------------------------------------------------------------------- + +bool +CdlBuildLoadableBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlBuildLoadableBody_Magic != cdlbuildloadablebody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + return CdlContainerBody::check_this(zeal) && CdlNodeBody::check_this(zeal); +} + +//}}} +//{{{ Property parsers + +// ---------------------------------------------------------------------------- + +void +CdlBuildLoadableBody::add_property_parsers(std::vector& parsers) +{ + CYG_REPORT_FUNCNAME("CdlBuildLoadable::add_property_parsers"); + + static CdlInterpreterCommandEntry commands[] = + { + CdlInterpreterCommandEntry("library", &CdlBuildLoadableBody::parse_library ), + CdlInterpreterCommandEntry("makefile", &CdlBuildLoadableBody::parse_makefile ), + CdlInterpreterCommandEntry("include_dir", &CdlBuildLoadableBody::parse_include_dir ), + CdlInterpreterCommandEntry("include_files", &CdlBuildLoadableBody::parse_include_files ), + CdlInterpreterCommandEntry("", 0 ) + }; + + for (int i = 0; commands[i].command != 0; i++) { + std::vector::const_iterator j; + for (j = parsers.begin(); j != parsers.end(); j++) { + if (commands[i].name == j->name) { + if (commands[i].command != j->command) { + CYG_FAIL("Property names are being re-used"); + } + break; + } + } + if (j == parsers.end()) { + parsers.push_back(commands[i]); + } + } + + CYG_REPORT_RETURN(); +} + +void +CdlBuildLoadableBody::check_properties(CdlInterpreter interp) +{ + CYG_REPORT_FUNCNAME("CdlBuildLoadable::check_properties"); + CYG_REPORT_FUNCARG2XV(this, interp); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + + CdlNodeBody::check_properties(interp); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// syntax: library +// +// NOTE: there should probably be a check that the library name is in +// a valid format, i.e. libxxx.a + +int +CdlBuildLoadableBody::parse_library(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_library", "result %d"); + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_Library, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +// syntax: makefile +// +// NOTE: possibly there should be a check that the makefile exists. +// Do we want to allow build_proc's to generate makefiles? +int +CdlBuildLoadableBody::parse_makefile(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_makefile", "result %d"); + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_Makefile, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +// syntax: include_dir +int +CdlBuildLoadableBody::parse_include_dir(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_include_dir", "result %d"); + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_IncludeDir, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +// Syntax: include_files +// +// This lists the header files that should be copied into the install tree +// as part of the build operation. In the absence of an include_files property +// there should be an include subdirectory, and all files in that subdirectory +// are assumed to be exportable headers. +// +// NOTE: add a finalizer to check that the files exist or get created. + +int +CdlBuildLoadableBody::parse_include_files(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_include_files", "result %d"); + + int result = CdlParse::parse_stringvector_property(interp, argc, argv, CdlPropertyId_IncludeFiles, 0, 0, true); + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ update_build_info() + +// ---------------------------------------------------------------------------- +// This utility routine takes care of filling in a Buildinfo_Loadable +// structure with the appropriate header file information. This involves +// the following: +// +// 1) there may be an include_dir property. This affects the destination +// of any header files that are listed. +// +// 2) the loadable may or may not have an include subdirectory. For +// non-trivial packages the include subdirectory provides a clean +// way of separating interface and implementation. For simple +// packages it is too heavyweight. +// +// 3) there may be one or more include_files property. If so then these +// specify all the files that should be exported. +// +// 4) otherwise if there is an include subdirectory then we need to +// know all the header files in that subdirectory. A Tcl script is +// used for this. +// +// 5) otherwise all the header files below the package directory itself +// are of interest. + +static void +update_header_file_info(CdlConstBuildLoadable loadable, CdlBuildInfo_Loadable& build_info) +{ + CYG_REPORT_FUNCNAME("update_header_file_info"); + CYG_REPORT_FUNCARG2XV(loadable, &build_info); + CYG_PRECONDITION_CLASSC(loadable); + + std::string dest_dir = ""; + CdlProperty include_dir_prop = loadable->get_property(CdlPropertyId_IncludeDir); + if (0 != include_dir_prop) { + CdlProperty_String strprop = dynamic_cast(include_dir_prop); + CYG_ASSERT_CLASSC(strprop); + dest_dir = strprop->get_string(); + } + + bool has_include_subdir = loadable->has_subdirectory("include"); + + std::vector include_file_properties; + loadable->get_properties(CdlPropertyId_IncludeFiles, include_file_properties); + if (include_file_properties.size() > 0) { + std::vector::const_iterator prop_i; + for (prop_i = include_file_properties.begin(); prop_i != include_file_properties.end(); prop_i++) { + + CdlProperty_StringVector strvprop = dynamic_cast(*prop_i); + CYG_ASSERT_CLASSC(strvprop); + + const std::vector& filenames = strvprop->get_strings(); + std::vector::const_iterator file_i; + for (file_i = filenames.begin(); file_i != filenames.end(); file_i++) { + std::string path = loadable->find_relative_file(*file_i, "include"); + // Assume that the header file will be generated by a build_proc + if ("" == path) { + if (has_include_subdir) { + path = "include/" + *file_i; + } else { + path = *file_i; + } + } + CdlBuildInfo_Header local_copy; + local_copy.source = path; + local_copy.destination = ""; + if ("" != dest_dir) { + local_copy.destination = dest_dir + "/"; + } + // At this stage "path" may begin with "include/", which should not + // be present in the destination. + const char* tmp = path.c_str(); + if (0 == strncmp("include/", tmp, 8)) { + local_copy.destination += &(tmp[8]); + } else { + local_copy.destination += path; + } + build_info.headers.push_back(local_copy); + } + } + CYG_REPORT_RETURN(); + return; + } + + // It is necessary to search for the appropriate files. + CdlInterpreter interp = loadable->get_interpreter(); + std::string path = loadable->get_toplevel()->get_directory() + "/" + loadable->get_directory(); + if (has_include_subdir) { + std::vector files; + std::vector::const_iterator file_i; + interp->locate_all_files(path + "/include", files); + for (file_i = files.begin(); file_i != files.end(); file_i++) { + // NOTE: for now discard any header files in the pkgconf subdirectory + if (0 == strncmp("pkgconf/", file_i->c_str(), 8)) { + continue; + } + if ('~' == *(file_i->rbegin())) { + continue; + } + CdlBuildInfo_Header local_copy; + local_copy.source = "include/" + *file_i; + local_copy.destination = ""; + if ("" != dest_dir) { + local_copy.destination = dest_dir + "/"; + } + local_copy.destination += *file_i; + build_info.headers.push_back(local_copy); + } + } else { + // Look for all header files, which for now means files with + // a .h, .hxx, .inl or .inc extension. + // FIXME: the definition of what constitutes a header file + // should not be hard-wired here. + std::vector files; + std::vector::const_iterator file_i; + interp->locate_all_files(path, files); + for (file_i = files.begin(); file_i != files.end(); file_i++) { + + // Problems with libstdc++ versions, use C comparisons instead. + const char* c_string = file_i->c_str(); + unsigned int len = strlen(c_string); + if (((len >= 2) && (0 == strncmp(c_string + len - 2, ".h", 2))) || + ((len >= 4) && (0 == strncmp(c_string + len - 4, ".hxx", 4))) || + ((len >= 4) && (0 == strncmp(c_string + len - 4, ".inl", 4))) || + ((len >= 4) && (0 == strncmp(c_string + len - 4, ".inc", 4)))) { + + CdlBuildInfo_Header local_copy; + local_copy.source = *file_i; + local_copy.destination = ""; + if ("" != dest_dir) { + local_copy.destination = dest_dir + "/"; + } + local_copy.destination += *file_i; + build_info.headers.push_back(local_copy); + } + } + } + + CYG_REPORT_RETURN(); + return; +} + +// ---------------------------------------------------------------------------- +// Updating a loadable build's info involves two steps. First, there +// is some information associated with the loadable as a whole such as +// header files. Second, each buildable in the loadable (including itself) +// may contain properties such as compile etc. This is all handled via +// a CdlBuildable member function. + +void +CdlBuildLoadableBody::update_build_info(CdlBuildInfo& build_info) const +{ + CYG_REPORT_FUNCNAME("CdlBuildLoadable::update_build_info"); + CYG_REPORT_FUNCARG2XV(this, &build_info); + CYG_PRECONDITION_THISC(); + + // It is not possible to disable a loadable itself: either the + // loadable is present or it is not (although in some cases users + // may be able to change versions). However, because of reparenting + // it is possible for a loadable to be below a disabled container, + // and hence it is still necessary to check whether or not the + // loadable is active. + if (!is_active()) { + CYG_REPORT_RETURN(); + return; + } + + // Time to add a new CdlBuildInfo_Loadable object to the current + // vector. The name and directory can be filled in straightaway, + // the vectors will all be initialized to empty. + CdlBuildInfo_Loadable tmp_info; + build_info.entries.push_back(tmp_info); + CdlBuildInfo_Loadable& this_info = *(build_info.entries.rbegin()); + this_info.name = get_name(); + this_info.directory = get_directory(); + + // Take care of the header files + update_header_file_info(this, this_info); + + // Work out the library name appropriate for this loadable. + // There may be a library property, otherwise the global default + // should be used. + std::string loadable_library = default_library_name; + if (has_property(CdlPropertyId_Library)) { + CdlProperty_String strprop = dynamic_cast(get_property(CdlPropertyId_Library)); + loadable_library = strprop->get_string(); + } + + const std::vector& contents = get_owned(); + std::vector::const_iterator node_i; + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + CdlBuildable buildable = dynamic_cast(*node_i); + if (0 != buildable) { + buildable->update_build_info(this_info, loadable_library); + } + } + + CYG_REPORT_RETURN(); +} + +// This is much the same as the above, but there is no test for +// active either at the loadable level or for the individual buildables. +void +CdlBuildLoadableBody::update_all_build_info(CdlBuildInfo& build_info) const +{ + CYG_REPORT_FUNCNAME("CdlBuildLoadable::update_all_build_info"); + CYG_REPORT_FUNCARG2XV(this, &build_info); + CYG_PRECONDITION_THISC(); + + CdlBuildInfo_Loadable tmp_info; + build_info.entries.push_back(tmp_info); + CdlBuildInfo_Loadable& this_info = *(build_info.entries.rbegin()); + this_info.name = get_name(); + this_info.directory = get_directory(); + + std::string loadable_library = default_library_name; + if (has_property(CdlPropertyId_Library)) { + CdlProperty_String strprop = dynamic_cast(get_property(CdlPropertyId_Library)); + loadable_library = strprop->get_string(); + } + + const std::vector& contents = get_owned(); + std::vector::const_iterator node_i; + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + CdlBuildable buildable = dynamic_cast(*node_i); + if (0 != buildable) { + buildable->update_build_info(this_info, loadable_library); + } + } + + CYG_REPORT_RETURN(); + CYG_REPORT_RETURN(); +} + +//}}} + +//}}} +//{{{ Version number #define's + +// ---------------------------------------------------------------------------- +// Given a package xxxPKG_A_B_C with a version V1_2_3, generate additional +// #define's of the form: +// +// #define xxxNUM_A_B_C_VERSION_MAJOR 1 +// #define xxxNUM_A_B_C_VERSION_MINOR 2 +// #define xxxNUM_A_B_C_VERSION_RELEASE 3 +// +// The goal here is to allow application code to cope with API +// changes (which of course should be a rare event but cannot be +// eliminated completely). C preprocessor #if statements are +// essentially limited to numerical values, so there is no easy +// way of coping with V1_2_3 at the preprocessor level. However it +// is possible to cope with VERSION_NUMBER #define's. +// +// Note that only application code and third party packages are +// affected. +// +// These #define's go into system.h, alongside the main definition of +// the package. There seems to be little point in putting them in the +// package's own configuration header. +// +// There are three problems. First, what should be done for packages +// which do not follow the naming conventions? Given a completely +// random package rather than something like xxxPKG_..., what symbol +// names should be used? Basically, if the package does not follow the +// naming convention then there is no safe way of generating new +// symbols. Any names that are chosen might clash. Of course even for +// packages that do follow the naming convention a clash is still +// possible, just a lot less likely. +// +// Conclusion: if a package does not follow the naming convention, do +// not generate version #define's for it. +// +// Second, what happens if a different version numbering scheme is +// used? For example the release number might be absent. Version +// numbering schemes might change between releases, but application +// code may still check the #define's. +// +// Third and related, what should happen for "current" and anoncvs? Do +// we want to look at what other versions are installed and bump one +// of the numbers? +// +// Conclusion: the version #define's always have to be generated, +// even if they are not present in the version string, to allow +// application code to test these symbols anyway. A safe default is +// necessary, and -1 is probably the best bet. For example, if +// the version is bumped from 1.3.287 to 1.4 then the release number +// for the latter is set to -1. Another possible default would be +// 0, but that could cause problems for packages that start counting +// from 0 (not a common practice, but...) +// +// This leaves the question of what to do about "current". Chances are +// that "current" comes from anoncvs and is always more recent than +// any official release, so when comparing versions "current" should +// always be greater than anything else. This can be achieved by using +// a sufficiently large number for the major version. In practice +// it is cleaner to have another #define to indicate the current +// version, and then define package versions to match, i.e.: +// +// #define CYGNUM_VERSION_CURRENT 0x7fffff00 +// ... +// #define xxxNUM_A_B_C_VERSION_MAJOR CYGNUM_VERSION_CURRENT +// #define xxxNUM_A_B_C_VERSION_MINOR -1 +// #define xxxNUM_A_B_C_VERSION_RELEASE -1 +// +// All comparisons should now work sensibly. Leaving a little bit +// of slack for VERSION_CURRENT seems like a good precaution. + +static void +system_h_add_version_header(Tcl_Channel system_h) +{ + CYG_REPORT_FUNCNAME("system_h_add_version_header"); + Tcl_Write(system_h, "#define CYGNUM_VERSION_CURRENT 0x7fffff00\n", -1); + CYG_REPORT_RETURN(); +} + +static void +system_h_add_package_versioning(Tcl_Channel system_h, std::string name, std::string value) +{ + CYG_REPORT_FUNCNAME("system_h_add_package_versioning"); + + char name_buf[256]; + char line_buf[512]; + + // The first thing to check is that the package name can be used + // as the basis for the version symbols. + bool ok = false; + unsigned int i; + for (i = 0; i < name.size(); i++) { + if ('_' == name[i]) { + if (3 < i) { + if ((name[i-3] == 'P') && (name[i-2] == 'K') && (name[i-1] == 'G')) { + ok = true; + } + } + break; + } + } + if (name.size() >= 256) { + ok = false; + } + if (!ok) { + CYG_REPORT_RETURN(); + return; + } + + strcpy(name_buf, name.c_str()); + + // Change from xxxPKG to xxxNUM + name_buf[i - 3] = 'N'; + name_buf[i - 2] = 'U'; + name_buf[i - 1] = 'M'; + + // Now determine the version strings. + std::string major = "-1"; + std::string minor = "-1"; + std::string release = "-1"; + if ("current" == value) { + major = "CYGNUM_VERSION_CURRENT"; + } else { + Cdl::split_version_string(value, major, minor, release); + } + + sprintf(line_buf, "#define %s_VERSION_MAJOR %s\n", name_buf, major.c_str()); + Tcl_Write(system_h, line_buf, -1); + sprintf(line_buf, "#define %s_VERSION_MINOR %s\n", name_buf, minor.c_str()); + Tcl_Write(system_h, line_buf, -1); + sprintf(line_buf, "#define %s_VERSION_RELEASE %s\n", name_buf, release.c_str()); + Tcl_Write(system_h, line_buf, -1); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlDefinableBody + +//{{{ Basics + +// ---------------------------------------------------------------------------- + +CdlDefinableBody::CdlDefinableBody() +{ + CYG_REPORT_FUNCNAME("CdlDefinable:: default constructor"); + CYG_REPORT_FUNCARG1XV(this); + + // There is no data to initialize + cdldefinablebody_cookie = CdlDefinableBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlDefinableBody::~CdlDefinableBody() +{ + CYG_REPORT_FUNCNAME("CdlDefinable:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdldefinablebody_cookie = CdlDefinableBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- + +std::string +CdlDefinableBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlDefinable::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "definable"; +} + +// ---------------------------------------------------------------------------- + +bool +CdlDefinableBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlDefinableBody_Magic != cdldefinablebody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + return CdlNodeBody::check_this(zeal); +} + +//}}} +//{{{ add_property_parser() and check_properties() + +// ---------------------------------------------------------------------------- + +void +CdlDefinableBody::add_property_parsers(std::vector& parsers) +{ + CYG_REPORT_FUNCNAME("CdlDefinable::add_property_parsers"); + + static CdlInterpreterCommandEntry commands[] = + { + CdlInterpreterCommandEntry("no_define", &parse_no_define ), + CdlInterpreterCommandEntry("define", &parse_define ), + CdlInterpreterCommandEntry("define_format", &parse_define_format ), + CdlInterpreterCommandEntry("define_proc", &parse_define_proc ), + CdlInterpreterCommandEntry("if_define", &parse_if_define ), + CdlInterpreterCommandEntry("", 0 ) + }; + + for (int i = 0; commands[i].command != 0; i++) { + std::vector::const_iterator j; + for (j = parsers.begin(); j != parsers.end(); j++) { + if (commands[i].name == j->name) { + if (commands[i].command != j->command) { + CYG_FAIL("Property names are being re-used"); + } + break; + } + } + if (j == parsers.end()) { + parsers.push_back(commands[i]); + } + } + CdlNodeBody::add_property_parsers(parsers); + + CYG_REPORT_RETURN(); +} + +void +CdlDefinableBody::check_properties(CdlInterpreter interp) +{ + CYG_REPORT_FUNCNAME("CdlDefinable::check_properties"); + CYG_REPORT_FUNCARG2XV(this, interp); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + + // There should be at most one each of no_define and define_format. + if (count_properties(CdlPropertyId_NoDefine) > 1) { + CdlParse::report_error(interp, "", "There should be at most one no_define property."); + } + if (count_properties(CdlPropertyId_DefineFormat) > 1) { + CdlParse::report_error(interp, "", "There should be at most one define_format property."); + } + if (has_property(CdlPropertyId_NoDefine) && has_property(CdlPropertyId_DefineFormat)) { + CdlParse::report_error(interp, "", "The no_define and define_format properties are mutually exclusive."); + } + // FIXME: the define_format property only makes sense for certain + // flavors. However the flavor property may not have been processed yet. + + CdlNodeBody::check_properties(interp); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Definable properties + +// ---------------------------------------------------------------------------- +// Syntax: no_define +int +CdlDefinableBody::parse_no_define(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_no_define", "result %d"); + + int result = CdlParse::parse_minimal_property(interp, argc, argv, CdlPropertyId_NoDefine, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +// syntax: define + +// The argument to "define" should be a valid C preprocessor symbol. +static void +parse_define_final_check(CdlInterpreter interp, CdlProperty_String prop) +{ + CYG_REPORT_FUNCNAME("parse_define_final_check"); + CYG_PRECONDITION_CLASSC(prop); + CYG_PRECONDITION_CLASSC(interp); + + const std::string& str = prop->get_string(); + + if (!Cdl::is_valid_c_preprocessor_symbol(str)) { + CdlParse::report_property_parse_error(interp, prop, str + " is not a valid C preprocessor symbol"); + } + + // There may be a file option. At this stage the only valid filename + // that can be used here is system.h + std::string file_option = prop->get_option("file"); + if (("" != file_option) && ("system.h" != file_option)) { + CdlParse::report_property_parse_error(interp, prop, "Invalid -file option " + file_option); + } + + // FIXME: validate the format string + + CYG_REPORT_RETURN(); +} + +int +CdlDefinableBody::parse_define(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_define", "result %d"); + + static char* options[] = { + "file:", + "format:", + 0 + }; + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_Define, options, &parse_define_final_check); + + CYG_REPORT_RETVAL(result); + return result; +} + + +// ---------------------------------------------------------------------------- +// syntax: define_format +// +// FIXME: it is possible to apply some checks to the string, e.g. that there +// is only one conversion operation. +// +// FIXME: also check that the flavor is sensible, define_format has no effect +// for none or bool +// +// FIXME: enforce mutual exclusion with no_define + +int +CdlDefinableBody::parse_define_format(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_format", "result %d"); + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_DefineFormat, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} +// ---------------------------------------------------------------------------- +// syntax: define_proc +int +CdlDefinableBody::parse_define_proc(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_define_proc", "result %d"); + + int result = CdlParse::parse_tclcode_property(interp, argc, argv, CdlPropertyId_DefineProc, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +// Syntax: if_define sym1 sym2 + +static void +parse_if_define_final_check(CdlInterpreter interp, CdlProperty_StringVector prop) +{ + CYG_REPORT_FUNCNAME("parse_if_define_final_check"); + CYG_PRECONDITION_CLASSC(interp); + CYG_PRECONDITION_CLASSC(prop); + + // There should be exactly two entries in the vector, and both of them should be + // valid preprocessor symbols. + const std::vector& strings = prop->get_strings(); + + if (2 != strings.size()) { + CdlParse::report_property_parse_error(interp, prop, "There should be exactly two arguments."); + } + if (!Cdl::is_valid_c_preprocessor_symbol(strings[0])) { + CdlParse::report_property_parse_error(interp, prop, strings[0] + " is not a valid C preprocessor symbol."); + } + if (!Cdl::is_valid_c_preprocessor_symbol(strings[1])) { + CdlParse::report_property_parse_error(interp, prop, strings[1] + " is not a valid C preprocessor symbol."); + } + + // There may be a file option. At this stage the only valid filename + // that can be used here is system.h + std::string file_option = prop->get_option("file"); + if (("" != file_option) && ("system.h" != file_option)) { + CdlParse::report_property_parse_error(interp, prop, "Invalid -file option " + file_option); + } +} + +int +CdlDefinableBody::parse_if_define(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_if_define", "result %d"); + + char* options[] = { + "file:", + 0 + }; + int result = CdlParse::parse_stringvector_property(interp, argc, argv, CdlPropertyId_IfDefine, options, + &parse_if_define_final_check, false); + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ generate_config_header() + +// ---------------------------------------------------------------------------- +// This code needs to allow for the following properties. +// +// 1) no_define. This suppresses the default #define generation. +// +// 2) define_format ][-format ] symbol +// +// 4) define_proc +// +// 5) if_define + +void +CdlDefinableBody::generate_config_header(Tcl_Channel this_hdr, Tcl_Channel system_h) const +{ + CYG_REPORT_FUNCNAME("CdlDefinable::generate_config_header"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlLoadable loadable = get_owner(); + CdlInterpreter interp = loadable->get_interpreter(); + + // This definable is known to be active. However it may or may not be enabled. + CYG_PRECONDITIONC(is_active()); + + std::string name = get_name(); + CdlValueFlavor flavor = CdlValueFlavor_Bool; + std::string value = "1"; + CdlConstValuable valuable = dynamic_cast(this); + if (0 != valuable) { + // It is always possible to check the enabled() flag. + if (!valuable->is_enabled()) { + CYG_REPORT_RETURN(); + return; + } + // The value is only valid for BoolData and Data flavors, and may + // not have been provided. If there is no value then this option + // should not generate a #define + flavor = valuable->get_flavor(); + if ((CdlValueFlavor_BoolData == flavor) || (CdlValueFlavor_Data == flavor)) { + value = valuable->get_value(); + } + } + + // Flavor and value are now both set to sensible strings. + // First, check the no_define property. If this is present then the default + // #define generation should be suppressed. + if (!has_property(CdlPropertyId_NoDefine)) { + + // OK, it is necessary to generate at least one #define. + // If this node is actually a loadable then the #define should go + // into system.h, otherwise into the current header + Tcl_Channel chan = this_hdr; + if (dynamic_cast((CdlConstNode)this) == loadable) { + chan = system_h; + } + + // For flavors None and Bool, there should be just one #define + if ((CdlValueFlavor_None == flavor) || (CdlValueFlavor_Bool == flavor)) { + std::string define = "#define " + name + " 1\n"; + Tcl_Write(chan, const_cast(define.c_str()), -1); + } else { + // If there is a format string then that controls the default + // value display. + if (!has_property(CdlPropertyId_DefineFormat)) { + std::string define = "#define " + name + " " + value + "\n"; + Tcl_Write(chan, const_cast(define.c_str()), -1); + } else { + CdlProperty_String strprop = dynamic_cast(get_property(CdlPropertyId_DefineFormat)); + CYG_ASSERT_CLASSC(strprop); + std::string format = strprop->get_string(); + std::string cmd = "return \"#define " + name + " [format " + format + " " + value + "]\n\""; + std::string define; + if (TCL_OK != interp->eval(cmd, define)) { + throw CdlInputOutputException("Internal error executing tcl fragment to process define_format property"); + } + Tcl_Write(chan, const_cast(define.c_str()), -1); + } + + // There may also be a separate #define of the form _, + // if that is a valid preprocessor symbol. + std::string tmp = name + "_" + value; + if (Cdl::is_valid_c_preprocessor_symbol(tmp)) { + tmp = "#define "+ tmp + "\n"; + Tcl_Write(chan, const_cast(tmp.c_str()), -1); + } + + // For loadables, add additional version information to system_h + if (dynamic_cast((CdlConstNode)this) == loadable) { + system_h_add_package_versioning(system_h, name, value); + } + } + } + + // Next, check for any additional define properties + std::vector define_props; + get_properties(CdlPropertyId_Define, define_props); + std::vector::const_iterator prop_i; + for (prop_i = define_props.begin(); prop_i != define_props.end(); prop_i++) { + CdlProperty_String strprop = dynamic_cast(*prop_i); + CYG_ASSERT_CLASSC(strprop); + std::string symbol = strprop->get_string(); + + std::string file = strprop->get_option("file"); + Tcl_Channel chan = this_hdr; + if (("" != file) && ("system.h" == file)) { + chan = system_h; + } + + if ((CdlValueFlavor_None == flavor) || (CdlValueFlavor_Bool == flavor)) { + std::string define = "#define " + symbol + " 1\n"; + Tcl_Write(chan, const_cast(define.c_str()), -1); + } else { + std::string format = strprop->get_option("format"); + if ("" == format) { + std::string define = "#define " + symbol + " " + value + "\n"; + Tcl_Write(chan, const_cast(define.c_str()), -1); + } else { + std::string cmd = "return \"#define " + symbol + " [format " + format + " " + value + "]\n\""; + std::string define; + if (TCL_OK != interp->eval(cmd, define)) { + throw CdlInputOutputException("Internal error executing tcl fragment to process format option"); + } + Tcl_Write(chan, const_cast(define.c_str()), -1); + } + + std::string tmp = symbol + "_" + value; + if (Cdl::is_valid_c_preprocessor_symbol(tmp)) { + tmp = "#define " + tmp + "\n"; + Tcl_Write(chan, const_cast(tmp.c_str()), -1); + } + } + } + + // Now check for if_define properties + std::vector if_define_props; + get_properties(CdlPropertyId_IfDefine, if_define_props); + for (prop_i = if_define_props.begin(); prop_i != if_define_props.end(); prop_i++) { + CdlProperty_StringVector strprop = dynamic_cast(*prop_i); + CYG_ASSERT_CLASSC(strprop); + CYG_ASSERTC(2 == strprop->get_number_of_strings()); + + std::string sym1 = strprop->get_string(0); + std::string sym2 = strprop->get_string(1); + + Tcl_Channel chan = this_hdr; + std::string file = strprop->get_option("file"); + if (("" != file) && ("system.h" == file)) { + chan = system_h; + } + std::string data = "#ifdef " + sym1 + "\n# define " + sym2 + " 1\n#endif\n"; + Tcl_Write(chan, const_cast(data.c_str()), -1); + } + + // And define_proc properties + std::vector define_proc_props; + get_properties(CdlPropertyId_DefineProc, define_proc_props); + for (prop_i = define_proc_props.begin(); prop_i != define_proc_props.end(); prop_i++) { + CdlProperty_TclCode codeprop = dynamic_cast(*prop_i); + CYG_ASSERT_CLASSC(codeprop); + + cdl_tcl_code code = codeprop->get_code(); + std::string result; + if (TCL_OK != interp->eval(code, result)) { + throw CdlInputOutputException("Error evaluating define_proc property for " + name + "\n" + result); + } + } + + + CYG_REPORT_RETURN(); +} + +//}}} + +//}}} +//{{{ CdlDefineLoadableBody + +//{{{ Basics + +// ---------------------------------------------------------------------------- + +CdlDefineLoadableBody::CdlDefineLoadableBody() +{ + CYG_REPORT_FUNCNAME("CdlDefineLoadable:: default constructor"); + CYG_REPORT_FUNCARG1XV(this); + + cdldefineloadablebody_cookie = CdlDefineLoadableBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlDefineLoadableBody::~CdlDefineLoadableBody() +{ + CYG_REPORT_FUNCNAME("CdlDefineLoadable:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdldefineloadablebody_cookie = CdlDefineLoadableBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- + +std::string +CdlDefineLoadableBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlDefineLoadable::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "define_loadable"; +} + +// ---------------------------------------------------------------------------- + +bool +CdlDefineLoadableBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlDefineLoadableBody_Magic != cdldefineloadablebody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + return CdlLoadableBody::check_this(zeal) && CdlNodeBody::check_this(zeal); +} + +//}}} +//{{{ Property parsing + +// ---------------------------------------------------------------------------- + +void +CdlDefineLoadableBody::add_property_parsers(std::vector& parsers) +{ + CYG_REPORT_FUNCNAME("CdlDefineLoadable::add_property_parsers"); + + static CdlInterpreterCommandEntry commands[] = + { + CdlInterpreterCommandEntry("define_header", &parse_define_header), + CdlInterpreterCommandEntry("", 0 ) + }; + + for (int i = 0; commands[i].command != 0; i++) { + std::vector::const_iterator j; + for (j = parsers.begin(); j != parsers.end(); j++) { + if (commands[i].name == j->name) { + if (commands[i].command != j->command) { + CYG_FAIL("Property names are being re-used"); + } + break; + } + } + if (j == parsers.end()) { + parsers.push_back(commands[i]); + } + } + CdlNodeBody::add_property_parsers(parsers); + + CYG_REPORT_RETURN(); +} + +void +CdlDefineLoadableBody::check_properties(CdlInterpreter interp) +{ + CYG_REPORT_FUNCNAME("CdlDefineLoadable::check_properties"); + CYG_REPORT_FUNCARG2XV(this, interp); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + + // There should be at most one define_header property + int count = count_properties(CdlPropertyId_DefineHeader); + if (count> 1) { + CdlParse::report_error(interp, "", "There should be at most one define_header property."); + } + // FIXME: filename validation + + CdlNodeBody::check_properties(interp); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// syntax: define_header
+int +CdlDefineLoadableBody::parse_define_header(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_define_header", "result %d"); + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_DefineHeader, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ generate_config_header() + +// ---------------------------------------------------------------------------- +void +CdlDefineLoadableBody::generate_config_header(Tcl_Channel this_hdr, Tcl_Channel system_h) const +{ + CYG_REPORT_FUNCNAME("CdlDefineLoadable::generate_config_header"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlInterpreter interp = get_interpreter(); + Tcl_RegisterChannel(interp->get_tcl_interpreter(), this_hdr); + Tcl_RegisterChannel(interp->get_tcl_interpreter(), system_h); + + CdlInterpreterBody::ContextSupport(interp, std::string("Package ") + this->get_name() + ", header file generation"); + + try { + interp->set_variable("::cdl_header", Tcl_GetChannelName(this_hdr)); + interp->set_variable("::cdl_system_header", Tcl_GetChannelName(system_h)); + + const std::vector& contents = get_owned(); + std::vector::const_iterator node_i; + for (node_i = contents.begin(); node_i != contents.end(); node_i++) { + CdlDefinable definable = dynamic_cast(*node_i); + if (0 == definable) { + continue; + } + if (!definable->is_active()) { + continue; + } + definable->generate_config_header(this_hdr, system_h); + } + + interp->unset_variable("::cdl_header"); + interp->unset_variable("::cdl_system_header"); + } catch(...) { + Tcl_UnregisterChannel(interp->get_tcl_interpreter(), this_hdr); + Tcl_UnregisterChannel(interp->get_tcl_interpreter(), system_h); + throw; + } + + Tcl_UnregisterChannel(interp->get_tcl_interpreter(), this_hdr); + Tcl_UnregisterChannel(interp->get_tcl_interpreter(), system_h); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ get_config_headers() + +// ---------------------------------------------------------------------------- +// What header file should be generated for this loadable? +// +// If there is a define_header property then this should be used. +// Otherwise a filename is constructed from the loadable's name. + +std::string +CdlDefineLoadableBody::get_config_header() const +{ + CYG_REPORT_FUNCNAME("CdlDefineLoadable::get_config_headers"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::string result = ""; + CdlProperty prop = get_property(CdlPropertyId_DefineHeader); + if (0 != prop) { + CdlProperty_String string_prop = dynamic_cast(prop); + CYG_ASSERT_CLASSC(string_prop); + result = string_prop->get_string(); + } else { + std::string tmp = get_name(); + result = Cdl::get_short_form(tmp); + result += ".h"; + } + CYG_REPORT_RETURN(); + return result; +} + +//}}} + +//}}} +//{{{ CdlToplevel + +//{{{ CdlToplevel::get_build_info() + +// ---------------------------------------------------------------------------- +// Essentially this code involves iterating over the loadables vector, +// looking for BuildLoadables and invoking their update_build_info() +// member function. In addition, if there is currently some data in +// the build_info vector (probably from a previous call) then that +// must be cleared. + +void +CdlToplevelBody::get_build_info(CdlBuildInfo& build_info) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_build_info"); + CYG_REPORT_FUNCARG2XV(this, &build_info); + CYG_PRECONDITION_THISC(); + + if (0 != build_info.entries.size()) { + build_info.entries.clear(); + } + + const std::vector& loadables = get_loadables(); + std::vector::const_iterator load_i; + for (load_i = loadables.begin(); load_i != loadables.end(); load_i++) { + CdlConstBuildLoadable bl = dynamic_cast(*load_i); + if (0 != bl) { + bl->update_build_info(build_info); + } + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlToplevel::get_all_build_info() + +// ---------------------------------------------------------------------------- +// This is just like get_build_info(), but calls a different +// BuildLoadable member. + +void +CdlToplevelBody::get_all_build_info(CdlBuildInfo& build_info) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::get_all_build_info"); + CYG_REPORT_FUNCARG2XV(this, &build_info); + CYG_PRECONDITION_THISC(); + + if (0 != build_info.entries.size()) { + build_info.entries.clear(); + } + + const std::vector& loadables = get_loadables(); + std::vector::const_iterator load_i; + for (load_i = loadables.begin(); load_i != loadables.end(); load_i++) { + CdlConstBuildLoadable bl = dynamic_cast(*load_i); + if (0 != bl) { + bl->update_all_build_info(build_info); + } + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlToplevel::generate_config_headers() + +// ---------------------------------------------------------------------------- +// Generating the config headers. This involves the following steps: +// +// 1) for every DefineLoadable, find out what header file should +// be generated. Note that some loadables may share a header file. +// +// 2) create a temporary version of system.h. Note that it is not +// a good idea to just overwrite an existing system.h, chances +// are pretty good that the file will not have changed, and +// updating it unnecessarily will result in unnecessary rebuilds +// due to header file dependencies. +// +// 3) for each file that should be generated, create a temporary +// version and allow all applicable loadables to update it. + +// A utility to compare two files and do the right thing. +// This requires some simple Tcl code. +static void +compare_and_copy(CdlInterpreter interp, std::string file1, std::string file2) +{ + CYG_REPORT_FUNCNAME("compare_and_copy"); + CYG_PRECONDITION_CLASSC(interp); + CYG_PRECONDITIONC("" != file1); + CYG_PRECONDITIONC("" != file2); + CYG_PRECONDITIONC(file1 != file2); + + static char compare_and_copy_script[] = "\ +if {[file exists \"$::cdl_compare_and_copy_file2\"] == 0} { \n\ + catch { file rename -- $::cdl_compare_and_copy_file1 $::cdl_compare_and_copy_file2} \n\ + return \n\ +} \n\ +set fd [open \"$::cdl_compare_and_copy_file1\" r] \n\ +set data1 [read $fd] \n\ +close $fd \n\ +set fd [open \"$::cdl_compare_and_copy_file2\" r] \n\ +set data2 [read $fd] \n\ +close $fd \n\ +if {$data1 == $data2} { \n\ + file delete \"$::cdl_compare_and_copy_file1\" \n\ +} else { \n\ + catch { file rename -force -- $::cdl_compare_and_copy_file1 $::cdl_compare_and_copy_file2 } \n\ +} \n\ +"; + + interp->set_variable("::cdl_compare_and_copy_file1", file1); + interp->set_variable("::cdl_compare_and_copy_file2", file2); + std::string tcl_result; + if (TCL_OK != interp->eval(compare_and_copy_script, tcl_result)) { + throw CdlInputOutputException("internal error manipulating temporary header " + file1 + " and target " + file2 + + "\n" + tcl_result); + } +} + +void +CdlToplevelBody::generate_config_headers(std::string directory) +{ + CYG_REPORT_FUNCNAME("CdlToplevel::generate_config_headers"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_ASSERTC("" != directory); + + // Replace any backslashes in the path with forward slashes. The + // latter are used throughout the library + // NOTE: this is not i18n-friendly. + for (unsigned int i = 0; i < directory.size(); i++) { + if ('\\' == directory[i]) { + directory[i] = '/'; + } + } + + CdlInterpreter interp = get_interpreter(); + std::string tcl_result; + if ((TCL_OK != interp->eval("file isdirectory \"" + directory + "\"", tcl_result)) || + (tcl_result != "1")) { + throw CdlInputOutputException("target " + directory + " is not a valid existing directory."); + } + + std::vector > headers; + const std::vector& loadables = get_loadables(); + std::vector::const_iterator load_i; + for (load_i = loadables.begin(); load_i != loadables.end(); load_i++) { + CdlDefineLoadable tmp = dynamic_cast(*load_i); + if (0 != tmp) { + std::string hdr = tmp->get_config_header(); + headers.push_back(std::make_pair(tmp, hdr)); + } + } + + static char banner_format[] = +"#ifndef CYGONCE_PKGCONF_%s\n\ +#define CYGONCE_PKGCONF_%s\n\ +/*\n\ + * File \n\ + *\n\ + * This file is generated automatically by the configuration\n\ + * system. It should not be edited. Any changes to this file\n\ + * may be overwritten.\n\ + */\n\ +\n"; +#ifdef _WIN32 + // Create three channels which Tcl will use for standard streams + // if these streams do not already exist. This avoids a Tcl + // problem which can prevent closure of system.h. (FIXME) + Tcl_Channel stdin_chan = Tcl_OpenFileChannel(interp->get_tcl_interpreter(), "nul", "w", 0666); + Tcl_Channel stdout_chan = Tcl_OpenFileChannel(interp->get_tcl_interpreter(), "nul", "w", 0666); + Tcl_Channel stderr_chan = Tcl_OpenFileChannel(interp->get_tcl_interpreter(), "nul", "w", 0666); + Tcl_RegisterChannel(0, stdin_chan); + Tcl_RegisterChannel(0, stdout_chan); + Tcl_RegisterChannel(0, stderr_chan); +#endif + // Assume for now that files __libcdl_file1 and __libcdl_file2 are + // legal on all platforms of interest, and that nobody is going to + // export to these. + std::string system_h_name = directory + "/__libcdl_file1"; + Tcl_Channel system_h = Tcl_OpenFileChannel(interp->get_tcl_interpreter(), + const_cast(system_h_name.c_str()), "w", 0666); + if (0 == system_h) { + throw CdlInputOutputException("Unable to open file " + system_h_name + "\n" + + interp->get_result()); + } + // The channel will be registered and unregistered in several + // different interpreters. This call prevents the channel from + // disappearing prematurely. + Tcl_RegisterChannel(0, system_h); + + // Make sure that this operation is undone if necessary. + try { + // Now fill in system.h with the appropriate data. Start with the banner. + char local_buf[512]; + sprintf(local_buf, banner_format, "SYSTEM_H", "SYSTEM_H", "system.h"); + Tcl_Write(system_h, local_buf, -1); + + // Add generic version information + system_h_add_version_header(system_h); + + // The rest of system.h will be filled in by the following loop. + // + // Walk down the previously constructed headers vector, create + // appropriate files, and let each DefineLoadable fill in the + // file for itself. + std::vector >::iterator outer_i; + std::vector >::iterator inner_i; + for (outer_i = headers.begin(); outer_i != headers.end(); outer_i++) { + if ("" == outer_i->second) { + continue; + } + std::string target_name = outer_i->second; + std::string header_name = directory + "/__libcdl_file2"; + Tcl_Channel header_h = Tcl_OpenFileChannel(interp->get_tcl_interpreter(), + const_cast(header_name.c_str()), "w", 0666); + if (0 == header_h) { + throw CdlInputOutputException("Unable to open file " + header_name + "\n" + + interp->get_result()); + } + // The channel may be used in several different interpreters, so + // do an extra register operation + Tcl_RegisterChannel(0, header_h); + + try { + // Output the banner. This requires an all-upper-case version of the + // header name. + std::string upper_case; + for (unsigned int i = 0; i < target_name.size(); i++) { + if (islower(target_name[i])) { + upper_case += toupper(target_name[i]); + } else if ('.' == target_name[i]) { + upper_case += '_'; + } else { + upper_case += target_name[i]; + } + } + sprintf(local_buf, banner_format, upper_case.c_str(), upper_case.c_str(), target_name.c_str()); + Tcl_Write(header_h, local_buf, -1); + + // Now iterate over all the loadables looking for ones which + // should generate #define's for this header, and invoke the + // appropriate member function. + for (inner_i = outer_i; inner_i != headers.end(); inner_i++) { + if (inner_i->second == target_name) { + inner_i->first->generate_config_header(header_h, system_h); + inner_i->second = ""; + } + } + + // The header file has now been updated. Close it and decide whether + // or not to replace the old version + Tcl_Write(header_h, "\n#endif\n", -1); + } catch(...) { + Tcl_UnregisterChannel(0, header_h); + throw; + } + Tcl_UnregisterChannel(0, header_h); + compare_and_copy(interp, header_name, directory + "/" + target_name); + } + + Tcl_Write(system_h, "\n#endif\n", -1); + } catch(...) { + Tcl_UnregisterChannel(0, system_h); + throw; + } + + // This call to UnregisterChannel automatically closes the + // channel, there is no need for an explicit Tcl_Close() call. + Tcl_UnregisterChannel(0, system_h); +#ifdef _WIN32 + Tcl_UnregisterChannel(0, stderr_chan); + Tcl_UnregisterChannel(0, stdout_chan); + Tcl_UnregisterChannel(0, stdin_chan); +#endif + compare_and_copy(interp, system_h_name, directory +"/system.h"); +} + +//}}} +//{{{ CdlToplevel::get_config_headers() + +// ---------------------------------------------------------------------------- +// Return details of the header files that should be generated. This +// allows higher-level code to detect files that should no longer +// be present, amongst other uses. +// +// The main complication is that some packages may wish to share the +// same header file, especially hardware packages. + +void +CdlToplevelBody::get_config_headers(std::vector& headers) +{ + CYG_REPORT_FUNCNAME("CdlToplevelBody::get_config_headers"); + CYG_REPORT_FUNCARG2XV(this, &headers); + CYG_PRECONDITION_THISC(); + + // Allow the vector argument to be re-used in multiple calls. + // Strictly speaking this is better done at the application + // level, but the behaviour is consistent with get_build_info(); + headers.clear(); + + // There will always be a system.h header file with details + // of the loadables. + // FIXME: the name of this file should probably be controllable + headers.push_back("system.h"); + + // Now check each loadable and adds its header file, assuming + // this is unique. + const std::vector& loadables = get_loadables(); + std::vector::const_iterator i; + for (i = loadables.begin(); i != loadables.end(); i++) { + CdlDefineLoadable current = dynamic_cast(*i); + if (0 != current) { + std::string its_file = current->get_config_header(); + CYG_LOOP_INVARIANTC("" != its_file); + if (std::find(headers.begin(), headers.end(), its_file) == headers.end()) { + headers.push_back(its_file); + } + } + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlToplevel::generate_build_tree() + +void +CdlToplevelBody::generate_build_tree(std::string build_tree, std::string install_tree) +{ +} + +//}}} + +//}}} diff --git a/tools/src/libcdl/cdl.dsp b/tools/src/libcdl/cdl.dsp new file mode 100644 index 00000000..156e5d16 --- /dev/null +++ b/tools/src/libcdl/cdl.dsp @@ -0,0 +1,269 @@ +# Microsoft Developer Studio Project File - Name="cdl" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Generic Project" 0x010a + +CFG=cdl - Win32 ANSI Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "cdl.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "cdl.mak" CFG="cdl - Win32 ANSI Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "cdl - Win32 Release" (based on "Win32 (x86) Generic Project") +!MESSAGE "cdl - Win32 Debug" (based on "Win32 (x86) Generic Project") +!MESSAGE "cdl - Win32 ANSI Debug" (based on "Win32 (x86) Generic Project") +!MESSAGE "cdl - Win32 ANSI Release" (based on "Win32 (x86) Generic Project") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +MTL=midl.exe + +!IF "$(CFG)" == "cdl - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "V:\cdl\Release" +# PROP Intermediate_Dir "V:\cdl\Release\build" +# PROP Target_Dir "" + +!ELSEIF "$(CFG)" == "cdl - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "cdl___Win32_Debug" +# PROP BASE Intermediate_Dir "cdl___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "V:\cdl\Debug" +# PROP Intermediate_Dir "V:\cdl\Debug\build" +# PROP Target_Dir "" + +!ELSEIF "$(CFG)" == "cdl - Win32 ANSI Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "cdl___Win32_ANSI_Debug" +# PROP BASE Intermediate_Dir "cdl___Win32_ANSI_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "v:\cdl\Debug" +# PROP Intermediate_Dir "v:\cdl\Debug\build" +# PROP Target_Dir "" + +!ELSEIF "$(CFG)" == "cdl - Win32 ANSI Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "cdl___Win32_ANSI_Release" +# PROP BASE Intermediate_Dir "cdl___Win32_ANSI_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "V:\cdl\Release" +# PROP Intermediate_Dir "V:\cdl\Release\build" +# PROP Target_Dir "" + +!ENDIF + +# Begin Target + +# Name "cdl - Win32 Release" +# Name "cdl - Win32 Debug" +# Name "cdl - Win32 ANSI Debug" +# Name "cdl - Win32 ANSI Release" +# Begin Source File + +SOURCE=.\base.cxx +# End Source File +# Begin Source File + +SOURCE=.\build.cxx +# End Source File +# Begin Source File + +SOURCE=.\cdl.hxx +# End Source File +# Begin Source File + +SOURCE=.\cdlcore.hxx +# End Source File +# Begin Source File + +SOURCE=.\cdlmisc.cxx +# End Source File +# Begin Source File + +SOURCE=.\ChangeLog + +!IF "$(CFG)" == "cdl - Win32 Release" + +# Begin Custom Build - Performing Custom Build Step for libCDL +IntDir=V:\cdl\Release\build +OutDir=V:\cdl\Release +InputPath=.\ChangeLog + +BuildCmds= \ + if not exist $(IntDir)\tools\configtool\standalone\common\Makefile sh -c "ECOSHOST=`echo ""puts [ file attributes [ pwd ] -shortname ]"" | tclsh`/.. ; echo ""ECOSHOST=$ECOSHOST"" ; echo ""TCLHOME=$TCLHOME"" ; mkdir -p `cygpath -u ""$(IntDir)""` ; cd `cygpath -u ""$(IntDir)""` && CC=cl CXX=cl `cygpath -u ""$ECOSHOST""`/configure --prefix=`cygpath -u ""$(OutDir)""` --with-tcl=`cygpath -u ""$TCLHOME""` --with-tcl_version=82" \ + cd $(IntDir) \ + v: \ + make --unix install \ + + +"$(OutDir)\lib\cdl.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(OutDir)\lib\cyginfra.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "cdl - Win32 Debug" + +# Begin Custom Build - Performing Custom Build Step for libCDL +IntDir=V:\cdl\Debug\build +OutDir=V:\cdl\Debug +InputPath=.\ChangeLog + +BuildCmds= \ + if not exist $(IntDir)\tools\configtool\standalone\common\Makefile sh -c "ECOSHOST=`echo ""puts [ file attributes [ pwd ] -shortname ]"" | tclsh`/.. ; echo ""ECOSHOST=$ECOSHOST"" ; echo ""TCLHOME=$TCLHOME"" ; mkdir -p `cygpath -u ""$(IntDir)""` ; cd `cygpath -u ""$(IntDir)""` && CC=cl CXX=cl `cygpath -u ""$ECOSHOST""`/configure --prefix=`cygpath -u ""$(OutDir)""` --with-tcl=`cygpath -u ""$TCLHOME""` --with-tcl_version=82d --enable-debug --enable-maintainer-mode" \ + cd $(IntDir) \ + v: \ + make --unix install \ + + +"$(OutDir)\lib\cdl.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(OutDir)\lib\cyginfra.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "cdl - Win32 ANSI Debug" + +# Begin Custom Build - Performing Custom Build Step for libCDL +IntDir=v:\cdl\Debug\build +OutDir=v:\cdl\Debug +InputPath=.\ChangeLog + +BuildCmds= \ + if not exist $(IntDir)\tools\configtool\standalone\common\Makefile sh -c "ECOSHOST=`echo ""puts [ file attributes [ pwd ] -shortname ]"" | tclsh`/.. ; echo ""ECOSHOST=$ECOSHOST"" ; echo ""TCLHOME=$TCLHOME"" ; mkdir -p `cygpath -u ""$(IntDir)""` ; cd `cygpath -u ""$(IntDir)""` && CC=cl CXX=cl `cygpath -u ""$ECOSHOST""`/configure --prefix=`cygpath -u ""$(OutDir)""` --with-tcl=`cygpath -u ""$TCLHOME""` --with-tcl_version=82d --enable-debug --enable-maintainer-mode" \ + cd $(IntDir) \ + v: \ + make --unix install \ + + +"$(OutDir)\lib\cdl.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(OutDir)\lib\cyginfra.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "cdl - Win32 ANSI Release" + +# Begin Custom Build - Performing Custom Build Step for libCDL +IntDir=V:\cdl\Release\build +OutDir=V:\cdl\Release +InputPath=.\ChangeLog + +BuildCmds= \ + echo $(PATH) \ + if not exist $(IntDir)\tools\configtool\standalone\common\Makefile sh -c "ECOSHOST=`echo ""puts [ file attributes [ pwd ] -shortname ]"" | tclsh`/.. ; echo ""ECOSHOST=$ECOSHOST"" ; echo ""TCLHOME=$TCLHOME"" ; mkdir -p `cygpath -u ""$(IntDir)""` ; cd `cygpath -u ""$(IntDir)""` && CC=cl CXX=cl `cygpath -u ""$ECOSHOST""`/configure --prefix=`cygpath -u ""$(OutDir)""` --with-tcl=`cygpath -u ""$TCLHOME""` --with-tcl_version=82" \ + cd $(IntDir) \ + v: \ + make --unix install \ + + +"$(OutDir)\lib\cdl.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(OutDir)\lib\cyginfra.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\component.cxx +# End Source File +# Begin Source File + +SOURCE=.\config.cxx +# End Source File +# Begin Source File + +SOURCE=.\conflict.cxx +# End Source File +# Begin Source File + +SOURCE=.\database.cxx +# End Source File +# Begin Source File + +SOURCE=.\dialog.cxx +# End Source File +# Begin Source File + +SOURCE=.\expr.cxx +# End Source File +# Begin Source File + +SOURCE=.\interface.cxx +# End Source File +# Begin Source File + +SOURCE=.\interp.cxx +# End Source File +# Begin Source File + +SOURCE=.\option.cxx +# End Source File +# Begin Source File + +SOURCE=.\package.cxx +# End Source File +# Begin Source File + +SOURCE=.\parse.cxx +# End Source File +# Begin Source File + +SOURCE=.\property.cxx +# End Source File +# Begin Source File + +SOURCE=.\refer.cxx +# End Source File +# Begin Source File + +SOURCE=.\transact.cxx +# End Source File +# Begin Source File + +SOURCE=.\value.cxx +# End Source File +# Begin Source File + +SOURCE=.\wizard.cxx +# End Source File +# End Target +# End Project diff --git a/tools/src/libcdl/cdl.hxx b/tools/src/libcdl/cdl.hxx new file mode 100644 index 00000000..6b971961 --- /dev/null +++ b/tools/src/libcdl/cdl.hxx @@ -0,0 +1,598 @@ +#ifndef __CDL_HXX +# define __CDL_HXX +//{{{ Banner + +//============================================================================ +// +// cdl.hxx +// +// This header file declares the classes related to software +// configuration. +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1998/02/09 +// Version: 0.02 +// Requires: cdlcore.hxx +// Usage: #include +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ nested #include's + +// ---------------------------------------------------------------------------- +// Software CDL depends on the core but adds no new system requirements. + +#ifndef __CDLCORE_HXX +# include +#endif + +//}}} + +//{{{ Forward declarations of the body classes + +// ---------------------------------------------------------------------------- +// This section provides forward declarations of the main classes used +// for software configuration. + +class CdlConfigurationBody; +class CdlPackageBody; +class CdlComponentBody; +class CdlOptionBody; +class CdlPackagesDatabaseBody; + +typedef CdlConfigurationBody* CdlConfiguration; +typedef CdlPackageBody* CdlPackage; +typedef CdlComponentBody* CdlComponent; +typedef CdlOptionBody* CdlOption; +typedef CdlPackagesDatabaseBody* CdlPackagesDatabase; + +typedef const CdlConfigurationBody* CdlConstConfiguration; +typedef const CdlPackageBody* CdlConstPackage; +typedef const CdlComponentBody* CdlConstComponent; +typedef const CdlOptionBody* CdlConstOption; +typedef const CdlPackagesDatabaseBody* CdlConstPackagesDatabase; + +//}}} +//{{{ CdlPackagesDatabase class + +// ---------------------------------------------------------------------------- +// An eCos component repository can get to be quite complicated. There will +// be a number of core packages supplied by Red Hat. There may also be some +// number of third party and unsupported packages. Each package may come in +// several different versions. Keeping track of everything that has been +// installed should involve a separate administration tool, and there should +// be some sort of database of all this information. +// +// At the time of writing there is no such administration tool and there is +// no database with details of the various packages. Instead there is a +// static file "packages" at the top level of the component repository, +// containing some of the desired information. +// +// For now a temporary CdlPackagesDatabase class is provided. +// Essentially this provides C++ access to the packages file. In the +// long term this class will be replaced completely by a full and more +// rational implementation. +// +// The packages database class also, temporarily, provides information about +// targets and templates. This will change in future. A target will be specified +// by a save file, the output from Hardy. A template will also be specified by +// a save file, a partial software configuration. + +class CdlPackagesDatabaseBody { + + friend class CdlTest; + friend class CdlDbParser; + + public: + + static CdlPackagesDatabase make(std::string = "", CdlDiagnosticFnPtr /* error */ = 0, + CdlDiagnosticFnPtr /* warn */ = 0); + bool update(void); + ~CdlPackagesDatabaseBody(); + + std::string get_component_repository() const; + + const std::vector& get_packages(void) const; + bool is_known_package(std::string) const; + const std::string& get_package_description(std::string) const; + const std::vector& get_package_aliases(std::string) const; + const std::vector& get_package_versions(std::string) const; + const std::string& get_package_directory(std::string) const; + const std::string& get_package_script(std::string) const; + bool is_hardware_package(std::string) const; + + const std::vector& get_targets(void) const; + bool is_known_target(std::string) const; + const std::string& get_target_description(std::string) const; + const std::vector& get_target_aliases(std::string) const; + const std::vector& get_target_packages(std::string) const; + const std::vector& get_target_enables(std::string) const; + const std::vector& get_target_disables(std::string) const; + const std::vector >& get_target_set_values(std::string) const; + + const std::vector& get_templates(void) const; + bool is_known_template(std::string) const; + std::string get_template_filename(std::string, std::string = "") const; + const std::vector& get_template_versions(std::string) const; + const std::string get_template_description(std::string, std::string = ""); + const std::vector& get_template_packages(std::string, std::string = ""); + static void extract_template_details(std::string /* filename */, std::string& /* description */, + std::vector& /* packages */); + + // What are the valid compiler flag variables (ARCHFLAGS, ERRFLAGS, ...)? + // For now the library provides a static vector of these things, but + // this area is likely to change in future + static const std::vector& get_valid_cflags(); + + // Control verbosity when reading in a database + static void set_verbose(bool); + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + // The only valid constructor gets invoked from the make() member function. + // The argument should be a pathname for the component repository. The + // constructor is responsible for reading in the whole packages file. + CdlPackagesDatabaseBody(std::string, CdlDiagnosticFnPtr, CdlDiagnosticFnPtr); + + std::string component_repository; + std::vector package_names; + struct package_data { + public: + std::string description; + std::vector aliases; + std::vector versions; + std::string directory; + std::string script; + bool hardware; + }; + std::map packages; + + std::vector target_names; + struct target_data { + public: + std::string description; + std::vector aliases; + std::vector packages; + std::vector enable; + std::vector disable; + std::vector > set_values; + }; + std::map targets; + + std::vector template_names; + struct template_version_data { + public: + std::string description; + std::vector packages; + }; + struct template_data { + public: + std::vector versions; + std::map version_details; + }; + std::map templates; + + enum { + CdlPackagesDatabaseBody_Invalid = 0, + CdlPackagesDatabaseBody_Magic = 0x50896acb + } cdlpackagesdatabasebody_cookie; + + // This allows test cases to overwrite the name of the file + // containing the database information. + static char* database_name; + + // Control whether or not minor problems with the database should be + // reported. + static bool verbose_mode; + + // The default constructor, copy constructor and assignment operator are illegal. + CdlPackagesDatabaseBody(); + CdlPackagesDatabaseBody(const CdlPackagesDatabaseBody&); + CdlPackagesDatabaseBody& operator=(const CdlPackagesDatabaseBody&); + +}; + +//}}} +//{{{ CdlConfiguration class + +// ---------------------------------------------------------------------------- +// The CdlConfiguration class is the toplevel used for mainpulating +// software configurations. It consists of a number of loaded packages, +// each of which consists of some hierarchy of components and options, +// plus dialogs, wizards, and interfaces from the core. +// +// Typically an application will deal with only one configuration at a +// time. There will be exceptions. The most obvious example would be +// some sort of diff utility, but there may well be times when a user +// wants to edit multiple configurations. One example would be a board +// containing two separate processors, e.g. a conventional one coupled +// with a separate DSP, and eCos is supposed to run on both: the two +// chips will need to interact, and hence there may well be +// configurability dependencies between them. +// +// A configuration object does not exist in isolation. It must be tied +// to an eCos component repository via a database objects. It must +// also be supplied with a suitable Tcl interpreter. + +class CdlConfigurationBody : public virtual CdlToplevelBody +{ + friend class CdlTest; + + public: + + // ---------------------------------------------------------------------------- + // Create a new configuration. + // Currently this requires a name, a database and a master interpreter. + // The name is not used very much, but does appear in savefiles. + // The packages database and the interpreter must be created before + // any configuration object. + static CdlConfiguration make(std::string /* name */, CdlPackagesDatabase, CdlInterpreter); + CdlPackagesDatabase get_database() const; + + // Loading and unloading packages. This can happen in a number + // of different ways: + // + // 1) explicitly adding or removing a single package + // 2) changing the version of a package, which means unloading + // the old version and reloading the new one. Generally + // user settings should be preserved where possible. + // 3) loading in a full or minimal savefile. The library + // does not actually distinguish between the two when + // loading, only when saving. + // 4) adding a full or minimal savefile. + // 5) setting a template for the first time. This is much the + // same as adding a minimal savefile. However the library + // keeps track of the "current" template and only one + // can be loaded at a time. The library does not keep + // track of which savefile(s) have been added. + // 6) changing a template. This means unloading the packages + // that were loaded for the old template, then loading in + // the new one. + // 7) unsetting the template. This just involves an unload. + // 8) setting the hardware. Currently the database defines + // each supported target, listing the packages that should + // be loaded and possibly some option details. This is + // subject to change in future. + // 9) changing the hardware. This is much the same as changing + // the template. + // 10) unsetting the hardware. + // + // The unload operations are comparatively safe, although + // they can result in new conflicts and the user may well want + // to cancel the operation after discovering how many new + // problems there would be. The load operations are a bit more + // dangerous since they depend on external data and hence can + // fail for a variety of reasons: missing files, corrupt files, + // clashes with existing data, ... Changing e.g. a template + // is especially dangerous because of the number of things + // that can go wrong. All of these operations need to happen + // in a transaction which the user can cancel. There are two + // versions of all the relevant routines, one which operates + // in an existing transaction and one which creates a new + // one. + // + // Any operation that involves loading CDL data takes two + // CdlDiagnosticFnPtr arguments, one for errors and one for + // warnings. These should report the message to the user by + // some suitable means. The error fnptr may throw a + // CdlParseException to abort the current load immediately, + // otherwise the load operation will be aborted at the end + // if any errors were detected. New conflicts are not + // handled by these diagnostic functions, instead they + // are handled by the normal transaction methods. + + // A version argument of "" implies the most recent version. + void load_package(std::string /* name */, std::string /* version */, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + void load_package(CdlTransaction, std::string /* name */, std::string /* version */, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + + void unload_package(std::string /* name */, bool /* limbo */ = true); + void unload_package(CdlPackage, bool /* limbo */ = true); + void unload_package(CdlTransaction, std::string /* name */, bool /* limbo */ = true); + void unload_package(CdlTransaction, CdlPackage, bool /* limbo */ = true); + + void change_package_version(std::string /*name*/, std::string /*version*/, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + void change_package_version(CdlPackage, std::string /*version*/, CdlDiagnosticFnPtr /* error */, + CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + + void change_package_version(CdlTransaction, std::string /*name*/, std::string /*version*/, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + void change_package_version(CdlTransaction, CdlPackage, std::string /*version*/, CdlDiagnosticFnPtr /* error */, + CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + + // Loading a savefile is different in that it creates a new + // toplevel. Since transactions can only be created if the + // toplevel already exists, it is not possible to have a + // per-transaction load() operation. It is possible to have + // a per-transaction add() operation. + static CdlConfiguration load(std::string /* filename */, CdlPackagesDatabase, CdlInterpreter, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */); + + void add(std::string /* filename */, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */); + void add(CdlTransaction, std::string /* filename */, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */); + + // As with packages, a version of "" implies the most recent. + void set_template(std::string, std::string /* version */, + CdlDiagnosticFnPtr, CdlDiagnosticFnPtr /* warn */,bool /* limbo */ = true); + void set_template_file(std::string, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + void set_template(CdlTransaction, std::string, std::string /* version */, + CdlDiagnosticFnPtr, CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + void set_template_file(CdlTransaction, std::string, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + void unload_template(bool /* limbo */ = true); + void unload_template(CdlTransaction, bool /* limbo */ = true); + std::string get_template() const; + void set_template_name(std::string); // Intended for library use only + + void set_hardware(std::string, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + void set_hardware(CdlTransaction, std::string, + CdlDiagnosticFnPtr /* error */, CdlDiagnosticFnPtr /* warn */, bool /* limbo */ = true); + void unload_hardware(bool /* limbo */ = true); + void unload_hardware(CdlTransaction, bool /* limbo */ = true); + std::string get_hardware() const; + void set_hardware_name(std::string); // Intended for library use only + + // ---------------------------------------------------------------------------- + // Save a configuration to a file + void save(std::string, bool /* minimal */ = false); + void initialize_savefile_support(); + std::string get_save_file() const; + + // ---------------------------------------------------------------------------- + // Get rid of a configuration. + ~CdlConfigurationBody(); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + + // The only legal constructor, invoked from make() and load() + CdlConfigurationBody(std::string, CdlPackagesDatabase, CdlInterpreter); + + // The internal implementation of the persistence support + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + static int savefile_configuration_command(CdlInterpreter, int, const char*[]); + static int savefile_description_command(CdlInterpreter, int, const char*[]); + static int savefile_hardware_command(CdlInterpreter, int, const char*[]); + static int savefile_template_command(CdlInterpreter, int, const char*[]); + static int savefile_package_command(CdlInterpreter, int, const char*[]); + + std::string current_hardware; + std::string current_template; + std::string description; + CdlPackagesDatabase database; + std::string save_file; + enum { + CdlConfigurationBody_Invalid = 0, + CdlConfigurationBody_Magic = 0x5c409a3d + } cdlconfigurationbody_cookie; + + // The constructor can only be invoked via the make() and load() + // members. Other constructors and the assignment operator are + // illegal. + CdlConfigurationBody(); + CdlConfigurationBody(const CdlConfigurationBody&); + CdlConfigurationBody& operator=(const CdlConfigurationBody&); + +}; + +//}}} +//{{{ CdlPackage class + +// ---------------------------------------------------------------------------- +// Packages inherit from most of the base classes. + +class CdlPackageBody : public virtual CdlNodeBody, + public virtual CdlContainerBody, + public virtual CdlUserVisibleBody, + public virtual CdlValuableBody, + public virtual CdlParentableBody, + public virtual CdlBuildableBody, + public virtual CdlDefinableBody, + public virtual CdlLoadableBody, + public virtual CdlBuildLoadableBody, + public virtual CdlDefineLoadableBody +{ + friend class CdlTest; + + // Packages should not be created by application code, but + // the CdlConfiguration class must be able to do so inside + // load_package(); + friend class CdlConfigurationBody; + + public: + + ~CdlPackageBody(); + + static int parse_package(CdlInterpreter, int, const char*[]); + static int parse_hardware(CdlInterpreter, int, const char*[]); + static int parse_install_proc(CdlInterpreter, int, const char*[]); + static int parse_license_proc(CdlInterpreter, int, const char*[]); + + // Override the CdlDefineLoadable member. Hardware packages always + // send their configuration options to hardware.h + virtual std::string get_config_header() const; + + bool is_hardware_package() const; + bool has_install_proc() const; + const cdl_tcl_code& get_install_proc() const; + bool has_license_proc() const; + const cdl_tcl_code& get_license_proc() const; + + // Propagation support. Because of multiple virtual inheritance + // it is necessary to invoke the container and valuable + // update members. + virtual void update(CdlTransaction, CdlUpdate); + + // Persistence support. + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + static void initialize_savefile_support(CdlToplevel); + static int savefile_package_command(CdlInterpreter, int, const char*[]); + + // Was this package loaded because of a template or hardware setting? + bool belongs_to_template() const; + bool belongs_to_hardware() const; + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + + // The only valid constructor requires a number of fields + CdlPackageBody(std::string /* name */, CdlConfiguration, std::string /* directory */); + + // Other constructors are illegal + CdlPackageBody(); + CdlPackageBody(const CdlPackageBody&); + CdlPackageBody& operator=(const CdlPackageBody&); + + bool loaded_for_template; + bool loaded_for_hardware; + + enum { + CdlPackageBody_Invalid = 0, + CdlPackageBody_Magic = 0x1d7c0d43 + } cdlpackagebody_cookie; +}; + +//}}} +//{{{ CdlComponent class + +// ---------------------------------------------------------------------------- +// Similarly components just inherit from the appropriate base classes. + +class CdlComponentBody : public virtual CdlNodeBody, + public virtual CdlContainerBody, + public virtual CdlUserVisibleBody, + public virtual CdlValuableBody, + public virtual CdlParentableBody, + public virtual CdlBuildableBody, + public virtual CdlDefinableBody +{ + friend class CdlTest; + + public: + + ~CdlComponentBody(); + static int parse_component(CdlInterpreter, int, const char*[]); + static int parse_script(CdlInterpreter, int, const char*[]); + + // Propagation support. Because of multiple virtual inheritance + // it is necessary to invoke the container and valuable + // update members. + virtual void update(CdlTransaction, CdlUpdate); + + // Persistence support. + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + static void initialize_savefile_support(CdlToplevel); + static int savefile_component_command(CdlInterpreter, int, const char*[]); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + + // The only valid constructor requires a name. + CdlComponentBody(std::string); + + enum { + CdlComponentBody_Invalid = 0, + CdlComponentBody_Magic = 0x6359d9a7 + } cdlcomponentbody_cookie; + + // Other constructors are illegal + CdlComponentBody(); + CdlComponentBody(const CdlComponentBody&); + CdlComponentBody& operator=(const CdlComponentBody&); +}; + +//}}} +//{{{ CdlOption class + +// ---------------------------------------------------------------------------- +// Again options just inherit their functionality from the base classes. + +class CdlOptionBody : public virtual CdlNodeBody, + public virtual CdlUserVisibleBody, + public virtual CdlValuableBody, + public virtual CdlParentableBody, + public virtual CdlBuildableBody, + public virtual CdlDefinableBody +{ + friend class CdlTest; + + public: + ~CdlOptionBody(); + + static int parse_option(CdlInterpreter, int, const char*[]); + + // Persistence support. + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + static void initialize_savefile_support(CdlToplevel); + static int savefile_option_command(CdlInterpreter, int, const char*[]); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + CdlOptionBody(std::string); + + enum { + CdlOptionBody_Invalid = 0, + CdlOptionBody_Magic = 0x1c1162d1 + } cdloptionbody_cookie; + + CdlOptionBody(); + CdlOptionBody(const CdlOptionBody&); + CdlOptionBody& operator=(const CdlOptionBody&); +}; + +//}}} + +#endif /* !__CDL_HXX */ +// EOF cdl.hxx diff --git a/tools/src/libcdl/cdlcore.hxx b/tools/src/libcdl/cdlcore.hxx new file mode 100644 index 00000000..c64e2c34 --- /dev/null +++ b/tools/src/libcdl/cdlcore.hxx @@ -0,0 +1,5761 @@ +#ifndef __CDLCORE_HXX +# define __CDLCORE_HXX + +//{{{ Banner + +//========================================================================== +// +// cdlcore.hxx +// +// The core parts of the library. This header defines aspects of +// CDL that are shared between software cdl, hcdl, scdl, and any +// future languages based on the same core technology. +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 1999, 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contributors: bartv +// Date: 1999-04-15 +// +//####DESCRIPTIONEND#### +//========================================================================== + +//}}} +//{{{ Platform dependencies + +// ---------------------------------------------------------------------------- +// Visual C++ has the delightful feature that the source browser will generate +// warnings if there are any identifiers of length >= 256 characters, while at +// the same time use of templates in the standard C++ library can easily +// generate functions that long. It appears that the only way to disable the +// warnings is by use of a %$#@(%*&%! #pragma. +// +// Similarly, VC++ gives spurious warnings when it comes to multiple virtual +// inheritance. +#ifdef _MSC_VER +# pragma warning( disable: 4786 ) +# pragma warning( disable: 4250 ) +#endif + +//}}} +//{{{ nested #include's + +// ---------------------------------------------------------------------------- +// The libcdl API is defined using parts of the standard C++ library, +// including strings and various bits of STL. Therefore these headers must +// be #include'd here for the header file to work. +#include +#include +#include +#include +#include +#include +#include +#include + +// is needed in various places in the implementation. +// This #include should be moved to an implementation-specific +// header. +#include + +// Now for some eCos host-side infrastructure headers. +// +// Get the cyg_int64 data type and CYG_UNUSED_PARAM() macro. +#include + +// Some of the classes need to reference the cyg_assert_class_zeal enum. +// Also inline functions may perform assertions. +#include + +// This header file also depends on having a suitable Tcl installation +// Unfortunately does some ugly things in the interests of +// portability, including defining symbols such as EXTERN when +// necessary, and this has to be patched up here as cleanly as possible. +#ifndef CONST +# define __CDL_CONST_UNDEFINED +#endif +#ifndef EXTERN +# define __CDL_EXTERN_UNDEFINED +#endif +#ifndef VOID +# define __CDL_VOID_UNDEFINED +#endif +#ifndef CHAR +# define __CDL_CHAR_UNDEFINED +#endif +#ifndef SHORT +# define __CDL_SHORT_UNDEFINED +#endif +#ifndef LONG +# define __CDL_LONG_UNDEFINED +#endif + +extern "C" { +#include +} + +#ifdef __CDL_CONST_UNDEFINED +# undef CONST +# undef __CDL_CONST_UNDEFINED +#endif +#ifdef __CDL_EXTERN_UNDEFINED +# undef EXTERN +# undef __CDL_EXTERN_UNDEFINED +#endif +#ifdef __CDL_VOID_UNDEFINED +# undef VOID +# undef __CDL_VOID_UNDEFINED +#endif +#ifdef __CDL_CHAR_UNDEFINED +# undef CHAR +# undef __CDL_CHAR_UNDEFINED +#endif +#ifdef __CDL_SHORT_UNDEFINED +# undef SHORT +# undef __CDL_SHORT_UNDEFINED +#endif +#ifdef __CDL_LONG_UNDEFINED +# undef LONG +# undef __CDL_LONG_UNDEFINED +#endif + +//}}} + +//{{{ Primitive types, constants:, enums, etc. + +// ---------------------------------------------------------------------------- +// The CDL languages are defined in terms of arbitrary precision +// arithmetic. This is necessary to allow e.g. pointers to be +// manipulated at the CDL level on 64 bit target processors. +// +// Temporarily it is not necessary to provide this precision, so it is +// convenient to stick to 64 bit integers as provided by the +// underlying infrastructure. However the API is defined in terms of +// the type cdl_int, so that it will be easier in future to make the +// change to the correct datatype. At that point cdl_int can be +// redefined to be a class which supports the appropriate operators. + +typedef cyg_int64 cdl_int; + +// --------------------------------------------------------------------------- +// A common concept in the CDL language is a small amount of TCL code. +// This is currently stored as a simple string. Conceivably it could +// be byte-compiled and stored accordingly. + +typedef std::string cdl_tcl_code; + +// ---------------------------------------------------------------------------- +// CDL values. +// +// CDL is a declarative programming language. It does involve the +// manipulation of values, but such values do not necessarily +// correspond to hardware-level entities such as integers or double +// precision numbers. Hence the term "type" is avoided, "flavor" +// is used instead. CDL understands four different flavors. +// +// None | Bool +// --------+-------- +// Data |BoolData +// +// +// The flavor "none" is used for entities that serve only as +// placeholders in the hierarchy, allowing other entities to be +// grouped more easily. +// +// Boolean entities can be either enabled or disabled. This is the +// most common flavor for software configuration options, the user can +// either enable or disable some unit of functionality. For software +// packages implemented in C or C++ the implementation is obvious: iff +// the entity is enabled then there will be a #define, and code will +// check the setting using e.g. #ifdef. +// +// The flavor "data" implies some arbitrary data. Internally this will +// be held as a string. Other properties such as legal_values, +// check_proc and entry_proc can be used to constrain the +// actual values, for example to an integer value within a certain +// range. +// +// The flavor "booldata" combines the previous two: it means that +// the option can be either enabled or disabled, and if it is +// enabled then it must have a value as per legal_values etc. +// One example of this is a software package: this may be either +// enabled or disabled, and if it is enabled then it has a value +// corresponding to the version string. Another example is a hardware +// pin: this may or may not be connected, and if it is connected +// then its value identifies some other pin. +// +// An entity's flavor is not always sufficient by itself to specify +// how the user can manipulate it in a graphical tool. Obviously an +// entity of flavor "none" cannot be manipulated at all. Flavor "bool" +// normally implies a checkbutton, but occasionally a radiobutton will +// be more appropriate. "Data" says very little about the user +// interaction, it will be necessary to examine other properties such +// as legal_values to determine a sensible representation. The same +// goes for "BoolData", with the additional possibility that the +// entity may be disabled. +// +// It can be argued that three of the flavors are redundant: both Bool +// and BoolData could be implemented as cases of "Data" with a special +// legal value "disabled" (or false, or whatever); "None" could be +// implemented as constant "Data"; effectively CDL would manipulate +// all data as strings, just like e.g. all variables in Tcl, or just +// like all scalars in Perl. This approach is certainly tempting and +// might well make it easier to document the language, but in practice +// it would result in more verbose CDL: boolean entities really are a +// different beast from data entities. +// +// It can also be argued that there should be more flavors. For +// example there could be separate flavors for integer data, floating +// point data, string data, and so on. There are a number of good +// reasons for not doing so: +// +// 1) applying separate constraints such as legal_values allows much +// finer control over the actual values, for example numbers within a +// given range. As likely as not, a value will be constrained to +// something smaller than the range MININT to MAXINT (whatever those +// happen to be for the current target). +// +// 2) where do you stop? Do you provide separate flavors for signed +// vs. unsigned? Char, wchar_t, short, int, long, long long? How about +// the eCos data types cyg_ucount8, cyg_uint8, ... Is there support +// for enums? Arrays? Bitfields? Structures? Unions? C++ classes? +// How about other programming languages such as Ada or Java? +// +// Any attempt to implement a grand union of all data types in CDL +// is doomed to failure and should not be attempted. Treating +// everything as a string instead has proven successful in a number +// of languages, including Tcl and Perl. +// +// 3) for some variants of CDL, for example hardware CDL, it may not +// make much sense to display a value directly and allow it to be +// manipulated directly. The value associated with a pin entity +// identifies the pin to which it is connected, and typically +// this value will be manipulated by drag and drop rather than by +// typing some characters. Such a value certainly does not correspond +// to any machine data type. +// +// Another reason for extending the number of flavors is to provide +// more information. For example there could be a specialized version +// of the boolean flavor called "radio". This would imply a specific +// representation in the user interface, and it would also impose +// a constraint that it implicitly precludes any other radio entities +// within the same group. However the same information can be specified +// by other more general means such as requires statements. + +enum CdlValueFlavor { + CdlValueFlavor_Invalid = 0, + CdlValueFlavor_None = 1, + CdlValueFlavor_Bool = 2, + CdlValueFlavor_BoolData = 3, + CdlValueFlavor_Data = 4 +}; + + +// Another important aspect of a value is where it came from. There +// are a number of possible sources: the default value, calculated +// from a default_value property; a value inferred by the inference +// engine; a value set by a wizard; and a value set explicitly by +// the user. These sources have different priorities, so for example +// the inference engine can safely replace a calculated default +// value without prompting the user, but changing a user-set value +// automatically is undesirable. +// +// Wizard-generated values are considered more valuable than default +// or inferred values (there is some user input involved), but less +// valuable than values set explicitly by the user: the idea is that +// a wizard asks fairly generic questions and makes a best guess at +// the correct values, which may not be precise enough for the +// user's needs. +// +// Arguably dialogs provide a level between wizards and users, in that +// a dialog can theoretically manipulate several entities in one go so +// it is a less precise way of setting values. At this stage it does +// not seem worthwhile to add this distinction. +// +// The library actually maintains separate values for each source, +// as well as the current source which is what actually gets used. +// In theory it is possible for the user interface code to let +// the user switch between these. It is not yet clear whether this +// makes sense from an end user's perspective. + +enum CdlValueSource { + CdlValueSource_Invalid = -1, // 0 is needed for array indexing + CdlValueSource_Default = 0, + CdlValueSource_Inferred = 1, + CdlValueSource_Wizard = 2, + CdlValueSource_User = 3, + CdlValueSource_Current = 4 +}; + +// ---------------------------------------------------------------------------- +// Update support. +// +// When there is a change to a node and there are references to that node, +// the referencing properties will want to be informed about this. There +// are various different kinds of changes, not all of which are always +// relevant. For example, if a CDL entity gets destroyed or unloaded then +// all referencing entities are likely to want to know about this, but +// if a container's value changes then this has no effect on a reference +// in e.g. a "parent" property. In some cases it is also useful to apply +// updates to nodes rather than properties, e.g. when a node becomes +// active or inactive. +// +// The generic update code is also used for initialization and finalization, +// i.e. when the source object itself has just been loaded or is +// being unloaded. +// +// For any particular update at most one bit set, but it is often +// appropriate to treat several different kinds of update with +// common code. Hence the enum values can be or'ed and and'ed. + +enum CdlUpdate { + CdlUpdate_Loaded = 0x0001, // The source has just been loaded + CdlUpdate_Init = 0x0002, // Second-phase of a load operation + CdlUpdate_Unloading = 0x0004, // The source is being unloaded + CdlUpdate_Created = 0x0008, // The destination has just been created + CdlUpdate_Destroyed = 0x0010, // The destination is being destroyed + CdlUpdate_ValueChange = 0x0020, // The destination's value has changed. + // This gets applied to nodes as well + CdlUpdate_ActiveChange = 0x0040 // The node has become active or inactive +}; + +// ---------------------------------------------------------------------------- +// Inference engine callback. +// +// During a transaction there may be one or more invocations of the inference +// engine, followed by a callback which should display the current transaction +// status to the user and allow one or more recommended fixes to be accepted. +// The callback's return code indicates what should happen next. "Cancel" +// is pretty obvious. "Continue" may result in a commit, or it may result in +// another iteration. + +enum CdlInferenceCallbackResult { + CdlInferenceCallbackResult_Continue = 0x01, + CdlInferenceCallbackResult_Cancel = 0x02 +}; + +// ---------------------------------------------------------------------------- +// Widget hints. +// +// The library can provide a hint to the GUI code as to a sensible +// widget to use for displaying a particular valuable. There are separate +// hints for the bool and data parts. + +enum CdlBoolWidget { + CdlBoolWidget_None = 0, // The boolean part is not applicable + CdlBoolWidget_CustomDialog = 1, // There is a valid custom dialog property + CdlBoolWidget_CheckButton = 2, // For simple booleans + CdlBoolWidget_Radio = 3, // For several mutual exclusive options, + // the data structure will provide a string identifier +}; + +enum CdlValueWidget { + CdlValueWidget_None = 0, // The value part is not applicable + CdlValueWidget_CustomDialog = 1, // There is a valid custom dialog property + CdlValueWidget_Loadable = 2, // Use package/version dialog + CdlValueWidget_EntryBox = 3, // Fallback + CdlValueWidget_MultilineString = 4, // For complicated strings + CdlValueWidget_DecimalRange = 5, // e.g. 1 to 16 + // Could be implemented as scale, radio buttons, entry, pull-down menu, + // combo box, ... depending on GUI conventions and number of entries + CdlValueWidget_HexRange = 6, // e.g. 0x01 to 0x10 + CdlValueWidget_OctalRange = 7, // e.g. 01 to 020 + CdlValueWidget_DoubleRange = 8, // e.g. 0.1 to 0.2 + CdlValueWidget_NumericSet = 9, // e.g. 1 2 4 8 16 + // The exact nature of the numbers is irrelevant, they will only + // get displayed, not edited + // Could be implemented as radio buttons, entry widget, pull-down menu, + // combo box, ... depending on GUI conventions and number of entries + // Each entry can have its own representation + CdlValueWidget_StringSet = 10 // e.g. "ram", "rom" + + // More to be added, e.g. for compiler flag handling +}; + +// ---------------------------------------------------------------------------- +// Value formats. +// +// The CDL input data can accept numbers in a variety of formats, +// for example hexadecimal as well as decimal. It is desirable to try +// to keep track of this formatting information where possible, so +// that what the user sees and what ends up in header files corresponds +// more closely to what is in the raw CDL data. For example, it is +// much easier to understand 0x7fffffff than its decimal equivalent. +// +// The information kept here is very imprecise, it provides only +// minimal formatting information. It is not clear yet whether this +// will suffice or whether something more exact is going to be needed. +enum CdlValueFormat +{ + CdlValueFormat_Default = 0, + CdlValueFormat_Hex = 1, + CdlValueFormat_Octal = 2 +}; + +//}}} +//{{{ Exception classes + +// ---------------------------------------------------------------------------- +// Some parts of the library make use of C++ exception handling. A number +// of exception classes related to this library are useful. In addition +// just about every part of the library can throw std::bad_alloc, but this +// is not checked for explicitly anywhere. + +// This class is used for all exceptions where an error message should +// be displayed to the user. There is a single string message associated +// with the exception. + +class CdlStringException { + friend class CdlTest; + + public: + CdlStringException(std::string message_arg) { + message = message_arg; + } + CdlStringException(const CdlStringException& original) { + message = original.message; + } + CdlStringException& operator=(const CdlStringException& original) { + message = original.message; + return *this; + } + ~CdlStringException() { + message = ""; + } + const std::string& get_message() const { + return message; + } + private: + std::string message; + CdlStringException(); +}; + +// CdlInputOutputException: this gets thrown when something goes wrong during +// file I/O operations, e.g. a file exists but cannot be opened. The +// exception contains a simple string explaining the error. This string +// may contain multiple lines, it is intended to be written to stderr +// or displayed in either a text widget or a dialog box. +// +// A separate class rather than a typedef is used to avoid any possible +// error message confusion. Everything gets inlined so there should be +// no performance issues. + +class CdlInputOutputException : public CdlStringException { + friend class CdlTest; + public: + CdlInputOutputException(std::string message_arg) : + CdlStringException(message_arg) { + } + CdlInputOutputException(const CdlInputOutputException& original) : + CdlStringException(original) { + } + CdlInputOutputException& operator=(const CdlInputOutputException& original) { + (void) CdlStringException::operator=(original); + return *this; + } +}; + +// This class is used when any parsing happens at the C++ level rather +// than at the Tcl level. The exception should be caught before it +// propagates through the Tcl interpreter, or the latter will end up +// in an inconsistent state. + +class CdlParseException : public CdlStringException { + friend class CdlTest; + public: + CdlParseException(std::string message_arg) : + CdlStringException(message_arg) { + } + CdlParseException(const CdlParseException& original) : + CdlStringException(original) { + } + CdlParseException& operator=(const CdlParseException& original) { + (void) CdlStringException::operator=(original); + return *this; + } +}; + +// Evaluating an expression may fail for a variety of reasons, e.g. because +// some referenced entity has not been loaded into the configuration. +// This exception can be thrown in such cases. + +class CdlEvalException : public CdlStringException { + friend class CdlTest; + public: + CdlEvalException(std::string message_arg) : + CdlStringException(message_arg) { + } + CdlEvalException(const CdlEvalException& original) : + CdlStringException(original) { + } + CdlEvalException& operator=(const CdlEvalException& original) { + (void) CdlStringException::operator=(original); + return *this; + } +}; + +//}}} +//{{{ Forward declarations of the body classes + +// ---------------------------------------------------------------------------- +// This section provides forward declarations of the main classes in +// the core of the library. Each variant of CDL will define additional +// classes, e.g. cdl_option, but these will usually be derived from +// the core ones. + +// There are three types of expression in CDL: +// 1) ordinary expressions evaluate to a single value. The most common +// use is for the legal_values property. +// 2) list expressions evaluate to a range of values, e.g. 1 to 10, +// and the most common use is for the legal_values property. +// 3) goal expressions evaluate to either true or false and are used +// for e.g. requires and active_if properties. +class CdlExpressionBody; +class CdlListExpressionBody; +class CdlGoalExpressionBody; + +// There are also objects for simple values, values and list values. +// These are expanded classes, there are no associated pointer +// types. It is quite likely that values need to be copied around +// on the stack. +class CdlSimpleValue; +class CdlValue; +class CdlListValue; + +// Properties. The base class is CdlProperty, and there are a number +// of derived classes provided as standard. Additional derived classes +// may be added in future. +class CdlPropertyBody; +class CdlProperty_MinimalBody; +class CdlProperty_StringBody; +class CdlProperty_TclCodeBody; +class CdlProperty_ReferenceBody; +class CdlProperty_StringVectorBody; +class CdlProperty_ExpressionBody; +class CdlProperty_ListExpressionBody; +class CdlProperty_GoalExpressionBody; + +// Base classes. CDL entities such as options and components derive +// from one or more of these, using virtual inheritance. +// +// The lowest-level class is CdlNodeBody. +// +// 1) a node usually lives in a hierarchy, below a toplevel +// and with a container object as the parent. However nodes +// can live outside a container on a temporary basis, +// and toplevel objects have no parent. +// +// 2) a node has a name that is unique within the hierarchy. +// +// 3) a node has a vector of properties. Actually some entities +// will have an empty vector, e.g. the orphans container +// that is internal to the library. However it is too +// inconvenient to have separate base classes for these. +// +// 4) nodes can be referred to by properties in other nodes. +class CdlNodeBody; + +// A container is a node that can contain other nodes. +class CdlContainerBody; + +// A loadable object is a container whose data has come out of a CDL +// script of some sort. It also stores details about all entities that +// were loaded via this script (even if some of them were reparented) +// thus supporting unload operations. +class CdlLoadableBody; + +// A toplevel object is a container that acts as the toplevel of +// a hierarchy, in other words its parent is always 0. In addition +// a toplevel keeps track of all the names used in the hierarchy, +// thus facilitating navigation. +class CdlToplevelBody; + +// The remaining classes all add functionality to CdlNode, directly or +// indirectly. +// +// A user-visible object is likely to appear in the user interface. +// This means it may have an alias string, a description, a +// documentation URL, and a gui_hint field. +class CdlUserVisibleBody; + +// A valuable object has a value that can be retrieved but not +// necessarily modified by the user. For example the value of an +// interface is always calculated and users can never change it. +// Valuable objects have a whole bunch of associated properties +// including dependencies. +class CdlValuableBody; + +// A parentable object has the parent property, i.e. it can +// be reparented to anywhere in the hierarchy +class CdlParentableBody; + +// A buildable object is a valuable object that may result in +// something being built, typically a library in the case of +// software packages. +class CdlBuildableBody; + +// A loadable that contains buildables +class CdlBuildLoadableBody; + +// A definable object is a valuable object whose value can result +// in #define statements in a header file +class CdlDefinableBody; + +// A loadable which can contain definables +class CdlDefineLoadableBody; + +// TODO: add instantiation support + +// Custom dialogs and wizards are provided by the core. +class CdlDialogBody; +class CdlWizardBody; +class CdlInterfaceBody; + +// Support for Tcl interpreters is also in the core, since it is +// difficult to do anything CDL-related without at least one Tcl +// interpreter lying around. +class CdlInterpreterBody; + +// The basic conflict class is part of the core library, as are a +// number of common derived classes for specific types of conflict. +class CdlConflictBody; +class CdlConflict_UnresolvedBody; +class CdlConflict_IllegalValueBody; +class CdlConflict_EvalExceptionBody; +class CdlConflict_RequiresBody; +class CdlConflict_DataBody; + +// Many operations happen (or may happen) in the context of a +// transaction. This is necessary to keep track of the various +// changes that can happen: for example, changing a component's +// value may require other entities' default values to be +// recalculated; it may change some legal_values list expressions, +// causing current values to become invalid; it may affect +// "requires" properties, causing goals to become satisfied or +// not-satisfied; it may change the "active" state of everything +// below the component, not to mention any entity with an +// "active_if" properties, and when an entity becomes active or +// inactive that may in turn affect other entities. +// +// Keeping track of all of this via recursion is possible, but there +// are problems. If an entity is updated multiple times, no +// optimizations are possible. It becomes much more difficult to +// detect cycles. During an unload operation things can get very +// messy. There is no easy way to track all of the changes and report +// them to higher level code via a callback. There is no support +// for any kind of rollback. A transaction model potentially +// provides support for all of this, at the cost of a more +// complex API. +class CdlTransactionBody; + +// This class is used to pass information back to the application +// about what has actually changed in a transaction. +class CdlTransactionCallback; + + +// Build info class. This is always an expanded object, but is +// needed here to break a circular dependency. +class CdlBuildInfo; + +// ---------------------------------------------------------------------------- +// Typedefs for the pointers. There are separate typedefs to cope with +// const vs. non-const objects. Otherwise you end up with the problem +// that "const CdlNode x" means that the pointer is const, not the +// object pointed at. + +typedef CdlExpressionBody* CdlExpression; +typedef CdlListExpressionBody* CdlListExpression; +typedef CdlGoalExpressionBody* CdlGoalExpression; + +typedef CdlPropertyBody* CdlProperty; +typedef CdlProperty_MinimalBody* CdlProperty_Minimal; +typedef CdlProperty_StringBody* CdlProperty_String; +typedef CdlProperty_TclCodeBody* CdlProperty_TclCode; +typedef CdlProperty_ReferenceBody* CdlProperty_Reference; +typedef CdlProperty_StringVectorBody* CdlProperty_StringVector; +typedef CdlProperty_ExpressionBody* CdlProperty_Expression; +typedef CdlProperty_ListExpressionBody* CdlProperty_ListExpression; +typedef CdlProperty_GoalExpressionBody* CdlProperty_GoalExpression; + +typedef CdlNodeBody* CdlNode; +typedef CdlContainerBody* CdlContainer; +typedef CdlLoadableBody* CdlLoadable; +typedef CdlToplevelBody* CdlToplevel; +typedef CdlUserVisibleBody* CdlUserVisible; +typedef CdlValuableBody* CdlValuable; +typedef CdlParentableBody* CdlParentable; +typedef CdlBuildableBody* CdlBuildable; +typedef CdlBuildLoadableBody* CdlBuildLoadable; +typedef CdlDefinableBody* CdlDefinable; +typedef CdlDefineLoadableBody* CdlDefineLoadable; + +typedef CdlDialogBody* CdlDialog; +typedef CdlWizardBody* CdlWizard; +typedef CdlInterfaceBody* CdlInterface; + +typedef CdlInterpreterBody* CdlInterpreter; + +typedef CdlConflictBody* CdlConflict; +typedef CdlConflict_UnresolvedBody* CdlConflict_Unresolved; +typedef CdlConflict_IllegalValueBody* CdlConflict_IllegalValue; +typedef CdlConflict_EvalExceptionBody* CdlConflict_EvalException; +typedef CdlConflict_RequiresBody* CdlConflict_Requires; +typedef CdlConflict_DataBody* CdlConflict_Data; + +typedef CdlTransactionBody* CdlTransaction; + +// ---------------------------------------------------------------------------- + +typedef const CdlExpressionBody* CdlConstExpression; +typedef const CdlListExpressionBody* CdlConstListExpression; +typedef const CdlGoalExpressionBody* CdlConstGoalExpression; + +typedef const CdlPropertyBody* CdlConstProperty; +typedef const CdlProperty_MinimalBody* CdlConstProperty_Minimal; +typedef const CdlProperty_StringBody* CdlConstProperty_String; +typedef const CdlProperty_TclCodeBody* CdlConstProperty_TclCode; +typedef const CdlProperty_ReferenceBody* CdlConstProperty_Reference; +typedef const CdlProperty_StringVectorBody* CdlConstProperty_StringVector; +typedef const CdlProperty_ExpressionBody* CdlConstProperty_Expression; +typedef const CdlProperty_ListExpressionBody* CdlConstProperty_ListExpression; +typedef const CdlProperty_GoalExpressionBody* CdlConstProperty_GoalExpression; + +typedef const CdlNodeBody* CdlConstNode; +typedef const CdlContainerBody* CdlConstContainer; +typedef const CdlLoadableBody* CdlConstLoadable; +typedef const CdlToplevelBody* CdlConstToplevel; +typedef const CdlUserVisibleBody* CdlConstUserVisible; +typedef const CdlValuableBody* CdlConstValuable; +typedef const CdlParentableBody* CdlConstParentable; +typedef const CdlBuildableBody* CdlConstBuildable; +typedef const CdlBuildLoadableBody* CdlConstBuildLoadable; +typedef const CdlDefinableBody* CdlConstDefinable; +typedef const CdlDefineLoadableBody* CdlConstDefineLoadable; + +typedef const CdlDialogBody* CdlConstDialog; +typedef const CdlWizardBody* CdlConstWizard; +typedef const CdlInterfaceBody* CdlConstInterface; + +typedef const CdlInterpreterBody* CdlConstInterpreter; + +typedef const CdlConflictBody* CdlConstConflict; +typedef const CdlConflict_UnresolvedBody* CdlConstConflict_Unresolved; +typedef const CdlConflict_IllegalValueBody* CdlConstConflict_IllegalValue; +typedef const CdlConflict_EvalExceptionBody* CdlConstConflict_EvalException; +typedef const CdlConflict_RequiresBody* CdlConstConflict_Requires; +typedef const CdlConflict_DataBody* CdlConstConflict_Data; + +typedef const CdlTransactionBody* CdlConstTransaction; + +//}}} +//{{{ Miscellaneous types etc. + +// ---------------------------------------------------------------------------- +// This section is used for data types, function prototypes, etc. which could +// not be defined until after the main CDL classes and handles. + +// This typedef is used for error and warning reporting functions. +// Typically such a function pointer will be passed when the library +// is asked to perform any non-trivial parsing operation, e.g. loading +// a package. +// +// If the error is fatal then this callback function should raise +// a CdlParseException. +typedef void (*CdlDiagnosticFnPtr)(std::string); + +// ---------------------------------------------------------------------------- +// This function is used for update handler. Whenever there is a change +// to CDL entity (it has just been loaded, or its value has changed, or +// whatever) this can affect other CDL entities that reference it. +// All such references occur via properties, and there should be +// update handlers associated with those properties. +// +// Update handlers are also invoked for initialization and finalization +// operations, i.e. when the source object itself has just been loaded +// or is in the process of being unloaded. +// +// The arguments to an update handler are: +// 1) the transaction in which the operation takes place +// 2) the source object containing the reference +// 3) the source property containing the reference +// 4) the destination object. This may be 0 for some update +// operations. +// 5) an indication of the change that has happened. This should +// be a CdlUpdate value. +typedef void (*CdlUpdateHandler)(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + +// ---------------------------------------------------------------------------- +// This function is also used for transactions. Typically during a +// transaction there will be one or more invocations of the inference engine, +// with callbacks in between to allow one or more of the recommended +// changes to be undone. +typedef CdlInferenceCallbackResult (*CdlInferenceCallback)(CdlTransaction); + +// ---------------------------------------------------------------------------- +// The TCL API and C++ do not always mesh cleanly, for example a lot +// happens in terms of ClientData which is a void* pointer. To avoid +// too many casts all over the place libcdl provides a CdlInterpreter +// class and the following alternative to Tcl_CmdProc*. A single +// function will be used for the TCL command: its ClientData will be +// the CdlInterpreterCommand, and the CdlInterpreter is accessible via +// AssocData. This does result in some overheads, but none of these +// should be in performance-critical code. +typedef int (*CdlInterpreterCommand)(CdlInterpreter, int, const char*[]); + +// ---------------------------------------------------------------------------- +// In the libcdl world it is often convenient to swap whole sets of +// commands in and out. For example when executing the body of a +// cdl_component it is desirable to swap in commands for all the +// properties that make sense in a component and swap out all the +// commands that made sense in a higher level. It is assumed that none +// of the commands being swapped in or out are built-ins. Achieving +// this involves a vector of this simple utility structure. +class CdlInterpreterCommandEntry { + public: + std::string name; + CdlInterpreterCommand command; + + CdlInterpreterCommandEntry() : name(""), command(0) {} + CdlInterpreterCommandEntry(const char *name_arg, CdlInterpreterCommand command_arg) + : name(name_arg), command(command_arg) + { + } + CdlInterpreterCommandEntry(std::string name_arg, CdlInterpreterCommand command_arg) + : name(name_arg), command(command_arg) + { + } + ~CdlInterpreterCommandEntry() + { + name = ""; + command = 0; + } +}; + +// ---------------------------------------------------------------------------- +// Persistence support. +// Some applications want to be able to store additional information +// in savefiles, and essentially this involves extra commands that +// get executed when the savefile is executed. It is possible that +// the application reading back the savefile does not understand +// the same set of commands as the application that wrote back the +// data, so the library tries hard not to lose data. +// +// The CdlSaveCallback function typedef is used when installing +// an application-specific savefile command. The first argument +// indicates the node for which the callback is being invoked: +// this may be the entire toplevel, or just an option, or whatever. +// +// The CdlSavefileCommand structure keeps track of the command, +// the save callback if any (non-zero only for application-specific +// data, zero implies that the command is handled by the lirary). +// The load command is invoked when reading in a savefile and the +// appropriate command is executed: unrecognised commands will be +// processed by CdlToplevelBody::savefile_handle_unknown(). + +typedef void (*CdlSaveCallback)(CdlNode, CdlInterpreter, Tcl_Channel, int); + +struct CdlSavefileCommand { + std::string name; + CdlSaveCallback save_callback; + CdlInterpreterCommand load_command; +}; + +// ---------------------------------------------------------------------------- +// Widget hint. +// This structure provides widget hint information for a CdlValuable. +// There are separate hints for the bool and data parts, and possibly +// some additional data such as a string identifying the set of +// items in a radio button. +struct CdlWidgetHint { + CdlBoolWidget bool_widget; + CdlValueWidget value_widget; + std::string radio_button_interface; +}; + +//}}} +//{{{ Memory leak detection + +// ---------------------------------------------------------------------------- +// Provide some macros that are useful for detecting memory leaks. Basically +// there is a static counter for every class, which gets incremented by the +// constructor(s) and decremented by the destructor. Memory leak detection +// is currently enabled if tracing is enabled. It would be possible to use +// another configure-time option, but the overheads of tracing are likely +// to dwarf the overheads of memory leak detection. +// +// For now the memleak counters are always present, even in non-debug +// versions. The overhead is sufficiently small that it can be +// ignored.There is control over whether or not the counters get +// updated in the constructor or destructor. Otherwise there would be problems +// with whether or not there should be a semicolon at the end of the +// CYGDBG_DECLARE_MEMLEAK_COUNTER() macro definition. + +#define CYGDBG_DECLARE_MEMLEAK_COUNTER() static int memleak_counter +#define CYGDBG_DEFINE_MEMLEAK_COUNTER(class) int class::memleak_counter = 0 +#define CYGDBG_GET_MEMLEAK_COUNTER(class) class::memleak_counter + +#ifdef CYGDBG_USE_TRACING + +#define CYGDBG_MEMLEAK_CONSTRUCTOR() this->memleak_counter++; +#define CYGDBG_MEMLEAK_DESTRUCTOR() this->memleak_counter--; +#define CYGDBG_MEMLEAK_CHECKTHIS() if (this->memleak_counter < 0) { return false; } + +#else + +#define CYGDBG_MEMLEAK_CONSTRUCTOR() +#define CYGDBG_MEMLEAK_DESTRUCTOR() +#define CYGDBG_MEMLEAK_CHECKTHIS() + +#endif + +//}}} + +//{{{ Cdl class + +// --------------------------------------------------------------------------- +// The sole purpose of this class is to provide some utility functions with +// reasonable namespace protection, without requiring that the compiler +// implements namespaces. + +class Cdl { + + public: + + static bool is_valid_value_flavor(CdlValueFlavor); + static bool is_valid_value_source(CdlValueSource); + + static bool is_valid_cdl_name(const std::string&); + static bool is_valid_c_preprocessor_symbol(const std::string&); + + static bool string_to_integer(std::string, cdl_int&); + static bool string_to_double(std::string, double&); + static bool string_to_bool(std::string, bool&); + static void integer_to_string(cdl_int, std::string&, CdlValueFormat = CdlValueFormat_Default); + static std::string integer_to_string(cdl_int, CdlValueFormat = CdlValueFormat_Default); + static void double_to_string(double, std::string&, CdlValueFormat = CdlValueFormat_Default); + static std::string double_to_string(double, CdlValueFormat = CdlValueFormat_Default); + static void bool_to_string(bool, std::string&); + static std::string bool_to_string(bool); + static void integer_to_double(cdl_int, double&); + static double integer_to_double(cdl_int); + static bool double_to_integer(double, cdl_int&); + + static bool string_to_flavor(std::string, CdlValueFlavor&); + static bool flavor_to_string(CdlValueFlavor, std::string&); + static bool string_to_source(std::string, CdlValueSource&); + static bool source_to_string(CdlValueSource, std::string&); + + static std::string get_library_version(); + static void set_interactive(bool = true); + static bool is_interactive(); + + static bool truth() { return true; } + static bool falsehood() { return false; } + + // return values are -1,0,1 just like strcmp(). The most recent + // version is the smallest. + static int compare_versions(std::string, std::string); + + // Also provide an STL-friendly comparison class + class version_cmp { + public: + bool operator()(const std::string& v1, const std::string& v2) const { + return Cdl::compare_versions(v1,v2) < 0; + } + }; + + // Split a version string into major, minor and release numbers. + static void split_version_string(const std::string&, std::string& /* major */, + std::string& /* minor */, std::string& /* release */); + + // It is occasionally useful to take a full CDL name such as CYGPKG_KERNEL + // and turn it into a short form, i.e. kernel. + static std::string get_short_form(const std::string&); + + private: + static bool interactive; +}; + +//}}} +//{{{ CdlInterpreter class + +// ---------------------------------------------------------------------------- +// libcdl requires access to a Tcl interpreter. For now the standard +// interpreter is used. In the long run it may be better to use a +// custom parser in places, if only to improve the diagnostics messages +// that users see. +// +// Consider the case of software CDL (other CDL variants will have +// similar requirements). A Tcl interpreter is needed to read in the +// data for a given package. It will also be needed at various stages +// when the data is being manipulated, e.g. to display a custom dialog +// or to execute e.g. a check_proc or a define_proc. Each package +// should run in its own safe interpreter with limited capabilities: +// file I/O is limited to read-only, but read-write in the build and +// install trees; network I/O is out of the question, at least until +// appropriate security support is added to the CDL language itself. +// However the interpreter should be extended with additional commands +// like cdl_get and cdl_set to access the configuration data. +// +// For security and robustness reasons it is desirable to have +// separate interpreters for the various packages. This leads to the +// concept of a master interpreter for the entire configuration, and a +// group of slave interpreters, one per package. In this model it +// is convenient to have the configuration and package entities +// associated directly with the interpreter. Note that a single +// application may have several configurations loaded in memory, +// so there may be several master interpreters. +// +// Some applications will want to support the graphical side of CDL, +// i.e. custom dialogs and wizards. This means linking in Tk, not to +// mention X11 (or the Windows equivalents), and making some/all of +// the Tk commands available to the safe interpreter. Arguably +// commands like toplevel should always be disabled. Not all clients +// of libcdl will want the overheads of linking with Tk and X, so this +// has to be made optional. +// +// The approach taken is as follows: +// +// 1) there is a class CdlInterpreter which provides access to Tcl +// interpreters. Amongst other things it takes care of converting +// between C and C++ strings. +// +// 2) every toplevel needs its own CdlInterpreter. The application +// code should supply this interpreter itself when the toplevel +// is instantiated, allowing it to decide whether or not Tk should +// be available. +// +// 3) each loadable gets its own safe slave interpreter, derived from +// the toplevel's interpreter. +// NOTE: initially the slave interpreters are not actually safe. It +// is not clear in the long term to what extent per-loadable +// interpreters need to be sandboxes, there are issues such as +// doing the equivalent of autoconf tests. + +// Tcl 8.4 involved various incompatible API changes related to +// const vs. non-const data. #define'ing USE_NON_CONST or +// USE_COMPAT_CONST avoids some of the problems, but does not +// help much for C++. +#if (TCL_MAJOR_VERSION > 8) || ((TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION >= 4)) +# define CDL_TCL_CONST_CAST(type,var) (var) +#else +# define CDL_TCL_CONST_CAST(type,var) const_cast(var) +#endif + +class CdlInterpreterBody +{ + friend class CdlTest; + + public: + + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + // This is how a top-level (i.e. per-toplevel) interpreter + // should get created. + static CdlInterpreter make(Tcl_Interp* = 0); + + // Create a slave interpreter for reading in the data in e.g. a + // cdl_package + CdlInterpreter create_slave(CdlLoadable, bool /* safe */ = true); + + // Make the interpreter safe, a one-way operation. + void make_safe(); + + // The destructor is public. + virtual ~CdlInterpreterBody(); + + // Add or remove commands from an interpreter. This provides + // a more C++-friendly implementation of Tcl's + // CreateCommand() and DeleteCommand(). + void add_command(std::string, CdlInterpreterCommand); + void remove_command(std::string); + + // In the libcdl world it is also convenient to swap whole sets of + // commands in and out. This is achieved by push and pop operations. + // push returns the old set (0 at the toplevel). pop restores + // the old set. + std::vector* push_commands(std::vector&); + void pop_commands(std::vector*); + std::vector* get_pushed_commands() const; + + // Similarly, allow variables to be set, unset and queried + void set_variable(std::string, std::string); + void unset_variable(std::string); + std::string get_variable(std::string); + + // FIXME: add support for variable traces. These are needed + // for cdl_value and similar utilities. + + // Provide hooks into the AssocData() facilities associated with + // Tcl interpreters. This makes it possible to store arbitrary + // data with an interpreter, e.g. to keep track of current state. + void set_assoc_data(const char*, ClientData, Tcl_InterpDeleteProc* =0); + void delete_assoc_data(const char*); + ClientData get_assoc_data(const char*); + + // Evaluate a string as Tcl code. The return value comes from Tcl, e.g. + // TCL_OK or TCL_ERROR. There are variants depending on whether or not + // the result string is of interest. + int eval(std::string); + int eval(std::string, std::string&); + + // Ditto for any Tcl code that comes from CDL files + int eval_cdl_code(const cdl_tcl_code); + int eval_cdl_code(const cdl_tcl_code, std::string&); + + // And support for evaluating an entire file + int eval_file(std::string); + int eval_file(std::string, std::string&); + + // For use by commands implemented in C++, a way of setting the result + void set_result(std::string); + + // And a utility to get the result as well. + std::string get_result(); + + // Was the result set by the Tcl interpreter or by libcdl? + bool result_set_by_cdl(); + + // A utility to quote data that is going to end up in a TCL script. + static std::string quote(std::string); + + // Turn some multiline data into a comment. + static std::string multiline_comment(const std::string&, int, int = 0); + + // Add some data to a comment, allowing for newlines if necessary + static std::string extend_comment(const std::string&, int, int = 0); + + // Write some data to a savefile, throwing an exception on error + void write_data(Tcl_Channel, std::string); + + // File-related utilities. + void locate_subdirs(std::string, std::vector&); + void locate_all_subdirs(std::string, std::vector&); + void locate_files(std::string, std::vector&); + void locate_all_files(std::string, std::vector&); + bool is_directory(std::string); + bool is_file(std::string); + + // When parsing a CDL script it is convenient to keep track of + // a number of items: + // + // 1) the toplevel, e.g. the entire configuration + // 2) the loadable, e.g. the current package + // 3) the parent of whatever is being processed at the moment + // 4) the entity, i.e. the thingamajig that is being processed. + // 5) the current file + // 6) an error reporting function + // + // This gives the various commands embedded in the Tcl interpreter + // enough information to do their job. Additional information can + // be provided via assoc_data() + // + // There should be only one call to set_toplevel(), for the + // master interpreter. All slaves inherit this, and the toplevel + // cannot be changed again. + // + // The loadable field is filled in via make_slave() + // + // For some members push and pop functions are more appropriate + // than set. + CdlToplevel get_toplevel() const; + CdlLoadable get_loadable() const; + CdlContainer get_container() const; + CdlNode get_node() const; + std::string get_context() const; + CdlDiagnosticFnPtr get_error_fn_ptr() const; + CdlDiagnosticFnPtr get_warning_fn_ptr() const; + CdlTransaction get_transaction() const; + void set_toplevel(CdlToplevel); + void set_transaction(CdlTransaction); + CdlContainer push_container(CdlContainer); + void pop_container(CdlContainer); + CdlNode push_node(CdlNode); + void pop_node(CdlNode); + std::string push_context(std::string); + void pop_context(std::string); + CdlDiagnosticFnPtr push_error_fn_ptr(CdlDiagnosticFnPtr); + void pop_error_fn_ptr(CdlDiagnosticFnPtr); + CdlDiagnosticFnPtr push_warning_fn_ptr(CdlDiagnosticFnPtr); + void pop_warning_fn_ptr(CdlDiagnosticFnPtr); + + // Provide utility classes for common push/pop combinations. The + // push happens during the constructor, the pop during the + // destructor. This can simplify some code, especially when + // exceptions may get thrown. + class DiagSupport { + public: + DiagSupport(CdlInterpreter interp_arg, CdlDiagnosticFnPtr error_fn_arg, CdlDiagnosticFnPtr warn_fn_arg) { + interp = interp_arg; + saved_error_fn = interp->push_error_fn_ptr(error_fn_arg); + saved_warn_fn = interp->push_warning_fn_ptr(warn_fn_arg); + } + ~DiagSupport() { + interp->pop_error_fn_ptr(saved_error_fn); + interp->pop_warning_fn_ptr(saved_warn_fn); + } + private: + DiagSupport(); + + CdlInterpreter interp; + CdlDiagnosticFnPtr saved_error_fn; + CdlDiagnosticFnPtr saved_warn_fn; + }; + class ContextSupport { + public: + ContextSupport(CdlInterpreter interp_arg, std::string context) { + interp = interp_arg; + saved_context = interp->push_context(context); + } + ~ContextSupport() { + interp->pop_context(saved_context); + } + private: + ContextSupport(); + CdlInterpreter interp; + std::string saved_context; + }; + class ContainerSupport { + public: + ContainerSupport(CdlInterpreter interp_arg, CdlContainer container) { + interp = interp_arg; + saved_container = interp->push_container(container); + } + ~ContainerSupport() { + interp->pop_container(saved_container); + } + private: + ContainerSupport(); + CdlInterpreter interp; + CdlContainer saved_container; + }; + class NodeSupport { + public: + NodeSupport(CdlInterpreter interp_arg, CdlNode node) { + interp = interp_arg; + saved_node = interp->push_node(node); + } + ~NodeSupport() { + interp->pop_node(saved_node); + } + private: + NodeSupport(); + CdlInterpreter interp; + CdlNode saved_node; + }; + class CommandSupport { + public: + CommandSupport(CdlInterpreter interp_arg, std::vector& commands) { + interp = interp_arg; + saved_commands = interp->push_commands(commands); + } + CommandSupport(CdlInterpreter interp_arg, CdlInterpreterCommandEntry* commands) { + unsigned int i; + for (i = 0; 0 != commands[i].command; i++) { + new_commands.push_back(commands[i]); + } + interp = interp_arg; + saved_commands = interp->push_commands(new_commands); + } + ~CommandSupport() { + interp->pop_commands(saved_commands); + } + + private: + CommandSupport(); + CdlInterpreter interp; + std::vector* saved_commands; + std::vector new_commands; + }; + + // Similar utility classes for variables and assoc data. + class VariableSupport { + public: + VariableSupport(CdlInterpreter interp_arg, std::string varname_arg, std::string data) { + interp = interp_arg; + varname = varname_arg; + interp->set_variable(varname, data); + } + ~VariableSupport() { + interp->unset_variable(varname); + } + private: + VariableSupport(); + CdlInterpreter interp; + std::string varname; + }; + class AssocSupport { + public: + AssocSupport(CdlInterpreter interp_arg, const char* name_arg, ClientData data, Tcl_InterpDeleteProc* del_proc = 0) { + interp = interp_arg; + name = name_arg; + interp->set_assoc_data(name, data, del_proc); + } + ~AssocSupport() { + interp->delete_assoc_data(name); + } + private: + AssocSupport(); + CdlInterpreter interp; + const char* name; + }; + + // Some command implementations may want to access other Tcl library + // routines such as Tcl_SplitList(). This requires convenient access + // to the underlying Tcl interpreter. + Tcl_Interp* get_tcl_interpreter() const; + + // For use by the assertion macros. + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + + private: + // This is the Tcl command proc that gets registered for all + // CdlInterpreterCommand instances. + static int tcl_command_proc(ClientData, Tcl_Interp*, int, const char*[]); + + // This key is used to access the CdlInterpreter assoc data. + static char* cdlinterpreter_assoc_data_key; + + // Do not allow static instances of a Cdl interpreter. There are too + // many possible failure conditions. Cdl interpreters can only be + // created dynamically via make(), which will invoke this. + CdlInterpreterBody(Tcl_Interp*); + + // Default constructor, copy constructor and assignment are illegal + CdlInterpreterBody(); + CdlInterpreterBody(const CdlInterpreterBody&); + CdlInterpreterBody& operator=(const CdlInterpreterBody&); + + + Tcl_Interp* tcl_interp; // The underlying Tcl interpreter + bool owns_interp; // Was the Tcl interpreter created by the library? + std::vector slaves; // All slave interpreters + CdlInterpreter parent; // Or else the parent + CdlToplevel toplevel; // Data that gets used during the parsing process + CdlTransaction transaction; + CdlLoadable loadable; + CdlContainer container; + CdlNode node; + std::string context; + CdlDiagnosticFnPtr error_fn_ptr; + CdlDiagnosticFnPtr warning_fn_ptr; + bool cdl_result; + + std::vector* current_commands; // for push() and pop() + + enum { + CdlInterpreterBody_Invalid = 0, + CdlInterpreterBody_Magic = 0x0be67689 + } cdlinterpreterbody_cookie; +}; + +//}}} +//{{{ CdlReference/Referrer classes + +// --------------------------------------------------------------------------- +// CDL objects are organised primarily in a tree hierarchy. For +// example a package contains components, components contain options, +// and so on. The tree hierarchy tends to change rather infrequently, +// so it makes sense to have a quick way of navigating between +// entities without continuously having to do hash-table lookups. In +// addition it is very desirable to make the connectivity +// bidirectional: if a "requires" property in option A references +// option B then it would be useful to have a link back to A from B; +// that way, if the value of B changes it is a lot easier to keep +// things up to date. +// +// Terminology: the entity which contains the reference, e.g. a +// "requires" property, is the source. The relevant property is the +// "source property". The entity pointed at is the destination. +// +// Unfortunately there may be connections between CDL entities outside +// the tree hierarchy. In particular any property can contain one or +// more references to packages, components, options, wizards, or +// whatever. Often these references will be to options etc. within the +// same package, but some references will go to other packages. There +// may even be references to other configurations: for example a board +// may contain both an ordinary processor and a DSP; these two need +// their own configurations; however a package running on the DSP may +// need to interact with a package running on the processor, and vice +// versa. +// +// Also, a reference may occur inside an object that is not in the +// hierarchy. For example CDL expressions may get evaluated inside Tcl +// code rather than as part of a property. Such expressions may still +// contain references to entities in the current configuration. +// +// References may not be resolved. When reading in a CDL script there +// may be forward references. A reference may involve another package +// that has not yet been loaded, which is a conflict. +// +// Using simple pointers to store these connections is a bad idea. It +// makes it a lot harder to figure out what is connected to what, and +// it introduces horrible consistency problems when packages get +// loaded and unloaded. Instead libCDL provides a CdlReference class. +// Whenever a CdlProperty contains a reference to some other CDL +// entity there should be a CdlReference object corresponding to this. +// The reverse direction is handled via a CdlReferrer object. +// +// A CdlReference object can be either bound or unbound. By default it +// is unbound, containing only a string. It can then be bound via a +// member function, examined, and unbound again as required. Creating +// a binding automatically creates a CdlReferrer entry in the target +// object, thus avoiding any risk of inconsistencies. +// +// The CdlReference class should not be used outside the hierarchy, +// since every bound reference must have a referrer object pointing +// back, and this link back can only be valid within the hierarchy. +// Temporary CdlReference objects are useful during the construction +// of properties. +// +// It is possible that a given property (e.g. a complicated "requires" +// expression) has multiple references to another entity. Each of +// these involves a separate CdlReference/CdlReferrer pair. + +// ---------------------------------------------------------------------------- +// The actual CdlReference class. + +class CdlReference { + + friend class CdlTest; + + // CdlReferrer must be a friend so that when a package gets unloaded + // it can clean up all references to it. + friend class CdlReferrer; + + public: + + // The default constructor should not normally be used, instead + // a string should be supplied. However there are vectors of + // reference objects... + CdlReference(); + + // The main constructor supplies the name of the referenced + // entity. The resulting object will be unbound. + CdlReference(const std::string); + + // The copy constructor is legal for unbound objects only. + CdlReference(const CdlReference&); + + // The assignment operator is needed for STL operations. + // Again it only makes sense of unbound objects. + CdlReference& operator=(const CdlReference&); + + // The destructor is only valid for unbound objects. All references + // should be unbound before an entity can be destroyed. + ~CdlReference(); + + // Access the various fields. + void set_destination_name(const std::string); + const std::string& get_destination_name() const; + CdlNode get_destination() const; + + // Binding a reference. Obviously this can only be used when the + // reference is still unbound. When doing the binding it is + // necessary to know: + // (1) the object containing the reference. + // (2) the specific property that contains the reference. + // (3) the object being referred to. + // Binding a reference results in a new referrer entry in the + // destination. + void bind(CdlNode, CdlProperty, CdlNode); + + // Unbinding a reference. Typically this only happens when the + // destination is unloaded. The arguments provide the source and + // the source property. + void unbind(CdlNode, CdlProperty); + + // This is used by the ASSERT_CLASS() and ASSERT_THIS() macros. + bool check_this(cyg_assert_class_zeal cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + + // The data fields. The name is usually filled in by the + // constructor. The destination defaults to zero for an unbound + // object and gets filled in by the bind() operation. + std::string dest_name; + CdlNode dest; + + enum { + CdlReference_Invalid = 0, + CdlReference_Magic = 0x3f908608 + } cdlreference_cookie; +}; + +// ---------------------------------------------------------------------------- +// The CdlNode class (and hence just about everything) contains a +// vector of CdlReferrer objects. This keeps track of all entities +// that refer to this one, so if the value associated with this +// changes it is possible to work out the impact of this on all +// entities that rely on this value. +// +// Arguably this should work in terms of CdlValuable objects rather +// than CdlNode objects. However it is convenient to use references +// for the connection between e.g. an option and a dialog, where +// there is no value involved. The reverse connection is of little +// use in this circumstance. +// +// CdlReferrer objects are rarely accessed directly. Instead they will +// be filled in during a CdlReference::bind() operation and erased +// during a CdlReference::unbind() operation. The only operations that +// should be public allow access to the contained data. + +class CdlReferrer { + + friend class CdlTest; + + // CdlReference::bind() and unbind() have direct access to the + // members, since these two functions are really responsible for + // creating and destroying referrer objects. + friend class CdlReference; + + public: + + // The default constructor, copy constructor and assignment + // operator are all public to avoid problems with having vectors + // of referrer objects. Similarly the destructor is public. + // In practice updates actually happen as a consequence of + // CdlReference::bind() and CdlReference::unbind(). + CdlReferrer(); + CdlReferrer(const CdlReferrer&); + CdlReferrer& operator=(const CdlReferrer&); + ~CdlReferrer(); + + CdlNode get_source() const; + CdlProperty get_source_property() const; + void update(CdlTransaction, CdlNode, CdlUpdate); + bool check_this(cyg_assert_class_zeal=cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + + CdlNode source; + CdlProperty source_property; + + enum { + CdlReferrer_Invalid = 0, + CdlReferrer_Magic = 0x70e1fc37 + } cdlreferrer_cookie; +}; + +//}}} +//{{{ Value and Expression classes + +//{{{ CdlEvalContext + +// ---------------------------------------------------------------------------- +// Expression evaluation always happens within a certain context. +// This may involve a transaction. Usually it involves a node and +// a property within that node, although it is possible to evaluate +// expressions from inside Tcl code. +// +// To avoid passing too many arguments around the various +// evaluation-related routines, a utility class is provided. + +class CdlEvalContext { + + friend class CdlTest; + + public: + + CdlTransaction transaction; + CdlNode node; + CdlProperty property; + CdlToplevel toplevel; + + CdlEvalContext(CdlTransaction, CdlNode = 0, CdlProperty = 0, CdlToplevel = 0); + ~CdlEvalContext(); + + // Given a reference inside an expression, try to resolve this to either + // a node or, more specifically, a valuable. + CdlNode resolve_reference(CdlExpression, int); + CdlValuable resolve_valuable_reference(CdlExpression, int); + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + // Illegal operation, the three fields must always be supplied, + // although they may be zero. + CdlEvalContext(); + + enum { + CdlEvalContext_Invalid = 0, + CdlEvalContext_Magic = 0x03434be9 + } cdlevalcontext_cookie; + +}; + +//}}} +//{{{ CdlSimpleValue + +// ---------------------------------------------------------------------------- +// Expression evaluation happens in terms of CdlSimpleValue objects. +// In CDL all values are strings, but for the purposes of arithmetic +// these strings sometimes have to be interpreted as integers or as +// double precision numbers. Sometimes there is a choice, for example +// the equality operator == can mean numerical or string comparison. +// The basic rules that get applied are: +// +// 1) if the current value has an integer representation then +// use this by preference. This means that an expression +// of the form (CYGNUM_XXX != 0x100) will do a integer +// comparison if possible. +// +// 2) otherwise if the current value can be interpreted as a +// double precision number, use that representation. +// All integers can be interpreted as doubles (at the risk +// of some loss of precision), so the representation as +// a double should only be used if the integer representation +// is inappropriate. +// +// 3) otherwise interpret the value as a string. +// +// The default value is 0. + +class CdlSimpleValue { + + friend class CdlTest; + + public: + + CdlSimpleValue(); + CdlSimpleValue(std::string); + CdlSimpleValue(cdl_int); + CdlSimpleValue(double); + CdlSimpleValue(const CdlSimpleValue&); + CdlSimpleValue(bool); + ~CdlSimpleValue(); + + CdlSimpleValue& operator=(const CdlSimpleValue&); + CdlSimpleValue& operator=(std::string); + CdlSimpleValue& operator=(cdl_int); + CdlSimpleValue& operator=(double); + + CdlSimpleValue& operator=(bool); + + bool operator==(const CdlSimpleValue&) const; + bool operator!=(const CdlSimpleValue&) const; + bool operator==(std::string arg) const + { + CdlSimpleValue val(arg); + return *this == val; + } + bool operator==(cdl_int arg) const + { + CdlSimpleValue val(arg); + return *this == val; + } + bool operator==(double arg) const + { + CdlSimpleValue val(arg); + return *this == val; + } + bool operator!=(std::string arg) const + { + CdlSimpleValue val(arg); + return *this != val; + } + bool operator!=(cdl_int arg) const + { + CdlSimpleValue val(arg); + return *this != val; + } + bool operator!=(double arg) const + { + CdlSimpleValue val(arg); + return *this != val; + } + + void set_value(std::string, CdlValueFormat = CdlValueFormat_Default); + std::string get_value() const; + + bool has_integer_value() const; + void set_integer_value(cdl_int, CdlValueFormat = CdlValueFormat_Default); + cdl_int get_integer_value() const; + + bool has_double_value() const; + void set_double_value(double, CdlValueFormat = CdlValueFormat_Default); + double get_double_value() const; + + CdlValueFormat get_value_format() const; + void set_value_format(CdlValueFormat); + void set_value_format(CdlSimpleValue&); + void set_value_format(CdlSimpleValue&, CdlSimpleValue&); + + static void eval_valuable(CdlEvalContext&, CdlValuable, CdlSimpleValue&); + + // For expression evaluation, it is often convenient to get hold + // of a boolean as well. This may indicate a non-empty string + // or a non-zero value. + bool get_bool_value() const; + + // This class is too simple to warrant even a cookie validation. + bool check_this(cyg_assert_class_zeal zeal = cyg_quick) const { + return true; + } + + protected: + + private: + enum { + int_valid = 0x01, + double_valid = 0x02, + string_valid = 0x04, + int_invalid = 0x08, + double_invalid = 0x10 + }; + mutable int valid_flags; + mutable std::string value; + mutable cdl_int int_value; + mutable double double_value; + CdlValueFormat format; +}; + +//}}} +//{{{ CdlListValue + +// ---------------------------------------------------------------------------- +// Evaluating a list expression results in a set of possible values, but +// unlike the original list expression these values are now constant and +// can have no dependencies on CDL entities. As with list expressions the +// main operation on a list value is to detect membership, but using +// list values allows multiple potential members to be tested without +// repeated expression evaluation. The main use of list values is implicit +// in libcdl, each list expression contains a mutable cached list value. +// +// A list value contains five sets of data: +// +// 1) separate vectors of strings, integers, and floating point constants. +// Having separate vectors of integers and floating points avoids +// problems when numbers can be represented in different formats. +// 2) a vector of cdl_int pairs for ranges of integer data +// 3) a vector of double pairs for ranges of floating point data +// +// Any of these vectors may be empty, but at least one of the vectors should +// contain useful data. Possibly there should also be tables for cdl_int and +// double to avoid unnecessary string conversions. + +class CdlListValue { + + friend class CdlTest; + + // A list value will only be filled in when a list expression is evaluated. + // The members cannot be updated by other means. + friend class CdlListExpressionBody; + + public: + + CdlListValue(); + ~CdlListValue(); + CdlListValue(const CdlListValue&); + CdlListValue& operator=(const CdlListValue&); + + bool is_member(CdlSimpleValue&) const; + bool is_member(std::string, bool = true) const; + bool is_member(cdl_int, bool = true) const; + bool is_member(double, bool = true) const; + + // These provide access to the raw data, for example if it is + // necessary to suggest a legal value to the user. + const std::vector& get_table() const; + const std::vector >& get_integer_ranges() const; + const std::vector >& get_double_ranges() const; + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + std::vector table; + std::vector > integer_ranges; + std::vector > double_ranges; + + enum { + CdlListValue_Invalid = 0, + CdlListValue_Magic = 0x2183a943 + } cdllistvalue_cookie; +}; + +//}}} +//{{{ CdlValue + +// ---------------------------------------------------------------------------- +// Values in CDL are non-trivial compared with some other languages. +// Even though CDL is not a fully-typed language, it does still have +// four different flavors to consider. There is also the problem that +// an entity may have up to four different values which should be +// stored (default, inferred, wizard, user), with the ability to +// switch between them. The CdlValue class provides support for this. +// +// CdlValue objects are not normally updated explicitly. Instead +// higher level code deals with CdlValuable objects, which inherit +// privately from CdlValue. Modifications to CdlValuables happen in +// the context of a transaction. +// +// The first concept to take into account is the flavor. There +// are four flavors, None, Bool, BoolData and Data. The member +// function get_flavor() can be used to obtain the current flavor. +// +// CdlValueFlavor CdlValue::get_flavor() const; +// +// Values may be enabled or disabled. Values of flavor None +// and Data are always enabled. Values of flavor Bool or BoolData +// may or may not be enabled, by default they are disabled. +// +// bool CdlValue::is_enabled(...) const; +// +// (The optional argument to is_enabled() is discussed later). +// +// Values of flavor BoolData and Data also have a string value, +// which can be interpreted as an integer or a double under +// the right circumstances. +// +// std::string CdlValue::get_value(...) const; +// bool CdlValue::has_integer_value(...) const; +// bool CdlValue::has_double_value(...) const; +// cdl_int CdlValue::get_integer_value(...) const; +// double CdlValue::get_double_value(...) const; +// +// This is equivalent to a CdlSimpleValue object, and in fact +// that is the internal representation. It is possible to +// get hold of the CdlSimpleValue object directly: +// +// CdlSimpleValue CdlValue::get_simple_value(...) const; +// +// The get_integer_value() and get_double_value() members should +// only be used if you are confident that the current value has +// an integer or double representation. Otherwise the result is +// undefined. +// +// The optional argument to these member functions represents +// the source. A value can be set from four different sources: +// the default value (usually either 0 or the result of +// evaluating a default_value property); an inferred value, +// determined by the inference engine; a wizard value, i.e. +// what a CDL wizard believes the correct value to be based +// on user input; and a user value, something explicitly +// set by the end user. These have different priorities: +// the inference engine can override default values but not +// user values. A CdlValue object keeps track of the current +// source. +// +// CdlValueSource CdlValue::get_source() const; +// +// If no argument is given to e.g. is_enabled() then the +// current source is used. Otherwise it is possible to find +// out whether or not the entity is enabled for each of the +// sources. +// +// The default source is always defined, the others may or +// may not be. It is possible to find out for each source +// whether or not a value has been set. +// +// bool CdlValue::has_source(CdlValueSource) const; +// +// +// Updating values normally happens in the CdlValuable class, +// but the member functions are the same. There is a member +// function to change the flavor: +// +// void CdlValue::set_flavor(CdlValueFlavor); +// +// However this member function is intended only for use by the +// library itself. An entity's flavor is normally defined by CDL data, +// and should not be updated explicitly by application code. +// +// There are two member functions to manipulate the value source: +// +// void CdlValue::set_source(CdlValueSource); +// void CdlValue::invalidate_source(CdlValueSource); +// +// The first function can be used if e.g. the user wants to +// change his or her mind and go back to the default value +// rather than a user value. The user value is not forgotten +// and can be reinstated. +// +// invalidate_source() can be used to completely cancel a +// value source. If that source happens to be the current one +// then the current source will be adjusted appropriately. +// It is illegal to attempt to invalidate the default source. +// +// For values with flavor Bool and BoolData, there are three +// member functions that can be used to control the enabled +// status: +// +// void CdlValue::set_enabled(bool, CdlValueSource); +// void CdlValue::enable(CdlValueSource); +// void CdlValue::disable(CdlValueSource); +// +// Note that when updating a CdlValue object the source should +// be known and must be specified. If the source has a higher +// priority than the current one then it will automatically +// become the new source. On the rare occasion that this is +// not desired, set_source() will have to be used afterwards +// to reset the current source. +// +// For values with flavor BoolData and Data the following +// member functions are available to change the value string: +// +// void CdlValue::set_value(std::string, CdlValueSource); +// void CdlValue::set_value(cdl_int, CdlValueSource); +// void CdlValue::set_value(double, CdlvalueSource); +// void CdlValue::set_value(CdlSimpleValue&, CdlValueSource); +// +// For values with flavor BoolData is is possible to +// combine updating the enabled flag and the string value: +// +// void CdlValue::set_enabled_and_value(bool, std::string, CdlValueSource); +// void CdlValue::set_enabled_and_value(bool, cdl_int, CdlValueSource); +// void CdlValue::set_enabled_and_value(bool, double, CdlValueSource); +// void CdlValue::set_enabled_and_value(bool, CdlSimpleValue&, CdlValueSource); +// void CdlValue::enable_and_set_value(std::string, CdlValueSource); +// void CdlValue::enable_and_set_value(cdl_int, CdlValueSource); +// void CdlValue::enable_and_set_value(double, CdlValueSource); +// void CdlValue::enable_and_set_value(CdlSimpleValue&, CdlValueSource); +// void CdlValue::disable_and_set_value(std::string, CdlValueSource); +// void CdlValue::disable_and_set_value(cdl_int, CdlValueSource); +// void CdlValue::disable_and_set_value(double, CdlValueSource); +// void CdlValue::disable_and_set_value(CdlSimpleValue&, CdlValueSource); +// +// Obviously many of these functions are just simple inlines. +// +// There is one final member function: +// +// void CdlValue::set(CdlSimpleValue, CdlValueSource); +// +// This member function is defined to do the right thing, +// whatever the flavor happens to be. + +class CdlValue { + + friend class CdlTest; + + public: + + CdlValue(CdlValueFlavor = CdlValueFlavor_Bool); + virtual ~CdlValue(); + CdlValue(const CdlValue&); + CdlValue& operator=(const CdlValue&); + + CdlValueFlavor get_flavor() const; + CdlValueSource get_source() const; + bool has_source(CdlValueSource) const; + + bool is_enabled(CdlValueSource = CdlValueSource_Current) const; + std::string get_value(CdlValueSource = CdlValueSource_Current) const; + bool has_integer_value(CdlValueSource = CdlValueSource_Current) const; + bool has_double_value(CdlValueSource = CdlValueSource_Current) const; + cdl_int get_integer_value(CdlValueSource = CdlValueSource_Current) const; + double get_double_value(CdlValueSource = CdlValueSource_Current) const; + CdlSimpleValue get_simple_value(CdlValueSource = CdlValueSource_Current) const; + + void set_source(CdlValueSource); + void invalidate_source(CdlValueSource); + + void set_enabled(bool, CdlValueSource); + void enable(CdlValueSource source) + { + set_enabled(true, source); + } + void disable(CdlValueSource source) + { + set_enabled(false, source); + } + + void set_value(CdlSimpleValue&, CdlValueSource); + void set_value(std::string data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_value(val, source); + } + void set_integer_value(cdl_int data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_value(val, source); + } + void set_double_value(double data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_value(val, source); + } + void set_enabled_and_value(bool, CdlSimpleValue&, CdlValueSource); + void set_enabled_and_value(bool enabled, std::string data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_enabled_and_value(enabled, val, source); + } + void set_enabled_and_value(bool enabled, cdl_int data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_enabled_and_value(enabled, val, source); + } + void set_enabled_and_value(bool enabled, double data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_enabled_and_value(enabled, val, source); + } + void enable_and_set_value(CdlSimpleValue& val, CdlValueSource source) + { + set_enabled_and_value(true, val, source); + } + void enable_and_set_value(std::string data, CdlValueSource source) + { + set_enabled_and_value(true, data, source); + } + void enable_and_set_value(cdl_int data, CdlValueSource source) + { + set_enabled_and_value(true, data, source); + } + void enable_and_set_value(double data, CdlValueSource source) + { + set_enabled_and_value(true, data, source); + } + void disable_and_set_value(CdlSimpleValue& val, CdlValueSource source) + { + set_enabled_and_value(false, val, source); + } + void disable_and_set_value(std::string data, CdlValueSource source) + { + set_enabled_and_value(false, data, source); + } + void disable_and_set_value(cdl_int data, CdlValueSource source) + { + set_enabled_and_value(false, data, source); + } + void disable_and_set_value(double data, CdlValueSource source) + { + set_enabled_and_value(false, data, source); + } + + void set(CdlSimpleValue&, CdlValueSource); + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + // This should only be used by the library itself. + void set_flavor(CdlValueFlavor); + + protected: + + private: + + CdlValueFlavor flavor; + CdlValueSource current_source; + + // FIXME: a static const member should be used for the array + // sizes, but VC++ does not support that part of the language. + // FIXME: std::bitset should be used here. Using lots of separate + // bools here is inefficient. + bool source_valid[4]; + bool enabled[4]; + CdlSimpleValue values[4]; + + enum { + CdlValue_Invalid = 0, + CdlValue_Magic = 0x41837960 + } cdlvalue_cookie; +}; + +//}}} +//{{{ CdlSubexpression + +// ---------------------------------------------------------------------------- +// Expressions come into existence primarily as the result of reading +// in certain properties like default_value in CDL data. It is also +// possible for expressions to be generated and evaluated on the fly +// inside Tcl code, but that is expected to be a comparatively rare +// events. Expression objects always live on the heap, usually only +// in derived classes. +// +// An ordinary expression evaluates to a single value. There are two +// other types of expression in the CDL language, goal expressions and +// list expression. A goal expression is essentially a set of ordinary +// expressions with implicit &&'s between them. A list expression +// is a set of expressions that can be evaluated to a constant vector, +// plus pairs of expressions that constitute ranges. Again goal and +// list expressions only live on the heap. +// +// Both parsing an evaluation involve tokens for the various +// operators. The inference engine, conflict reporting code, and +// other diagnostic code will also need to have ready access to +// this information. Hence it makes a bit more sense to have +// the enum outside the expression class. + +enum CdlExprOp { + CdlExprOp_Invalid = 0, + CdlExprOp_EOD = 1, // End of data reached + CdlEXprOp_Command = 2, // [tcl code] + CdlExprOp_Variable = 3, // $tcl_variable + CdlExprOp_StringConstant = 4, // "hello" + CdlExprOp_IntegerConstant = 5, // 123 + CdlExprOp_DoubleConstant = 6, // 3.1415 + CdlExprOp_Reference = 7, // CYGPKG_INFRA + CdlExprOp_Range = 8, // x to y + CdlExprOp_Negate = 9, // -x + CdlExprOp_Plus = 10, // +x + CdlExprOp_LogicalNot = 11, // !x + CdlExprOp_BitNot = 12, // ~x + CdlExprOp_Indirect = 13, // *x + CdlExprOp_Active = 14, // ?x + CdlExprOp_Function = 15, // sin(x) + CdlExprOp_Multiply = 16, // x * y + CdlExprOp_Divide = 17, // x / y + CdlExprOp_Remainder = 18, // x % y + CdlExprOp_Add = 19, // x + y + CdlExprOp_Subtract = 20, // x - y + CdlExprOp_LeftShift = 21, // x << y + CdlExprOp_RightShift = 22, // x >> y + CdlExprOp_LessThan = 23, // x < y + CdlExprOp_LessEqual = 24, // x <= y + CdlExprOp_GreaterThan = 25, // x > y + CdlExprOp_GreaterEqual = 26, // x >= y + CdlExprOp_Equal = 27, // x == y + CdlExprOp_NotEqual = 28, // x != y + CdlExprOp_BitAnd = 29, // x & y + CdlExprOp_BitXor = 30, // x ^ y + CdlExprOp_BitOr = 31, // x | y + CdlExprOp_And = 32, // x && y + CdlExprOp_Or = 33, // x || y + CdlExprOp_Cond = 34, // x ? a : b + CdlExprOp_StringConcat = 35, // x . y + CdlExprOp_Implies = 36, // x implies y + CdlExprOp_Xor = 37, // x xor y + CdlExprOp_Eqv = 38 // x eqv y +}; + +// ---------------------------------------------------------------------------- +// A subexpression consists of an operation, possibly some constant +// data, and possibly indices into the subexpression vector. +// Normally some unions would be used, but unions and objects such +// as std::string do not mix, and the amount of memory involved is +// not big enough to really worry about. + +#define CdlFunction_MaxArgs 3 +struct CdlSubexpression { + + CdlExprOp op; + CdlSimpleValue constants; // String, integer or double constant + int reference_index; // iff CdlExprOp_Reference + + int lhs_index; // for all non-constant operators + int rhs_index; // for binary and ternary operators only + int rrhs_index; // only for ternary operators. + + int func; // iff CdlExprOp_Function + int args[CdlFunction_MaxArgs]; +}; + +//}}} +//{{{ CdlFunction + +// ---------------------------------------------------------------------------- +// Generic support for function parsing, evaluation, and inference. The +// implementation is extensible so that functions can be added to the +// core via static constructors. + +class CdlFunction { + + friend class CdlTest; + + public: + CdlFunction(const char* /* name */, int /* no_args */, + void (*)(CdlExpression, const CdlSubexpression&), + void (*)(CdlEvalContext&, CdlExpression, const CdlSubexpression&, CdlSimpleValue&), + bool (*)(CdlTransaction, CdlExpression, unsigned int, bool, int), + bool (*)(CdlTransaction, CdlExpression, unsigned int, CdlSimpleValue&, int) + ); + ~CdlFunction(); + + static bool is_function(std::string, int&); + static std::string get_name(int); + static int get_args_count(int); + + static void check(CdlExpression, const CdlSubexpression&); + static void eval(CdlEvalContext&, CdlExpression, const CdlSubexpression&, CdlSimpleValue&); + static bool infer_bool(CdlTransaction, CdlExpression, unsigned int, bool, int); + static bool infer_value(CdlTransaction, CdlExpression, unsigned int, CdlSimpleValue&, int); + + static void (*null_check)(CdlExpression, const CdlSubexpression&); + static bool (*null_infer_bool)(CdlTransaction, CdlExpression, unsigned int, bool, int); + static bool (*null_infer_value)(CdlTransaction, CdlExpression, unsigned int, CdlSimpleValue&, int); + + protected: + + private: + // Keep track of all functions in the system + static std::vector all_functions; + + // Each function object is given a unique id during initialization + static int next_id; + int id; + + // Provided by the constructor + const char* name; + int number_args; + void (*check_fn)(CdlExpression, const CdlSubexpression&); + void (*eval_fn)(CdlEvalContext&, CdlExpression, const CdlSubexpression&, CdlSimpleValue&); + bool (*infer_bool_fn)(CdlTransaction, CdlExpression, unsigned int, bool, int); + bool (*infer_value_fn)(CdlTransaction, CdlExpression, unsigned int, CdlSimpleValue&, int); + + // The default constructor is illegal + CdlFunction(); +}; + +//}}} +//{{{ CdlExpression + +// ---------------------------------------------------------------------------- +// And now for the expression class itself. + +class CdlExpressionBody { + + friend class CdlTest; + + public: + + // The default constructor is basically a no-op, new expression + // objects only get created as a consequence of parsing. However + // it exists and is protected for the convenience of derived + // classes. The copy constructor is protected, allowing parsing + // code to first parse an expression and then copy the expression + // into a higher level object. The assignment operator is illegal. + // There is no reason to hide the destructor. + virtual ~CdlExpressionBody(); + + // An expression involves three pieces of data. There is a vector + // of subexpressions. It is also necessary to know where + // evaluation should being, in accordance with operator precedence + // rules. And there is a vector of CdlReference objects - this + // needs to be kept separate from the subexpression vector because + // CdlReference objects are comparatively tricky. + // + // All of this data is public and can be readily inspected by the + // inference engine, by conflict detection code, by diagnostic + // code, etc. + std::vector sub_expressions; + int first_subexpression; + std::vector references; + bool update(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + + // There are a number of parsing functions. The first one is + // used by higher-level code to parse a single expression. Its + // argument is a single string (which may be the result of + // concatenating several Tcl arguments), and at the end of the + // parse operation there should be no further data. The result + // will either be a new expression object or a parsing exception + // to be caught by higher level code. + static CdlExpression parse(std::string); + + // This is used when parsing list expressions, which involve a + // sequence of ordinary expressions and possibly range operators. + // The whole list expression lives in a single string, and it is + // necessary to provide an index indicating where in the string + // parsing should begin. It is also useful to return details of + // the token that caused parsing to terminate (EOD, Range, or + // the start of something else). + static CdlExpression parse(std::string, int&, CdlExprOp&, int&); + + // A goal expression is derived from an ordinary expression but + // has somewhat different rules for evaluating. Parsing a goal + // expression involves parsing a number of ordinary expressions + // with implicit && operators between them, and it requires + // a parsing function that can be used to extend an existing + // expression. + // + // NOTE: possibly this should should be a protected member, since + // its main use is in parsing goal expressions. + static void continue_parse(CdlExpression, std::string, int&, CdlExprOp&, int&); + + // Evaluating expressions. Note that this may fail at run-time + // because of errors that cannot be caught sensibly when the + // expression is read in, for example arithmetic overflow or + // division by zero. Because such failures are a possibility + // anyway no special action is taken to prevent an expression + // with e.g. an unresolved reference from being evaluated. + // + // eval() is the public interface, and manages + // CdlConflict_EvalException objects. eval_internal() is for use + // by list and goal expressions. + void eval(CdlEvalContext&, CdlSimpleValue&); + void eval_internal(CdlEvalContext&, CdlSimpleValue&); + void eval_subexpression(CdlEvalContext&, int, CdlSimpleValue&); + + // The full original expression is useful for diagnostics purposes + std::string get_original_string() const; + + bool check_this(cyg_assert_class_zeal cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + // The default constructor does very little, the main work + // is done by the various parsing functions. However it is + // available to derived classes, especially goal expressions. + CdlExpressionBody(); + + // The copy constructor has to be usable by derived classes, + // e.g. CdlExpressionProperty + CdlExpressionBody(const CdlExpressionBody&); + + private: + + + // The assignment operator is illegal. + CdlExpressionBody& operator=(const CdlExpressionBody&); + + // The string that was parsed originally + std::string expression_string; + + enum { + CdlExpressionBody_Invalid = 0, + CdlExpressionBody_Magic = 0x760293a3 + } cdlexpressionbody_cookie; +}; + +//}}} +//{{{ CdlListExpression + +// ---------------------------------------------------------------------------- +// The main use of list expressions is for the legal_values +// properties. Essentially a list expression is just a vector of +// ordinary expressions and ranges of expressions. + +class CdlListExpressionBody { + + friend class CdlTest; + + public: + + // Availability of constructors etc. is as per the ordinary + // expression class. + virtual ~CdlListExpressionBody(); + + // The data associated with a list expression is a vector of + // expressions, plus a vector of expression pairs constituting + // ranges. As with ordinary expressions the data is fully public + // and can be readily examined by e.g. the inference engine. + std::vector data; + std::vector > ranges; + + // Parsing. This involves taking a single string, typically from + // a CDL script, and parsing one or more ordinary expressions. + static CdlListExpression parse(std::string); + + // Evaluation support. A list expression evaluates to a list value. + void eval(CdlEvalContext&, CdlListValue&); + + // More commonly client code is going to be interested in whether + // or not a particular value is a legal member. The result + // cache ensures that it is possible to + bool is_member(CdlEvalContext&, CdlSimpleValue&); + bool is_member(CdlEvalContext&, std::string); + bool is_member(CdlEvalContext&, cdl_int); + bool is_member(CdlEvalContext&, double); + + // The full original expression is useful for diagnostics purposes + std::string get_original_string() const; + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlListExpressionBody(const CdlListExpressionBody&); + bool update(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + + private: + + CdlListExpressionBody(); + CdlListExpressionBody& operator=(const CdlListExpressionBody&); + + void eval_internal(CdlEvalContext&, CdlListValue&); + std::string expression_string; + + enum { + CdlListExpressionBody_Invalid = 0, + CdlListExpressionBody_Magic = 0x7da4bcc2 + } cdllistexpressionbody_cookie; +}; + +//}}} +//{{{ CdlGoalExpression + +// ---------------------------------------------------------------------------- +// A goal expression inherits privately from ordinary expressions. Essentially +// a goal expression is simply a set of ordinary expressions separated by &&, +// but it can only be evaluated to a boolean. The parse() and eval() members +// of the base class should not be exposed. There is a member to get hold of +// the underlying ordinary expression, for use by e.g. the inference engine. + +class CdlGoalExpressionBody : private CdlExpressionBody { + + friend class CdlTest; + + typedef CdlExpressionBody inherited; + + public: + virtual ~CdlGoalExpressionBody(); + + static CdlGoalExpression parse(std::string); + + // A few variants of the eval() member, with a choice of returning + // by value or by reference. The latter provide consistency with the + // other expression classes. + bool eval(CdlEvalContext&); + void eval(CdlEvalContext&, bool&); + + // Provide public access to the underlying expression object, + // useful for the inference engine + CdlExpression get_expression(); + + // The full original expression is useful for diagnostics purposes + std::string get_original_string() const; + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlGoalExpressionBody(const CdlGoalExpressionBody&); + + + private: + + CdlGoalExpressionBody(); + CdlGoalExpressionBody& operator=(const CdlGoalExpressionBody&); + void eval_internal(CdlEvalContext&, bool&); + + std::string expression_string; + + enum { + CdlGoalExpressionBody_Invalid = 0, + CdlGoalExpressionBody_Magic = 0x5a58bb24 + } cdlgoalexpressionbody_cookie; +}; + +//}}} +//{{{ CdlInfer + +// ---------------------------------------------------------------------------- +// A utility class related to inference. This exports the main functions +// needed, allowing e.g. per-function inference routines from func.cxx to +// interact with the main inference engine. + +class CdlInfer { + public: + static bool make_active(CdlTransaction, CdlNode, int /* level */); + static bool make_inactive(CdlTransaction, CdlNode, int /* level */); + static bool set_valuable_value(CdlTransaction, CdlValuable, CdlSimpleValue&, int /* level */); + static bool set_valuable_bool(CdlTransaction, CdlValuable, bool, int /* level */); + static bool subexpr_value(CdlTransaction, CdlExpression, unsigned int /* index */, CdlSimpleValue& goal, int /* level */); + static bool subexpr_bool(CdlTransaction, CdlExpression, unsigned int /* index */, bool, int /* level */); + + private: + CdlInfer(); +}; + +//}}} + +//}}} +//{{{ CdlConflict classes + +// ---------------------------------------------------------------------------- +// As a configuration is created and modified there will be times when +// things are not completely consistent. There may be a reference to +// some option that is not in any package in the current +// configuration. An option may have an invalid value, possibly as a +// side effect of a change to some other option. There may be a +// dependency that is not satisfied. There may be other types of +// conflict. +// +// The library provides a base class CdlConflict, and a number of +// derived classes for common types of conflict such as unresolved +// references. All conflicts are associated with a CdlNode and a +// property within that. It is possible to use dynamic_cast<> to find +// out the exact type of a conflict, or alternatively to use the +// virtual member function get_explanation(). +// +// Conflicts may be disabled by the user if they are not actually +// important as far as application code is concerned. In other words +// the end user is allowed to override the constraints specified in +// the CDL. This information is saved with the configuration data. +// Preferably the user should give an explanation for why the conflict +// is disabled, to serve as a reminder some months later when the +// configuration is reloaded. +// +// +// Conflicts have a fairly complicated life cycle. First it is +// necessary to distinguish between structural and normal conflicts. A +// structural conflict is typically caused by a reference to a +// non-existent valuable. These conflicts are generally created only +// when something is loaded, and only go away when something is +// unloaded. A normal conflict is typically related to a value, for +// example a value outside the legal range, or a "requires" property +// that is not satisfied. +// +// Conflicts are created and destroyed in the context of a +// transaction, which in turn operates in the context of a toplevel. +// If the transaction is committed then new conflicts get added to the +// appropriate toplevel list, and destroyed conflicts get removed from +// the toplevel list. The transaction field indicates whether the +// conflict is currently per-transaction or global. +// +// Transactions may get nested, i.e. a conflict may get created as +// part of a sub-transaction, and when that sub-transaction is committed +// the conflict is moved to the parent transaction. +// +// For each toplevel, libcdl keeps track of all conflicts. This only +// applies to committed conflicts, per-transaction conflicts are not +// accessible in this way. +// +// As part of a transaction, libcdl may attempt to find solutions for +// particular conflicts, and those solutions may get installed +// automatically. No attempt is made to keep track of solutions +// on a global basis, only on a per-transaction basis. + +class CdlConflictBody { + + friend class CdlTest; + + // Transactions and conflicts are closely connected + friend class CdlTransactionBody; + + public: + + // Creation happens only inside a derived class. + // Clearing a conflict only happens inside transactions. + // Destroying a conflict only happens from inside a + // per-transaction clear(), or during a transaction commit. + + // Is this conflict part of a transaction, or has it been committed to the toplevel. + CdlTransaction get_transaction() const; + + // Is inference implemented for this type of conflict? + virtual bool resolution_implemented() const; + + // Try to resolve an existing global conflict. A new transaction + // is created for this operation, the conflict is resolved within + // that transaction, and then CdlTransaction::body() is used to + // handle inference callbacks, commits, etc. See also + // CdlToplevel::resolve_conflicts() and + // CdlToplevel::resolve_all_conflicts(). The conflict may cease to + // exist as a side-effect of this call. + void resolve(); + + // Keep track of whether or not this conflict has a solution + // 1) a conflict may have a current solution. This gets invalidated + // whenever there is a change to a value that was referenced + // while identifying the solution. + // + // A current solution is indicated by a non-empty solution vector. + // + // 2) a conflict may not have a current solution. Again this gets + // invalidated whenever a referred value changes. There is a boolean + // to keep track of this. + // + // 3) a conflict may not have a current solution, but another run of + // the inference engine may find one. + bool has_known_solution() const; + bool has_no_solution() const; + const std::vector >& get_solution() const; + const std::set& get_solution_references() const; + void clear_solution(); + + // Provide a text message "explaining" the conflict. + // This only makes sense for derived classes. + virtual std::string get_explanation() const = 0; + + // Basic information access. + CdlNode get_node() const; + CdlProperty get_property() const; + bool is_structural() const; + + // Enabling and disabling conflicts currently happens outside the + // context of any transaction. + // FIXME: these are not currently implemented. It would be necessary + // to store the information in the savefile, which requires an + // unambiguous way of identifying a conflict that is likely to + // survice package version changes. + void disable(std::string); + void enable(); + bool is_enabled() const; + std::string get_disabled_reason() const; + + bool check_this(cyg_assert_class_zeal zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlConflictBody(CdlTransaction, CdlNode, CdlProperty, bool /* structural */); + + // The destructor gets accessed from inside the friend transaction class, + // either during a clear_conflict() or during a transaction commit. + virtual ~CdlConflictBody(); + + // All conflicts are associated with a node and a property. + // This information will be useful to derived classes' + // implementations of get_explanation() + CdlNode node; + CdlProperty property; + + private: + + // Attempt to resolve a conflict in a sub-transaction + // This is invoked from inside the transaction resolve code. + // There are additional exported interfaces inside and outside + // the transaction class. + virtual bool inner_resolve(CdlTransaction, int); + + // Keep track of the transaction in which this conflict was created. + // The field is cleared at the end of a transaction. + CdlTransaction transaction; + + // Usually the derived class will decide whether or not + // this conflict is structural in nature, but the data + // needs to be available at base constructor time so + // a virtual function is not appropriate. + bool structural; + + // Solution support + bool no_solution; + std::vector > solution; + std::set solution_references; + void update_solution_validity(CdlValuable); + + // Users may disable a conflict. Usually they will have to + // supply a reason for this. + bool enabled; + std::string reason; + + enum { + CdlConflictBody_Invalid = 0, + CdlConflictBody_Magic = 0x073e8853 + } cdlconflictbody_cookie; + + // Illegal operations. Conflicts always live on the heap. + CdlConflictBody(); + CdlConflictBody(const CdlConflictBody&); + CdlConflictBody& operator=(const CdlConflictBody&); +}; + +// ---------------------------------------------------------------------------- +// An unresolved conflict means that there is a reference in some +// property to an entity that is not yet in the current configuration. +// The class provides convenient access to the name of the unresolved +// entity. + +class CdlConflict_UnresolvedBody : public CdlConflictBody { + + friend class CdlTest; + public: + + static void make(CdlTransaction, CdlNode, CdlProperty, std::string); + + std::string get_target_name() const; + std::string get_explanation() const; + static bool test(CdlConflict); + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + virtual ~CdlConflict_UnresolvedBody(); + CdlConflict_UnresolvedBody(CdlTransaction, CdlNode, CdlProperty, std::string); + std::string target_name; + enum { + CdlConflict_UnresolvedBody_Invalid = 0, + CdlConflict_UnresolvedBody_Magic = 0x1b24bb8a + } cdlconflict_unresolvedbody_cookie; + + CdlConflict_UnresolvedBody(); + CdlConflict_UnresolvedBody(const CdlConflict_UnresolvedBody&); + CdlConflict_UnresolvedBody& operator=(const CdlConflict_UnresolvedBody&); +}; + +// ---------------------------------------------------------------------------- +// An illegal value can be caused because of a number of properties: +// legal_values, check_proc, entry_proc, ... In the case of the latter +// the Tcl code should provide text explaining why the value is +// illegal. + +class CdlConflict_IllegalValueBody : public CdlConflictBody { + + friend class CdlTest; + + public: + + static void make(CdlTransaction, CdlNode, CdlProperty); + + bool resolution_implemented() const; + + std::string get_explanation() const; + void set_explanation(std::string); + static bool test(CdlConflict); + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + virtual ~CdlConflict_IllegalValueBody(); + bool inner_resolve(CdlTransaction, int); + CdlConflict_IllegalValueBody(CdlTransaction, CdlNode, CdlProperty); + std::string explanation; + enum { + CdlConflict_IllegalValueBody_Invalid = 0, + CdlConflict_IllegalValueBody_Magic = 0x4fb27ed1 + } cdlconflict_illegalvaluebody_cookie; + + CdlConflict_IllegalValueBody(); + CdlConflict_IllegalValueBody(const CdlConflict_IllegalValueBody&); + CdlConflict_IllegalValueBody& operator=(const CdlConflict_IllegalValueBody&); +}; + +// ---------------------------------------------------------------------------- +// There are times when expression evaluation will fail, e.g. because of +// a division by zero. The explanation is supplied by the evaluation code. + +class CdlConflict_EvalExceptionBody : public CdlConflictBody { + + friend class CdlTest; + + public: + + static void make(CdlTransaction, CdlNode, CdlProperty, std::string); + + std::string get_explanation() const; + void set_explanation(std::string); // mainly for internal use + static bool test(CdlConflict); + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + virtual ~CdlConflict_EvalExceptionBody(); + CdlConflict_EvalExceptionBody(CdlTransaction, CdlNode, CdlProperty, std::string); + std::string explanation; + enum { + CdlConflict_EvalExceptionBody_Invalid = 0, + CdlConflict_EvalExceptionBody_Magic = 0x7e64bc41 + } cdlconflict_evalexceptionbody_cookie; +}; + +// ---------------------------------------------------------------------------- +// A goal expression evaluates to false. Producing sensible diagnostics +// depends on a detailed understanding of goal expressions, which will +// have to wait until the inference engine comes along. + +class CdlConflict_RequiresBody : public CdlConflictBody { + + friend class CdlTest; + + public: + + static void make(CdlTransaction, CdlNode, CdlProperty); + bool resolution_implemented() const; + + std::string get_explanation() const; + static bool test(CdlConflict); + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + virtual ~CdlConflict_RequiresBody(); + bool inner_resolve(CdlTransaction, int); + CdlConflict_RequiresBody(CdlTransaction, CdlNode, CdlProperty); + enum { + CdlConflict_RequiresBody_Invalid = 0, + CdlConflict_RequiresBody_Magic = 0x78436331 + } cdlconflict_requiresbody_cookie; +}; + +// ---------------------------------------------------------------------------- +// There is an unusual problem in the configuration data somewhere. +// For example, a parent property can be resolved but the target is +// not a container. There is not a lot that the user can do about +// problems like this, apart from complaining to the component vendor, +// but the problem should not be ignored either. + +class CdlConflict_DataBody : public CdlConflictBody { + + friend class CdlTest; + + public: + + static void make(CdlTransaction, CdlNode, CdlProperty, std::string); + + std::string get_explanation() const; + static bool test(CdlConflict); + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + virtual ~CdlConflict_DataBody(); + CdlConflict_DataBody(CdlTransaction, CdlNode, CdlProperty, std::string); + std::string message; + enum { + CdlConflict_DataBody_Invalid = 0, + CdlConflict_DataBody_Magic = 0x2cec7ad8 + } cdlconflict_databody_cookie; +}; + +//}}} +//{{{ CdlProperty class and derived classes + +//{{{ Description + +// --------------------------------------------------------------------------- +// There are many different kinds of property. An alias property contains +// a simple string. A check_proc property contains a fragment of Tcl code +// which can be represented internally as a string, as bytecodes, or both. +// A requires property contains a goal expression. ... +// +// The implementation involves a base class CdlProperty and various +// derived classes such as CdlProperty_StringBody and +// CdlProperty_ExpressionBody. +// +// New CdlProperty objects get created only when reading in CDL scripts, +// while executing commands like alias and requires. These commands are +// implemented as C++ functions hooked into the TCL interpreter. The +// property arguments are available as an argc/argv pair. Each command +// will parse and validate the arguments and then invoke an appropriate +// constructor. + +//}}} +//{{{ CdlPropertyId_xxx + +// ---------------------------------------------------------------------------- +// Properties are identified by strings rather than by an enum or anything +// like that. A string-based approach allows new properties to be added at +// any time without invalidating an existing enum, complicating switch() +// statements, etc. There are some performance issues but these are +// manageable. +// +// A disadvantage of using strings is that there is a problem with +// typos. Mistyping something like CdlPropertyId_Compile will generally +// result in a compile-time failure. Mistyping "Complie" will cause +// strange behaviour at run-time and is hard to track down. +// +// A compromise solution is to have #define'd string constants. + +#define CdlPropertyId_ActiveIf "ActiveIf" +#define CdlPropertyId_BuildProc "BuildProc" +#define CdlPropertyId_Calculated "Calculated" +#define CdlPropertyId_CancelProc "CancelProc" +#define CdlPropertyId_CheckProc "CheckProc" +#define CdlPropertyId_Compile "Compile" +#define CdlPropertyId_ConfirmProc "ConfirmProc" +#define CdlPropertyId_DecorationProc "DecorationProc" +#define CdlPropertyId_DefaultValue "DefaultValue" +#define CdlPropertyId_Define "Define" +#define CdlPropertyId_DefineHeader "DefineHeader" +#define CdlPropertyId_DefineProc "DefineProc" +#define CdlPropertyId_Description "Description" +#define CdlPropertyId_Dialog "Dialog" +#define CdlPropertyId_Display "Display" +#define CdlPropertyId_DisplayProc "DisplayProc" +#define CdlPropertyId_Doc "Doc" +#define CdlPropertyId_EntryProc "EntryProc" +#define CdlPropertyId_Flavor "Flavor" +#define CdlPropertyId_DefineFormat "DefineFormat" +#define CdlPropertyId_Group "Group" +#define CdlPropertyId_Hardware "Hardware" +#define CdlPropertyId_IfDefine "IfDefine" +#define CdlPropertyId_Implements "Implements" +#define CdlPropertyId_IncludeDir "IncludeDir" +#define CdlPropertyId_IncludeFiles "IncludeFiles" +#define CdlPropertyId_InitProc "InitProc" +#define CdlPropertyId_InstallProc "InstallProc" +#define CdlPropertyId_LegalValues "LegalValues" +#define CdlPropertyId_Library "Library" +#define CdlPropertyId_LicenseProc "LicenseProc" +#define CdlPropertyId_Make "Make" +#define CdlPropertyId_Makefile "Makefile" +#define CdlPropertyId_MakeObject "MakeObject" +#define CdlPropertyId_NoDefine "NoDefine" +#define CdlPropertyId_Object "Object" +#define CdlPropertyId_Parent "Parent" +#define CdlPropertyId_Requires "Requires" +#define CdlPropertyId_Screen "Screen" +#define CdlPropertyId_Script "Script" +#define CdlPropertyId_UpdateProc "UpdateProc" +#define CdlPropertyId_Wizard "Wizard" + +//}}} +//{{{ Base class + +// ---------------------------------------------------------------------------- +// The base class is never used directly. Instead the appropriate derived +// objects are instantiated and when appropriate it will be necessary to +// do a dynamic cast from a CdlProperty to e.g. a CdlProperty_String. + +class CdlPropertyBody { + + friend class CdlTest; + + public: + // The destructor is public, to avoid possible problems with STL. + virtual ~CdlPropertyBody(); + + // These routines provide access to the basic data. + std::string get_property_name() const; + + // Get hold of the arguments that were present in the original data. + int get_argc() const; + bool has_option(std::string) const; + std::string get_option(std::string) const; + const std::vector& get_argv() const; + const std::vector >& get_options() const; + + // Resolve any references, or generate/update appropriate conflict + // objects. The default implementation is a no-op because not all + // properties involve references. + virtual void update(CdlTransaction, CdlNode /* source */, CdlNode /* dest */, CdlUpdate); + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + // The legal constructor can only get invoked from a derived class + // constructor. The first argument identifies the property, e.g. + // CdlPropertyId_Doc (which is just #define'd to the string + // "doc"). + // + // The argc and argv fields provide access to the original + // data in the command that resulted in the property being + // constructed. Often but not always argv[0] will be the same as + // the property id. The argv information is stored mainly for + // diagnostics purposes, it may be removed in future to avoid + // wasting memory. + // + // The options field is the result of parsing options such + // as -library=libextras.a. It consists of a vector of + // pairs, and is usually obtained via + // CdlParse::parse_options(). + CdlPropertyBody(CdlNode, std::string, int argc, const char* argv[], std::vector >&); + + private: + // This string indicates the command used to define this property, + // e.g. "doc" or "define_proc". It is provided to the constructor. + std::string name; + + // All property data comes out of a file and gets rid via a + // Tcl interpreter. The raw file data is stored with the property, + // mainly for diagnostics purposes. + std::vector argv; + + std::vector > options; + + // The usual set of illegal operations. + CdlPropertyBody(); + CdlPropertyBody(const CdlPropertyBody&); + CdlPropertyBody& operator=(const CdlPropertyBody&); + + enum { + CdlPropertyBody_Invalid = 0, + CdlPropertyBody_Magic = 0x60dd58f4 + } cdlpropertybody_cookie; +}; + +//}}} +//{{{ CdlProperty_Minimal + +// ---------------------------------------------------------------------------- +// This class is used for properties that are simple flags, e.g. no_define. +// There should be no additional data associated with such properties. + +class CdlProperty_MinimalBody : public CdlPropertyBody { + + friend class CdlTest; + + public: + static CdlProperty_Minimal make(CdlNode, std::string, int, const char*[], std::vector >&); + virtual ~CdlProperty_MinimalBody( ); + bool check_this( cyg_assert_class_zeal = cyg_quick ) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + typedef CdlPropertyBody inherited; + + CdlProperty_MinimalBody(CdlNode, std::string, int, const char*[], std::vector >&); + enum { + CdlProperty_MinimalBody_Invalid = 0, + CdlProperty_MinimalBody_Magic = 0x25625b8c + } cdlproperty_minimalbody_cookie; + + CdlProperty_MinimalBody(); + CdlProperty_MinimalBody(const CdlProperty_MinimalBody&); + CdlProperty_MinimalBody& operator=(const CdlProperty_MinimalBody&); +}; + +//}}} +//{{{ CdlProperty_String + +// ---------------------------------------------------------------------------- +// A string property contains a single piece of additional data in the form +// of a string. + +class CdlProperty_StringBody : public CdlPropertyBody { + + friend class CdlTest; + + public: + static CdlProperty_String make(CdlNode, std::string, std::string, int, const char*[], + std::vector >&); + virtual ~CdlProperty_StringBody(); + + std::string get_string(void) const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + typedef CdlPropertyBody inherited; + + CdlProperty_StringBody(CdlNode, std::string /* id */, std::string /* data */, int, const char*[], + std::vector >&); + std::string data; + enum { + CdlProperty_StringBody_Invalid = 0, + CdlProperty_StringBody_Magic = 0x78d1ca94 + } cdlproperty_stringbody_cookie; + + // The only legal constructor supplies all the data. + CdlProperty_StringBody(); + CdlProperty_StringBody(const CdlProperty_StringBody&); + CdlProperty_StringBody& operator=(const CdlProperty_StringBody&); +}; + +//}}} +//{{{ CdlProperty_TclCode + +// ---------------------------------------------------------------------------- +// A TclCode property is currently equivalent to a string property. In +// future this may change to allow the byte-compiled versions of the +// script to be stored. +// +// One of the properties, "screen" inside a cdl_wizard, also takes +// an integer. Rather than create yet another class, this is handled +// by a separate constructor. + + +class CdlProperty_TclCodeBody : public CdlPropertyBody { + + friend class CdlTest; + + public: + static CdlProperty_TclCode make(CdlNode, std::string, cdl_tcl_code, int, const char*[], + std::vector >&); + static CdlProperty_TclCode make(CdlNode, std::string, cdl_int, cdl_tcl_code, int, const char*[], + std::vector >&); + virtual ~CdlProperty_TclCodeBody(); + + cdl_int get_number(void) const; + const cdl_tcl_code& get_code(void) const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + typedef CdlPropertyBody inherited; + + CdlProperty_TclCodeBody(CdlNode, std::string, cdl_int, cdl_tcl_code, int, const char*[], + std::vector >&); + + cdl_int number; + cdl_tcl_code code; + enum { + CdlProperty_TclCodeBody_Invalid = 0, + CdlProperty_TclCodeBody_Magic = 0x7b14d4e5 + } cdlproperty_tclcodebody_cookie; + + CdlProperty_TclCodeBody(); + CdlProperty_TclCodeBody(const CdlProperty_TclCodeBody&); + CdlProperty_TclCodeBody& operator=(const CdlProperty_TclCodeBody&); + +}; + +//}}} +//{{{ CdlProperty_StringVector + +// ---------------------------------------------------------------------------- +// This is used for multiple constant strings, as opposed to a list +// expression which requires evaluation. One example is a list +// of aliases. + +class CdlProperty_StringVectorBody : public CdlPropertyBody { + + friend class CdlTest; + + public: + static CdlProperty_StringVector make(CdlNode, std::string, const std::vector&, int, const char*[], + std::vector >&); + virtual ~CdlProperty_StringVectorBody(); + + const std::vector& get_strings() const; + std::string get_first_string() const; + unsigned int get_number_of_strings() const; + std::string get_string(unsigned int) const; + bool check_this(cyg_assert_class_zeal zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + typedef CdlPropertyBody inherited; + + CdlProperty_StringVectorBody(CdlNode, std::string, const std::vector&, int, const char*[], + std::vector >&); + + std::vector data; + enum { + CdlProperty_StringVectorBody_Invalid = 0, + CdlProperty_StringVectorBody_Magic = 0x4ed039f3 + } cdlproperty_stringvectorbody_cookie; + + CdlProperty_StringVectorBody(); + CdlProperty_StringVectorBody(const CdlProperty_StringVectorBody&); + CdlProperty_StringVectorBody& operator=(const CdlProperty_StringVectorBody&); +}; + +//}}} +//{{{ CdlProperty_Reference + +// ---------------------------------------------------------------------------- +// This is used for properties such as wizard and dialog, where the data +// identifies some other entity in the system. The class is both a property +// and a reference object. Most of the desired functionality is provided by +// inheritance from CdlReference. + +class CdlProperty_ReferenceBody : public CdlPropertyBody, public CdlReference { + + friend class CdlTest; + + public: + static CdlProperty_Reference make(CdlNode, std::string /* id */, std::string /* destination */, + CdlUpdateHandler, int, const char*[], + std::vector >&); + virtual ~CdlProperty_ReferenceBody(); + + void update(CdlTransaction, CdlNode, CdlNode, CdlUpdate); + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + typedef CdlPropertyBody inherited_property; + typedef CdlReference inherited_reference; + + CdlUpdateHandler update_handler; + + CdlProperty_ReferenceBody(CdlNode, std::string /* id */, std::string /* destination */, CdlUpdateHandler, int, const char*[], + std::vector >&); + enum { + CdlProperty_ReferenceBody_Invalid = 0, + CdlProperty_ReferenceBody_Magic = 0x78100339 + } cdlproperty_referencebody_cookie; + + CdlProperty_ReferenceBody(); + CdlProperty_ReferenceBody(const CdlProperty_ReferenceBody&); + CdlProperty_ReferenceBody& operator=(const CdlProperty_Reference&); +}; + +//}}} +//{{{ CdlProperty_Expression + +// ---------------------------------------------------------------------------- +// An expression property simply inherits its functionality from the basic +// property class and from the expression class. + +class CdlProperty_ExpressionBody : public CdlPropertyBody, public CdlExpressionBody { + + friend class CdlTest; + + public: + static CdlProperty_Expression make(CdlNode, std::string, CdlExpression, CdlUpdateHandler, int, const char*[], + std::vector >&); + virtual ~CdlProperty_ExpressionBody(); + void update(CdlTransaction, CdlNode, CdlNode, CdlUpdate); + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + typedef CdlPropertyBody inherited_property; + typedef CdlExpressionBody inherited_expression; + + CdlProperty_ExpressionBody(CdlNode, std::string, CdlExpression, CdlUpdateHandler, int, const char*[], + std::vector >&); + + CdlUpdateHandler update_handler; + enum { + CdlProperty_ExpressionBody_Invalid = 0, + CdlProperty_ExpressionBody_Magic = 0x05fb4056 + } cdlproperty_expressionbody_cookie; + + CdlProperty_ExpressionBody(); + CdlProperty_ExpressionBody(const CdlProperty_ExpressionBody&); + CdlProperty_ExpressionBody& operator=(const CdlProperty_ExpressionBody&); +}; + +//}}} +//{{{ CdlProperty_ListExpression + +// ---------------------------------------------------------------------------- +// Similarly a list property simply inherits from property and from +// list expressions. + +class CdlProperty_ListExpressionBody : public CdlPropertyBody, public CdlListExpressionBody { + + friend class CdlTest; + + public: + static CdlProperty_ListExpression make(CdlNode, std::string, CdlListExpression, CdlUpdateHandler, int, const char*[], + std::vector >&); + virtual ~CdlProperty_ListExpressionBody(); + void update(CdlTransaction, CdlNode, CdlNode, CdlUpdate); + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + typedef CdlPropertyBody inherited_property; + typedef CdlListExpressionBody inherited_expression; + + CdlProperty_ListExpressionBody(CdlNode, std::string, CdlListExpression, CdlUpdateHandler, int, const char*[], + std::vector >&); + + CdlUpdateHandler update_handler; + enum { + CdlProperty_ListExpressionBody_Invalid = 0, + CdlProperty_ListExpressionBody_Magic = 0x6b0136f5 + } cdlproperty_listexpressionbody_cookie; + + CdlProperty_ListExpressionBody(); + CdlProperty_ListExpressionBody(const CdlProperty_ListExpressionBody&); + CdlProperty_ListExpressionBody& operator=(const CdlProperty_ListExpressionBody&); +}; + +//}}} +//{{{ CdlProperty_GoalExpression + +// ---------------------------------------------------------------------------- +// And a goal property inherits from property and from goal expressions. + +class CdlProperty_GoalExpressionBody : public CdlPropertyBody, public CdlGoalExpressionBody { + + friend class CdlTest; + + public: + static CdlProperty_GoalExpression make(CdlNode, std::string, CdlGoalExpression, CdlUpdateHandler, int, const char*[], + std::vector >&); + virtual ~CdlProperty_GoalExpressionBody(); + void update(CdlTransaction, CdlNode, CdlNode, CdlUpdate); + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + typedef CdlPropertyBody inherited_property; + typedef CdlGoalExpressionBody inherited_expression; + + CdlProperty_GoalExpressionBody(CdlNode, std::string, CdlGoalExpression, CdlUpdateHandler, int, const char*[], + std::vector >&); + + CdlUpdateHandler update_handler; + enum { + CdlProperty_GoalExpressionBody_Invalid = 0, + CdlProperty_GoalExpressionBody_Magic = 0x08b2b31e + } cdlproperty_goalexpressionbody_cookie; + + CdlProperty_GoalExpressionBody(); + CdlProperty_GoalExpressionBody(const CdlProperty_GoalExpressionBody&); + CdlProperty_GoalExpressionBody& operator=(const CdlProperty_GoalExpressionBody&); +}; + +//}}} + +//}}} +//{{{ CdlParse class + +// ---------------------------------------------------------------------------- +// This is another utility class for collecting together parsing-related +// functions. +// +// Note that this is only a utility class. When libcdl is used for parsing +// things not related to software configuration the new functionality +// does not have to reside inside the CdlParse class, but it may be +// possible to re-use some of the functionality in that class. + +class CdlParse { + + public: + // Utility routines. + static std::string get_tcl_cmd_name(std::string); + static std::string concatenate_argv(int, const char*[], int); + static int parse_options(CdlInterpreter, std::string /* diag_prefix */, char** /* options */, + int /* argc */, const char*[] /* argv */, int /* start_index */, + std::vector >& /* result */); + static std::string construct_diagnostic(CdlInterpreter, std::string /* classification */, + std::string /* sub-identifier */, std::string /* message */); + + static void report_error(CdlInterpreter, std::string /* sub-identifier */, std::string /* message */); + static void report_warning(CdlInterpreter, std::string /* sub-identifier */, std::string /* message */); + static void clear_error_count(CdlInterpreter); + static int get_error_count(CdlInterpreter); + static void incr_error_count(CdlInterpreter, int=1); + + static std::string get_expression_error_location(void); + + // Support for Tcl's "unknown" command + static int unknown_command(CdlInterpreter, int, const char*[]); + + // Property-related utilities + static void report_property_parse_error(CdlInterpreter, std::string, std::string); + static void report_property_parse_error(CdlInterpreter, CdlProperty, std::string); + static void report_property_parse_warning(CdlInterpreter, std::string, std::string); + static void report_property_parse_warning(CdlInterpreter, CdlProperty, std::string); + + // Utility parsing routines + static int parse_minimal_property(CdlInterpreter, int, const char*[], std::string, + char**, void (*)(CdlInterpreter, CdlProperty_Minimal)); + static int parse_string_property(CdlInterpreter, int, const char*[], std::string, + char**, void (*)(CdlInterpreter, CdlProperty_String)); + static int parse_tclcode_property(CdlInterpreter, int, const char*[], std::string, + char**, void (*)(CdlInterpreter, CdlProperty_TclCode)); + static int parse_stringvector_property(CdlInterpreter, int, const char*[], std::string, + char**, void (*)(CdlInterpreter, CdlProperty_StringVector), + bool /* allow_empty */ = false); + static int parse_reference_property(CdlInterpreter, int, const char*[], std::string, + char**, void (*)(CdlInterpreter, CdlProperty_Reference), + bool /* allow_empty */, + CdlUpdateHandler); + static int parse_expression_property(CdlInterpreter, int, const char*[], std::string, + char **, void (*)(CdlInterpreter, CdlProperty_Expression), + CdlUpdateHandler); + static int parse_listexpression_property(CdlInterpreter, int, const char*[], std::string, + char **, void (*)(CdlInterpreter, CdlProperty_ListExpression), + CdlUpdateHandler); + static int parse_goalexpression_property(CdlInterpreter, int, const char*[], std::string, + char **, void (*)(CdlInterpreter, CdlProperty_GoalExpression), + CdlUpdateHandler); +}; + +//}}} +//{{{ CdlNode + +// ---------------------------------------------------------------------------- +// A node object has a name and lives in a hierarchy. Each node keeps +// track of the toplevel and owner. The memory overheads are +// relatively small compared with the performance gains when such +// information is needed. +// +// A node object also has a vector of properties, and can be referred to +// by properties in other nodes. Some of the properties may result in +// conflicts. + +class CdlNodeBody { + + friend class CdlTest; + + // Adding and removing nodes from the hierarchy is done + // by CdlToplevel members. + friend class CdlToplevelBody; + + // CdlLoadable must be able to access the destructor + friend class CdlLoadableBody; + + // It is intended that CdlProperties will also add and remove themselves + friend class CdlPropertyBody; + + // CdlReference bind and unbind operations need access to + // the referrers vector. So does CdlTransaction::commit() + friend class CdlReference; + friend class CdlTransactionBody; + + public: + + // Basic information. + std::string get_name() const; + CdlContainer get_parent() const; + CdlLoadable get_owner() const; + CdlToplevel get_toplevel() const; + + // Propagation support. Some updates such as active/inactive changes + // get applied to nodes as well as to properties. Note that because + // of multiple inheritance this virtual call can get confusing. + virtual void update(CdlTransaction, CdlUpdate); + + // Is this node active or not? The is_active() call refers + // to the global state, things may be different inside a + // transaction. + bool is_active() const; + bool is_active(CdlTransaction transaction); + + // Generally nodes become active when the parent becomes + // active and enabled. Some derived classes may impose + // additional restrictions, for example because of + // active_if constraints. This routine can be used + // to check whether or not a node should become active. + virtual bool test_active(CdlTransaction); + + // Provide access to the various properties. Currently all this + // information is publicly available. + const std::vector& get_properties() const; + CdlProperty get_property(std::string) const; + void get_properties(std::string, std::vector&) const; + std::vector get_properties(std::string) const; + bool has_property(std::string) const; + int count_properties(std::string) const; + + // Provide access to the various global conflicts. More + // commonly conflicts are accessed on a per-transaction basis. + void get_conflicts(std::vector&) const; + void get_conflicts(bool (*)(CdlConflict), std::vector&) const; + void get_structural_conflicts(std::vector&) const; + void get_structural_conflicts(bool (*)(CdlConflict), std::vector&) const; + + // Provide access to all the referrers. This may not get used very + // much outside the library itself. + const std::vector& get_referrers() const; + + // Add property parsers and validation code appropriate for a + // node. Currently this is a no-op, there are no properties + // associated with every node, but this may change in future e.g. + // for diagnostics purposes. + static void add_property_parsers(std::vector& parsers); + void check_properties(CdlInterpreter); + + // Persistence support. The final classes such as cdl_option + // should provide implementations of these functions. The + // base function takes care of data that was present in an + // original save file but which was not recognised. + // + // Configuration save files are Tcl scripts, so it seems + // appropriate to handle the I/O via the Tcl library and + // to have a TCL interpreter available. + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + bool has_additional_savefile_information() const; + + // Mainly for diagnostics code, what is the actual name for this + // type of CDL object? This should be in terms of CDL data, e.g. + // "package" or "component", rather than in implementation terms + // such as "CdlPackageBody". + virtual std::string get_class_name() const; + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + // CdlNodeBodies are only instantiated by derived classes. + // They must always have a name. They need not be placed + // in the hierarchy immediately, that can wait until + // later. + CdlNodeBody(std::string); + // A dummy constructor is needed because of the virtual + // inheritance. + CdlNodeBody(); + + // Nodes cannot be destroyed directly by application code, + // only by higher-level library functions such as unload_package() + virtual ~CdlNodeBody(); + + // Updating the name is rarely required, but is useful for savefiles. + void set_name(std::string); + + // Is the node currently active? This applies to the global state + // only, not per-transaction state. Some derived classes may want + // to override the default value + bool active; + + private: + + // The basic data. The name is known during construction. + // The other three fields get updated by e.g. CdlToplevel::add_node(); + std::string name; + CdlContainer parent; + CdlLoadable owner; + CdlToplevel toplevel; + + // This is used by remove_node_from_toplevel()/add_node_to_toplevel() + // to allow the latter to exactly reverse the former + int remove_node_container_position; + + // Properties normally only get added during the parsing process, + // and only get removed when the object itself is destroyed. + // A vector is the obvious implementation. + std::vector properties; + + // Currently a vector of referrers is used. This vector is subject + // to change when packages get loaded and unloaded, possibly a + // list would be better. + std::vector referrers; + + // Savefiles may contain information that is not recognised by the + // current library, especially because of savefile hooks which + // allow e.g. the configuration tool to store its own information + // in save files. This information must not be lost, even if you are + // e.g. mixing command line and GUI tools. This vector holds + // the savefile information so that it can be put in the next + // savefile. + std::vector unsupported_savefile_strings; + + enum { + CdlNodeBody_Invalid = 0, + CdlNodeBody_Magic = 0x309595b5 + } cdlnodebody_cookie; + + // Illegal operations + CdlNodeBody(const CdlNodeBody&); + CdlNodeBody& operator=(const CdlNodeBody&); +}; + +//}}} +//{{{ CdlContainer + +// ---------------------------------------------------------------------------- +// A container is a node that can contain other nodes. + +class CdlContainerBody : virtual public CdlNodeBody { + + friend class Cdltest; + + // Allow CdlNode::check_this() access to the internals + friend class CdlNodeBody; + + // Adding a node to the hierarchy is done by a CdlToplevel member. + // Ditto for removing. + friend class CdlToplevelBody; + + // Deleting a container can happen inside CdlToplevel and CdlLoadable + friend class CdlLoadableBody; + + public: + + const std::vector& get_contents() const; + bool contains(CdlConstNode, bool /* recurse */ = false) const; + bool contains(const std::string, bool /* recurse */ = false) const; + CdlNode find_node(const std::string, bool /* recurse */ = false) const; + + // Propagation support. Some updates such as active/inactive changes + // get applied to nodes as well as to properties. + virtual void update(CdlTransaction, CdlUpdate); + + // Persistence support. + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + // Containers cannot be destroyed explicitly, only via higher-level + // code such as unload_package(); + virtual ~CdlContainerBody(); + + CdlContainerBody(); + // Special constructor needed for internal use. + CdlContainerBody(std::string); + + // The CdlToplevel class needs access to its own contents. + std::vector contents; + + private: + enum { + CdlContainerBody_Invalid = 0, + CdlContainerBody_Magic = 0x543c5f1d + } cdlcontainerbody_cookie; + + // Illegal operations + CdlContainerBody(const CdlContainerBody&); + CdlContainerBody& operator=(const CdlContainerBody&); +}; + +//}}} +//{{{ CdlLoadable + +// ---------------------------------------------------------------------------- +// A loadable object is a container that gets loaded or unloaded +// atomically from a toplevel. The key difference is that a loadable +// keeps track of all nodes that were loaded as part of this +// operation, thus allowing unload operations to happen safely even if +// nodes get re-parented all over the hierarchy. In addition, there is +// a slave interpreter associated with every loadable. + +class CdlLoadableBody : virtual public CdlContainerBody { + + friend class CdlTest; + + // Allow CdlNode::check_this() access to the internals + friend class CdlNodeBody; + + // Adding nodes to the hierarchy is done by a toplevel member + friend class CdlToplevelBody; + + public: + virtual ~CdlLoadableBody(); + + + const std::vector& get_owned() const; + bool owns(CdlConstNode) const; + CdlInterpreter get_interpreter() const; + std::string get_directory() const; + + // Some properties such as doc and compile reference filenames. + // A search facility is useful. + virtual std::string find_relative_file(std::string /* filename */, std::string /* directory */ = "") const; + virtual std::string find_absolute_file(std::string, std::string, bool /* allow_urls */ = false) const; + virtual bool has_subdirectory(std::string) const; + + // These support load/unload operations inside transactions + // They are static members because some of them will want + // to delete the loadable. + static void transaction_commit_load(CdlTransaction, CdlLoadable); + static void transaction_cancel_load(CdlTransaction, CdlLoadable); + static void transaction_commit_unload(CdlTransaction, CdlLoadable); + static void transaction_cancel_unload(CdlTransaction, CdlLoadable); + + // Binding and unbinding of properties. This involves processing + // the various properties, calculating default values, etc. + void bind(CdlTransaction); + void unbind(CdlTransaction); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + CdlLoadableBody(CdlToplevel, std::string /* directory */); + + // Needed by derived classes, but not actually used. + CdlLoadableBody(); + + private: + + std::vector owned; + CdlInterpreter interp; + std::string directory; + + // Used by add/remove_node_from_toplevel() + int remove_node_loadables_position; + + enum { + CdlLoadableBody_Invalid = 0, + CdlLoadableBody_Magic = 0x488d6127 + } cdlloadablebody_cookie; + + // Invalid operations + CdlLoadableBody(const CdlLoadableBody&); + CdlLoadableBody& operator=(const CdlLoadableBody&); +}; + +//}}} +//{{{ CdlToplevel + +// ---------------------------------------------------------------------------- +// Toplevels are containers that live at the top of a hierarchy +// (surprise surprise). This means that they do not have a parent. +// In addition a toplevel object keeps track of all the names +// used, guaranteeing uniqueness and providing a quick lookup +// facility. +// +// Every container is also a node, so every toplevel is a node. +// Inheritance from CdlNode may seem wrong. However it achieves +// consistency, everything in the hierarchy including the toplevel +// is a node. The main disadvantage is that every toplevel now +// needs a name. + +class CdlToplevelBody : virtual public CdlContainerBody { + + friend class CdlTest; + + // Allow CdlNode::check_this() access to the internals + friend class CdlNodeBody; + + // The CdlTransaction class needs direct access to the lists + // of conflicts. + friend class CdlTransactionBody; + + public: + virtual ~CdlToplevelBody(); + + // Updating the hierarchy. This happens a node at a time. Adding a + // node involves updating the name->node map in the toplevel, + // setting the node's parent/owner/toplevel fields, and updating + // the parent and owner containers. The owner may be 0 for special + // nodes such as the orphans container. The parent must be known, + // although it may change later on during a change_parent() call. + // + // Removing a node is more complicated, and involves a two-stage + // process. First the node is removed from the toplevel, thus + // eliminating the name->node mapping. The owner and parent fields + // are preserved at this stage (except for the loadable itself), + // and the operation may be undone if the relevant transaction + // gets cancelled. If the transaction gets committed then the + // second remove operation handles the owner and parent fields, + // just prior to the node being deleted. For convenience there + // are also per-loadable variants for some of these. + // + // change_parent() is used to support parent-properties. + // A container of 0 indicates an orphan, i.e. a parent + // property that did not or does not correspond to a + // current container. + // + // There is also a clean-up call. This gets used for interfaces + // which may alternate between belonging to a loadable and + // being auto-created. + void add_node(CdlLoadable, CdlContainer, CdlNode); + void add_node_to_toplevel(CdlNode); + void remove_node_from_toplevel(CdlNode); + static void remove_node(CdlLoadable, CdlContainer, CdlNode); + void add_loadable_to_toplevel(CdlLoadable); + void remove_loadable_from_toplevel(CdlLoadable); + void change_parent(CdlLoadable, CdlContainer /* current */, CdlContainer /* new */, CdlNode, int /* pos */ = -1); + void cleanup_orphans(); + + // Toplevels keep track of all the loadables, in addition to + // inheriting tree behaviour from CdlContainer. This is convenient + // for some operations like determining build information + // which must operate on a per-loadable basis. + const std::vector& get_loadables() const; + + // Name uniqueness is guaranteed. It is convenient to have an STL + // map as a lookup service. + CdlNode lookup(const std::string) const; + + // There are two conflict lists associated with each toplevel. One + // is for "structural" conflicts, ones that can only be resolved + // by a fairly major change such as loading another package: a + // typical example is an unresolved parent reference. The other is + // for conflicts that can probably be resolved simply by changing + // some values. Both sets of conflicts are held as a simple list. + // + // The active vs. inactive state of a CDL entity affects the + // location of structural vs. non-structural conflicts. If an + // entity becomes inactive then structural conflicts are not + // affected, but non-structural conflicts are removed from the + // global list. If an entity's "requires" expression is not + // satisfied but the entity is inactive anyway then this is + // harmless. + const std::list& get_all_conflicts() const; + const std::list& get_all_structural_conflicts() const; + + // Try to resolve some or all conflicts. Typically a new transaction + // will be created for this. + void resolve_conflicts(const std::vector&); + void resolve_all_conflicts(); + + // Toplevels can have descriptions provided by the user. This is + // particularly important for pre-defined templates, target + // board descriptions, etc. where the user would like some + // extra information about the template before loading it in. + // The default value is an empty string. + std::string get_description() const; + void set_description(std::string); + + // Each toplevel must have an associated master Tcl interpreter. + CdlInterpreter get_interpreter() const; + + // Each toplevel should also have an associated directory for + // the component repository. It is not required that all loadables + // are relative to this, but that is the default behaviour. + std::string get_directory() const; + + // Each toplevel may have a single active main transaction. + // For now there is no support for concurrent transactions + // operating on a single toplevel (although nested transactions + // are allowed) + CdlTransaction get_active_transaction() const; + + // Build and define operations are available for all toplevels, + // even if they are not always applicable + void get_build_info(CdlBuildInfo&); + void get_all_build_info(CdlBuildInfo&); + void generate_config_headers(std::string); + void get_config_headers(std::vector&); + void generate_build_tree(std::string, std::string = ""); + + // Values can be stored in limbo. This is useful when unloading + // and reloading packages, e.g. when changing a version the + // current settings can be preserved as much as possible. + void set_limbo_value(CdlValuable); + bool has_limbo_value(std::string) const; + CdlValue get_limbo_value(std::string) const; + CdlValue get_and_remove_limbo_value(std::string); + void clear_limbo(); + + // Persistence support. These are commented in the source code. + void initialize_savefile_support(); + static bool savefile_support_initialized(); + void add_savefile_command(std::string, CdlSaveCallback, CdlInterpreterCommand); + void add_savefile_subcommand(std::string, std::string, CdlSaveCallback, CdlInterpreterCommand); + void get_savefile_commands(std::vector&); + void get_savefile_subcommands(std::string, std::vector&); + void save_command_details(CdlInterpreter, Tcl_Channel, int, bool); + static int savefile_handle_command(CdlInterpreter, int, const char*[]); + static int savefile_handle_unsupported(CdlInterpreter, int, const char*[]); + static int savefile_handle_unknown(CdlInterpreter, int, const char*[]); + void save_unsupported_commands(CdlInterpreter, Tcl_Channel, int, bool); + static cdl_int get_library_savefile_version(); + static int savefile_handle_version(CdlInterpreter, int, const char*[]); + static cdl_int get_savefile_version(CdlInterpreter); + void save_conflicts(CdlInterpreter, Tcl_Channel, int, bool); + static void save_separator(CdlInterpreter, Tcl_Channel, std::string, bool); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlToplevelBody(CdlInterpreter, std::string); + + private: + + std::map lookup_table; + std::vector loadables; + std::map limbo; + CdlInterpreter interp; + CdlContainer orphans; + std::string description; + std::string directory; + std::list conflicts; + std::list structural_conflicts; + + // The savefile support corresponding to this application. + static cdl_int savefile_version; + static bool savefile_commands_initialized; + static std::vector savefile_commands; + static std::map > savefile_subcommands; + + // Per-toplevel support. A savefile may contain unrecognised + // commands at the toplevel of a file, as well as unrecognised + // commands in e.g. the body of a cdl_configuration command. + // The latter is handled via the CdlNode base class. + std::vector unsupported_savefile_toplevel_strings; + std::vector unsupported_savefile_commands; + std::map > unsupported_savefile_subcommands; + + // Keep track of the current active transaction for this toplevel (if any) + CdlTransaction transaction; + + enum { + CdlToplevelBody_Invalid = 0, + CdlToplevelBody_Magic = 0x0834666e + } cdltoplevelbody_cookie; + + // Invalid operations + CdlToplevelBody(const CdlToplevelBody&); + CdlToplevelBody& operator=(const CdlToplevelBody&); +}; + +//}}} +//{{{ CdlUserVisible + +// ---------------------------------------------------------------------------- +// A user-visible object is likely to have properties such as display, +// description and doc. Many user-visible objects will have values but +// not all, for example custom dialogs are likely to have a doc +// property but they do not have a value. + +class CdlUserVisibleBody : virtual public CdlNodeBody { + + friend class CdlTest; + + public: + virtual ~CdlUserVisibleBody(); + + std::string get_display() const; + std::string get_description() const; + std::string get_doc() const; + + // NOTE: this will only work for absolute doc strings or for doc + // strings that are relative to the package. + std::string get_doc_url() const; + + // Add property parsers and validation code appropriate for a + // user-visible object such as doc and description + static void add_property_parsers(std::vector& parsers); + void check_properties(CdlInterpreter); + static int parse_description(CdlInterpreter, int, const char*[]); + static int parse_display(CdlInterpreter, int, const char*[]); + static int parse_doc(CdlInterpreter, int, const char*[]); + + // Persistence support. The save code simply outputs some comments + // corresponding to the display, doc and description properties. + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlUserVisibleBody(); + + private: + + enum { + CdlUserVisibleBody_Invalid = 0, + CdlUserVisibleBody_Magic = 0x13bbc817 + } cdluservisiblebody_cookie; + + // Illegal operations + CdlUserVisibleBody(const CdlUserVisibleBody&); + CdlUserVisibleBody& operator=(const CdlUserVisibleBody&); +}; + +//}}} +//{{{ CdlParentable + +// ---------------------------------------------------------------------------- +// A parentable object may have the parent property, redefining its +// position in the hierarchy. + +class CdlParentableBody : virtual public CdlNodeBody { + + friend class CdlTest; + + public: + virtual ~CdlParentableBody(); + + static void add_property_parsers(std::vector& parsers); + void check_properties(CdlInterpreter); + static int parse_parent(CdlInterpreter, int, const char*[]); + static void update_handler(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlParentableBody(); + + private: + + // Unloads may be cancelled. To restore the previous state exactly + // it is necessary to keep track of the old position. + int change_parent_save_position; + + enum { + CdlParentableBody_Invalid = 0, + CdlParentableBody_Magic = 0x40c6a077 + } cdlparentablebody_cookie; + + // Illegal operations + CdlParentableBody(const CdlParentableBody&); + CdlParentableBody& operator=(const CdlParentableBody&); +}; + +//}}} +//{{{ CdlValuable + +// ---------------------------------------------------------------------------- +// A valuable body has a value. Many valuables can be modified but not all. +// Some properties make a valuable object read-only. In future there is +// likely to be support for locked values as well. There is a member function +// to check whether or not a valuable object is modifiable. +// +// Relevant properties for a valuable object are: +// +// 1) flavor - readily available via CdlValue::get_flavor() +// 2) default_value - an expression +// 3) legal_values - a list expression +// 4) entry_proc - for validation purposes, in addition to legal_values +// 5) check_proc - ditto +// 6) active_if - goal expression +// 7) requires - goal expression +// 8) dialog - a custom dialog for editing this value +// 9) calculated - non-modifiable +// 10) implements - for interfaces +// +// A CdlValuable does not inherit directly from CdlValue, since it should +// not be possible to modify a Valuable directly. Instead it contains a +// CdlValue member, and provides essentially the same functions as +// a CdlValue. + +class CdlValuableBody : virtual public CdlNodeBody { + + friend class CdlTest; + + // Transaction commit operations require direct access to the CdlValue + friend class CdlTransactionBody; + + private: + CdlValue value; + + public: + virtual ~CdlValuableBody(); + + // Accessing the current value. There are variants for the global state + // and for per-transaction operations. + const CdlValue& get_whole_value() const; + + CdlValueFlavor get_flavor() const; + CdlValueFlavor get_flavor(CdlTransaction transaction) const + { // The transaction is irrelevant, it cannot change the flavor + return this->get_flavor(); + } + + CdlValueSource get_source() const; + bool has_source( CdlValueSource) const; + bool is_enabled( CdlValueSource = CdlValueSource_Current) const; + std::string get_value( CdlValueSource = CdlValueSource_Current) const; + bool has_integer_value( CdlValueSource = CdlValueSource_Current) const; + cdl_int get_integer_value( CdlValueSource = CdlValueSource_Current) const; + bool has_double_value( CdlValueSource = CdlValueSource_Current) const; + double get_double_value( CdlValueSource = CdlValueSource_Current) const; + CdlSimpleValue get_simple_value( CdlValueSource = CdlValueSource_Current) const; + + CdlValueSource get_source(CdlTransaction) const; + bool has_source( CdlTransaction, CdlValueSource) const; + bool is_enabled( CdlTransaction, CdlValueSource = CdlValueSource_Current) const; + std::string get_value( CdlTransaction, CdlValueSource = CdlValueSource_Current) const; + bool has_integer_value( CdlTransaction, CdlValueSource = CdlValueSource_Current) const; + cdl_int get_integer_value( CdlTransaction, CdlValueSource = CdlValueSource_Current) const; + bool has_double_value( CdlTransaction, CdlValueSource = CdlValueSource_Current) const; + double get_double_value( CdlTransaction, CdlValueSource = CdlValueSource_Current) const; + CdlSimpleValue get_simple_value( CdlTransaction, CdlValueSource = CdlValueSource_Current) const; + + // ----------------------------------------------------------------- + // Modify access. There are two variants of all the functions: + // + // 1) no transaction argument. A transaction will be created, + // committed, and destroyed for the change in question. + // + // 2) a transaction argument. The existing transaction will be + // updated but not committed. This allows multiple changes + // to be grouped together. + // + // There are only a handful of exported functions, but lots + // of inline variants. + void set_source(CdlValueSource); + void invalidate_source(CdlValueSource); + void set_enabled(bool, CdlValueSource); + void set_value(CdlSimpleValue&, CdlValueSource); + void set_enabled_and_value(bool, CdlSimpleValue&, CdlValueSource); + void set(CdlSimpleValue&, CdlValueSource); + + void set_source(CdlTransaction, CdlValueSource); + void invalidate_source(CdlTransaction, CdlValueSource); + void set_enabled(CdlTransaction, bool, CdlValueSource); + void set_value(CdlTransaction, CdlSimpleValue&, CdlValueSource); + void set_enabled_and_value(CdlTransaction, bool, CdlSimpleValue&, CdlValueSource); + void set(CdlTransaction, CdlSimpleValue&, CdlValueSource); + void set(CdlTransaction, const CdlValue&); + + void enable(CdlValueSource source) + { + set_enabled(true, source); + } + void disable(CdlValueSource source) + { + set_enabled(false, source); + } + void set_value(std::string data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_value(val, source); + } + void set_integer_value(cdl_int data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_value(val, source); + } + void set_double_value(double data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_value(val, source); + } + void set_enabled_and_value(bool enabled, std::string data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_enabled_and_value(enabled, val, source); + } + void set_enabled_and_value(bool enabled, cdl_int data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_enabled_and_value(enabled, val, source); + } + void set_enabled_and_value(bool enabled, double data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_enabled_and_value(enabled, val, source); + } + void enable_and_set_value(CdlSimpleValue& val, CdlValueSource source) + { + set_enabled_and_value(true, val, source); + } + void enable_and_set_value(std::string data, CdlValueSource source) + { + set_enabled_and_value(true, data, source); + } + void enable_and_set_value(cdl_int data, CdlValueSource source) + { + set_enabled_and_value(true, data, source); + } + void enable_and_set_value(double data, CdlValueSource source) + { + set_enabled_and_value(true, data, source); + } + void disable_and_set_value(CdlSimpleValue& val, CdlValueSource source) + { + set_enabled_and_value(false, val, source); + } + void disable_and_set_value(std::string data, CdlValueSource source) + { + set_enabled_and_value(false, data, source); + } + void disable_and_set_value(cdl_int data, CdlValueSource source) + { + set_enabled_and_value(false, data, source); + } + void disable_and_set_value(double data, CdlValueSource source) + { + set_enabled_and_value(false, data, source); + } + void enable(CdlTransaction transaction, CdlValueSource source) + { + set_enabled(transaction, true, source); + } + void disable(CdlTransaction transaction, CdlValueSource source) + { + set_enabled(transaction, false, source); + } + void set_value(CdlTransaction transaction, std::string data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_value(transaction, val, source); + } + void set_integer_value(CdlTransaction transaction, cdl_int data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_value(transaction, val, source); + } + void set_double_value(CdlTransaction transaction, double data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_value(transaction, val, source); + } + void set_enabled_and_value(CdlTransaction transaction, bool enabled, std::string data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_enabled_and_value(transaction, enabled, val, source); + } + void set_enabled_and_value(CdlTransaction transaction, bool enabled, cdl_int data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_enabled_and_value(transaction, enabled, val, source); + } + void set_enabled_and_value(CdlTransaction transaction, bool enabled, double data, CdlValueSource source) + { + CdlSimpleValue val(data); + set_enabled_and_value(transaction, enabled, val, source); + } + void enable_and_set_value(CdlTransaction transaction, CdlSimpleValue& val, CdlValueSource source) + { + set_enabled_and_value(transaction, true, val, source); + } + void enable_and_set_value(CdlTransaction transaction, std::string data, CdlValueSource source) + { + set_enabled_and_value(transaction, true, data, source); + } + void enable_and_set_value(CdlTransaction transaction, cdl_int data, CdlValueSource source) + { + set_enabled_and_value(transaction, true, data, source); + } + void enable_and_set_value(CdlTransaction transaction, double data, CdlValueSource source) + { + set_enabled_and_value(transaction, true, data, source); + } + void disable_and_set_value(CdlTransaction transaction, CdlSimpleValue& val, CdlValueSource source) + { + set_enabled_and_value(transaction, false, val, source); + } + void disable_and_set_value(CdlTransaction transaction, std::string data, CdlValueSource source) + { + set_enabled_and_value(transaction, false, data, source); + } + void disable_and_set_value(CdlTransaction transaction, cdl_int data, CdlValueSource source) + { + set_enabled_and_value(transaction, false, data, source); + } + void disable_and_set_value(CdlTransaction transaction, double data, CdlValueSource source) + { + set_enabled_and_value(transaction, false, data, source); + } + + // ----------------------------------------------------------------- + virtual bool is_modifiable() const; + void get_widget_hint(CdlWidgetHint&); + + // ----------------------------------------------------------------- + // Propagation support. If a valuable becomes active or inactive + // because e.g. its parent is disabled then this may affect + // requires conflicts etc. + virtual void update(CdlTransaction, CdlUpdate); + + virtual bool test_active(CdlTransaction); + + // ----------------------------------------------------------------- + // Property-related stuff. + bool has_calculated_expression() const; + bool has_default_value_expression() const; + bool has_legal_values() const; + bool has_entry_proc() const; + bool has_check_proc() const; + bool has_active_if_conditions() const; + bool has_requires_goals() const; + bool has_dialog() const; + bool has_wizard() const; + + CdlProperty_Expression get_calculated_expression() const; + CdlProperty_Expression get_default_value_expression() const; + CdlProperty_ListExpression get_legal_values() const; + cdl_tcl_code get_entry_proc() const; + cdl_tcl_code get_check_proc() const; + void get_active_if_conditions(std::vector&) const; + void get_requires_goals(std::vector&) const; + CdlDialog get_dialog() const; + CdlWizard get_wizard() const; + void get_implemented_interfaces(std::vector&) const; + + // Add property parsers and validation code appropriate for a + // valuable object such as default_value and legal_values + static void add_property_parsers(std::vector& parsers); + void check_properties(CdlInterpreter); + static int parse_active_if(CdlInterpreter, int, const char*[]); + static void active_if_update_handler(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + static int parse_calculated(CdlInterpreter, int, const char*[]); + static void calculated_update_handler(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + static int parse_check_proc(CdlInterpreter, int, const char*[]); + static int parse_default_value(CdlInterpreter, int, const char*[]); + static void default_value_update_handler(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + static int parse_dialog(CdlInterpreter, int, const char*[]); + static void dialog_update_handler(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + static int parse_entry_proc(CdlInterpreter, int, const char*[]); + static int parse_flavor(CdlInterpreter, int, const char*[]); + static int parse_group(CdlInterpreter, int, const char*[]); + static int parse_implements(CdlInterpreter, int, const char*[]); + static void implements_update_handler(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + static int parse_legal_values(CdlInterpreter, int, const char*[]); + static void legal_values_update_handler(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + static int parse_requires(CdlInterpreter, int, const char*[]); + static void requires_update_handler(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + static int parse_wizard(CdlInterpreter, int, const char*[]); + static void wizard_update_handler(CdlTransaction, CdlNode, CdlProperty, CdlNode, CdlUpdate); + + // Persistence suppot + void save(CdlInterpreter, Tcl_Channel, int, bool /* modifiable */, bool /* minimal */); + bool value_savefile_entry_needed() const; + static void initialize_savefile_support(CdlToplevel, std::string); + static int savefile_value_source_command(CdlInterpreter, int, const char*[]); + static int savefile_user_value_command(CdlInterpreter, int, const char*[]); + static int savefile_wizard_value_command(CdlInterpreter, int, const char*[]); + static int savefile_inferred_value_command(CdlInterpreter, int, const char*[]); + static int savefile_xxx_value_command(CdlInterpreter, int, const char*[], CdlValueSource); + + // Make sure that the current value is legal. This gets called automatically + // by all the members that modify values. It has to be a virtual function + // since some derived classes, e.g. hardware-related valuables, may impose + // constraints over and above legal_values etc. + virtual void check_value(CdlTransaction); + + // Similarly check the requires properties + void check_requires(CdlTransaction, CdlProperty_GoalExpression); + void check_requires(CdlTransaction); + + // Enabling or disabling a valuable may affect the active state of children + void check_children_active(CdlTransaction); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlValuableBody(CdlValueFlavor = CdlValueFlavor_Bool); + + + private: + + + enum { + CdlValuableBody_Invalid = 0, + CdlValuableBody_Magic = 0x2b2acc03 + } cdlvaluablebody_cookie; + + // Illegal operations + CdlValuableBody(const CdlValuableBody&); + CdlValuableBody& operator=(const CdlValuableBody&); +}; + +//}}} +//{{{ CdlTransaction etc. + +//{{{ Description + +// ---------------------------------------------------------------------------- +// Transactions. These are used for all changes to a configuration. In some +// cases a transaction is implicit: +// +// valuable->set_value(...) +// +// The actual implementation of this is: +// +// valuable->set_value(...) +// transact = CdlTransactionBody::make(valuable->get_toplevel()) +// valuable->set_value(transact, ...) +// +// transact->commit() +// delete transact +// +// Alternatively the use of transactions may be explicit. For implicit +// uses the library will invoke an inference callback at the +// appropriate time. For explicit transactions this is not necessary. +// +// The commit() operation invokes a transaction callback which should +// not be confused with the inference callback. The former is intended +// for display updates, it specifies everything that has changed +// during the transaction. The latter is used for reporting new +// conflicts to the user, suggesting fixes, etc. +// +// A whole bunch of information is associated with a transaction, +// including: all value changes, details of new conflicts, and details +// of existing conflicts that have gone away. The commit operation +// takes care of updating the toplevel. Until the commit happens +// the toplevel itself remains unchanged. It is also possible to cancel +// a transaction. +// +// An important concept related to transactions is propagation. +// Changing a value may have various effects, for example it may +// change the result of a legal_values list expression, resulting in a +// conflict object having to be created or destroyed. Changing one +// value may result in other value changes, e.g. because of a +// default_value property. All this is "propagation", and may +// happen multiple times within a single transaction. +// +// Transaction objects are also used during load or unload operations, +// but those are a little bit special. In particular it is not possible +// to cancel such a transaction, there will have been updates to the +// toplevel. Using a transaction is convenient because there is a +// need for propagation. +// +// Currently a transaction should be deleted immediately after a +// commit or cancel. This may change in future, in that transaction +// objects can be used to hold undo information. +// +// +// The other big concept related to transactions is inference. +// Changing a value may result in one or more new conflicts being +// created. In some cases the library can figure out for itself how to +// resolve these conflicts, using an inference engine. There are +// parameters to control the operation of the inference engine, +// including whether it runs at all, what changes it is allowed +// to make automatically (usually default and inferred values can +// be updated, but not wizard or user values), and how much +// recursion will happen. +// +// Assuming a default setup in a GUI environment, a typical +// sequence of events would be: +// +// valuable->set_value(...) +// transact = CdlTransactionBody::make(valuable->get_toplevel()) +// valuable->set_value(transact, ...) +// transact->set_whole_value(valuable, ...) +// transact->propagate() +// while (!finished) +// transact->resolve() +// +// invoke inference callback +// transact->apply_solution() (1 or more times) +// transact->set_whole_value(valuable, ...) (1 or more times) +// transact->propagate() +// transact->commit() | transact->cancel() +// delete transact +// +// Note that the propagation steps have to be invoked explicitly, +// allowing multiple changes to be processed in one go. There is +// a utility function which combines the functionality from +// the first propagate() call up to but not including the +// transaction delete operator. +// +// +// The inference engine itself is a complicated beast. There are +// a number of interfaces, but at the end of the day it ends up +// creating a sub-transaction and trying to resolve a single +// conflict in that sub-transaction. The conflict may belong to +// the current transaction or it may be global. +// +// +// for each conflict of interest +// make sure that there is not already a valid solution +// check that the inference engine can handle it +// create a sub-transaction, associated with the conflict +// apply the conflict resolution code +// if the solution is ok +// install it +// else if the solution might e.g. overwrite a user value +// keep it, the user can decide during the inference callback +// +// The conflict resolution typically works by attempting to change +// one or more values in the sub-transaction, propagating them, +// and seeing what new conflicts get created. If no new conflicts +// get created and one or more existing conflicts go away, groovy. +// Otherwise recursion can be used to try to resolve the new +// conflicts, or other strategies can be explored. +// +// NOTE: what is really necessary is some way of keeping track of the +// "best" solution to date, and allow exploration of alternatives. +// Or possibly keep track of all solutions. That has to be left to +// a future version. + +//}}} +//{{{ CdlTransactionCommitCancelOp + +// ---------------------------------------------------------------------------- +// The CdlTransaction class has built-in knowledge of how to handle values, +// active state, and a few things like that. However there are also more +// complicated operations such as loading and unloading, instantiating +// items, etc. which also need to happen in the context of a transaction +// but which the transaction class does not necessarily know about +// itself - or at least, not in any detail. Since the libcdl core is +// intended to be useful in various contexts, some sort of extensibility +// is essential. +// +// This is achieved by an auxiliary class, CdlTransactionCommitCancelOp. +// Clients of the transaction class can have their own utility class +// which derives from this, and create suitable objects. The transaction +// class maintains a vector of the pending commit/cancel operations. +// +// Each CdlTransactionCommitCancelOp object has two member functions, +// one for when the transaction gets committed and one for when it +// gets cancelled. If a sub-transaction gets committed then its +// pending ops are transferred across to the parent, allowing the +// parent to be cancelled sensibly: the commit ops only get run for +// the toplevel transaction. If a sub-transaction gets cancelled then +// the pending ops are invoked immediately. +// +// There is an assumption that commit/cancel ops get executed strictly +// in FIFO order. Specifically, commit ops get run from first one to +// the last one, allowing later operations in the transaction to +// overwrite earlier ones. Cancel ops get run in reverse order. + +class CdlTransactionCommitCancelOp { + friend class CdlTest; + + public: + + CdlTransactionCommitCancelOp() { } + virtual ~CdlTransactionCommitCancelOp() { }; + + // The default implementations of both of these do nothing. + // Derived classes should override at least one of these + // functions. + virtual void commit(CdlTransaction transaction) { + CYG_UNUSED_PARAM(CdlTransaction, transaction); + } + virtual void cancel(CdlTransaction transaction) { + CYG_UNUSED_PARAM(CdlTransaction, transaction); + } + + protected: + + private: +}; + +//}}} +//{{{ CdlTransaction class + +class CdlTransactionBody { + + friend class CdlTest; + + friend class CdlConflictBody; + friend class CdlValuableBody; + + public: + + // Create a toplevel transaction + static CdlTransaction make(CdlToplevel); + virtual ~CdlTransactionBody(); + CdlToplevel get_toplevel() const; + + // Or a sub-transaction. Usually these are created in the context of + // a conflict that is being resolved. + CdlTransaction make(CdlConflict = 0); + CdlTransaction get_parent() const; + CdlConflict get_conflict() const; + + // Commit all the changes. Essentially this means transferring + // all of the per-transaction data to the toplevel, and then + // invoking the transaction callback. All propagation, inference, + // etc. should happen before the commit() + // This routine can also be used to transfer changes from a + // sub-transaction to the parent. + void commit(); + + // A variant of the commit() operation can be used to + // store a sub-transaction in a conflict's solution vector, + // rather than updating the parent transaction. This is useful + // for inferred solutions which cannot be applied without + // user confirmation + void save_solution(); + + // Can a solution held in a sub-transaction be applied without + // e.g. overwriting a user value with an inferred value? + bool user_confirmation_required() const; + + // If the user has explicitly changed a value in the current transaction + // then the inference engine should not undo this or suggest a solution + // that will undo the change. + bool changed_by_user(CdlValuable) const; + + // A variant which is used for checking the hierarchy when disabling + // a container + bool subnode_changed_by_user(CdlContainer) const; + + // Is one transaction preferable to another? + bool is_preferable_to(CdlTransaction) const; + + // Find out about per-transaction conflicts. This is particularly + // useful for the inference callback. The other containers can + // be accessed as well, for completeness. + const std::list& get_new_conflicts() const; + const std::list& get_new_structural_conflicts() const; + const std::vector& get_deleted_conflicts() const; + const std::vector& get_deleted_structural_conflicts() const; + const std::vector& get_resolved_conflicts() const ; + const std::list& get_global_conflicts_with_solutions() const; + const std::map& get_changes() const; + const std::set& get_activated() const; + const std::set& get_deactivated() const; + const std::set& get_legal_values_changes() const; + + // Manipulate the current set of conflicts, allowing for nested + // transactions and toplevel conflicts as well. + void clear_conflict(CdlConflict); + bool has_conflict_been_cleared(CdlConflict); + + bool has_conflict(CdlNode, bool (*)(CdlConflict)); + CdlConflict get_conflict(CdlNode, bool (*)(CdlConflict)); + void get_conflicts(CdlNode, bool (*)(CdlConflict), std::vector&); + void clear_conflicts(CdlNode, bool (*)(CdlConflict)); + bool has_conflict(CdlNode, CdlProperty, bool (*)(CdlConflict)); + CdlConflict get_conflict(CdlNode, CdlProperty, bool (*)(CdlConflict)); + void get_conflicts(CdlNode, CdlProperty, bool (*)(CdlConflict), std::vector&); + void clear_conflicts(CdlNode, CdlProperty, bool (*)(CdlConflict)); + + bool has_structural_conflict(CdlNode, bool (*)(CdlConflict)); + CdlConflict get_structural_conflict(CdlNode, bool (*)(CdlConflict)); + void get_structural_conflicts(CdlNode, bool (*)(CdlConflict), std::vector&); + void clear_structural_conflicts(CdlNode, bool (*)(CdlConflict)); + bool has_structural_conflict(CdlNode, CdlProperty, bool (*)(CdlConflict)); + CdlConflict get_structural_conflict(CdlNode, CdlProperty, bool (*)(CdlConflict)); + void get_structural_conflicts(CdlNode, CdlProperty, bool (*)(CdlConflict), std::vector&); + void clear_structural_conflicts(CdlNode, CdlProperty, bool (*)(CdlConflict)); + + // During the inference callback the user may decide to + // apply one or more of the solutions. + void apply_solution(CdlConflict); + void apply_solutions(const std::vector&); + void apply_all_solutions(); + + // Cancel all the changes done in this transaction. Essentially + // this just involves clearing out all the STL containers. + void cancel(); + + // Support for commit/cancel ops. These are used for + // e.g. load and unload operations. + void add_commit_cancel_op(CdlTransactionCommitCancelOp *); + void cancel_last_commit_cancel_op(); + CdlTransactionCommitCancelOp* get_last_commit_cancel_op() const; + const std::vector& get_commit_cancel_ops() const; + + // Propagation support + void add_active_change(CdlNode); + void add_legal_values_change(CdlValuable); + void propagate(); + bool is_propagation_required() const; + + // Inference engine support. + void resolve(int = 0); // Process the new conflicts raised by this transaction + void resolve(CdlConflict, int = 0); + void resolve(const std::vector&, int = 0); + + // An auxiliary function called by the inference engine to perform recursion + bool resolve_recursion(int); + + // This function combines propagation, inference, and commit + // in one easy-to-use package + void body(); + + // Changes. + // There is a call to get hold of a CdlValue reference. Modifications + // should happen via a sequence of the form: + // + // valuable->set_value(transact, ...) + // const CdlValue& old_value = transact->get_whole_value(CdlValuable); + // CdlValue new_value = old_value; + // + // transact->set_whole_value(CdlValuable, old_value, new_value); + // + // When appropriate the get_whole_value() call takes care of + // updating the current conflict's solution_references vector. The + // set_whole_value() call updated the per-transaction changes map, + // and also stores sufficient information to support propagation. + // set_whole_value() requires both the old and new values, so + // that propagation can be optimized. + const CdlValue& get_whole_value(CdlConstValuable) const; + void set_whole_value(CdlValuable, const CdlValue&, const CdlValue&); + + // Control over active vs. inactive also needs to happen inside + // transactions + bool is_active(CdlNode) const; + void set_active(CdlNode, bool); + + // Callback and parameter settings + static void (*get_callback_fn())(const CdlTransactionCallback&); + static void set_callback_fn(void (*)(const CdlTransactionCallback&)); + static void set_inference_callback_fn(CdlInferenceCallback); + static CdlInferenceCallback get_inference_callback_fn(); + static void enable_automatic_inference(); + static void disable_automatic_inference(); + static bool is_automatic_inference_enabled(); + static void set_inference_recursion_limit(int); + static int get_inference_recursion_limit(); + // The override indicates the highest level of value source that the + // library can overwrite without needing user confirmation. The + // default value is CdlValueSource_Inferred, indicating that the + // library can overwrite default and inferred values but not + // wizard or user values. + static void set_inference_override(CdlValueSource); + static CdlValueSource get_inference_override(); + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + + private: + + CdlTransactionBody(CdlToplevel, CdlTransaction, CdlConflict); + + // The associated toplevel and optionally the parent transaction + // and the conflict being worked on + CdlToplevel toplevel; + CdlTransaction parent; + CdlConflict conflict; + + // Per-transaction information. All value changes, new conflicts + // etc. first live in the context of a transaction. The global + // configuration only gets updated if the transaction is commited. + // There is also a vector of the pending commit/cancel ops. + std::vector commit_cancel_ops; + std::map changes; + std::list new_conflicts; + std::list new_structural_conflicts; + std::vector deleted_conflicts; // Existing global ones + std::vector deleted_structural_conflicts; + std::vector resolved_conflicts; // New ones already fixed by the inference engine + std::list global_conflicts_with_solutions; + std::set activated; + std::set deactivated; + std::set legal_values_changes; + bool dirty; + + // Change propagation. It is necessary to keep track of all + // pending value changes, active changes, and of things being + // loaded or unloaded. The set_value() call is used to update the + // value_changes container. + std::deque value_changes; + std::deque active_changes; + + + // Control over the inference engine etc. + static CdlInferenceCallback inference_callback; + static bool inference_enabled; + static int inference_recursion_limit; + static CdlValueSource inference_override; + static void (*callback_fn)(const CdlTransactionCallback&); + + enum { + CdlTransactionBody_Invalid = 0, + CdlTransactionBody_Magic = 0x3f91e4df + } cdltransactionbody_cookie; + + // Illegal operations + CdlTransactionBody(); + CdlTransactionBody(const CdlTransactionBody &); + CdlTransactionBody& operator=(const CdlTransactionBody&); +}; + +//}}} +//{{{ CdlTransactionCallback + +// ---------------------------------------------------------------------------- +// The callback class is used to inform applications about all the +// changes that are happening, including side effects. Application +// code can install a callback function which gets invoked at the +// end of every transaction. +// +// NOTE: this implementation is preliminary. In particular it is +// not extensible, it only deals with changes relevant to software +// configurations. + +class CdlTransactionCallback { + + friend class CdlTest; + friend class CdlTransactionBody; + + public: + ~CdlTransactionCallback(); + static void (*get_callback_fn())(const CdlTransactionCallback&); + static void set_callback_fn(void (*)(const CdlTransactionCallback&)); + + // Callback functions should be able to retrieve information + // about the current transaction and toplevel, to avoid the use + // of statics. + CdlTransaction get_transaction() const; + CdlToplevel get_toplevel() const; + + // active_changes and legal_values_changes get updated as the + // transaction proceeds, so a set implementation is more + // efficient. The others get filled in during a commit operation. + // A transaction may result in multiple conflicts for a given node + // being eliminated, so again a set is appropriate. For the others + // there is no possibility of duplicates so a vector is better. + std::vector value_changes; + std::vector active_changes; + std::vector legal_values_changes; + std::vector value_source_changes; + std::vector new_conflicts; + std::vector new_structural_conflicts; + std::vector nodes_with_resolved_conflicts; + std::vector nodes_with_resolved_structural_conflicts; + + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + + protected: + + private: + CdlTransactionCallback(CdlTransaction); + CdlTransaction transact; + + // Illegal operation. + CdlTransactionCallback(); + + enum { + CdlTransactionCallback_Invalid = 0, + CdlTransactionCallback_Magic = 0x0cec3a95 + } cdltransactioncallback_cookie; +}; + +//}}} +//{{{ CdlLocalTransaction + +// ---------------------------------------------------------------------------- +// A utility class to create a per-function transaction object which gets +// cleaned up automatically should an exception happen. + +class CdlLocalTransaction { + + friend class CdlTrest; + + public: + CdlLocalTransaction(CdlToplevel toplevel) { + transaction = CdlTransactionBody::make(toplevel); + } + ~CdlLocalTransaction() { + // The destructor may get invoked during exception handling. + // It is assumed that cancelling the transaction would be a + // good thing when that happens. Normal operation should + // go through the body() or commit() members, which clear + // the transaction field. + // There is a slight consistency here. Normally after a + // transaction commit the transaction object is still + // around. Here the transaction object get deleted. This + // is unlikely to matter in practice. + if (0 != transaction) { + transaction->cancel(); + delete transaction; + } + } + CdlTransaction get() { + return transaction; + } + void body() { + transaction->body(); + delete transaction; + transaction = 0; + } + void commit() { + transaction->commit(); + delete transaction; + transaction = 0; + } + void propagate() { + transaction->propagate(); + } + void destroy() { + if (0 != transaction) { + transaction->cancel(); + delete transaction; + transaction = 0; + } + } + + private: + CdlTransaction transaction; + CdlLocalTransaction(); +}; + +//}}} + +//}}} +//{{{ Build and define information + +//{{{ Description + +// ---------------------------------------------------------------------------- +// There are two related concepts: buildable components, and +// definable components. The former typically refers to compiling +// sources files to produce libraries, although other types of build +// are possible. The latter refers to generating header files +// containing the current configuration data. Typically any loadable +// that is buildable is also definable, so that the source files can +// #include the appropriate generated headers and adapt to the +// configuration data that way. The inverse is not true: for example +// in HCDL it may be appropriate to generate a header file but there +// is nothing to be compiled, device drivers are software packages. +// +// The relevant base classes are as follows: +// +// 1) CdlBuildable - this object can have build-related properties. +// All buildables are also valuables. +// 2) CdlBuildLoadable - this is a base class for loadables, providing +// some extra properties that are relevant for +// loadables that can involve builds. +// 3) CdlDefinable - this object can result in #define's in a +// header file. All exportables are also +// valuables. +// 4) CdlDefineLoadable - this is a base class for any loadables that +// can contain buildables. +// +// Support for both buildable and exportable components is part of the +// core library for now. This may change in future, depending on how +// many CDL variants get implemented. +// +// There are various properties related to building. First, the +// ones applicable to the CdlBuildLoadable class. +// +// 1) library xyz. +// This specifies the default library for anything built in this +// loadable. If there is no library property then it defaults to +// libtarget.a (or rather to a class static that happens to be +// initialized to libtarget.a) +// +// 2) include_dir . +// This specifies where the loadable's exported header files should +// end up. The default value is the toplevel, but e.g. the eCos +// kernel specifies an include_dir of cyg/kernel. Note that fixed +// header files are associated with buildables, not definables, +// the latter deal with generated header files only. +// +// 3) include_files +// The recommended directory hierarchy for non-trivial packages +// involves separate subdirectories src, include, cdl, doc, and +// test. This is too heavyweight for very simple packages where it +// is better to keep everything in just one directory. However that +// introduces a potential conflict between public and private +// header files, which can be resolved by the include_files +// property. The actual rules are: +// +// a) if there an include_files property, that lists all the +// headers that should be exported. +// +// b) else if there is an include subdirectory, it is assumed that +// all files below that should be exported. +// +// c) otherwise all files matching a suitable glob pattern should +// be exported. The default pattern is *.h *.hxx *.inl, but can +// be overwritten. +// +// 4) makefile +// This allows component developers to provide a GNU makefile to be +// used for building, rather than specify the relevant information +// via properties. +// NOTE: this property is ignored for now. It is roughly +// equivalent to a custom build step where the command is +// "make -C -f ", but in addition it is necessary to +// worry about phony targets for default, clean, etc. +// +// A DefineLoadable adds the following property: +// +// 1) define_header +// This specifies the header file that will be generated. If this +// property is absent then the library will generate a default one +// based on the loadable's name, by discarding everything up to and +// including the first underscore, lowercasing the rest, and +// appending .h. For example, CYGPKG_KERNEL would result in a +// header file kernel.h. +// +// Hardware packages have an implicit "define_header hardware.h" +// property. +// +// A buildable has the following properties: +// +// 1) compile [-library xyz] ... +// This specifies one or more files that need to be compiled. +// By default the resulting object files will go into the +// current library (set via a higher-level library or +// defaulting to libtarget.a). +// +// Legitimate filename suffixes for compile statements are .c, .cxx +// and .S. Further suffixes may be supported in future. In the +// long term we will need some external data files defining how +// the various suffixes should be handled. +// +// Associated with every compilation are details of the compiler to +// be used and the compiler flags. For now no attempt is made +// to do anything interesting in this area, although there is +// sufficient information in the database for the needs of +// command line tools. +// +// Longer term there are complications. Packages may want some +// control over the compiler flags that should be used, e.g. +// "requires {!(flags ~= ".*-fno-rtti.*")}" to guarantee that the +// compiler flags do not include -fno-rtti, rather useful if the +// package's source code depends on that language feature. Mixed +// architecture systems (e.g. ARM/Thumb) will cause problems when +// it comes to selecting the compiler. The exact means by which +// all this will work is not yet clear. +// +// 2) object [-library xyz] ... +// This specifies one or more pre-built object files that should +// go into the appropriate library. +// +// The problem here is coping with different architectures, and for +// many architectures it will also be necessary to worry about +// multilibs. Third party component vendors are unlikely to supply +// separate object files for every supported architecture and every +// valid multilib within those architectures, so there are +// constraints on the multilib-related compiler flags used for +// building other packages and the application itself. +// +// NOTE: this property is ignored for now. +// +// 3) make_object [-library xyz] [-priority pri] +// +// For example: +// +// make_object toyslock.o { +// toyslock.o : toyslock.y +// yacc toyslock.y +// $(CC) $(CFLAGS) -o toyslock.o y.tab.c +// } +// +// This defines a custom build step for an object file that +// should go into a particular directory. A makefile syntax +// is used to define the rule simply because it is likely +// to be familiar to package developers, and does not +// imply that the builds will happen via a makefile. +// +// The optional priority field indicates at which stage during +// the build the rule should trigger. The default value is +// 100, which is the same as for all files specified in +// "compile" properties. A lower value means that the object +// will be generated earlier. Libraries are generated at +// priority 200, and "make" properties normally execute at +// priority 300. +// NOTE: it is not clear yet whether supporting priorities +// in this way is a good idea, or whether the dependencies +// information could be used instead. +// +// Unresolved issues: +// +// a) what commands can be used in the build rules? There +// should be a core set of supported commands, as per +// an eCos toolchain build. It should also be possible +// for packages to provide their own host tools. +// +// For sourceware folks, moving away from a single toolchain +// tarball and expecting them to download and install +// egcs, binutils and gdb separately is actually a bad +// idea in this regard, it makes it much more likely that +// some users will have an incomplete tools installation and +// hence that builds will fail. +// +// b) there is an obvious need for variable substitution in the +// rules, e.g. $(CC). At what stage do these variables get +// expanded, and where does the required information live? +// +// c) who is responsible for header file dependency analysis? +// Should the rules be modified automatically to do this, +// or do we leave this to the package developer? It may be +// very hard to do the former, but the latter will cause +// problems for IDE integration. +// +// d) in which directory will the rules get run? What prevents +// filename conflicts between different packages? +// +// NOTE: make_object is not actually required just yet, but the +// issues are much the same as for the "make" property which is +// required. +// +// 4) make [-priority pri] +// +// For example: +// +// make target.ld { +// target.ld : arm.ld +// $(CC) -E -P -xc $(CFLAGS) -o $@ $< +// } +// +// This defines a custom build step for a target that is not going +// to end up in a library. The main such targets at the moment are +// the linker script, vectors.o, and extras.o, but there may well +// be others in future. +// +// The default priority for "make" properties is 300, which means +// that the build rules trigger after all normal compilations and +// after the libraries are generated. It is possible to specify +// custom build steps that should run before any compilations +// using a priority < 100. +// +// Unresolved issues: +// +// a) what commands can be used? +// +// b) variable substitution? +// +// c) header file dependency analysis? +// +// d) directories and filenames? +// +// e) where should the resulting files end up? Currently they can +// all go into $(PREFIX)/lib, but in the long term we may +// need to be a bit more flexible. +// +// 5) build_proc +// +// This defines some Tcl code that should be run prior to any +// build, for example to generate a source file. It must run +// within the appropriate loadable's Tcl interpreter so that +// it can query the current configuration. +// +// NOTE: this property is not implemented yet. +// +// +// A definable has the following properties: +// +// 1) no_define +// Usually the library will generate either one or two #define's +// for every definable, inside the current header file. This can be +// suppressed by the no_define property, which is typically +// accompanied by some other #define-related property such as +// define_proc or define. +// +// 2) define [-file ] [-format ] symbol +// This will result in an additional #define for the specified +// symbol in the specified file. The only filenames that are valid +// are the loadable's current filename (as per define_header), and +// the global header file system.h. Use of the latter should be +// avoided. +// +// The optional format string behaves as per the define_format +// property below. +// +// 3) define_format +// This is only relevant for booldata or data flavors. By default +// two #define's will be generated (assuming the valuable is active +// and enabled): +// +// #define value +// #define _value +// +// The latter will only be generated if the resulting symbol is +// a valid C preprocessor symbol, and is intended to allow the +// use of #ifdef as well as #ifdef (useful if the value is +// non-numerical). +// +// The define_format property provides control over the first of +// these two #defines. The net result is that the #define will be +// generated by evaluating the following Tcl fragment: +// +// set result "#define [ ]" +// +// Command and variable substitution are available if desired, +// but for anything that complicated the define_proc property +// is normally more useful. +// +// define_format is only applicable to the default definition, +// so it cannot be used in conjunction with no_define. The +// define property supports a -format option. +// +// 4) define_proc +// This specifies some Tcl code that should be run when header +// file generation takes place, in addition to any #define's +// generated by default or courtesy of define properties. +// The define_proc property is commonly used in conjunction with +// no_define, but this is not required. +// +// There will be two channels already set up: cdl_header +// for the current loadable, and cdl_system_header for system.h. +// Writing data to system.h should be avoided. +// +// 5) if_define + +// This property provides direct support for a common programming +// paradigm. It allows direct generation of code like the +// following: +// +// #ifdef CYGSRC_TOYS_BLOCKS +// # define CYGDBG_INFRA_USE_PRECONDITIONS 1 +// #endif +// +// In this case CYGSRC_TOYS_BLOCKS is the condition and +// CYGDBG_INFRA_USE_PRECONDITIONS is the symbol. The +// #ifdef/#define sequence will be generated in addition to +// any other #define's resulting from the default behaviour, +// the define property, or the define_proc property. It is +// not affected by no_define. + +//}}} +//{{{ The build process + +// ---------------------------------------------------------------------------- +// For command-line operation the steps involved in doing a build are: +// +// 1) work out what needs to be built. +// +// 2) generate a build and install tree. This involves making sure that +// the various directories exist and are accessible. +// +// 3) generate or update the toplevel makefile. +// +// 4) generate the configuration header files. +// +// For operation in an IDE steps (2) and (3) will be handled by +// different code. +// +// There is a library call to get hold of all the build information: +// +// config->get_build_info(CdlBuildInfo &info); +// +// This erases anything previously present in the build-info argument +// and fills in the information appropriate to the current +// configuration, essentially by walking down the list of loadables +// and each loadable's list of nodes, checking for BuildLoadables +// and Buildables along the way. The BuildInfo class is defined +// further down. +// +// An alternative library call can be used to find out about all +// possible files that need to be compiled etc., irrespective of the +// current configuration settings. This could be useful when it +// comes to letting the user control compiler flags etc. +// +// config->get_all_build_info(CdlBuildInfo& info); +// +// There is another library call for step (4): +// +// config->generate_config_headers(std::string directory) +// +// This will create or update the header files appropriate to +// the current configuration. Temporary files will be generated, +// diff'ed with the current version, and existing files will +// only be modified if necessary. The directory argument +// indicates where the header files should go, i.e. it should +// be the equivalent of $(PREFIX)/include/pkgconf +// +// This library call does not delete any files it does not +// recognize, that is the responsibility of higher-level code. +// It is possible to get or update a list of the files that +// will be generated: +// +// config->get_config_headers(std::vector& headers) +// +// The argument will be cleared if necessary and then filled in with +// the current set of header files. Higher level code can compare the +// result with the current files in the directory and take or suggest +// remedial action. +// +// There is also a library call which combines all four stages: +// +// config->generate_build_tree(std::string build_tree, std::string prefix = $(BUILD)/install) +// +// +// The order in which the various build steps happen is important. +// +// 1) non-configuration headers must be copied from the component +// repository into $(PREFIX)/include. No compiles can happen +// before this. +// +// 2) all compile properties can happen in parallel. These have an +// effective priority of 100. +// +// 3) all make_object priorities can happen in parallel with +// compiles. These have a default priority of 100, but the +// priority can be modified. +// +// 4) the generated objects and any pre-built objects should be +// incorporated into the appropriate library. This happens +// at priority 200. +// +// 5) custom build steps associated with "make" properties should +// now run. These have a default priority of 300, but it is +// possible to override this. +// +// Usually all source files will come from the component repository, +// which means that they are read-only. Ideally it should also be +// possible for a source file to be copied into the build tree and +// edited there, and subsequent builds should pick up the copy rather +// than the original. The build data generated by libcdl will always +// be in the form of relative pathnames to facilitate this. + +//}}} +//{{{ CdlBuildInfo class + +// ---------------------------------------------------------------------------- +// Extracting the build information. +// +// libcdl.a defines the following classes related to build information. +// +// CdlBuildInfo +// CdlBuildInfo_Loadable +// CdlBuildInfo_Header +// CdlBuildInfo_Compile +// CdlBuildInfo_Object +// CdlBuildInfo_MakeObject +// CdlBuildInfo_Make +// +// The build information is organized on a per-loadable basis. +// Higher-level code may choose to flatten this or to keep the +// distinction. A CdlBuildInfo object is primarily a vector of +// CdlBuildInfo_Loadable objects. CdlBuildInfo objects can be created +// statically. +// +// In turn, each CdlBuildInfo_Loadable object is primarily a +// collection of five vectors, one each for Header, Compile, Object, +// MakeObject and Make. +// +// All pathnames in these data structures will use forward slashes as +// the directory separator, irrespective of the host platform. All +// pathnames will be relative. + +struct CdlBuildInfo_Header { + std::string source; /* include/cyg_ass.h */ + std::string destination; /* cyg/infra/cyg_ass.h */ +}; + +struct CdlBuildInfo_Compile { + std::string library; /* libtarget.a */ + std::string source; /* src/fancy.cxx */ + // Compiler and cflags data may be added in future. +}; + +struct CdlBuildInfo_Object { + std::string library; /* libtarget.a */ + std::string object; /* obj/hello.o */ +}; + +struct CdlBuildInfo_MakeObject { + cdl_int priority; /* 100 */ + std::string library; /* libtarget.a */ + std::string object; /* toyslock.o */ + std::string deps; /* toyslock.y */ + /* + It is not clear whether the deps field is actually useful in the + context of IDE integration, but see the note about arm.inc + above. + */ + std::string rules; + /* + A typical value for "rules" might be: + + yacc toyslock.y + $(CC) $(CFLAGS) -o toyslock.o y.tab.c + + Leading white space is not significant. Newlines are significant. + Backslash escapes in the text will not have been processed yet. + */ +}; + +struct CdlBuildInfo_Make { + cdl_int priority; /* 300 */ + std::string target; /* extras.o */ + std::string deps; /* libextras.a */ + std::string rules; + /* + Something like: + + $(CC) $(ARCHFLAGS) $(LDARCHFLAGS) -nostdlib -Wl,-r -Wl,--whole-archive $(PREFIX)/lib/libextras.a -o $(PREFIX)/lib/extras.o + + */ +}; + +class CdlBuildInfo_Loadable { + + friend class CdlTest; + + public: + std::string name; /* CYGPKG_INFRA */ + std::string directory; /* infra/current */ + std::vector headers; + std::vector compiles; + std::vector objects; + std::vector make_objects; + std::vector makes; + + protected: + + private: +}; + +class CdlBuildInfo { + + friend class CdlTest; + + public: + + std::vector entries; + + protected: + + private: +}; + +//}}} +//{{{ CdlBuildLoadable + +// ---------------------------------------------------------------------------- +// BuildLoadables are derived from Loadables and are appropriate for +// any loadables that can contain build information. There are a +// number of properties applicable at this level: makefile, +// include_dir, include_files and library. The main interface of +// interest is update_build_info(). +// +// It is likely that all BuildLoadables are also Buildables, but this +// is not required. + +class CdlBuildLoadableBody : virtual public CdlLoadableBody +{ + friend class CdlTest; + + public: + virtual ~CdlBuildLoadableBody(); + + // This is the main way to extract information about what should + // get built. It takes into account the active and enabled states, + // as appropriate. + void update_build_info(CdlBuildInfo&) const; + + // An alternative which ignores the active and enabled states. + void update_all_build_info(CdlBuildInfo&) const; + + // Property parsers and validation code appropriate for a + // build-loadable object such as makefile + static void add_property_parsers(std::vector& parsers); + void check_properties(CdlInterpreter); + static int parse_library(CdlInterpreter, int, const char*[]); + static int parse_makefile(CdlInterpreter, int, const char*[]); + static int parse_include_dir(CdlInterpreter, int, const char*[]); + static int parse_include_files(CdlInterpreter, int, const char*[]); + + // By default any compiled files will go into libtarget.a, which + // is the default value for this variable. Individual applications may + // specify an alternative default library. + static char* default_library_name; + + // When filling in a build_info structure the library needs to know + // what constitutes a header file. A glob pattern can be used for this. + // NOTE: in the long term this should come out of a data file. + static char* default_headers_glob_pattern; + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlBuildLoadableBody(); + + private: + + enum { + CdlBuildLoadableBody_Invalid = 0, + CdlBuildLoadableBody_Magic = 0x55776643 + } cdlbuildloadablebody_cookie; + + // Illegal operations + CdlBuildLoadableBody(const CdlBuildLoadableBody&); + CdlBuildLoadableBody& operator=(const CdlBuildLoadableBody&); +}; + +//}}} +//{{{ CdlBuildable + +// ---------------------------------------------------------------------------- +// Buildable objects can have properties such as compile and +// make_object. These properties are not normally accessed +// directly. Instead there is a member function to update a +// CdlBuildInfo_Loadable object. +// +// The build properties for a given buildable have an effect iff +// that buildable is active, and in addition if the buildable is also +// a valuable then it must be enabled. + +class CdlBuildableBody : virtual public CdlNodeBody +{ + + friend class CdlTest; + + public: + virtual ~CdlBuildableBody(); + + // This is the main way to extract information about what should + // get built. It takes into account the active and enabled states, + // as appropriate. The second argument indicates the default + // library for the current loadable. + void update_build_info(CdlBuildInfo_Loadable&, std::string) const; + + // An alternative which ignores the active and enabled states. + void update_all_build_info(CdlBuildInfo_Loadable&, std::string) const; + + // Add property parsers and validation code appropriate for a + // buildable object such as compile and make_object + static void add_property_parsers(std::vector& parsers); + void check_properties(CdlInterpreter); + + static int parse_build_proc(CdlInterpreter, int, const char*[]); + static int parse_compile(CdlInterpreter, int, const char*[]); + static int parse_make(CdlInterpreter, int, const char*[]); + static int parse_make_object(CdlInterpreter, int, const char*[]); + static int parse_object(CdlInterpreter, int, const char*[]); + static bool split_custom_build_step(std::string /* data */, std::string& /* target */, std::string& /* deps */, + std::string& /* rules*/, std::string& /* error_msg */); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlBuildableBody(); + + private: + + enum { + CdlBuildableBody_Invalid = 0, + CdlBuildableBody_Magic = 0x16eb1c04 + } cdlbuildablebody_cookie; + + // Illegal operations + CdlBuildableBody(const CdlBuildableBody&); + CdlBuildableBody& operator=(const CdlBuildableBody&); +}; + +//}}} +//{{{ CdlDefineLoadable + +// ---------------------------------------------------------------------------- +// DefineLoadables are derived from Loadables and are appropriate for +// any loadables that can result in generated header files containing +// configuration data. There is one applicable property, +// define_header. The main interface of interest is +// generate_config_headers(). + +class CdlDefineLoadableBody : virtual public CdlLoadableBody +{ + + friend class CdlTest; + + public: + virtual ~CdlDefineLoadableBody(); + + // Update the header file for this loadable. The first argument + // is a channel to the loadable-specific header file. The second + // argument is a channel to the global header file. + void generate_config_header(Tcl_Channel, Tcl_Channel) const; + + // What header file should be generated for this loadable? + virtual std::string get_config_header() const; + + // Add property parsers and validation code. + static void add_property_parsers(std::vector& parsers); + void check_properties(CdlInterpreter); + static int parse_define_header(CdlInterpreter, int, const char*[]); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlDefineLoadableBody(); + + private: + + enum { + CdlDefineLoadableBody_Invalid = 0, + CdlDefineLoadableBody_Magic = 0x7e211709 + } cdldefineloadablebody_cookie; + + // Illegal operations + CdlDefineLoadableBody(const CdlDefineLoadableBody&); + CdlDefineLoadableBody& operator=(const CdlDefineLoadableBody&); +}; + +//}}} +//{{{ CdlDefinable + +// ---------------------------------------------------------------------------- +// Definables are derived from Valuables and provide support for +// outputting a configuration header file. + +class CdlDefinableBody : virtual public CdlValuableBody +{ + + friend class CdlTest; + + public: + virtual ~CdlDefinableBody(); + + // Update the header file for this definable. The loadable's Tcl + // interpreter will already have channels cdl_header and + // cdl_system_header set up appropriately. + void generate_config_header( Tcl_Channel, Tcl_Channel) const; + + // Add property parsers and validation code. + static void add_property_parsers(std::vector& parsers); + void check_properties(CdlInterpreter); + static int parse_define(CdlInterpreter, int, const char*[]); + static int parse_define_format(CdlInterpreter, int, const char*[]); + static int parse_define_proc(CdlInterpreter, int, const char*[]); + static int parse_if_define(CdlInterpreter, int, const char*[]); + static int parse_no_define(CdlInterpreter, int, const char*[]); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + protected: + CdlDefinableBody(); + + private: + + enum { + CdlDefinableBody_Invalid = 0, + CdlDefinableBody_Magic = 0x65a2c95a + } cdldefinablebody_cookie; + + // Illegal operations + CdlDefinableBody(const CdlDefinableBody&); + CdlDefinableBody& operator=(const CdlDefinableBody&); +}; + +//}}} + +//}}} +//{{{ CdlDialog + +// ---------------------------------------------------------------------------- +// A dialog simply inherits from CdlUserVisible and provides convenient +// access to several dialog-specific properties. + +class CdlDialogBody : + public virtual CdlUserVisibleBody, + public virtual CdlParentableBody +{ + friend class CdlTest; + + public: + + virtual ~CdlDialogBody(); + + // Dialogs may be enabled or disabled globally. This affects + // CdlValuable::get_widget_hint() if the valuable has an associated + // custom dialog. + static void disable_dialogs(); + static void enable_dialogs(); + static bool dialogs_are_enabled(); + + bool has_init_proc() const; + bool has_update_proc() const; + const cdl_tcl_code& get_init_proc() const; + const cdl_tcl_code& get_update_proc() const; + const cdl_tcl_code& get_display_proc() const; + const cdl_tcl_code& get_confirm_proc() const; + const cdl_tcl_code& get_cancel_proc() const; + + static int parse_dialog(CdlInterpreter, int, const char*[]); + static int parse_display_proc(CdlInterpreter, int, const char*[]); + static int parse_update_proc(CdlInterpreter, int, const char*[]); + + // Persistence support. Dialogs should just be ignored when it + // comes to saving and restoring files. + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + // The constructor only gets invoked from inside parse_dialog() + CdlDialogBody(std::string); + + static bool dialogs_enabled; + + enum { + CdlDialogBody_Invalid = 0, + CdlDialogBody_Magic = 0x3f4df391 + } cdldialogbody_cookie; + + // Illegal operations. The dialog name must be known at the time + // that the object is constructed. + CdlDialogBody(); + CdlDialogBody(const CdlDialogBody&); + CdlDialogBody& operator=(const CdlDialogBody&); +}; + +//}}} +//{{{ CdlWizard + +// ---------------------------------------------------------------------------- +// A wizard is very much like a dialog, just a different set of properties. + +class CdlWizardBody : + public virtual CdlUserVisibleBody, + public virtual CdlParentableBody +{ + friend class CdlTest; + + public: + + virtual ~CdlWizardBody(); + + bool has_init_proc() const; + bool has_decoration_proc() const; + const cdl_tcl_code& get_init_proc() const; + const cdl_tcl_code& get_decoration_proc() const; + const cdl_tcl_code& get_confirm_proc() const; + const cdl_tcl_code& get_cancel_proc() const; + bool has_screen(cdl_int) const; + cdl_int get_first_screen_number() const; + const cdl_tcl_code& get_first_screen() const; + const cdl_tcl_code& get_screen(cdl_int) const; + static int parse_wizard(CdlInterpreter, int, const char*[]); + static int parse_cancel_proc(CdlInterpreter, int, const char*[]); + static int parse_confirm_proc(CdlInterpreter, int, const char*[]); + static int parse_decoration_proc(CdlInterpreter, int, const char*[]); + static int parse_init_proc(CdlInterpreter, int, const char*[]); + static int parse_screen(CdlInterpreter, int, const char*[]); + + // Persistence support. Wizards should just be ignored when it + // comes to saving and restoring files. + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + // The constructor only gets invoked from inside parse_wizard(). + CdlWizardBody(std::string); + + // Illegal operations. + CdlWizardBody(); + CdlWizardBody(const CdlWizardBody&); + CdlWizardBody& operator=(const CdlWizardBody&); + + enum { + CdlWizardBody_Invalid = 0, + CdlWizardBody_Magic = 0x4ec1c39a + } cdlwizardbody_cookie; +}; + +//}}} +//{{{ CdlInterface class + +// ---------------------------------------------------------------------------- +// Similarly for interfaces. + +class CdlInterfaceBody : public virtual CdlNodeBody, + public virtual CdlUserVisibleBody, + public virtual CdlValuableBody, + public virtual CdlParentableBody, + public virtual CdlBuildableBody, + public virtual CdlDefinableBody +{ + friend class CdlTest; + + public: + + ~CdlInterfaceBody(); + + void get_implementers(std::vector&) const; + void recalculate(CdlTransaction); + + static int parse_interface(CdlInterpreter, int, const char*[]); + + // Persistence support. The interface data cannot sensibly be modified + // by users, it is all calculated. However it is useful to have the + // interface data present in the saved file so that users can examine + // dependencies etc. + virtual void save(CdlInterpreter, Tcl_Channel, int, bool); + static void initialize_savefile_support(CdlToplevel); + static int savefile_interface_command(CdlInterpreter, int, const char*[]); + + bool was_generated() const; + virtual bool is_modifiable() const; + virtual std::string get_class_name() const; + bool check_this(cyg_assert_class_zeal = cyg_quick) const; + CYGDBG_DECLARE_MEMLEAK_COUNTER(); + + private: + CdlInterfaceBody(std::string, bool /* generated */); + bool generated; + + enum { + CdlInterfaceBody_Invalid = 0, + CdlInterfaceBody_Magic = 0x67f7fbe5 + } cdlinterfacebody_cookie; + CdlInterfaceBody(); + CdlInterfaceBody(const CdlInterfaceBody&); + CdlInterfaceBody& operator=(const CdlInterfaceBody&); +}; + +//}}} + +#endif /* !__CDLCORE_HXX */ +// EOF cdlcore.hxx diff --git a/tools/src/libcdl/cdlmisc.cxx b/tools/src/libcdl/cdlmisc.cxx new file mode 100644 index 00000000..83666297 --- /dev/null +++ b/tools/src/libcdl/cdlmisc.cxx @@ -0,0 +1,1095 @@ +//{{{ Banner + +//============================================================================ +// +// cdlmisc.cxx +// +// Implementation of the various CDL utility member functions. +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1998/03/04 +// Version: 0.01 +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ #include's + +// ---------------------------------------------------------------------------- +#include "cdlconfig.h" + +// Get the infrastructure types, assertions, tracing and similar +// facilities. +#include +#include + +// defines everything implemented in this module. +// It implicitly supplies , and because +// the class definitions rely on these headers. +#include + +// For access to the isdigit(), isupper(), tolower(), ... functions +#include + +// For access to sprintf(), specifically double to string conversions. +#include + +// For access to strtod() +#include + +// strtod() involves errno... +#include + +// For access to fmod() +#include + +// For access to DBL_DIG +#include + +//}}} + +//{{{ Cdl::is_valid_xxx() + +// --------------------------------------------------------------------------- + +bool +Cdl::is_valid_value_flavor(CdlValueFlavor data) +{ + bool result = false; + + switch(data) { + case CdlValueFlavor_None : + case CdlValueFlavor_Bool : + case CdlValueFlavor_BoolData : + case CdlValueFlavor_Data : + result = true; + break; + + default: + break; + } + + return result; +} + +bool +Cdl::is_valid_value_source(CdlValueSource data) +{ + bool result = false; + + switch(data) { + case CdlValueSource_Default : + case CdlValueSource_User : + case CdlValueSource_Wizard : + case CdlValueSource_Inferred : + result = true; + break; + + default: + break; + } + + return result; +} + +// ---------------------------------------------------------------------------- +// For now CDL names are restricted to what is acceptable to the C +// preprocessor. This may cause problems in future, e.g. i18n. + +bool +Cdl::is_valid_cdl_name(const std::string& name) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::is_valid_cdl_name", "result %d"); + + bool result = is_valid_c_preprocessor_symbol(name); + + CYG_REPORT_RETVAL(result); + return result; +} + +bool +Cdl::is_valid_c_preprocessor_symbol(const std::string& symbol) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::is_valid_c_preprocessor_symbol", "result %d"); + + bool result = true; + if ("" == symbol) { + result = false; + } else { + // A valid preprocessor symbol should begin with either an underscore + // or a letter. It should then be followed by some number of underscores, + // letters, or digits. + // + // In some locales isalpha() may succeed for characters which are not + // legal for C preprocessor symbols. Instead ASCII is assumed here. + if (('_' != symbol[0]) && + !(('a' <= symbol[0]) && (symbol[0] <= 'z')) && + !(('A' <= symbol[0]) && (symbol[0] <= 'Z'))) { + + result = false; + } else { + for (unsigned int i = 1; i < symbol.size(); i++) { + if (('_' != symbol[i]) && + !(('a' <= symbol[i]) && (symbol[i] <= 'z')) && + !(('A' <= symbol[i]) && (symbol[i] <= 'Z')) && + !(('0' <= symbol[i]) && (symbol[i] <= '9'))) { + + result = false; + break; + } + } + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Cdl::xxx_to_yyy() - strings, ints, doubles, ... + +// --------------------------------------------------------------------------- +// Conversion routines between strings, integers, doubles, bools, ... +// +// Conversions to/from integers are complicated somewhat because the +// data type in question is cdl_int. In the initial implementation this +// is 64 bits. In the long term it will be arbitrary precision and +// the conversion routines will need to be reimplemented. +// +// ASCII rather than EBCDIC is assumed. +// +// Some of the routines may fail, e.g. string to integer conversions. +// Others are guaranteed to succeed. + +//{{{ string_to_integer() + +// ---------------------------------------------------------------------------- +bool +Cdl::string_to_integer(std::string data, cdl_int& target) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::string_to_integer", "success %d"); + + bool negative = false; + bool seen_plus = false; + bool seen_minus = false; + + // Life is a bit easier if I can check for '\0' + const char* ptr = data.c_str(); + + // Not essential but harmless. + while (isspace(*ptr)) + ptr++; + + if ('+' == *ptr) { + if (seen_plus) { + target = 0; + CYG_REPORT_RETVAL(false); + return false; + } + seen_plus = true; + ptr++; + } + + if ('-' == *ptr) { + if (seen_minus) { + target = 0; + CYG_REPORT_RETVAL(false); + return false; + } + seen_minus = true; + negative = true; + ptr++; + } + + cdl_int acc = 0; + if ('0' == *ptr) { + // This happens sufficiently often to be worth a special case. + if ('\0' == ptr[1]) { + target = 0; + CYG_REPORT_RETVAL(true); + return true; + } + // Hex is always worth supporting. + if (('x' == ptr[1]) || ('X' == ptr[1])) { + ptr++; ptr++; + if (!isxdigit(*ptr)) { + CYG_REPORT_RETVAL(false); + return false; + } + while (isxdigit(*ptr)) { + cdl_int new_acc = acc * 16; + if (isdigit(*ptr)) { + new_acc += (*ptr - '0'); + } else if (('a' <= *ptr) && (*ptr <= 'f')) { + new_acc += (*ptr + 10 - 'a'); + } else if (('A' <= *ptr) && (*ptr <= 'F')) { + new_acc += (*ptr + 10 - 'A'); + } else { + CYG_FAIL("this platform's implementation of isxdigit() is broken"); + } + if (new_acc < acc) { + CYG_REPORT_RETVAL(false); + return false; + } + acc = new_acc; + ptr++; + } + if ('\0' != *ptr) { + CYG_REPORT_RETVAL(false); + return false; + } + if (negative) { + cdl_int new_acc = 0 - acc; + if (new_acc > 0) { + CYG_REPORT_RETVAL(false); + return false; + } else { + acc = new_acc; + } + } + target = acc; + CYG_REPORT_RETVAL(true); + return true; + } + + // Octal? Oh well, might as well be complete. + if (('0' <= ptr[1]) && (ptr[1] <= '7')) { + ptr++; + do { + cdl_int new_acc = 8 * acc; + new_acc += (*ptr - '0'); + if (new_acc < acc) { + CYG_REPORT_RETVAL(false); + return false; + } + acc = new_acc; + ptr++; + } while (('0' <= *ptr) && (*ptr <= '7')); + if ('\0' != *ptr) { + CYG_REPORT_RETVAL(false); + return false; + } + if (negative) { + cdl_int new_acc = 0 - acc; + if (new_acc > 0) { + CYG_REPORT_RETVAL(false); + return false; + } + else { + acc = new_acc; + } + } + target = acc; + CYG_REPORT_RETVAL(true); + return true; + } + + // Drop through for the case of a decimal. + } + + while(isdigit(*ptr)) { + cdl_int new_acc = 10 * acc; + new_acc += (*ptr - '0'); + if (new_acc < acc) { + CYG_REPORT_RETVAL(false); + return false; + } + acc = new_acc; + ptr++; + } + if ('\0' != *ptr) { + CYG_REPORT_RETVAL(false); + return false; + } + if (negative) { + cdl_int new_acc = 0 - acc; + if (new_acc > 0) { + CYG_REPORT_RETVAL(false); + return false; + } else { + acc = new_acc; + } + } + target = acc; + CYG_REPORT_RETVAL(true); + return true; +} + +//}}} +//{{{ string_to_double() + +// ---------------------------------------------------------------------------- +// There is no point in doing this the hard way, just use standard +// library calls. +// +// There is an obvious question as to how much precision can get lost +// doing the conversion to a string. In practice this should not matter +// too much, since the expression handling code generally keeps the +// original double precision lying around to be re-used. However it may +// be desirable to keep the libcdl behaviour in synch with Tcl's +// tcl_precision variable. + +bool +Cdl::string_to_double(std::string value, double& target) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::string_to_double", "success %d"); + + bool result = true; + const char* start_ptr = value.c_str(); + char* end_ptr; + int old_errno = errno; + + errno = 0; + double conv = strtod(start_ptr, &end_ptr); + if (0 != errno) { + CYG_ASSERT(ERANGE == errno, "standard-compliant C library"); + result = false; + } else if ('\0' != *end_ptr) { + result = false; + } else { + target = conv; + result = true; + } + + errno = old_errno; + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ string_to_bool() + +// ---------------------------------------------------------------------------- +// Conversions to and from bools. The only real issue here is exactly +// what strings should be accepted as synonyms for true and false. +// It is not actually clear that these functions are useful. +bool +Cdl::string_to_bool(std::string data, bool& target) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::string_to_bool", "success %d"); + + // Arguably there should be a precondition ( "" != data ) + bool result = false; + + // What is truth ? + if (( data == "1" ) || (data == "true") || + ( data == "True") || (data == "TRUE") ) { + result = true; + target = true; + } else if ((data == "0" ) || (data == "false") || + (data == "False") || (data == "FALSE") ) { + result = true; + target = false; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} + +//{{{ integer_to_string() + +// ---------------------------------------------------------------------------- + +std::string +Cdl::integer_to_string(cdl_int value, CdlValueFormat format) +{ + std::string result; + Cdl::integer_to_string(value, result, format); + return result; +} + +void +Cdl::integer_to_string(cdl_int value, std::string& target, CdlValueFormat format) +{ + CYG_REPORT_FUNCNAME("Cdl::integer_to_string"); + CYG_REPORT_FUNCARG2XV((long) value, format); + + // Optimise this special case. + if (0 == value) { + if (CdlValueFormat_Hex == format) { + target = "0x0"; + } else { + target = "0"; + } + CYG_REPORT_RETVAL(true); + return; + } + + // A local buffer to construct partial strings. This avoids + // unnecessary std::string reallocation. + // 64 bits and three bits at a time for octal numbers gives 21 digits, + // plus spares for the leading '0' and the terminator. + char local_buf[24]; + char *local_ptr = &(local_buf[23]); + *local_ptr-- = '\0'; + + if (CdlValueFormat_Hex == format) { + + // Output the data as 0x... with either 8 or 16 digits, + // depending on the size. + int i; + for (i = 0; i < 8; i++) { + int tmp = (int) (value & 0x0F); + value = value >> 4; + if (tmp < 10) { + *local_ptr-- = '0' + tmp; + } else { + *local_ptr-- = 'A' + (tmp - 10); + } + } + // Beware of right shifts that preserve the sign bit. + { + int tmp1 = (value & 0x0FFFF); + int tmp2 = ((value >> 16) & 0x0FFFF); + value = (tmp2 << 16) + tmp1; + } + if (value != 0) { + for (i = 0; i < 8; i++) { + int tmp = (int) (value & 0x0F); + value = value >> 4; + if (tmp < 10) { + *local_ptr-- = '0' + tmp; + } else { + *local_ptr-- = 'A' + (tmp - 10); + } + } + } + *local_ptr-- = 'x'; + *local_ptr = '0'; + target = std::string(local_ptr); + + } else if (CdlValueFormat_Octal == format) { + + // Simply output the data three bits at a time, do not worry about any + // particular width restrictions. However it is necessary to worry + // about masking. + cdl_int mask = 0x1FFFFFFF; + mask = (mask << 16) | 0x0FFFF; + mask = (mask << 16) | 0x0FFFF; + + target = ""; + while (value > 0) { + int tmp = value & 0x07; + value = (value >> 3) & mask; + *local_ptr-- = '0' + tmp; + } + *local_ptr = '0'; + target = std::string(local_ptr); + + } else { + // A simple decimal number + // Switch to positive arithmetic. + bool negative = false; + if (value < 0) { + negative = true; + value = 0 - value; + // Only MININT cannot be converted using the above line + if (value < 0) { + target = "-9223372036854775808"; + CYG_REPORT_RETVAL(true); + return; + } + } + + while (value > 0) { + int rem = (int) (value % 10); + value = value / 10; + *local_ptr-- = '0' + rem; + } + if (negative) { + *local_ptr-- = '-'; + } + local_ptr++; + target = std::string(local_ptr); + } + + CYG_REPORT_RETURN(); + return; +} + +//}}} +//{{{ double_to_string() + +// ---------------------------------------------------------------------------- + +std::string +Cdl::double_to_string(double value, CdlValueFormat format) +{ + std::string result; + Cdl::double_to_string(value, result, format); + return result; +} + +void +Cdl::double_to_string(double value, std::string& result, CdlValueFormat format) +{ + CYG_REPORT_FUNCNAME("Cdl::double_to_String"); + + char buf[256]; // This should be plenty :-) + sprintf(buf, "%.*G", DBL_DIG, value); + result = buf; + + CYG_UNUSED_PARAM(CdlValueFormat, format); + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ bool_to_string() + +// ---------------------------------------------------------------------------- +// Should the string results be 1/0 or true/false? Not that +// it really matters. The testcase in cdl1.cxx expects 1/0. +std::string +Cdl::bool_to_string(bool value) +{ + std::string result; + Cdl::bool_to_string(value, result); + return result; +} + +void +Cdl::bool_to_string(bool value, std::string& target) +{ + CYG_REPORT_FUNCNAME("Cdl::bool_to_string"); + CYG_REPORT_FUNCARG1( "value arg %ld", (long) value); + + if (value) + target = "1"; + else + target = "0"; + + CYG_REPORT_RETURN(); +} + +//}}} + +//{{{ integer_to_double() + +// ---------------------------------------------------------------------------- +// Currently integer to double cannot fail, although there may well be loss +// of accurary. Eventually cdl_int may be an arbitrary precision integer +// in which case conversion to double is not guaranteed. +double +Cdl::integer_to_double(cdl_int value) +{ + CYG_REPORT_FUNCNAME("Cdl::integer_to_double"); + + double result = (double) value; + + CYG_REPORT_RETURN(); + return result; +} + +void +Cdl::integer_to_double(cdl_int value, double& target) +{ + CYG_REPORT_FUNCNAME("Cdl::integer_to_double"); + + target = (double) value; + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ double_to_integer() + +// Conversion from double to integer is only allowed if there is no loss +// of data. modf() is useful here +bool +Cdl::double_to_integer(double value, cdl_int& target) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::double_to_integer", "result %d"); + + bool result = false; + + double integral; + double frac; + + frac = modf(value, &integral); + if (0.0 == frac) { + // Looking good, but integral may still be too big. + cdl_int tmp = (cdl_int) integral; + if (tmp == value) { + // No fraction, no loss of data, everything looking good + target = tmp; + result = true; + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} + +//}}} +//{{{ Cdl::xxx_to_yyy() - CDL-specific data types + +// ---------------------------------------------------------------------------- +// Conversions between strings and flavors. + +static struct { + char* name; + CdlValueFlavor flavor; +} valid_flavors[] = { + { "none", CdlValueFlavor_None }, + { "bool", CdlValueFlavor_Bool }, + { "booldata", CdlValueFlavor_BoolData }, + { "data", CdlValueFlavor_Data }, + { 0, CdlValueFlavor_Invalid } +}; + +bool +Cdl::string_to_flavor(std::string name, CdlValueFlavor& target) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::string_to_flavor", "success %d"); + + bool result = false; + + // First convert the argument to lower case. Arguably this is incorrect, + // Tcl is a case-sensitive language, but the conversion is unlikely ever + // to be harmfull. + for (std::string::iterator str_i = name.begin(); str_i != name.end(); str_i++) { + if (isupper(*str_i)) { + *str_i = tolower(*str_i); + } + } + + // Now look for a match in the table. + int match = -1; + int i; + const char* c_str = name.c_str(); + int len = strlen(c_str); + + for (i = 0; 0 != valid_flavors[i].name; i++) { + if (0 == strncmp(c_str, valid_flavors[i].name, len)) { + // Check for an ambiguous string match. + // This cannot actually happen with the current flavor names. + if ( -1 != match) { + break; + } + match = i; + } + + } + if (-1 != match) { + target = valid_flavors[match].flavor; + result = true; + } + CYG_REPORT_RETVAL(result); + return result; +} + +bool +Cdl::flavor_to_string(CdlValueFlavor flavor, std::string& target) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::flavor_to_string", "success %d"); + + bool result = false; + + for (int i = 0; 0 != valid_flavors[i].name; i++) { + if (flavor == valid_flavors[i].flavor) { + target = valid_flavors[i].name; + result = true; + break; + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +// Similar support for value sources. + +static struct { + char* name; + CdlValueSource source; +} valid_sources[] = { + { "default", CdlValueSource_Default }, + { "inferred", CdlValueSource_Inferred }, + { "wizard", CdlValueSource_Wizard }, + { "user", CdlValueSource_User }, + { 0, CdlValueSource_Invalid } +}; + +bool +Cdl::string_to_source(std::string name, CdlValueSource& target) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::string_to_source", "success %d"); + + bool result = false; + + // First convert the argument to lower case. Arguably this is incorrect, + // Tcl is a case-sensitive language, but the conversion is unlikely ever + // to be harmfull. + for (std::string::iterator str_i = name.begin(); str_i != name.end(); str_i++) { + if (isupper(*str_i)) { + *str_i = tolower(*str_i); + } + } + + // Now look for a match in the table. + int match = -1; + int i; + const char* c_str = name.c_str(); + int len = strlen(c_str); + + for (i = 0; 0 != valid_sources[i].name; i++) { + if (0 == strncmp(c_str, valid_sources[i].name, len)) { + // Check for an ambiguous string match. + // This cannot actually happen with the current source names. + if ( -1 != match) { + break; + } + match = i; + } + + } + if (-1 != match) { + target = valid_sources[match].source; + result = true; + } + CYG_REPORT_RETVAL(result); + return result; +} + +bool +Cdl::source_to_string(CdlValueSource source, std::string& target) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::source_to_string", "success %d"); + + bool result = false; + + for (int i = 0; 0 != valid_sources[i].name; i++) { + if (source == valid_sources[i].source) { + target = valid_sources[i].name; + result = true; + break; + } + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Cdl::get_library_version() + +// ---------------------------------------------------------------------------- +// The version of the library actually lives inside configure.in. It gets +// exported into cdlconfig.h +std::string +Cdl::get_library_version(void) +{ + return std::string(CYGNUM_LIBCDL_VERSION); +} + +//}}} +//{{{ Cdl::set_interactive() + +// ---------------------------------------------------------------------------- +// Some CDL scripts and some bits of the library may want to adapt depending +// on whether or not the application is running fully interactively or in +// batch mode. The primary distinction is that a batch program should never +// attempt to obtain user input, whether via Tk widgets or by other means. + +bool Cdl::interactive = false; + +void +Cdl::set_interactive(bool value) +{ + CYG_REPORT_FUNCNAME("Cdl::set_interactive"); + CYG_REPORT_FUNCARG1D(value); + + interactive = value; +} + +bool +Cdl::is_interactive(void) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::is_interactive", "interactive %d"); + CYG_REPORT_RETVAL(interactive); + return interactive; +} + +//}}} +//{{{ version support() + +// ---------------------------------------------------------------------------- +// Packages may need to impose constraints on which versions of other +// packages they can coexist with. This requires some way of achieving +// a partial ordering of version numbers. Unfortunately there are many +// different ways of specifying a version number, and we cannot impose +// a single model on all third party package developers. Instead this +// routine performs some semi-intelligent comparisons of two version +// strings which should work in the vast majority of cases. +// +// The return value is as per strcmp(), -1 if the first entry is +// smaller (i.e. the more recent and hence hopefully the first in +// a list), +1 if the second entry is smaller, 0 if the two are +// identical. +// +// There is a big ambiguity between "derived" versions and "experimental" +// versions. Something like v0.3beta is experimental, i.e. it is older +// than the full release v0.3. On the other hand v0.3.p1 is a patched +// version of v0.3 and hence newer. This code uses the presence or otherwise +// of a separator to decide between the two cases. + +// A utility routine which checks whether or not a character counts +// as a separator. Currently the characters . - and _ are all accepted +// as field separators. +// +// Arguably - should not be accepted as a separator. Instead if it preceeds +// a digit it could be interpreted as part of a prerelease number. + +static bool +is_separator(int ch) +{ + return ('.' == ch) || ('-' == ch) || ('_' == ch); +} + +int +Cdl::compare_versions(std::string arg1, std::string arg2) +{ + CYG_REPORT_FUNCNAMETYPE("Cdl::compare_versions", "result %d"); + + if (arg1 == arg2) { + CYG_REPORT_RETVAL(0); + return 0; + } + + // The version number "current" is special, it always indicates the most + // recent version e.g. as checked out from a CVS repository. + if ("current" == arg1) { + CYG_REPORT_RETVAL(-1); + return -1; + } + if ("current" == arg2) { + CYG_REPORT_RETVAL(1); + return 1; + } + + const char* ptr1 = arg1.c_str(); + const char* ptr2 = arg2.c_str(); + int num1 = 0; + int num2 = 0; + + // If both strings start with 'v' or 'V', skip this. A minor variation in + // case at the start of a string should be ignored. + if ((('v' == *ptr1) || ('V' == *ptr1)) && + (('v' == *ptr2) || ('V' == *ptr2))) { + ptr1++; + ptr2++; + } + + // Now process the rest of the version string, one unit at a time. + while (1) { + + if (('\0' == *ptr1) && ('\0' == *ptr2)) { + // Both strings have terminated at the same time. There + // may have been some spurious leading zeroes in numbers, + // or irrelevant differences in the separators. + CYG_REPORT_RETVAL(0); + return 0; + } + + if ('\0' == *ptr1) { + // The first string has ended first. If the second string currently + // points at a separator then arg2 is a derived version, e.g. + // v0.3.p1, and hence newer. Otherwise arg2 is an experimental + // version v0.3beta and hence older. + if (is_separator(*ptr2)) { + CYG_REPORT_RETVAL(1); + return 1; + } else { + CYG_REPORT_RETVAL(-1); + return -1; + } + } + + if ('\0' == *ptr2) { + // As per the previous test. + if (is_separator(*ptr1)) { + CYG_REPORT_RETVAL(-1); + return -1; + } else { + CYG_REPORT_RETVAL(1); + return 1; + } + } + + // If both strings currently point at numerical data, do a conversion and + // a numerical comparison. + if (isdigit(*ptr1) && isdigit(*ptr2)) { + num1 = 0; + num2 = 0; + // Strictly speaking there should be some overflow tests here, but it + // is not worth the trouble. + do { + num1 = (10 * num1) + (*ptr1++ - '0'); + } while(isdigit(*ptr1)); + do { + num2 = (10 * num2) + (*ptr2++ - '0'); + } while(isdigit(*ptr2)); + // v2.0 is newer than v1.0 + if (num1 < num2) { + CYG_REPORT_RETVAL(1); + return 1; + } else if (num1 > num2) { + CYG_REPORT_RETVAL(-1); + return -1; + } else { + continue; + } + } + + // Non-numerical data. If the two characters are the same then + // move on. Note: this has to happen after numerical conversions + // to distinguish v10.0 and v1.0 + if (*ptr1 == *ptr2) { + ptr1++; ptr2++; + continue; + } + + // If both strings are currently at a separator then move on. All + // separators can be used interchangeably. + if (is_separator(*ptr1) && is_separator(*ptr2)) { + ptr1++; ptr2++; + continue; + } + + // If only one string is at a separator, special action + // is needed. v1.1alpha is interpreted as earlier than + // v1.1, but v1.1.3 is a later release. + if (is_separator(*ptr1)) { + return -1; + } else if (is_separator(*ptr2)) { + return 1; + } + + // Two different characters, e.g. v1.0alpha vs. v1.0beta + if (*ptr1 < *ptr2) { + CYG_REPORT_RETVAL(1); + return 1; + } else { + CYG_REPORT_RETVAL(-1); + return -1; + } + } + + // Not reachable. +} + +// ---------------------------------------------------------------------------- +// Given a version string, extract major, minor and release numbers. +// Some or all of these may be absent. Basically the code just +// iterates through the string looking for sequences of numbers. + +static void +version_extract_number(const std::string& version, unsigned int& index, std::string& result) +{ + CYG_REPORT_FUNCNAME("version_extract_number"); + + // The calling code is expected to supply a sensible default. + // Search for a digit + for ( ; index < version.size(); index++) { + if (isdigit(version[index])) { + break; + } + } + if (index != version.size()) { + result = ""; + if ((index > 0) && ('-' == version[index-1])) { + result = "-"; + } + do { + result += version[index++]; + } while ((index < version.size()) && isdigit(version[index])); + } + + CYG_REPORT_RETURN(); +} + +void +Cdl::split_version_string(const std::string& version, std::string& major, std::string& minor, std::string& release) +{ + CYG_REPORT_FUNCNAME("CdlMisc::split_version_string"); + + unsigned int index = 0; + version_extract_number(version, index, major); + version_extract_number(version, index, minor); + version_extract_number(version, index, release); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Cdl::get_short_form() + +// ---------------------------------------------------------------------------- +// It is occasionally useful to take a full CDL name such as CYgpkg_KERNEL +// and turn it into a short form such as "kernel". This involves discarding +// everything up to and including the first underscore, then lowercasing +// all subsequent characters. +std::string +Cdl::get_short_form(const std::string& original) +{ + CYG_REPORT_FUNCNAME("CdlMisc::get_short_form"); + + std::string result = ""; + unsigned int size = original.size(); + unsigned int i; + for (i = 0; i < size; i++) { + if ('_' == original[i]) { + i++; + break; + } + } + + // Either at end of string, or just past the first underscore + for ( ; i < size; i++) { + if (isupper(original[i])) { + result += tolower(original[i]); + } else { + result += original[i]; + } + } + + CYG_REPORT_RETURN(); + return result; +} + +//}}} diff --git a/tools/src/libcdl/component.cxx b/tools/src/libcdl/component.cxx new file mode 100644 index 00000000..180fe7ff --- /dev/null +++ b/tools/src/libcdl/component.cxx @@ -0,0 +1,502 @@ +//{{{ Banner + +//============================================================================ +// +// component.cxx +// +// Implementation of the CdlComponent class +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1999/03/01 +// Version: 0.02 +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ #include's + +// ---------------------------------------------------------------------------- +#include "cdlconfig.h" + +// Get the infrastructure types, assertions, tracing and similar +// facilities. +#include +#include + +// defines everything implemented in this module. +// It implicitly supplies , and because +// the class definitions rely on these headers. +#include + +//}}} + +//{{{ Statics + +// ---------------------------------------------------------------------------- +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlComponentBody); + +//}}} +//{{{ Constructor + +// ---------------------------------------------------------------------------- +CdlComponentBody::CdlComponentBody(std::string name_arg) + : CdlNodeBody(name_arg), + CdlContainerBody(), + CdlUserVisibleBody(), + CdlValuableBody(), + CdlParentableBody(), + CdlBuildableBody(), + CdlDefinableBody() +{ + CYG_REPORT_FUNCNAME("CdlComponentBody:: constructor"); + CYG_REPORT_FUNCARG1XV(this); + + cdlcomponentbody_cookie = CdlComponentBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Destructor + +// ---------------------------------------------------------------------------- + +CdlComponentBody::~CdlComponentBody() +{ + CYG_REPORT_FUNCNAME("CdlComponentBody:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlcomponentbody_cookie = CdlComponentBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ parse_component() + +// ---------------------------------------------------------------------------- +// Parsing a component definition. This routine gets invoked directly from the +// Tcl interpreter. + +int +CdlComponentBody::parse_component(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlComponentBody::parse_component", "result %d"); + CYG_REPORT_FUNCARG1("argc %d", argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string diag_argv0 = CdlParse::get_tcl_cmd_name(argv[0]); + + CdlLoadable loadable = interp->get_loadable(); + CdlPackage package = dynamic_cast(loadable); + CdlContainer parent = interp->get_container(); + CdlToplevel toplevel = interp->get_toplevel(); + CYG_ASSERT_CLASSC(loadable); // There should always be a loadable during parsing + CYG_ASSERT_CLASSC(package); // And packages are the only loadable for software CDL. + CYG_ASSERT_CLASSC(parent); + CYG_ASSERT_CLASSC(toplevel); + + // The new component should be created and added to the package + // early on. If there is a parsing error it will get cleaned up + // automatically as a consequence of the package destructor. + // However it is necessary to validate the name first. Errors + // should be reported via CdlParse::report_error(), + // which may result in an exception. + CdlComponent new_component = 0; + bool ok = true; + int result = TCL_OK; + try { + + // Currently there are no options. This may change in future. + if (3 != argc) { + CdlParse::report_error(interp, "", + std::string("Incorrect number of arguments to `") + diag_argv0 + + "'\nExpecting name and properties list."); + ok = false; + goto done; + } + if (!Tcl_CommandComplete(CDL_TCL_CONST_CAST(char*, argv[2]))) { + CdlParse::report_error(interp, "", + std::string("Invalid property list for cdl_component `") + argv[1] + "'."); + ok = false; + goto done; + } + + if (0 != toplevel->lookup(argv[1])) { + CdlParse::report_error(interp, "", + std::string("Component `") + argv[1] + + "' cannot be loaded.\nThe name is already in use."); + ok = false; + } else { + new_component = new CdlComponentBody(argv[1]); + toplevel->add_node(package, parent, new_component); + } + + done: + if (!ok) { + // Just because this component cannot be created, that is no + // reason to abort the whole parsing process. + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; + } + } catch(std::bad_alloc e) { + interp->set_result(CdlParse::construct_diagnostic(interp, "internal error", "", "Out of memory")); + result = TCL_ERROR; + } catch(CdlParseException e) { + interp->set_result(e.get_message()); + result = TCL_ERROR; + } catch(...) { + interp->set_result(CdlParse::construct_diagnostic(interp, "internal error", "", "Unexpected C++ exception")); + result = TCL_ERROR; + } + if (TCL_OK != result) { + CYG_REPORT_RETVAL(result); + return result; + } + + // At this stage new_component has been created and added to the hierarchy. + // The main work now is to add the properties. + + // Push the component as the current node early on. This aids + // diagnostics. Also make it the new container. + CdlNode old_node = interp->push_node(new_component); + CdlContainer old_container = interp->push_container(new_component); + std::string old_context; + CYG_ASSERTC(parent == old_container); + + // Declare these outside the scope of the try statement, to allow + // goto calls for the error handling. + std::string tcl_result; + std::vector new_commands; + std::vector* old_commands = 0; + static CdlInterpreterCommandEntry commands[] = + { + CdlInterpreterCommandEntry("script", &CdlComponentBody::parse_script ), + CdlInterpreterCommandEntry("cdl_component", &CdlComponentBody::parse_component ), + CdlInterpreterCommandEntry("cdl_option", &CdlOptionBody::parse_option ), + CdlInterpreterCommandEntry("cdl_interface", &CdlInterfaceBody::parse_interface ), + CdlInterpreterCommandEntry("cdl_dialog", &CdlDialogBody::parse_dialog ), + CdlInterpreterCommandEntry("cdl_wizard", &CdlWizardBody::parse_wizard ), + CdlInterpreterCommandEntry("", 0 ) + }; + static CdlInterpreterCommandEntry script_commands[] = + { + CdlInterpreterCommandEntry("cdl_component", &CdlComponentBody::parse_component ), + CdlInterpreterCommandEntry("cdl_option", &CdlOptionBody::parse_option ), + CdlInterpreterCommandEntry("cdl_interface", &CdlInterfaceBody::parse_interface ), + CdlInterpreterCommandEntry("cdl_dialog", &CdlDialogBody::parse_dialog ), + CdlInterpreterCommandEntry("cdl_wizard", &CdlWizardBody::parse_wizard ), + CdlInterpreterCommandEntry("", 0 ), + }; + int i; + + // All parsing errors may result in an exception, under the control of + // application code. This exception must not pass through the Tcl interpreter. + try { + + for (i = 0; 0 != commands[i].command; i++) { + new_commands.push_back(commands[i]); + } + CdlBuildableBody::add_property_parsers(new_commands); + CdlDefinableBody::add_property_parsers(new_commands); + CdlParentableBody::add_property_parsers(new_commands); + CdlValuableBody::add_property_parsers(new_commands); + CdlUserVisibleBody::add_property_parsers(new_commands); + CdlNodeBody::add_property_parsers(new_commands); + + // Now evaluate the body. If an error occurs then typically + // this will be reported via CdlParse::report_error(), + // but any exceptions will have been intercepted and + // turned into a Tcl error. + old_commands = interp->push_commands(new_commands); + result = interp->eval(argv[2], tcl_result); + interp->pop_commands(old_commands); + + if (TCL_OK != result) { + // No point in taking any further action, just go with the flow + goto done2; + } + + // Even if there were errors, they were not fatal. There may + // now be a number of properties for this component, and some + // validation should take place. Start with the base classes. + new_component->CdlNodeBody::check_properties(interp); + new_component->CdlUserVisibleBody::check_properties(interp); + new_component->CdlValuableBody::check_properties(interp); + new_component->CdlParentableBody::check_properties(interp); + new_component->CdlBuildableBody::check_properties(interp); + new_component->CdlDefinableBody::check_properties(interp); + + // There should be at most one each of wizard and script. + if (new_component->count_properties(CdlPropertyId_Wizard) > 1) { + CdlParse::report_error(interp, "", "A component should have at most one `wizard' property."); + } + if (new_component->count_properties(CdlPropertyId_Script) > 1) { + CdlParse::report_error(interp, "", "A component should have at most one `script' property."); + } + + // If there is a script property, life gets more interesting. + if (new_component->has_property(CdlPropertyId_Script)) { + CdlProperty_String prop = dynamic_cast(new_component->get_property(CdlPropertyId_Script)); + CYG_PRECONDITION_CLASSC(prop); + std::string script_name = prop->get_string(); + + // Try to locate this script. + std::string script_filename = package->find_absolute_file(script_name, "cdl", false); + if ("" == script_filename) { + CdlParse::report_error(interp, "", "Unable to find script `" + script_name + "'."); + } else { + // The script exists, so we need to try and execute it. + // The current container is still set correctly, but we need + // to change the filename and install a different set + // of commands. + old_context = interp->push_context(script_filename); + new_commands.clear(); + for (i = 0; 0 != script_commands[i].command; i++) { + new_commands.push_back(script_commands[i]); + } + old_commands = interp->push_commands(new_commands); + result = interp->eval_file(script_filename, tcl_result); + interp->pop_commands(old_commands); + interp->pop_context(old_context); + } + } + + done2: + // Dummy command just to keep the compiler happy + old_context = ""; + + } catch (std::bad_alloc e) { + // Errors at this stage should be reported via Tcl, not via C++. + // However there is no point in continuing with the parsing operation, + // just give up. + interp->set_result(CdlParse::construct_diagnostic(interp, "internal error", "", "Out of memory")); + result = TCL_ERROR; + } catch (CdlParseException e) { + interp->set_result(e.get_message()); + result = TCL_ERROR; + } catch(...) { + interp->set_result(CdlParse::construct_diagnostic(interp, "internal error", "", "Unexpected C++ exception")); + result = TCL_ERROR; + } + + // Restore the interpreter to its prior state. + interp->pop_node(old_node); + interp->pop_container(old_container); + if (0 != old_commands) { + interp->pop_commands(old_commands); + } + + CYG_REPORT_RETVAL(result); + return result; +} + + +// ---------------------------------------------------------------------------- +// Syntax: script +int +CdlComponentBody::parse_script(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("parse_script", "result %d"); + + int result = CdlParse::parse_string_property(interp, argc, argv, CdlPropertyId_Script, 0, 0); + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ Propagation support + +// ---------------------------------------------------------------------------- +void +CdlComponentBody::update(CdlTransaction transaction, CdlUpdate update) +{ + CYG_REPORT_FUNCNAME("CdlComponent::update"); + + this->CdlValuableBody::update(transaction, update); + this->CdlContainerBody::update(transaction, update); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Persistence support + +// ---------------------------------------------------------------------------- +void +CdlComponentBody::initialize_savefile_support(CdlToplevel toplevel) +{ + CYG_REPORT_FUNCNAME("CdlComponent::initialize_savefile_support"); + + toplevel->add_savefile_command("cdl_component", 0, &savefile_component_command); + CdlValuableBody::initialize_savefile_support(toplevel, "cdl_component"); + + CYG_REPORT_RETURN(); +} + +void +CdlComponentBody::save(CdlInterpreter interp, Tcl_Channel chan, int indentation, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlComponent::save"); + CYG_REPORT_FUNCARG5XV(this, interp, chan, indentation, minimal); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + + if (!minimal || this->has_additional_savefile_information() || this->value_savefile_entry_needed()) { + // Start with the UserVisible data, which will result in a suitable set + // of comments before the package definition itself. + this->CdlUserVisibleBody::save(interp, chan, indentation, minimal); + + // Now output the line "cdl_component {" + // The name is guaranteed to be a valid C preprocessor symbol, so it + // is not going to need any quoting. + std::string data = std::string(indentation, ' ') + "cdl_component " + get_name() + " {\n"; + interp->write_data(chan, data); + + // Deal with the value + bool modifiable = !(CdlValueFlavor_None == this->get_flavor()) && + !this->has_property(CdlPropertyId_Calculated); + this->CdlValuableBody::save(interp, chan, indentation + 4, modifiable, minimal); + + // And with any unrecognised data + this->CdlNodeBody::save(interp, chan, indentation + 4, minimal); + + // Close the cdl_component body. A blank line is added here. + interp->write_data(chan, "};\n\n"); + } + + // Packages are containers, so dump the contents as well. + this->CdlContainerBody::save(interp, chan, indentation, minimal); + + CYG_REPORT_RETURN(); +} + +int +CdlComponentBody::savefile_component_command(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlComponent::savefile_component_command", "result %d"); + CYG_PRECONDITION_CLASSC(interp); + + int result = TCL_OK; + CdlToplevel toplevel = interp->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + CdlConfiguration config = dynamic_cast(toplevel); + CYG_ASSERT_CLASSC(config); + + std::vector subcommands; + std::vector* toplevel_commands = 0; + CdlNode old_node = 0; + + try { + + if (3 != argc) { + CdlParse::report_error(interp, "", "Invalid cdl_component command in savefile, expecting two arguments."); + } else { + + CdlNode current_node = config->lookup(argv[1]); + if (0 == current_node) { + // FIXME: save value in limbo + CdlParse::report_error(interp, "", + std::string("The savefile contains a cdl_component command for an unknown component `") + + argv[1] + "'"); + } else { + config->get_savefile_subcommands("cdl_component", subcommands); + toplevel_commands = interp->push_commands(subcommands); + old_node = interp->push_node(current_node); + + std::string tcl_result; + result = interp->eval(argv[2], tcl_result); + + interp->pop_commands(toplevel_commands); + toplevel_commands = 0; + interp->pop_node(old_node); + old_node = 0; + } + } + } catch(...) { + if (0 != old_node) { + interp->pop_node(old_node); + } + if (0 != toplevel_commands) { + interp->pop_commands(toplevel_commands); + } + throw; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ check_this() + +// ---------------------------------------------------------------------------- + +bool +CdlComponentBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlComponentBody_Magic != cdlcomponentbody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + + return CdlNodeBody::check_this(zeal) && + CdlContainerBody::check_this(zeal) && + CdlUserVisibleBody::check_this(zeal) && + CdlParentableBody::check_this(zeal) && + CdlValuableBody::check_this(zeal) && + CdlBuildableBody::check_this(zeal) && + CdlDefinableBody::check_this(zeal); +} + +//}}} +//{{{ Misc + +// ---------------------------------------------------------------------------- + +std::string +CdlComponentBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlComponent::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "component"; +} + +//}}} diff --git a/tools/src/libcdl/config.cxx b/tools/src/libcdl/config.cxx new file mode 100644 index 00000000..3aeb5c50 --- /dev/null +++ b/tools/src/libcdl/config.cxx @@ -0,0 +1,1864 @@ +//{{{ Banner + +//============================================================================ +// +// config.cxx +// +// Implementation of the CdlConfiguration class +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1999/03/06 +// Version: 0.02 +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ #include's + +// ---------------------------------------------------------------------------- +#include "cdlconfig.h" + +// Get the infrastructure types, assertions, tracing and similar +// facilities. +#include +#include + +// defines everything implemented in this module. +// It implicitly supplies , and because +// the class definitions rely on these headers. +#include + +//}}} + +//{{{ CdlConfiguration constants and statics + +// ---------------------------------------------------------------------------- +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlConfigurationBody); + +//}}} +//{{{ CdlConfiguration:: creation + +// ---------------------------------------------------------------------------- +// The toplevel class will take care of just about everything. + +CdlConfigurationBody::CdlConfigurationBody(std::string name, CdlPackagesDatabase db, CdlInterpreter interp) + : CdlNodeBody(name), + CdlToplevelBody(interp, db->get_component_repository()) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration:: constructor"); + CYG_REPORT_FUNCARG1XV(this); + + current_hardware = ""; + current_template = ""; + database = db; + save_file = ""; + description = ""; + + cdlconfigurationbody_cookie = CdlConfigurationBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// The exported interface + +CdlConfiguration +CdlConfigurationBody::make(std::string name, CdlPackagesDatabase db, CdlInterpreter interp) +{ + CYG_REPORT_FUNCNAMETYPE("CdlConfiguration::make", "result %p"); + CYG_REPORT_FUNCARG2XV(db, interp); + CYG_PRECONDITIONC("" != name); + CYG_PRECONDITION_CLASSC(db); + CYG_PRECONDITION_CLASSC(interp); + + CdlConfiguration result = new CdlConfigurationBody(name, db, interp); + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ CdlConfiguration:: destructor + +// ---------------------------------------------------------------------------- +CdlConfigurationBody::~CdlConfigurationBody() +{ + CYG_REPORT_FUNCNAME("CdlConfiguration:: default destructor"); + CYG_REPORT_FUNCARG1("this %p", this); + CYG_PRECONDITION_THISC(); + + // Removing all the packages has to happen here, and in the + // context of a transaction. The main reason is the extensive + // use of dynamic casts, after this destructor returns + // any dynamic casts for this configuration will fail. + // + // Arguably some of the unloads should happen by clearing + // the hardware and template (assuming those are currently + // set). In practice that would not really gain anything. + // + // Unloading the individual packages is a bit more expensive + // than it should be, since lots of care is taken to keep + // remaining packages consistent and then those get unloaded + // as well. However it is the safe approach. + CdlLocalTransaction transaction(this); + const std::vector& loadables = this->get_loadables(); + for (int i = loadables.size() - 1; i >= 0; i--) { + CdlPackage pkg = dynamic_cast(loadables[i]); + if (0 != pkg) { + this->unload_package(transaction.get(), pkg); + } + } + transaction.propagate(); + transaction.commit(); + + cdlconfigurationbody_cookie = CdlConfigurationBody_Invalid; + current_hardware = ""; + current_template = ""; + database = 0; + save_file = ""; + + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlConfiguration::check_this() + +// ---------------------------------------------------------------------------- +// There is very little information associated with a configuration. + +bool +CdlConfigurationBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlConfigurationBody_Magic != cdlconfigurationbody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + + switch(zeal) { + case cyg_system_test : + case cyg_extreme : + if ((0 == database) || !database->check_this(cyg_quick)) { + return false; + } + case cyg_thorough : + if (("" != current_hardware) && !database->is_known_target(current_hardware)) { + return false; + } + if (("" != current_template) && !database->is_known_template(current_template)) { + return false; + } + case cyg_quick : + if (0 == database) { + return false; + } + case cyg_trivial : + case cyg_none : + default : + break; + } + + return CdlNodeBody::check_this(zeal) && CdlContainerBody::check_this(zeal) && CdlToplevelBody::check_this(zeal); +} + +//}}} +//{{{ CdlConfiguration:: basic info + +// ---------------------------------------------------------------------------- +// Provide ready access to configuration-specific data. + +CdlPackagesDatabase +CdlConfigurationBody::get_database() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlConfiguration::get_database", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETVAL(database); + return database; +} + +std::string +CdlConfigurationBody::get_hardware() const +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::get_hardware"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return current_hardware; +} + +void +CdlConfigurationBody::set_hardware_name(std::string new_name) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::set_hardware_name"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + current_hardware = new_name; + + CYG_REPORT_RETURN(); +} + +std::string +CdlConfigurationBody::get_template() const +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::get_template"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return current_template; +} + +void +CdlConfigurationBody::set_template_name(std::string new_name) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::set_template_name"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + current_template = new_name; + + CYG_REPORT_RETURN(); +} + +std::string +CdlConfigurationBody::get_save_file() const +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::get_save_file"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return save_file; +} + +// ---------------------------------------------------------------------------- + +std::string +CdlConfigurationBody::get_class_name() const +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::get_class_name"); + CYG_PRECONDITION_THISC(); + CYG_REPORT_RETURN(); + return "CdlConfiguration"; +} + +//}}} +//{{{ Load and unload operations - wrappers + +// ---------------------------------------------------------------------------- +// These members are basically wrappers for the functions that do the +// real work. They do things like running the real functions inside +// a newly created transaction. + +void +CdlConfigurationBody::load_package(std::string name, std::string version, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::load_package"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlLocalTransaction transaction(this); + this->load_package(transaction.get(), name, version, error_fn, warn_fn, limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::unload_package(std::string name, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::unload_package"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlLocalTransaction transaction(this); + this->unload_package(transaction.get(), name, limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::unload_package(CdlPackage package, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::unload_package"); + CYG_REPORT_FUNCARG1XV(this); + + CdlLocalTransaction transaction(this); + this->unload_package(transaction.get(), package, limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::unload_package(CdlTransaction transaction, std::string name, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::unload_package"); + CYG_REPORT_FUNCARG3XV(this, transaction, limbo); + CYG_INVARIANT_THISC(CdlConfigurationBody); + CYG_PRECONDITION_CLASSC(transaction); + + CdlNode node = lookup(name); + CYG_ASSERTC(0 != node); + CdlPackage package = dynamic_cast(node); + CYG_ASSERTC(0 != package); + + this->unload_package(transaction, package, limbo); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::change_package_version(std::string name, std::string version, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::change_package_version"); + CYG_REPORT_FUNCARG1XV(this); + + CdlLocalTransaction transaction(this); + this->change_package_version(transaction.get(), name, version, error_fn, warn_fn, limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::change_package_version(CdlPackage package, std::string version, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::change_package_version"); + CYG_REPORT_FUNCARG1XV(this); + + CdlLocalTransaction transaction(this); + this->change_package_version(transaction.get(), package, version, error_fn, warn_fn, limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::change_package_version(CdlTransaction transaction, std::string name, std::string new_version, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::change_package_version"); + CYG_REPORT_FUNCARG2XV(this, transaction); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(transaction); + CYG_PRECONDITIONC("" != name); + + CdlPackage package = 0; + CdlNode node = this->lookup(name); + if (0 != node) { + package = dynamic_cast(node); + } + // For now it is illegal to change the version of package that has + // not been loaded yet + if (0 == package) { + throw CdlInputOutputException(std::string("Cannot change version of \"") + name + "\" , this package is not loaded"); + } + CYG_ASSERT_CLASSC(package); + + this->change_package_version(transaction, package, new_version, error_fn, warn_fn, limbo); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::add(std::string filename, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::add"); + CYG_REPORT_FUNCARG1XV(this); + + CdlLocalTransaction transaction(this); + this->add(transaction.get(), filename, error_fn, warn_fn); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::set_template(std::string name, std::string version, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::set_template"); + CYG_REPORT_FUNCARG1XV(this); + + CdlLocalTransaction transaction(this); + this->set_template(transaction.get(), name, version, error_fn, warn_fn, limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::set_template_file(std::string filename, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::set_template_file"); + CYG_REPORT_FUNCARG1XV(this); + + CdlLocalTransaction transaction(this); + this->set_template_file(transaction.get(), filename, error_fn, warn_fn, limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::set_template(CdlTransaction transaction, std::string template_name, std::string version, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::set_template"); + CYG_REPORT_FUNCARG2XV(this, transaction); + + // Some consistency checks before doing anything damaging + if (!this->database->is_known_template(template_name)) { + throw CdlInputOutputException("Unknown template " + template_name); + } + std::string template_filename = this->database->get_template_filename(template_name, version); + if ("" == template_filename) { + if ("" == version) { + throw CdlInputOutputException("There is no template file corresponding to " + template_name); + } else { + throw CdlInputOutputException("There is no temmplate file corresponding to version " + + version + " of " + template_name); + } + } + + // Now use set_template_file() to do the hard work. + this->set_template_file(transaction, template_filename, error_fn, warn_fn, limbo); + current_template = template_name; + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::unload_template(bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::unload_template"); + CYG_REPORT_FUNCARG1XV(this); + + CdlLocalTransaction transaction(this); + this->unload_template(transaction.get(), limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::set_hardware(std::string name, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::set_hardware"); + CYG_REPORT_FUNCARG1XV(this); + + CdlLocalTransaction transaction(this); + this->set_hardware(transaction.get(), name, error_fn, warn_fn, limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::unload_hardware(bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::unload_hardware"); + CYG_REPORT_FUNCARG1XV(this); + + CdlLocalTransaction transaction(this); + this->unload_hardware(transaction.get(), limbo); + transaction.body(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Load and unload - transaction support + +// ---------------------------------------------------------------------------- +// A number of commit/cancel auxiliary classes are needed to allow the +// load/unload code to integrate properly with the transaction code. + +class CdlConfiguration_CommitCancelLoad : + public CdlTransactionCommitCancelOp +{ + friend class CdlTest; + + public: + + CdlConfiguration_CommitCancelLoad(CdlPackage package_arg) + : CdlTransactionCommitCancelOp() + { + CYG_ASSERT_CLASSC(package_arg); + package = package_arg; + } + ~CdlConfiguration_CommitCancelLoad() + { + package = 0; + } + void commit(CdlTransaction transaction) + { + CYG_ASSERT_CLASSC(package); + CdlLoadableBody::transaction_commit_load(transaction, package); + package = 0; + } + void cancel(CdlTransaction transaction) + { + CYG_ASSERT_CLASSC(package); + CdlLoadableBody::transaction_cancel_load(transaction, package); + package = 0; + } + + protected: + + private: + CdlConfiguration_CommitCancelLoad() + { + } + CdlPackage package; +}; + +class CdlConfiguration_CommitCancelUnload : + public CdlTransactionCommitCancelOp +{ + friend class CdlTest; + + public: + CdlConfiguration_CommitCancelUnload(CdlPackage package_arg) + : CdlTransactionCommitCancelOp() + { + CYG_ASSERT_CLASSC(package_arg); + package = package_arg; + } + ~CdlConfiguration_CommitCancelUnload() + { + package = 0; + } + void commit(CdlTransaction transaction) + { + CYG_PRECONDITION_CLASSC(package); + CdlLoadableBody::transaction_commit_unload(transaction, package); + package = 0; + } + void cancel(CdlTransaction transaction) + { + CYG_PRECONDITION_CLASSC(package); + CdlLoadableBody::transaction_cancel_unload(transaction, package); + package = 0; + } + + protected: + + private: + CdlConfiguration_CommitCancelUnload() + { + } + CdlPackage package; +}; + +// These utility classes can be used to control the hardware and +// template names. If the transaction is cancelled the previous +// name gets re-installed +class CdlConfiguration_CommitCancelHardwareName : + public CdlTransactionCommitCancelOp +{ + friend class CdlTest; + + public: + CdlConfiguration_CommitCancelHardwareName(std::string old_name_arg) + : CdlTransactionCommitCancelOp() + { + old_name = old_name_arg; + } + ~CdlConfiguration_CommitCancelHardwareName() + { + old_name = ""; + } + void commit(CdlTransaction transaction) + { + // The new name is already installed, nothing more needs to happen. + CYG_UNUSED_PARAM(CdlTransaction, transaction); + } + void cancel(CdlTransaction transaction) + { + // Restore the old name + CdlToplevel toplevel = transaction->get_toplevel(); + CYG_ASSERTC(0 != toplevel); + CdlConfiguration configuration = dynamic_cast(toplevel); + CYG_ASSERT_CLASSC(configuration); + + configuration->set_hardware_name(old_name); + CYG_UNUSED_PARAM(CdlTransaction, transaction); + } + + protected: + + private: + CdlConfiguration_CommitCancelHardwareName() + { + } + std::string old_name; +}; + +class CdlConfiguration_CommitCancelTemplateName : + public CdlTransactionCommitCancelOp +{ + friend class CdlTest; + + public: + CdlConfiguration_CommitCancelTemplateName(std::string old_name_arg) + : CdlTransactionCommitCancelOp() + { + old_name = old_name_arg; + } + ~CdlConfiguration_CommitCancelTemplateName() + { + old_name = ""; + } + void commit(CdlTransaction transaction) + { + // The new name is already installed, nothing more needs to happen. + CYG_UNUSED_PARAM(CdlTransaction, transaction); + } + void cancel(CdlTransaction transaction) + { + // Restore the old name + CdlToplevel toplevel = transaction->get_toplevel(); + CYG_ASSERTC(0 != toplevel); + CdlConfiguration configuration = dynamic_cast(toplevel); + CYG_ASSERT_CLASSC(configuration); + + configuration->set_template_name(old_name); + CYG_UNUSED_PARAM(CdlTransaction, transaction); + } + + protected: + + private: + CdlConfiguration_CommitCancelTemplateName() + { + } + std::string old_name; +}; + +//}}} +//{{{ CdlConfiguration::load_package() + +// ---------------------------------------------------------------------------- +// Loading a package into the current level. This involves the following +// stages. +// +// 1) check that the specified package name and version is valid, by +// comparing it with the database. When the database was created there +// will have been checks to make sure that the initial CDL script was +// present, but more checks can be done here. +// +// 2) before allocating any resources, check that there is no name conflict +// for the package itself. +// +// 3) create the package object, and add it to the toplevel of the current +// configuration. It may get reparented later on. Part of the creation +// process is to allocate a new slave interpreter, which can be updated +// with various bits of information. +// +// 4) evaluate the toplevel script. Subsidiary component scripts will +// get evaluated as a side effect. The various nodes will be added +// to the hierarchy as they are created, but no property binding +// happens yet. +// +// Any failure up to this point should result in the entire package +// being removed from the hierarchy and then destroyed, thus leaving +// the configuration in its original state. +// +// 5) now property binding needs to take place. This can have lots +// of side effects, e.g. default values may get calculated, the +// hierarchy may change because of parent properties, etc. +// The work is done inside CdlLoadable::bind() which will undo +// everything on failure - although bad_alloc is the only +// failure that should occur. +// +// 6) load operations can get cancelled, so a suitable commit/cancel +// operation needs to allocated and added to the transaction. +// +// 7) if limbo is enabled, previous values should be extracted from +// limbo if at all possible. In addition the package's value can +// be set to its version. + +void +CdlConfigurationBody::load_package(CdlTransaction transaction, std::string name, std::string version, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::load_package"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(transaction); + CYG_PRECONDITIONC("" != name); + + // Locate the database entry. Also check the version (filling it in if necessary). + // Get hold of the package directory and the initial script. + if (!database->is_known_package(name)) { + throw CdlInputOutputException("Unknown package " + name); + } + const std::vector& versions = database->get_package_versions(name); + if ("" == version) { + version = *(versions.begin()); + } else { + if (std::find(versions.begin(), versions.end(), version) == versions.end()) { + throw CdlInputOutputException("Package " + name + " does not have an installed version `" + version + "'."); + } + } + std::string directory = database->get_package_directory(name); + std::string script = database->get_package_script(name); + CYG_ASSERTC(("" != directory) && ("" != script)); + + // Check that the directory actually exists. For this the configuration's own + // interpreter can be used. + CdlInterpreter interp = get_interpreter(); + CYG_ASSERT_CLASSC(interp); + + std::string tcl_cmd = "regsub -all -- {\\\\} [file join " + directory + " " + version + "] / result; return $result"; + std::string tcl_result; + if (TCL_OK != interp->eval(tcl_cmd, tcl_result)) { + throw CdlInputOutputException("Cannot load package `" + name + "', internal error constructing pathname."); + } + directory = tcl_result; + + tcl_cmd = "file isdirectory [file join \"" + database->get_component_repository() + "\" " + directory + "]"; + if ((TCL_OK != interp->eval(tcl_cmd, tcl_result)) || ("1" != tcl_result)) { + throw CdlInputOutputException("Cannot load package `" + name + "', there is no directory `" + directory + "'."); + } + + // Make sure that there is no name conflict. No resources have been allocated + // yet, so this is a good time. + CdlNode node = lookup(name); + if (0 != node) { + if (0 != dynamic_cast(node)) { + throw CdlInputOutputException("Package `" + name + "' is already loaded."); + } else { + + std::string msg = "Name clash for package `" + name + "',there is a `" + + node->get_class_name() + " " + name + "' already loaded"; + CdlLoadable owner_pkg = node->get_owner(); + if (0 != owner_pkg) { + msg += " in package " + owner_pkg->get_name(); + } + throw CdlInputOutputException(msg); + } + } + + // Now create the package object itself. + CdlPackage package = 0; + bool bound = false; + CdlConfiguration_CommitCancelLoad* load_op = 0; + + try { + package = new CdlPackageBody(name, this, directory); + + // The package should be added to the hierarchy immediately. + // All nodes will get added to the hierarchy as they are + // created, an operation that has to be undone during + // failure. + this->add_node(package, this, package); + + // Load the package data. The various nodes will all end up + // in a hierarchy below the package, but without any checks + // for name conflicts etc and ignoring any re-parenting. + CdlInterpreter interp = package->get_interpreter(); + CYG_ASSERT_CLASSC(interp); + + interp->add_command("unknown", &CdlParse::unknown_command); + CdlInterpreterBody::DiagSupport diag_support(interp, error_fn, warn_fn); + + // Next figure out the script name, and make sure that it exists. + std::string actual_script = package->find_absolute_file(script, "cdl"); + if ("" == actual_script) { + throw CdlInputOutputException("Package " + name + ", unable to find initial script " + script); + } + tcl_cmd = "file isfile \"" + actual_script + "\""; + if ((TCL_OK != interp->eval(tcl_cmd, tcl_result)) || ("1" != tcl_result)) { + throw CdlInputOutputException("Package " + name + ", " + actual_script + " is not a CDL script"); + } + + // The script is valid. Set up the interpreter appropriately. + CdlParse::clear_error_count(interp); + static CdlInterpreterCommandEntry commands[] = + { + CdlInterpreterCommandEntry("cdl_package", &CdlPackageBody::parse_package ), + CdlInterpreterCommandEntry("cdl_component", &CdlComponentBody::parse_component ), + CdlInterpreterCommandEntry("cdl_option", &CdlOptionBody::parse_option ), + CdlInterpreterCommandEntry("cdl_interface", &CdlInterfaceBody::parse_interface ), + CdlInterpreterCommandEntry("cdl_dialog", &CdlDialogBody::parse_dialog ), + CdlInterpreterCommandEntry("cdl_wizard", &CdlWizardBody::parse_wizard ), + CdlInterpreterCommandEntry("", 0 ) + }; + CdlInterpreterBody::CommandSupport interp_cmds(interp, commands); + CdlInterpreterBody::ContainerSupport interp_container(interp, package); + CdlInterpreterBody::ContextSupport interp_context(interp, actual_script); + + // The interpreter is now ready. + (void) interp->eval_file(actual_script); + + // Clean out the commands etc. This interpreter may get used again + // in future, and it should not be possible to define new options + // etc. in that invocation. + interp->remove_command("unknown"); + + // All the data has been read in without generating an + // exception. However there may have been errors reported via + // the parse_error_fn, and any errors at all should result + // in an exception. + int error_count = CdlParse::get_error_count(interp); + if (error_count > 0) { + std::string tmp; + Cdl::integer_to_string(error_count, tmp); + throw CdlParseException("Package " + name + ", " + tmp + " error" + + ((error_count > 1) ? "s" : "") + + " occurred while reading in the CDL data."); + } + + // All the data has been read in, implying that there are no + // fatal problems with the data. Now try to bind all + // references to and from this loadable. + package->bind(transaction); + bound = true; + + // Finally, create a suitable transaction commit/cancel object + // and add it to the transaction. + load_op = new CdlConfiguration_CommitCancelLoad(package); + transaction->add_commit_cancel_op(load_op); + + } catch (...) { + + // Something went wrong during the create or load. It is necessary + // to delete the package. Undo all the operations above, in + // reverse order. The add_commit_cancel_op() was the last step, + // so need not be undone here. + if (0 != load_op) { + delete load_op; + } + + if (0 != package) { + // Note: no attempt is made to recover from errors here + if (bound) { + package->unbind(transaction); + } + this->remove_loadable_from_toplevel(package); + delete package; + } + throw; + } + + // FIXME: implement limbo support + + // We also have a sensible value for the package as a whole. + // Use this value for both default and user - after all the + // user has selected the package. + package->enable_and_set_value(transaction, version, CdlValueSource_Default); + package->enable_and_set_value(transaction, version, CdlValueSource_User); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlConfiguration::unload_package() + +// ---------------------------------------------------------------------------- +// Unloading a package is very simple. If requested, save all current +// values to limbo: there is no point in saving default values, these +// will get recalculated from the default_value property anyway; +// inferred values should be saved, there is no guarantee that the exact +// same value will be calculated again, and if the inferred value is no +// longer correct then the inference engine can freely update it. +// +// Next, unbind the package and remove it from the hierarchy. These +// operations are reversible if the transaction gets cancelled. +// A suitable transaction commit/cancel object is created and +// added to the transaction. +void +CdlConfigurationBody::unload_package(CdlTransaction transaction, CdlPackage package, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::unload_package"); + CYG_REPORT_FUNCARG4XV(this, transaction, package, limbo); + CYG_INVARIANT_THISC(CdlConfigurationBody); + CYG_INVARIANT_CLASSC(CdlTransactionBody, transaction); + CYG_PRECONDITION_CLASSC(package); + + if (limbo) { + const std::vector& pkg_contents = package->get_owned(); + std::vector::const_iterator node_i; + + for (node_i = pkg_contents.begin(); node_i != pkg_contents.end(); node_i++) { + CdlValuable valuable = dynamic_cast(*node_i); + if (0 != valuable) { + if (valuable->has_source(CdlValueSource_Inferred) || + valuable->has_source(CdlValueSource_Wizard) || + valuable->has_source(CdlValueSource_User)) { + + set_limbo_value(valuable); + } + } + } + } + + bool unbound = false; + bool removed = false; + CdlConfiguration_CommitCancelUnload* unload_op = 0; + try { + + package->unbind(transaction); + unbound = true; + this->remove_loadable_from_toplevel(package); + removed = true; + unload_op = new CdlConfiguration_CommitCancelUnload(package); + transaction->add_commit_cancel_op(unload_op); + + } catch(...) { + if (0 != unload_op) { + delete unload_op; + } + if (removed) { + this->add_loadable_to_toplevel(package); + } + if (unbound) { + package->bind(transaction); + } + throw; + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlConfiguration::change_package_version() + +// ---------------------------------------------------------------------------- +// Changing a package version is just a case of unloading the old version +// and then loading in the new version. Because this all happens in the +// context of a transaction it is possible to undo the unload on +// failure, and the whole transaction can be cancelled at a higher level. + +void +CdlConfigurationBody::change_package_version(CdlTransaction transaction, CdlPackage package, std::string new_version, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::change_package_version"); + CYG_REPORT_FUNCARG3XV(this, transaction, package); + CYG_PRECONDITION_THISC(); + CYG_INVARIANT_CLASSC(CdlTransactionBody, transaction); + CYG_PRECONDITION_CLASSC(package); + // "" is valid for the version, it indicates the default + + // Since the package is already loaded it must be in the database, + // but it is possible that the desired version does not exist. + std::string name = package->get_name(); + const std::vector& pkg_versions = database->get_package_versions(name); + if ("" == new_version) { + new_version = *(pkg_versions.begin()); + } else if (std::find(pkg_versions.begin(), pkg_versions.end(), new_version) == pkg_versions.end()) { + throw CdlInputOutputException("Version " + new_version + " of package " + name + " is not installed."); + } + + bool unloaded = false; + try { + this->unload_package(transaction, package, limbo); + unloaded = true; + this->load_package(transaction, name, new_version, error_fn, warn_fn, limbo); + } catch(...) { + if (unloaded) { + // There should be a commit/cancel op for the unload package step. + // This can be undone. + CdlTransactionCommitCancelOp* unload_op = transaction->get_last_commit_cancel_op(); + CYG_ASSERTC(0 != unload_op); + CYG_ASSERTC(0 != dynamic_cast(unload_op)); + transaction->cancel_last_commit_cancel_op(); + CYG_UNUSED_PARAM(CdlTransactionCommitCancelOp*, unload_op); + } + throw; + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlConfiguration::set_hardware() etc. + +// ---------------------------------------------------------------------------- +// Setting the hardware involves unloading the old hardware, if any, and +// then loading in the new one. Obviously this should only happen if +// the new hardware name is valid. It would be possible to optimise for +// the case where the old and new hardware are the same, subject +// to dynamic database reload support. + +void +CdlConfigurationBody::set_hardware(CdlTransaction transaction, std::string target_name, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::set_hardware"); + CYG_REPORT_FUNCARG2XV(this, transaction); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(transaction); + + // Minimal consistency check before attempting anything complicated. + if (!database->is_known_target(target_name)) { + throw CdlInputOutputException("Unknown target " + target_name); + } + + CdlInterpreter interp = this->get_interpreter(); + CdlInterpreterBody::DiagSupport diag_support(interp, error_fn, warn_fn); + CdlInterpreterBody::ContextSupport context_support(interp, "Hardware selection"); + + CdlConfiguration_CommitCancelHardwareName* rename_op = new CdlConfiguration_CommitCancelHardwareName(current_hardware); + try { + transaction->add_commit_cancel_op(rename_op); + const std::vector& loadables = this->get_loadables(); + int i; + for (i = (int) loadables.size() - 1; i >= 0; i--) { + CdlPackage package = dynamic_cast(loadables[i]); + if ((0 != package) && package->belongs_to_hardware()) { + this->unload_package(transaction, package, limbo); + } + } + current_hardware = ""; + + if ("" != target_name) { + + const std::vector& packages = database->get_target_packages(target_name); + std::vector::const_iterator name_i; + for (name_i = packages.begin(); name_i != packages.end(); name_i++) { + // Target specifications may refer to packages that are not + // installed. This is useful in e.g. an anoncvs environment. + if (database->is_known_package(*name_i)) { + // It is possible for a hardware package to have been + // loaded separately, in which case there is no point in + // loading it again. + if (0 == this->lookup(*name_i)) { + this->load_package(transaction, *name_i, "", + error_fn, warn_fn, limbo); + CdlPackage package = dynamic_cast(this->lookup(*name_i)); + CYG_LOOP_INVARIANT_CLASSC(package); + package->loaded_for_hardware = true; + } + } else { + CdlParse::report_warning(interp, "", + std::string("The target specification lists a package `") + *name_i + + "' which is not present in the component repository."); + } + } + } + current_hardware = target_name; + + } catch(...) { + // Cancel all operations up to and including the rename_op + CdlTransactionCommitCancelOp* cancel_op = 0; + do { + cancel_op = transaction->get_last_commit_cancel_op(); + CYG_LOOP_INVARIANTC(0 != cancel_op); + transaction->cancel_last_commit_cancel_op(); + } while(cancel_op != rename_op); + throw; + } + + // There may have been enables/disables and value data for that target + // FIXME: any problems get ignored quietly. There should at least + // be some warnings. + if ("" != target_name) { + const std::vector& enables = database->get_target_enables(target_name); + const std::vector& disables = database->get_target_disables(target_name); + const std::vector >& set_values = database->get_target_set_values(target_name); + + if ((0 != enables.size()) || (0 != disables.size()) || (0 != set_values.size())) { + std::vector::const_iterator opt_i; + CdlNode node; + CdlValuable valuable; + CdlValueFlavor flavor; + + for (opt_i = enables.begin(); opt_i != enables.end(); opt_i++) { + valuable = 0; + node = this->lookup(*opt_i); + if (0 != node) { + valuable = dynamic_cast(node); + if (0 != valuable) { + } + } + if (0 != valuable) { + flavor = valuable->get_flavor(); + if ((CdlValueFlavor_Bool == flavor) || (CdlValueFlavor_BoolData == flavor)) { + valuable->enable(transaction, CdlValueSource_User); + } else { + CdlParse::report_warning(interp, std::string("target `") + target_name + "'", + std::string("The option `") + *opt_i + + "' is supposed to be enabled for this target.\n" + + "However the option does not have a bool or booldata flavors."); + } + } else { + CdlParse::report_warning(interp, std::string("target `") + target_name + "'", + std::string("The option `") + *opt_i + + "' is supposed to be enabled for this target.\n" + + "However this option is not in the current configuration."); + } + } + for (opt_i = disables.begin(); opt_i != disables.end(); opt_i++) { + valuable = 0; + node = this->lookup(*opt_i); + if (0 != node) { + valuable = dynamic_cast(node); + } + if (0 != valuable) { + flavor = valuable->get_flavor(); + if ((CdlValueFlavor_Bool == flavor) || (CdlValueFlavor_BoolData == flavor)) { + valuable->disable(transaction, CdlValueSource_User); + } else { + CdlParse::report_warning(interp, std::string("target `") + target_name + "'", + std::string("The option `") + *opt_i + + "' is supposed to be disabled for this target.\n" + + "However the option does not have a bool or booldata flavors."); + } + } else { + CdlParse::report_warning(interp, std::string("target `") + target_name + "'", + std::string("The option `") + *opt_i + + "' is supposed to be disabled for this target.\n" + + "However this option is not in the current configuration."); + } + } + std::vector >::const_iterator value_i; + for (value_i = set_values.begin(); value_i != set_values.end(); value_i++) { + valuable = 0; + node = this->lookup(value_i->first); + if (0 != node) { + valuable = dynamic_cast(node); + } + if (0 != valuable) { + flavor = valuable->get_flavor(); + if ((CdlValueFlavor_BoolData == flavor) || (CdlValueFlavor_Data == flavor)) { + valuable->set_value(transaction, value_i->second, CdlValueSource_User); + } else { + CdlParse::report_warning(interp, std::string("target `") + target_name + "'", + std::string("The option `") + *opt_i + + "' is supposed to be given the value `" + value_i->second + + "' for this target.\n" + + "However the option does not have a data or booldata flavor."); + } + } else { + CdlParse::report_warning(interp, std::string("target `") + target_name + "'", + std::string("The option `") + *opt_i + + "' is supposed to be given the value `" + value_i->second + + "' for this target.\n" + + "However this option is not in the current configuration."); + } + } + } + } + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::unload_hardware(CdlTransaction transaction, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::unload_hardware"); + CYG_REPORT_FUNCARG3XV(this, transaction, limbo); + CYG_PRECONDITION_THISC(); + + CdlConfiguration_CommitCancelHardwareName* rename_op = new CdlConfiguration_CommitCancelHardwareName(current_hardware); + try { + transaction->add_commit_cancel_op(rename_op); + } catch(...) { + delete rename_op; + throw; + } + current_hardware = ""; + + try { + const std::vector& loadables = this->get_loadables(); + for (int i = (int) loadables.size() - 1; i >= 0; i--) { + CdlPackage package = dynamic_cast(loadables[i]); + if ((0 != package) && package->belongs_to_hardware()) { + this->unload_package(transaction, package, limbo); + } + } + } catch(...) { + CdlTransactionCommitCancelOp* cancel_op = 0; + do { + cancel_op = transaction->get_last_commit_cancel_op(); + CYG_LOOP_INVARIANTC(0 != cancel_op); + transaction->cancel_last_commit_cancel_op(); + } while(cancel_op != rename_op); + throw; + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlConfiguration::set_template() etc + +// ---------------------------------------------------------------------------- +void +CdlConfigurationBody::set_template_file(CdlTransaction transaction, std::string filename, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::set_template_file"); + CYG_REPORT_FUNCARG3XV(this, transaction, limbo); + CYG_PRECONDITION_THISC(); + + int i; + CdlConfiguration_CommitCancelTemplateName* rename_op = new CdlConfiguration_CommitCancelTemplateName(current_template); + + // The hard work is done by add(), which loads in a partial savefile. + // This can have undesirable side effects: changing the name, + // description, or hardware settings. It must be possible to undo + // these. + std::string saved_name = this->get_name(); + std::string saved_description = this->get_description(); + std::string saved_hardware = this->get_hardware(); + + // New packages will end up at the end of the loadables vector. + // Each new package needs to be registered as a template one. + // NOTE: this may break if we start doing more interesting things + // with savefiles. + const std::vector& loadables = this->get_loadables(); + unsigned int load_i = loadables.size(); + + try { + transaction->add_commit_cancel_op(rename_op); + const std::vector& loadables = this->get_loadables(); + for (i = (int) loadables.size() - 1; i >= 0; i--) { + CdlPackage package = dynamic_cast(loadables[i]); + if ((0 != package) && package->belongs_to_template()) { + this->unload_package(transaction, package, limbo); + } + } + current_template = ""; + + this->add(transaction, filename, error_fn, warn_fn); + this->current_template = filename; + this->set_name(saved_name); + this->description = saved_description; + this->current_hardware = saved_hardware; + + for ( ; load_i < loadables.size(); load_i++) { + CdlPackage pkg = dynamic_cast(loadables[load_i]); + CYG_ASSERT_CLASSC(pkg); + pkg->loaded_for_template = true; + } + + } catch(...) { + + this->set_name(saved_name); + this->description = saved_description; + this->current_hardware = saved_hardware; + + // Cancel all operations up to and including the rename_op + CdlTransactionCommitCancelOp* cancel_op = 0; + do { + cancel_op = transaction->get_last_commit_cancel_op(); + CYG_LOOP_INVARIANTC(0 != cancel_op); + transaction->cancel_last_commit_cancel_op(); + } while(cancel_op != rename_op); + throw; + } + + + CYG_REPORT_RETURN(); +} + +void +CdlConfigurationBody::unload_template(CdlTransaction transaction, bool limbo) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::unload_template"); + CYG_REPORT_FUNCARG2XV(this, transaction); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(transaction); + + CdlConfiguration_CommitCancelTemplateName* rename_op = new CdlConfiguration_CommitCancelTemplateName(current_template); + try { + transaction->add_commit_cancel_op(rename_op); + } catch(...) { + delete rename_op; + throw; + } + current_template = ""; + + try { + const std::vector& loadables = this->get_loadables(); + for (int i = (int) loadables.size() - 1; i >= 0; i--) { + CdlPackage package = dynamic_cast(loadables[i]); + if ((0 != package) && package->belongs_to_template()) { + this->unload_package(transaction, package, limbo); + } + } + } catch(...) { + CdlTransactionCommitCancelOp* cancel_op = 0; + do { + cancel_op = transaction->get_last_commit_cancel_op(); + CYG_LOOP_INVARIANTC(0 != cancel_op); + transaction->cancel_last_commit_cancel_op(); + } while(cancel_op != rename_op); + throw; + } + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Persistence support + +//{{{ initialize_savefile_support() + +// ---------------------------------------------------------------------------- +// Initialization. The purpose of this code is to determine all the +// commands that can end up in a particular savefile. This includes +// the cdl_configuration command, commands relevant to packages, +// options, and components, the generic library commands, and +// application-specific commands. +// +// This is a virtual function, it may get invoked indirectly from +// e.g. CdlToplevel::add_savefile_command(). + +void +CdlConfigurationBody::initialize_savefile_support() +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::initialize_savefile_support"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + // Start with the generic stuff such as cdl_savefile_version and + // cdl_command. + this->CdlToplevelBody::initialize_savefile_support(); + + // Now add in the cdl_configuration command and its subcommands. + this->add_savefile_command("cdl_configuration", 0, &savefile_configuration_command); + this->add_savefile_subcommand("cdl_configuration", "description", 0, &savefile_description_command); + this->add_savefile_subcommand("cdl_configuration", "hardware", 0, &savefile_hardware_command); + this->add_savefile_subcommand("cdl_configuration", "template", 0, &savefile_template_command); + this->add_savefile_subcommand("cdl_configuration", "package", 0, &savefile_package_command); + + CdlPackageBody::initialize_savefile_support(this); + CdlComponentBody::initialize_savefile_support(this); + CdlOptionBody::initialize_savefile_support(this); + CdlInterfaceBody::initialize_savefile_support(this); +} + +//}}} +//{{{ CdlConfiguration::save() - internal + +// ---------------------------------------------------------------------------- +// The exported interface is CdlConfiguration::save(). This takes a single +// argument, a filename. It opens the file, and then invokes various +// functions that output the relevants bits of the file. +// +// This member function is responsible for outputting a cdl_configuration +// command. + +void +CdlConfigurationBody::save(CdlInterpreter interp, Tcl_Channel chan, int indentation, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::save"); + CYG_REPORT_FUNCARG5XV(this, interp, chan, indentation, minimal); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(interp); + CYG_PRECONDITIONC(0 == indentation); + + std::string text = ""; + if (!minimal) { + text = +"# This section defines the toplevel configuration object. The only\n\ +# values that can be changed are the name of the configuration and\n\ +# the description field. It is not possible to modify the target,\n\ +# the template or the set of packages simply by editing the lines\n\ +# below because these changes have wide-ranging effects. Instead\n\ +# the appropriate tools should be used to make such modifications.\n\ +\n"; + } + + text += "cdl_configuration " + CdlInterpreterBody::quote(this->get_name()) + " {\n"; + + std::string config_data = this->get_description(); + if (!minimal || ("" != text)) { + text += " description " + CdlInterpreterBody::quote(config_data) + " ;\n"; + } + + // Repeat the warning. + if (!minimal) { + text += "\n # These fields should not be modified.\n"; + } + config_data = this->get_hardware(); + if ("" != config_data) { + text += " hardware " + CdlInterpreterBody::quote(config_data) + " ;\n"; + } + config_data = this->get_template(); + if ("" != config_data) { + text += " template " + CdlInterpreterBody::quote(config_data) + " ;\n"; + } + std::vector::const_iterator load_i; + const std::vector& packages = get_loadables(); + for (load_i = packages.begin(); load_i != packages.end(); load_i++) { + CdlPackage pkg = dynamic_cast(*load_i); + CYG_ASSERT_CLASSC(pkg); + text += " package "; + if (pkg->belongs_to_template()) { + text += "-template "; + } + if (pkg->belongs_to_hardware()) { + text += "-hardware "; + } + text += CdlInterpreterBody::quote(pkg->get_name()) + " " + CdlInterpreterBody::quote(pkg->get_value()) + " ;\n"; + } + + interp->write_data(chan, text); + + // If the package was loaded from a file then there may be additional + // data associated with the configuration that is not currently + // recognised. This call preserves that data. + this->CdlNodeBody::save(interp, chan, indentation + 4, minimal); + + interp->write_data(chan, "};\n\n"); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ CdlConfiguration::save() - exported interface + +// ---------------------------------------------------------------------------- +// This is the exported interface for saving a configuration. The specified +// file is opened via the appropriate Tcl library routines, and then the +// relevant member functions are invoked to output the actual configuration +// date. + +void +CdlConfigurationBody::save(std::string filename, bool minimal) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::save"); + CYG_REPORT_FUNCARG2XV(this, minimal); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC("" != filename); + + // Make sure that the savefile support is properly initialized. + // This happens during the first save or load operation, or when + // the application starts to register its own savefile extensions. + if (!CdlToplevelBody::savefile_support_initialized()) { + this->initialize_savefile_support(); + } + + // A Tcl interpreter is needed for the call to OpenFileChannel(), + // and will also be passed to the individual save functions. + CdlInterpreter interp = this->get_interpreter(); + CYG_ASSERT_CLASSC(interp); + + // Do not worry about forward vs. backward slashes, since the filename + // is not manipulated in any way. Instead just pass it to Tcl. + Tcl_Channel chan = Tcl_OpenFileChannel(interp->get_tcl_interpreter(), const_cast(filename.c_str()), "w", 0666); + if (0 == chan) { + throw CdlInputOutputException("Unable to open file " + filename + "\n" + interp->get_result()); + } + + // The channel may end up being registered in various different + // interpreters, so Tcl_Close() is not the right way to close down + // the channel. Instead Tcl_RegisterChannel() should be used here + // to provide reference counting semantics. + Tcl_RegisterChannel(0, chan); + + // A try/catch body is needed here to make sure that the file gets + // properly cleaned up. + std::string tmp; + try { + + if (!minimal) { + interp->write_data(chan, "# eCos saved configuration\n\n"); + } + + CdlToplevelBody::save_separator(interp, chan, "commands", minimal); + this->CdlToplevelBody::save_command_details(interp, chan, 0, minimal); + CdlToplevelBody::save_separator(interp, chan, "toplevel", minimal); + this->save(interp, chan, 0, minimal); + CdlToplevelBody::save_separator(interp, chan, "conflicts", minimal); + this->CdlToplevelBody::save_conflicts(interp, chan, 0, minimal); + CdlToplevelBody::save_separator(interp, chan, "contents", minimal); + this->CdlContainerBody::save(interp, chan, 0, minimal); + this->save_unsupported_commands(interp, chan, 0, minimal); + + } catch(...) { + Tcl_UnregisterChannel(0, chan); + // NOTE: deleting the file is necessary, it is a bad idea to + // end up with incomplete save files. It would be even better + // to write to a temporary file and only overwrite the old + // savefile on success. + // + // Tcl does not provide direct access to the file delete + // facility, so it is necessary to evaluate a script. This + // introduces quoting and security problems, since the + // filename might contain spaces, square brackets, braces... + // To avoid these problems a variable is used. + interp->set_variable("__cdlconfig_filename", filename); + interp->eval("file delete $__cdlconfig_filename", tmp); + interp->unset_variable("__cdlconfig_filename"); + + throw; + } + + // This call will perform the appropriate close. + Tcl_UnregisterChannel(0, chan); +} + +//}}} +//{{{ CdlConfiguration::load() and add() + +// ---------------------------------------------------------------------------- +// Most of the work is done in add(). load() simply creates a new configuration +// and then invokes add(). +CdlConfiguration +CdlConfigurationBody::load(std::string filename, CdlPackagesDatabase db, CdlInterpreter interp, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn) +{ + CYG_REPORT_FUNCNAMETYPE("CdlConfiguration::load", "result %p"); + CYG_REPORT_FUNCARG4XV(db, interp, error_fn, warn_fn); + CYG_PRECONDITION_CLASSC(db); + CYG_PRECONDITION_CLASSC(interp); + + CdlConfiguration result = CdlConfigurationBody::make("eCos", db, interp); + if (0 == result) { + CYG_REPORT_RETVAL(result); + return result; + } + + try { + result->add(filename, error_fn, warn_fn); + result->save_file = filename; + } catch(...) { + delete result; + throw; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +void +CdlConfigurationBody::add(CdlTransaction transaction, std::string filename, + CdlDiagnosticFnPtr error_fn, CdlDiagnosticFnPtr warn_fn) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::add"); + CYG_REPORT_FUNCARG3XV(this, error_fn, warn_fn); + CYG_PRECONDITION_THISC(); + + // Initialize the savefile support, so that it is known what + // commands can occur in a savefile. + if (!CdlToplevelBody::savefile_support_initialized()) { + this->initialize_savefile_support(); + } + + // The interpreter should not have any left-over junk. + CdlInterpreter interp = this->get_interpreter(); + CYG_PRECONDITION_CLASSC(interp); + CYG_ASSERTC(0 == interp->get_loadable()); + CYG_ASSERTC(0 == interp->get_container()); + CYG_ASSERTC(0 == interp->get_node()); + CYG_ASSERTC(0 == interp->get_transaction()); + + // Keep track of enough information to undo all the changes. + CdlParse::clear_error_count(interp); + CdlInterpreterBody::DiagSupport diag_support(interp, error_fn, warn_fn); + CdlInterpreterBody::ContextSupport context_support(interp, filename); + + try { + interp->set_transaction(transaction); + + std::vector commands; + this->get_savefile_commands(commands); + CdlInterpreterBody::CommandSupport interp_cmds(interp, commands); + + interp->eval_file(filename); + + // All the data has been read in without generating an + // exception. However there may have been errors reported via + // the error_fn handling, and any errors at all should result + // in an exception. + int error_count = CdlParse::get_error_count(interp); + if (error_count > 0) { + std::string tmp; + Cdl::integer_to_string(error_count, tmp); + throw CdlInputOutputException("Invalid savefile \"" + filename + "\".\n" + + tmp + " error" + ((error_count > 1) ? "s" : "") + + " occurred while reading in the savefile data."); + } + + } catch(...) { + interp->set_transaction(0); + throw; + } + + interp->set_transaction(0); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ savefile commands + +// ---------------------------------------------------------------------------- +// A cdl_configuration command does not actually do very much. It acts as +// a container for subcommands, and it can be used to change the name. +// +// The command could also check that the current configuration is empty. +// This is not done, to allow multiple savefiles to be loaded into +// a single configuration in future. +int +CdlConfigurationBody::savefile_configuration_command(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlConfiguration::savefile_configuration_command", "result %d"); + CYG_PRECONDITION_CLASSC(interp); + + int result = TCL_OK; + CdlToplevel toplevel = interp->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + CdlConfiguration config = dynamic_cast(toplevel); + CYG_ASSERT_CLASSC(config); + + std::vector subcommands; + std::vector* toplevel_commands = 0; + + try { + std::vector > options; + int data_index = CdlParse::parse_options(interp, "cdl_configuration command", 0, argc, argv, 1, options); + + // A broken cdl_configuration command is pretty fatal, chances are + // that the entire load is going to fail. + if (data_index != (argc - 2)) { + CdlParse::report_error(interp, "", "Invalid cdl_configuration command in savefile, expecting two arguments."); + } else { + config->set_name(argv[1]); + config->get_savefile_subcommands("cdl_configuration", subcommands); + toplevel_commands = interp->push_commands(subcommands); + + std::string tcl_result; + result = interp->eval(argv[2], tcl_result); + + interp->pop_commands(toplevel_commands); + toplevel_commands = 0; + } + + } catch(...) { + if (0 != toplevel_commands) { + interp->pop_commands(toplevel_commands); + } + throw; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +// ---------------------------------------------------------------------------- +int +CdlConfigurationBody::savefile_description_command(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::savefile_description_command"); + CYG_PRECONDITION_CLASSC(interp); + + CdlToplevel toplevel = interp->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + CdlConfiguration config = dynamic_cast(toplevel); + CYG_ASSERT_CLASSC(config); + + std::vector > options; + int data_index = CdlParse::parse_options(interp, "cdl_configuration/description command", 0, argc, argv, 1, options); + + if (data_index != (argc - 1)) { + CdlParse::report_warning(interp, "", + "Ignoring invalid configuration description command, expecting a single argument."); + } else { + config->description = argv[1]; + } + return TCL_OK; +} + +// ---------------------------------------------------------------------------- +int +CdlConfigurationBody::savefile_hardware_command(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::savefile_hardware_command"); + CYG_PRECONDITION_CLASSC(interp); + + CdlToplevel toplevel = interp->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + CdlConfiguration config = dynamic_cast(toplevel); + CYG_ASSERT_CLASSC(config); + + std::vector > options; + int data_index = CdlParse::parse_options(interp, "cdl_configuration/hardware command", 0, argc, argv, 1, options); + + if (data_index != (argc - 1)) { + CdlParse::report_warning(interp, "", "Ignoring invalid configuration hardware command, expecting a single argument."); + } else { + config->current_hardware = argv[1]; + } + + return TCL_OK; +} + +// ---------------------------------------------------------------------------- +int +CdlConfigurationBody::savefile_template_command(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::savefile_template_command"); + CYG_PRECONDITION_CLASSC(interp); + + CdlToplevel toplevel = interp->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + CdlConfiguration config = dynamic_cast(toplevel); + CYG_ASSERT_CLASSC(config); + + std::vector > options; + int data_index = CdlParse::parse_options(interp, "cdl_configuration/template command", 0, argc, argv, 1, options); + + if (data_index != (argc - 1)) { + CdlParse::report_warning(interp, "", "Ignoring invalid configuration template command, expecting a single argument."); + } else { + config->current_template = argv[1]; + } + + return TCL_OK; +} + +// ---------------------------------------------------------------------------- +int +CdlConfigurationBody::savefile_package_command(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAME("CdlConfiguration::savefile_package_command"); + CYG_PRECONDITION_CLASSC(interp); + + CdlToplevel toplevel = interp->get_toplevel(); + CYG_ASSERT_CLASSC(toplevel); + CdlConfiguration config = dynamic_cast(toplevel); + CYG_ASSERT_CLASSC(config); + CdlPackagesDatabase db = config->get_database(); + CYG_ASSERT_CLASSC(db); + + std::string pkgname; + std::string pkgversion; + CdlPackage pkg = 0; + + std::vector > options; + static char* optlist[] = { + "template:f", + "hardware:f", + 0 + }; + int data_index = CdlParse::parse_options(interp, "cdl_configuration/package command", optlist, argc, argv, 1, options); + + if (data_index == (argc - 1)) { + CdlParse::report_warning(interp, "", std::string("Missing version information for package `") + + argv[argc - 1] + "'."); + pkgname = argv[argc - 1]; + pkgversion = ""; + } else if (data_index == (argc - 2)) { + pkgname = argv[argc - 2]; + pkgversion = argv[argc - 1]; + } else { + // If we cannot load all the packages then much of the + // savefile is likely to be problematical. + CdlParse::report_error(interp, "", "Invalid cdl_configuration/package command, expecting name and version"); + CYG_REPORT_RETURN(); + return TCL_OK; + } + + if (0 != config->lookup(pkgname)) { + // If the package was already loaded, check the version string. If the versions + // are identical then we do not need to worry any further. Otherwise a mismatch + // warning is appropriate. + CdlNode node = config->lookup(pkgname); + CYG_ASSERT_CLASSC(node); + pkg = dynamic_cast(node); + if (0 == pkg) { + // The name is in use, but it is not a package + CdlParse::report_error(interp, "", + std::string("Unable to load package `") + pkgname + "', the name is already in use."); + } else if (pkgversion != pkg->get_value()) { + CdlParse::report_warning(interp, "", + std::string("Cannot load version `") + pkgversion + "' of package `" + + pkgname + "', version `" + pkg->get_value() + "' is already loaded."); + } + } else if (!db->is_known_package(pkgname)) { + CdlParse::report_error(interp, "", + std::string("Attempt to load an unknown package `") + pkgname + "'."); + } else { + if ("" != pkgversion) { + const std::vector& versions = db->get_package_versions(pkgname); + if (versions.end() == std::find(versions.begin(), versions.end(), pkgversion)) { + CdlParse::report_warning(interp, "", + std::string("The savefile specifies version `") + pkgversion + + "' for package `" + pkgname + "'\nThis version is not available.\n" + + "Using the most recent version instead."); + pkgversion = ""; + } + } + CdlDiagnosticFnPtr error_fn = interp->get_error_fn_ptr(); + CdlDiagnosticFnPtr warn_fn = interp->get_warning_fn_ptr(); + CdlTransaction transaction = interp->get_transaction(); + config->load_package(transaction, pkgname, pkgversion, error_fn, warn_fn, false); + CdlNode pkg_node = config->lookup(pkgname); + CYG_ASSERTC(0 != pkg_node); + pkg = dynamic_cast(pkg_node); + CYG_ASSERT_CLASSC(pkg); + } + + if ((0 != pkg) && (0 != options.size())) { + std::vector >::const_iterator opt_i; + for (opt_i = options.begin(); opt_i != options.end(); opt_i++) { + if (opt_i->first == "template") { + pkg->loaded_for_template = true; + } else if (opt_i->first == "hardware") { + pkg->loaded_for_hardware = true; + } + } + } + + return TCL_OK; +} + +//}}} + +//}}} + diff --git a/tools/src/libcdl/config.h.in b/tools/src/libcdl/config.h.in new file mode 100755 index 00000000..7fbef031 --- /dev/null +++ b/tools/src/libcdl/config.h.in @@ -0,0 +1,21 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +#undef PACKAGE +#undef VERSION +#undef CYGNUM_LIBCDL_VERSION + +#undef CYGDBG_USE_ASSERTS +#undef CYGDBG_INFRA_DEBUG_PRECONDITIONS +#undef CYGDBG_INFRA_DEBUG_POSTCONDITIONS +#undef CYGDBG_INFRA_DEBUG_INVARIANTS +#undef CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS + +#undef CYGDBG_USE_TRACING +#undef CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS + +/* Name of package */ +#undef PACKAGE + +/* Version number of package */ +#undef VERSION + diff --git a/tools/src/libcdl/configure b/tools/src/libcdl/configure new file mode 100755 index 00000000..7cb5b4e9 --- /dev/null +++ b/tools/src/libcdl/configure @@ -0,0 +1,2429 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer" +ac_help="$ac_help + --enable-debug do a debug rather than a release build" +ac_help="$ac_help + --enable-ansi do an ANSI rather than a unicode build" +ac_help="$ac_help + --disable-asserts disable all assertions" +ac_help="$ac_help + --disable-preconditions disable a subset of the assertions" +ac_help="$ac_help + --disable-postconditions disable a subset of the assertions" +ac_help="$ac_help + --disable-invariants disable a subset of the assertions" +ac_help="$ac_help + --disable-loopinvariants disable a subset of the assertions" +ac_help="$ac_help + --disable-tracing disable tracing" +ac_help="$ac_help + --disable-fntracing disable function entry/exit tracing" +ac_help="$ac_help + --with-infra-header= location of eCos infrastructure headers" +ac_help="$ac_help + --with-infra-lib= location of eCos infrastructure library" +ac_help="$ac_help + --with-infra= location of eCos infrastructure installation" +ac_help="$ac_help + --with-tcl= location of Tcl header and libraries" +ac_help="$ac_help + --with-tcl-version= version of Tcl to be used" +ac_help="$ac_help + --with-tcl-header= location of Tcl header" +ac_help="$ac_help + --with-tcl-lib= location of Tcl libraries" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=cdlcore.hxx + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + +ac_aux_dir= +for ac_dir in ../../acsupport $srcdir/../../acsupport; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in ../../acsupport $srcdir/../../acsupport" 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + + + + echo $ac_n "checking that a separate build tree is being used""... $ac_c" 1>&6 +echo "configure:583: checking that a separate build tree is being used" >&5 + ecos_cwd=`/bin/pwd` + if test "${srcdir}" = "." ; then + srcdir=${ecos_cwd} + fi + if test "${ecos_cwd}" = "${srcdir}" ; then + echo "$ac_t""no" 1>&6 + { echo "configure: error: This configure script should not be run inside the source tree. Instead please use a separate build tree" 1>&2; exit 1; } + else + echo "$ac_t""yes" 1>&6 + fi + + +# Make sure we can run config.sub. +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:602: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:634: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:687: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:744: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=libcdl + +VERSION=0.2 + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi +cat >> confdefs.h <> confdefs.h <&6 +echo "configure:790: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:803: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:816: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:829: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:842: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + + + + + cat >> confdefs.h <&6 +echo "configure:864: checking whether to enable maintainer-specific portions of Makefiles" >&5 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + MAINT=$MAINTAINER_MODE_TRUE + + + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:890: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:920: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:971: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1003: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 1014 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:1019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1045: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1050: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1078: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + +for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1114: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CXX="$ac_prog" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CXX="$ac_cv_prog_CXX" +if test -n "$CXX"; then + echo "$ac_t""$CXX" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$CXX" && break +done +test -n "$CXX" || CXX="gcc" + + +echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1146: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 + +ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + +cat > conftest.$ac_ext << EOF + +#line 1157 "configure" +#include "confdefs.h" + +int main(){return(0);} +EOF +if { (eval echo configure:1162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cxx_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cxx_cross=no + else + ac_cv_prog_cxx_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cxx_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 +if test $ac_cv_prog_cxx_works = no; then + { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1188: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 +cross_compiling=$ac_cv_prog_cxx_cross + +echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 +echo "configure:1193: checking whether we are using GNU C++" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gxx=yes +else + ac_cv_prog_gxx=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gxx" 1>&6 + +if test $ac_cv_prog_gxx = yes; then + GXX=yes +else + GXX= +fi + +ac_test_CXXFLAGS="${CXXFLAGS+set}" +ac_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS= +echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 +echo "configure:1221: checking whether ${CXX-g++} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.cc +if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then + ac_cv_prog_cxx_g=yes +else + ac_cv_prog_cxx_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS="$ac_save_CXXFLAGS" +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi + +for ac_declaration in \ + ''\ + '#include ' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat > conftest.$ac_ext < +$ac_declaration +int main() { +exit (42); +; return 0; } +EOF +if { (eval echo configure:1270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + continue +fi +rm -f conftest* + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1306: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +echo $ac_n "checking for object suffix""... $ac_c" 1>&6 +echo "configure:1334: checking for object suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftest* +echo 'int i = 1;' > conftest.$ac_ext +if { (eval echo configure:1340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + for ac_file in conftest.*; do + case $ac_file in + *.c) ;; + *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; + esac + done +else + { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; } +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_objext" 1>&6 +OBJEXT=$ac_cv_objext +ac_objext=$ac_cv_objext + +echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 +echo "configure:1358: checking for Cygwin environment" >&5 +if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_cygwin=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_cygwin=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_cygwin" 1>&6 +CYGWIN= +test "$ac_cv_cygwin" = yes && CYGWIN=yes +echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 +echo "configure:1391: checking for mingw32 environment" >&5 +if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_mingw32=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_mingw32=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_mingw32" 1>&6 +MINGW32= +test "$ac_cv_mingw32" = yes && MINGW32=yes + + +echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 +echo "configure:1422: checking for executable suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$CYGWIN" = yes || test "$MINGW32" = yes; then + ac_cv_exeext=.exe +else + rm -f conftest* + echo 'int main () { return 0; }' > conftest.$ac_ext + ac_cv_exeext= + if { (eval echo configure:1432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + for file in conftest.*; do + case $file in + *.c | *.o | *.obj) ;; + *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; + esac + done + else + { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } + fi + rm -f conftest* + test x"${ac_cv_exeext}" = x && ac_cv_exeext=no +fi +fi + +EXEEXT="" +test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} +echo "$ac_t""${ac_cv_exeext}" 1>&6 +ac_exeext=$EXEEXT + + + ecos_CFLAGS="" + ecos_CXXFLAGS="" + ecos_LDADD="" + ecos_INCLUDES="" + ecos_LIBS="" + + + + + + + + + + + + echo $ac_n "checking "for Visual C++"""... $ac_c" 1>&6 +echo "configure:1470: checking "for Visual C++"" >&5 + MSVC="no"; + if test "${CC}" = "cl" ; then + MSVC="yes" + CXX="cl" + MSVC_SRCDIR=${srcdir} + + + + if test "${MSVC}" = "yes" ; then + MSVC_SRCDIR=`cygpath -w ${MSVC_SRCDIR} | tr \\\\\\\\ /` + fi + + + ecos_INCLUDES="${ecos_INCLUDES} \"-I${MSVC_SRCDIR}\"" + ecos_LDADD="-link" + ecos_LIBS="advapi32.lib" + fi + + +if test "${MSVC}" = "yes"; then + MSVC_TRUE= + MSVC_FALSE='#' +else + MSVC_TRUE='#' + MSVC_FALSE= +fi + if test "${MSVC}" = "yes" ; then + echo "$ac_t""unfortunately yes" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + + + + + + + + echo $ac_n "checking "the default compiler flags"""... $ac_c" 1>&6 +echo "configure:1510: checking "the default compiler flags"" >&5 + + ecosflags_enable_debug="no" + # Check whether --enable-debug or --disable-debug was given. +if test "${enable_debug+set}" = set; then + enableval="$enable_debug" + case "${enableval}" in + yes) ecosflags_enable_debug="yes" ;; + *) ecosflags_enable_debug="no" ;; + esac +fi + + + ecosflags_enable_ansi="no" + if test "${MSVC}" = "yes" ; then + # Check whether --enable-ansi or --disable-ansi was given. +if test "${enable_ansi+set}" = set; then + enableval="$enable_ansi" + case "${enableval}" in + yes) ecosflags_enable_ansi="yes" ;; + *) ecosflags_enable_ansi="no" ;; + esac +fi + + fi + + if test "${GCC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Woverloaded-virtual" + elif test "${MSVC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -nologo -W3" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -nologo -W3 -GR -GX" + else + { echo "configure: error: "default flags for ${CC} are not known"" 1>&2; exit 1; } + fi + + if test "${ecosflags_enable_debug}" = "yes" ; then + if test "${GCC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -g -O0" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -g -O0" + elif test "${MSVC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -MDd -Zi" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -MDd -Zi" + fi + else + if test "${GCC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -O0" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -O0" + elif test "${MSVC}" = "yes" ; then + ecos_CFLAGS="${ecos_CFLAGS} -MD -O2" + ecos_CXXFLAGS="${ecos_CXXFLAGS} -MD -O2" + fi + fi + + CFLAGS="${ac_save_CFLAGS}" + CXXFLAGS="${ac_save_CXXFLAGS}" + + echo "$ac_t""done" 1>&6 + + + + + + if test "${ecosflags_enable_debug}" = "yes" ; then + ecosinfra_asserts="yes" + ecosinfra_preconditions="yes" + ecosinfra_postconditions="yes" + ecosinfra_invariants="yes" + ecosinfra_loopinvariants="yes" + ecosinfra_tracing="yes" + ecosinfra_fntracing="yes" + else + ecosinfra_asserts="no" + ecosinfra_preconditions="no" + ecosinfra_postconditions="no" + ecosinfra_invariants="no" + ecosinfra_loopinvariants="no" + ecosinfra_tracing="no" + ecosinfra_fntracing="no" + fi + + # Check whether --enable-asserts or --disable-asserts was given. +if test "${enable_asserts+set}" = set; then + enableval="$enable_asserts" + case "${enableval}" in + yes) ecosinfra_asserts="yes" ;; + no) ecosinfra_asserts="no" ;; + *) { echo "configure: error: bad value ${enableval} for disable-asserts option" 1>&2; exit 1; } ;; + esac +fi + + if test "${ecosinfra_asserts}" = "yes"; then + cat >> confdefs.h <<\EOF +#define CYGDBG_USE_ASSERTS 1 +EOF + + fi + + # Check whether --enable-preconditions or --disable-preconditions was given. +if test "${enable_preconditions+set}" = set; then + enableval="$enable_preconditions" + case "${enableval}" in + yes) ecosinfra_preconditions="yes" ;; + no) ecosinfra_preconditions="no" ;; + *) { echo "configure: error: bad value ${enableval} for disable-preconditions option" 1>&2; exit 1; } ;; + esac +fi + + if test "${ecosinfra_preconditions}" = "yes"; then + cat >> confdefs.h <<\EOF +#define CYGDBG_INFRA_DEBUG_PRECONDITIONS 1 +EOF + + fi + + # Check whether --enable-postconditions or --disable-postconditions was given. +if test "${enable_postconditions+set}" = set; then + enableval="$enable_postconditions" + case "${enableval}" in + yes) ecosinfra_postconditions="yes" ;; + no) ecosinfra_postconditions="no" ;; + *) { echo "configure: error: bad value ${enableval} for disable-postconditions option" 1>&2; exit 1; } ;; + esac +fi + + if test "${ecosinfra_postconditions}" = "yes"; then + cat >> confdefs.h <<\EOF +#define CYGDBG_INFRA_DEBUG_POSTCONDITIONS 1 +EOF + + fi + + # Check whether --enable-invariants or --disable-invariants was given. +if test "${enable_invariants+set}" = set; then + enableval="$enable_invariants" + case "${enableval}" in + yes) ecosinfra_invariants="yes" ;; + no) ecosinfra_invariants="no" ;; + *) { echo "configure: error: bad value ${enableval} for disable-invariants option" 1>&2; exit 1; } ;; + esac +fi + + if test "${ecosinfra_invariants}" = "yes"; then + cat >> confdefs.h <<\EOF +#define CYGDBG_INFRA_DEBUG_INVARIANTS 1 +EOF + + fi + + # Check whether --enable-loopinvariants or --disable-loopinvariants was given. +if test "${enable_loopinvariants+set}" = set; then + enableval="$enable_loopinvariants" + case "${enableval}" in + yes) ecosinfra_loopinvariants="yes" ;; + no) ecosinfra_loopinvariants="no" ;; + *) { echo "configure: error: bad value ${enableval} for disable-loopinvariants option" 1>&2; exit 1; } ;; + esac +fi + + if test "${ecosinfra_loopinvariants}" = "yes"; then + cat >> confdefs.h <<\EOF +#define CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS 1 +EOF + + fi + + # Check whether --enable-tracing or --disable-tracing was given. +if test "${enable_tracing+set}" = set; then + enableval="$enable_tracing" + case "${enableval}" in + yes) ecosinfra_tracing="yes" ;; + no) ecosinfra_tracing="no" ;; + *) { echo "configure: error: bad value ${enableval} for disable-tracing option" 1>&2; exit 1; } ;; + esac +fi + + if test "${ecosinfra_tracing}" = "yes"; then + cat >> confdefs.h <<\EOF +#define CYGDBG_USE_TRACING 1 +EOF + + fi + + # Check whether --enable-fntracing or --disable-fntracing was given. +if test "${enable_fntracing+set}" = set; then + enableval="$enable_fntracing" + case "${enableval}" in + yes) ecosinfra_fntracing="yes" ;; + no) ecosinfra_fntracing=no ;; + *) { echo "configure: error: bad value ${enableval} for disable-fntracing option" 1>&2; exit 1; } ;; + esac +fi + + if test "${ecosinfra_fntracing}" = "yes"; then + cat >> confdefs.h <<\EOF +#define CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS 1 +EOF + + fi + + + echo $ac_n "checking for eCos host-side infrastructure""... $ac_c" 1>&6 +echo "configure:1712: checking for eCos host-side infrastructure" >&5 + + infra_builddir="" + possibles=".. ../.. ../../.. ../../../.. ../../../../.." + + infra_builddir="" + for i in ${possibles}; do + if test -d "$i/"infra""; then + infra_builddir=$i + break + fi + done + + if test "${infra_builddir}" = "" ; then + possibles="../host ../../host ../../../host ../../../../host ../../../../../host ../../../../../../host" + + infra_builddir="" + for i in ${possibles}; do + if test -d "$i/"infra""; then + infra_builddir=$i + break + fi + done + + fi + if test "${infra_builddir}" != "" ; then + infra_builddir="${infra_builddir}/infra" + infra_builddir=`cd ${infra_builddir} && /bin/pwd` + fi + + ecos_infra_incdir="" + ecos_infra_libdir="" + ecos_infra_libs="" + + # Check whether --with-infra-header or --without-infra-header was given. +if test "${with_infra_header+set}" = set; then + withval="$with_infra_header" + : +fi + + # Check whether --with-infra-lib or --without-infra-lib was given. +if test "${with_infra_lib+set}" = set; then + withval="$with_infra_lib" + : +fi + + # Check whether --with-infra or --without-infra was given. +if test "${with_infra+set}" = set; then + withval="$with_infra" + : +fi + + + if test "${with_infra_header+set}" = "set"; then + ecos_infra_incdir="${with_infra_header}" + elif test "${with_infra+set}" = "set"; then + ecos_infra_incdir="${with_infra}/include" + elif test "${infra_builddir}" != "" ; then + ecos_infra_incdir="${infra_builddir}" + else + { echo "configure: error: infrastructure headers not found" 1>&2; exit 1; } + fi + if test "${MSVC}" = "yes" ; then + ecos_msvc_infra_incdir=${ecos_infra_incdir} + + + + if test "${MSVC}" = "yes" ; then + ecos_msvc_infra_incdir=`cygpath -w ${ecos_msvc_infra_incdir} | tr \\\\\\\\ /` + fi + + ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_msvc_infra_incdir}\"" + else + ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_infra_incdir}" + fi + + if test "${with_infra_lib+set}" = "set"; then + ecos_infra_libdir="${with_infra_lib}" + elif test "${with_infra+set}" = "set"; then + ecos_infra_libdir="${with_infra}/lib" + elif test "${infra_builddir}" != "" ; then + ecos_infra_libdir="${infra_builddir}" + else + { echo "configure: error: infrastructure library not found" 1>&2; exit 1; } + fi + if test "${MSVC}" = "yes" ; then + ecos_msvc_infra_libdir=${ecos_infra_libdir} + + + + if test "${MSVC}" = "yes" ; then + ecos_msvc_infra_libdir=`cygpath -w ${ecos_msvc_infra_libdir} | tr \\\\\\\\ /` + fi + + ecos_LIBS="${ecos_LIBS} cyginfra.lib" + ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_msvc_infra_libdir}\"" + else + ecos_LIBS="${ecos_LIBS} -lcyginfra" + ecos_LDADD="${ecos_LDADD} -L${ecos_infra_libdir}" + fi + + + + echo "$ac_t""-I${ecos_infra_incdir} -L${ecos_infra_libdir}" 1>&6 + + + + + + + ecos_tk_libs="" + ecos_tk_libdir="" + + echo $ac_n "checking for Tcl installation""... $ac_c" 1>&6 +echo "configure:1826: checking for Tcl installation" >&5 + # Check whether --with-tcl or --without-tcl was given. +if test "${with_tcl+set}" = set; then + withval="$with_tcl" + : +fi + + # Check whether --with-tcl-version or --without-tcl-version was given. +if test "${with_tcl_version+set}" = set; then + withval="$with_tcl_version" + : +fi + + + if test "${MSVC}" = "yes" ; then + # Check whether --with-tcl-header or --without-tcl-header was given. +if test "${with_tcl_header+set}" = set; then + withval="$with_tcl_header" + : +fi + + # Check whether --with-tcl-lib or --without-tcl-lib was given. +if test "${with_tcl_lib+set}" = set; then + withval="$with_tcl_lib" + : +fi + + ecos_tcl_incdir="" + ecos_tcl_libdir="" + if test "${with_tcl_version+set}" != set ; then + { echo "configure: error: You must specify a Tcl version using --with-tcl-version=" 1>&2; exit 1; } + fi + if test "${with_tcl_header+set}" = set ; then + ecos_tcl_incdir=${with_tcl_header} + elif test "${with_tcl+set}" = set ; then + ecos_tcl_incdir="${with_tcl}/include" + else + { echo "configure: error: You must specify a Tcl installation with either --with-tcl= or --with-tcl-header=" 1>&2; exit 1; } + fi + if test "${with_tcl_lib+set}" = set; then + ecos_tcl_libdir=${with_tcl_lib} + elif test "${with_tcl+set}" = set; then + ecos_tcl_libdir="${with_tcl}/lib" + else + { echo "configure: error: You must specify a Tcl installation with either --with-tcl= or --with-tcl-lib=" 1>&2; exit 1; } + fi + + if test \! -r "${ecos_tcl_incdir}/tcl.h" ; then + { echo "configure: error: unable to locate Tcl header file tcl.h" 1>&2; exit 1; } + fi + + + + + if test "${MSVC}" = "yes" ; then + ecos_tcl_incdir=`cygpath -w ${ecos_tcl_incdir} | tr \\\\\\\\ /` + fi + + + + + if test "${MSVC}" = "yes" ; then + ecos_tcl_libdir=`cygpath -w ${ecos_tcl_libdir} | tr \\\\\\\\ /` + fi + + ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_tcl_incdir}\"" + ecos_LIBS="${ecos_LIBS} tcl${with_tcl_version}.lib" + ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_tcl_libdir}\"" + + ecos_tk_libs="" + + else + possibles="" + if test "${with_tcl+set}" = set ; then + possibles="${with_tcl}/lib" + if test "${with_tcl_version+set}" = set ; then + possibles="${possibles} ${with_tcl}/lib/tcl${with_tcl_version}" + fi + fi + possibles="${possibles} ${prefix}/lib" + if test "${with_tcl_version+set}" = set ; then + possibles="${possibles} ${prefix}/lib/tcl${with_tcl_version}" + fi + possibles="${possibles} /usr/lib" + if test "${with_tcl_version+set}" = set ; then + possibles="${possibles} /usr/lib/tcl${with_tcl_version}" + fi + + tclconfig="" + for i in ${possibles}; do + if test -r "$i/"tclConfig.sh""; then + tclconfig=$i + break + fi + done + + if test \! -r "${tclconfig}/tclConfig.sh" ; then + { echo "configure: error: unable to locate Tcl configuration file tclConfig.sh" 1>&2; exit 1; } + else + . ${tclconfig}/tclConfig.sh + + if test -z "${TCL_INC_DIR}" ; then + ecos_tcl_incdir="${TCL_PREFIX}/include" + else + ecos_tcl_incdir="${TCL_INC_DIR}" + fi + if test \! -r "${ecos_tcl_incdir}/tcl.h" ; then + { echo "configure: error: unable to locate Tcl header file tcl.h" 1>&2; exit 1; } + else + if test "${ecos_tcl_incdir}" != "/usr/include" ; then + ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_tcl_incdir}" + fi + fi + + if test -z "${TCL_LIB_SPEC}" -a "${with_tcl_version+set}" = set ; then + + libtcl="" + for i in ${possibles}; do + if test -r "$i/"libtcl${with_tcl_version}.a""; then + libtcl=$i + break + fi + done + + if test -r "${libtcl}/libtcl${with_tcl_version}.a" ; then + TCL_LIB_SPEC="-L${libtcl} -ltcl${with_tcl_version}" + fi + fi + if test -z "${TCL_LIB_SPEC}" ; then + + libtcl="" + for i in ${possibles}; do + if test -r "$i/"libtcl.a""; then + libtcl=$i + break + fi + done + + if test -r "${libtcl}/libtcl.a" ; then + TCL_LIB_SPEC="-L${libtcl} -ltcl" + fi + fi + if test -z "${TCL_LIB_SPEC}" ; then + { echo "configure: error: ${tclconfig}/tclConfig.sh does not define TCL_LIB_SPEC" 1>&2; exit 1; } + fi + ecos_LIBS="${ecos_LIBS} ${TCL_LIB_SPEC}" + + possibles=`echo ${possibles} | sed -e 's,tcl,tk,g'` + + tkconfig="" + for i in ${possibles}; do + if test -r "$i/"tkConfig.sh""; then + tkconfig=$i + break + fi + done + + if test \! -r "${tkconfig}/tkConfig.sh" ; then + { echo "configure: error: unable to locate Tk config file tkConfig.sh" 1>&2; exit 1; } + else + . ${tkconfig}/tkConfig.sh + if test -z "${TK_INC_DIR}" ; then + if test "${TK_PREFIX}" = "/usr" ; then + ecos_tk_includes="${TK_XINCLUDES}" + else + ecos_tk_includes="-I${TK_PREFIX}/include ${TK_XINCLUDES}" + fi + else + ecos_tk_includes="-I${TK_INC_DIR} ${TK_XINCLUDES}" + fi + + if test -z "${TK_LIB_SPEC}" -a "${with_tcl_version+set}" = set ; then + + libtk="" + for i in ${possibles}; do + if test -r "$i/"libtk${with_tcl_version}.a""; then + libtk=$i + break + fi + done + + if test -r "${libtk}/libtk${with_tcl_version}.a" ; then + TK_LIB_SPEC="-L${libtk} -ltk${with_tcl_version}" + fi + fi + if test -z "${TK_LIB_SPEC}" ; then + + libtk="" + for i in ${possibles}; do + if test -r "$i/"libtk.a""; then + libtk=$i + break + fi + done + + if test -r "${libtk}/libtk.a" ; then + TK_LIB_SPEC="-L${libtk} -ltk" + fi + fi + if test -z "${TK_LIB_SPEC}" ; then + { echo "configure: error: ${tkconfig}/tkConfig.sh does not define TK_LIB_SPEC" 1>&2; exit 1; } + fi + ecos_tk_libs="${TK_LIB_SPEC} ${TK_LIBS}" + fi + fi + fi + + echo "$ac_t""-I${ecos_tcl_incdir} ${TCL_LIB_SPEC}" 1>&6 + + + + + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile:Makefile.in testsuite/Makefile:testsuite/Makefile.in cdlconfig.h:config.h.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g +s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g +s%@MAINT@%$MAINT%g +s%@CC@%$CC%g +s%@CXX@%$CXX%g +s%@RANLIB@%$RANLIB%g +s%@OBJEXT@%$OBJEXT%g +s%@EXEEXT@%$EXEEXT%g +s%@ecos_CFLAGS@%$ecos_CFLAGS%g +s%@ecos_CXXFLAGS@%$ecos_CXXFLAGS%g +s%@ecos_LDADD@%$ecos_LDADD%g +s%@ecos_INCLUDES@%$ecos_INCLUDES%g +s%@ecos_LIBS@%$ecos_LIBS%g +s%@MSVC_SRCDIR@%$MSVC_SRCDIR%g +s%@MSVC_TRUE@%$MSVC_TRUE%g +s%@MSVC_FALSE@%$MSVC_FALSE%g +s%@ecos_infra_incdir@%$ecos_infra_incdir%g +s%@ecos_infra_libdir@%$ecos_infra_libdir%g +s%@ecos_tk_includes@%$ecos_tk_includes%g +s%@ecos_tk_libs@%$ecos_tk_libs%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/tools/src/libcdl/configure.in b/tools/src/libcdl/configure.in new file mode 100644 index 00000000..2b383c26 --- /dev/null +++ b/tools/src/libcdl/configure.in @@ -0,0 +1,70 @@ +dnl Process this file with autoconf to produce a configure script. +dnl ==================================================================== +dnl +dnl configure.in +dnl +dnl libcdl.a +dnl +dnl ==================================================================== +dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN#### +dnl ---------------------------------------------------------------------------- +dnl Copyright (C) 2002 Bart Veer +dnl Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc. +dnl +dnl This file is part of the eCos host tools. +dnl +dnl This program is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU General Public License as published by the Free +dnl Software Foundation; either version 2 of the License, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but WITHOUT +dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +dnl more details. +dnl +dnl You should have received a copy of the GNU General Public License along with +dnl this program; if not, write to the Free Software Foundation, Inc., +dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +dnl +dnl ---------------------------------------------------------------------------- +dnl ####ECOSHOSTGPLCOPYRIGHTEND#### +dnl ==================================================================== +dnl#####DESCRIPTIONBEGIN#### +dnl +dnl Author(s): bartv +dnl Contact(s): bartv +dnl Date: 1998/12/16 +dnl Version: 0.01 +dnl +dnl####DESCRIPTIONEND#### +dnl ==================================================================== + +dnl The core header file had better be present. +AC_INIT(cdlcore.hxx) + +dnl Pick up the support files from the top-level acsupport directory. +AC_CONFIG_AUX_DIR(../../acsupport) + +ECOS_CHECK_BUILD_ne_SRC +AC_CANONICAL_HOST +AM_INIT_AUTOMAKE(libcdl, 0.2) +ECOS_SUBST_VERSION(CYGNUM_LIBCDL_VERSION) +AM_MAINTAINER_MODE + +dnl The package contains a library implemented in C++. It has to be +dnl buildable under NT. Only a static version of the library is +dnl of interest at the moment. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_RANLIB +AC_OBJEXT +AC_EXEEXT +ECOS_PROG_MSVC +ECOS_PROG_STANDARD_COMPILER_FLAGS +ECOS_ARG_INFRASTRUCTURE +ECOS_PATH_INFRA +ECOS_PATH_TCL + +AM_CONFIG_HEADER(cdlconfig.h:config.h.in) +AC_OUTPUT(Makefile:Makefile.in testsuite/Makefile:testsuite/Makefile.in) diff --git a/tools/src/libcdl/conflict.cxx b/tools/src/libcdl/conflict.cxx new file mode 100644 index 00000000..4eca2d32 --- /dev/null +++ b/tools/src/libcdl/conflict.cxx @@ -0,0 +1,1039 @@ +//{{{ Banner + +//============================================================================ +// +// conflict.cxx +// +// The CdlConflict class +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 1999, 2000 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1999/01/28 +// Version: 0.02 +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ #include's + +// ---------------------------------------------------------------------------- +#include "cdlconfig.h" + +// Get the infrastructure types, assertions, tracing and similar +// facilities. +#include +#include + +// defines everything implemented in this module. +// It implicitly supplies , and because +// the class definitions rely on these headers. It also brings +// in +#include + +//}}} + +//{{{ Statics + +// ---------------------------------------------------------------------------- +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlConflictBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlConflict_UnresolvedBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlConflict_IllegalValueBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlConflict_EvalExceptionBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlConflict_RequiresBody); +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlConflict_DataBody); + +//}}} +//{{{ CdlConflict + +//{{{ Creation and destruction + +// ---------------------------------------------------------------------------- +// The basic conflicts. Conflicts are created in the context of a transaction. +// If the transaction gets committed then they are transferred to a toplevel. +// If the transaction gets cancelled then they just disappear. +// +// A conflict that is only part of a transaction may go away as that +// transaction proceeds, in which case it can be deleted immediately. +// A conflict that is already part of the toplevel cannot be +// destroyed, instead it gets marked in the transaction object. Only +// when the transaction is committed does the object get deleted. +// In addition within the context of a transaction old conflicts +// may hang around for a while. +// + +CdlConflictBody::CdlConflictBody(CdlTransaction trans_arg, CdlNode node_arg, CdlProperty property_arg, bool structural_arg) +{ + CYG_REPORT_FUNCNAME("CdlConflict:: constructor"); + CYG_REPORT_FUNCARG4XV(this, trans_arg, node_arg, property_arg); + CYG_PRECONDITION_CLASSC(trans_arg); + CYG_PRECONDITION_CLASSC(node_arg); + CYG_PRECONDITION_CLASSC(property_arg); + + node = node_arg; + property = property_arg; + transaction = trans_arg; + structural = structural_arg; + no_solution = false; + // The vectors take care of themselves + enabled = true; + reason = ""; + + transaction->dirty = true; + if (structural_arg) { + transaction->new_structural_conflicts.push_back(this); + } else { + transaction->new_conflicts.push_back(this); + } + + cdlconflictbody_cookie = CdlConflictBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + + +// ---------------------------------------------------------------------------- +// The destructor can get invoked during a transaction commit, in the +// case of a global conflict, or from inside clear() for a per-transaction +// conflict. In all cases the calling code is responsible for removing +// the conflict from any STL containers. + +CdlConflictBody::~CdlConflictBody() +{ + CYG_REPORT_FUNCNAME("CdlConflict:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlconflictbody_cookie = CdlConflictBody_Invalid; + reason = ""; + enabled = false; + no_solution = false; + solution.clear(); + solution_references.clear(); + structural = false; + transaction = 0; + property = 0; + node = 0; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Solution support + +// ---------------------------------------------------------------------------- +bool +CdlConflictBody::has_known_solution() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict::has_solution", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + bool result = (0 != solution.size()); + + CYG_REPORT_RETVAL(result); + return result; +} + +bool +CdlConflictBody::has_no_solution() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict::has_no_solution", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + bool result = no_solution; + + CYG_REPORT_RETVAL(result); + return result; +} + +const std::vector >& +CdlConflictBody::get_solution() const +{ + CYG_REPORT_FUNCNAME("CdlConflict::get_solution"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return solution; +} + +const std::set& +CdlConflictBody::get_solution_references() const +{ + CYG_REPORT_FUNCNAME("CdlConflict::get_solution_references"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return solution_references; +} + +// ---------------------------------------------------------------------------- +// Try to resolve a conflict. If the conflict was created in a transaction, +// use that transaction. More commonly the conflict will be global and +// a new transaction will have to be created specially for it. Either +// way the conflict may cease to exist. +void +CdlConflictBody::resolve() +{ + CYG_REPORT_FUNCNAME("CdlConflict::resolve"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITIONC(0 == transaction); + + if (this->resolution_implemented()) { + CdlTransaction transact = CdlTransactionBody::make(this->get_node()->get_toplevel()); + transact->resolve(this); + transact->body(); + delete transact; + } + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// A valuable has just been changed. If this value was relevant to the +// current solution (or lack thereof) then an update is necessary. +void +CdlConflictBody::update_solution_validity(CdlValuable valuable) +{ + CYG_REPORT_FUNCNAME("CdlConflict::update_solution_validity"); + CYG_REPORT_FUNCARG2XV(this, valuable); + CYG_PRECONDITION_THISC(); + + if (solution_references.find(valuable) != solution_references.end()) { + no_solution = false; + solution.clear(); + solution_references.clear(); + } + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// Default implementations of the inference engine do not do a lot... +bool +CdlConflictBody::inner_resolve(CdlTransaction trans_arg, int level) +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict::inner_resolve", "result false"); + CYG_REPORT_FUNCARG3XV(this, trans_arg, level); + CYG_PRECONDITION_THISC(); + CYG_PRECONDITION_CLASSC(trans_arg); + + // Setting the no_solution flag while keeping a clear + // solution_accessed vector means that the no_solution flag should + // always remain set, and hence no further inference attempts will be made. + no_solution = true; + + CYG_REPORT_RETURN(); + return false; +} + +bool +CdlConflictBody::resolution_implemented() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict::resolution_implemented", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETVAL(false); + return false; +} + +// ---------------------------------------------------------------------------- +// Clearing a solution. This is needed if the inference engine has +// failed to find a complete solution, because in attempting this the +// solution_references vector will have been filled in anyway. It may +// have some other uses as well. +void +CdlConflictBody::clear_solution() +{ + CYG_REPORT_FUNCNAME("CdlConflict::clear_solution"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + no_solution = false; + solution.clear(); + solution_references.clear(); + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ Basics + +// ---------------------------------------------------------------------------- + +CdlNode +CdlConflictBody::get_node() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict::get_node", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlNode result = node; + CYG_REPORT_RETVAL(result); + return result; +} + +CdlProperty +CdlConflictBody::get_property() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict::get_property", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlProperty result = property; + CYG_REPORT_RETVAL(result); + return result; +} + +bool +CdlConflictBody::is_structural() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict::is_structural", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + bool result = structural; + CYG_REPORT_RETVAL(result); + return result; +} + +CdlTransaction +CdlConflictBody::get_transaction() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict::get_transaction", "result %p"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlTransaction result = transaction; + CYG_REPORT_RETVAL(result); + return result; +} + +// FIXME: these are not currently implemented. It would be necessary +// to store the information in the savefile, which requires an +// unambiguous way of identifying a conflict that is likely to +// survice package version changes. + +bool +CdlConflictBody::is_enabled() const +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict::is_enabled", "result %d"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + bool result = enabled; + CYG_REPORT_RETVAL(result); + return result; +} + +std::string +CdlConflictBody::get_disabled_reason() const +{ + CYG_REPORT_FUNCNAME("CdlConflict::get_disabled_reason"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + // Possibly there should be a check that the conflict is currently + // disabled, but it might be useful. + CYG_REPORT_RETURN(); + return reason; +} + +void +CdlConflictBody::disable(std::string reason_arg) +{ + CYG_REPORT_FUNCNAME("CdlConflict::disable"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + reason = reason_arg; + enabled = false; + + CYG_REPORT_RETURN(); +} + +void +CdlConflictBody::enable() +{ + CYG_REPORT_FUNCNAME("CdlConflict::enable"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + enabled = true; + // Leave "reason" alone, it may still be useful + + CYG_REPORT_RETURN(); +} + +//}}} +//{{{ check_this() + +// ---------------------------------------------------------------------------- +bool +CdlConflictBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlConflictBody_Magic != cdlconflictbody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + if ((0 == node) || (0 == property)) { + return false; + } + switch(zeal) { + case cyg_system_test : + case cyg_extreme : + { + if (!node->check_this(cyg_quick)) { + return false; + } + // Accessing the properties would involve a function call. + + if (0 != transaction) { + if (!transaction->check_this(cyg_quick)) { + return false; + } + if (structural) { + // The conflict should exist in the new_structural_conflicts vector + // deleted_structural_conflicts is for toplevel ones. + if (std::find(transaction->new_structural_conflicts.begin(), + transaction->new_structural_conflicts.end(), this) == + transaction->new_structural_conflicts.end()) { + return false; + } + } else { + // The conflict may appear on the new_conflicts list + // or in the resolved_conflicts vector. + if (std::find(transaction->new_conflicts.begin(), transaction->new_conflicts.end(), this) == + transaction->new_conflicts.end()) { + + if (std::find(transaction->resolved_conflicts.begin(), transaction->resolved_conflicts.end(), this) == + transaction->resolved_conflicts.end()) { + + return false; + } + } + } + } + // Checking the toplevel lists would be good, but involves a + // further function call and hence nested assertions. + } + case cyg_thorough : + { + if (!node->check_this(cyg_quick)) { + return false; + } + if (!property->check_this(cyg_quick)) { + return false; + } + } + case cyg_quick : + { + if (no_solution && (0 != solution.size())) { + return false; + } + } + case cyg_trivial : + case cyg_none : + default: + break; + } + + return true; +} + +//}}} + +//}}} +//{{{ CdlConflict_Unresolved + +// ---------------------------------------------------------------------------- +// Unresolved references. Usually unresolved references occur inside +// expressions, but other properties that may be affected are parent, +// dialog and wizard. +// +// It is possible for a single expression to have multiple unresolved +// references, each of which will result in a separate conflict +// object. It is also possible for an expression to refer to the same +// unknown entity twice or more, in which case there would also be +// separate conflict objects. Unresolved references may also result in +// eval exceptions and in failed requires statements. Trying to cope +// with the various combinations as a single conflict seems too +// error-prone. + +void +CdlConflict_UnresolvedBody::make(CdlTransaction trans, CdlNode node_arg, CdlProperty prop_arg, std::string name_arg) +{ + CdlConflict_Unresolved tmp = new CdlConflict_UnresolvedBody(trans, node_arg, prop_arg, name_arg); + CYG_UNUSED_PARAM(CdlConflict_Unresolved, tmp); +} + +CdlConflict_UnresolvedBody::CdlConflict_UnresolvedBody(CdlTransaction trans_arg, CdlNode node_arg, CdlProperty prop_arg, + std::string target_name_arg) + : CdlConflictBody(trans_arg, node_arg, prop_arg, true) +{ + CYG_REPORT_FUNCNAME("CdlConflict_Unresolved:: constructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITIONC("" != target_name_arg); + + target_name = target_name_arg; + cdlconflict_unresolvedbody_cookie = CdlConflict_UnresolvedBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlConflict_UnresolvedBody::~CdlConflict_UnresolvedBody() +{ + CYG_REPORT_FUNCNAME("CdlConflict_Unresolved:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlconflict_unresolvedbody_cookie = CdlConflict_UnresolvedBody_Invalid; + target_name = ""; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +std::string +CdlConflict_UnresolvedBody::get_target_name() const +{ + CYG_REPORT_FUNCNAME("CdlConflict_Unresolved::get_target_name"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return target_name; +} + +// For now, just report the node and property name, a brief text, and the +// entity being referenced. +// +// Eventually we can do clever things like looking up the name in a +// database. + +std::string +CdlConflict_UnresolvedBody::get_explanation() const +{ + CYG_REPORT_FUNCNAME("CdlConflict_Unresolved::get_explanation"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::string result; + result = node->get_name() + ", property " + property->get_property_name() + + ":\nReference to unknown object " + target_name; + + CYG_REPORT_RETURN(); + return result; +} + +bool +CdlConflict_UnresolvedBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlConflict_UnresolvedBody_Magic != cdlconflict_unresolvedbody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + + // There is not a lot of checking that can be done on the name. + + return CdlConflictBody::check_this(zeal); +} + +bool +CdlConflict_UnresolvedBody::test(CdlConflict conf) +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict_Unresolved::test", "result %d"); + CYG_REPORT_FUNCARG1XV(conf); + CYG_PRECONDITION_CLASSC(conf); + + bool result = false; + CdlConflict_Unresolved tmp = dynamic_cast(conf); + if (0 != tmp) { + result = true; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ CdlConflict_IllegalValue + +// ---------------------------------------------------------------------------- +// A valuable object has an illegal value. This can happen because the +// current value is not within the legal_values list, or because of a +// failure of check_proc or entry_proc. In the latter two cases the +// Tcl code should supply an explanation as to why the value is illegal. +// +// Note: if future variants of CDL implement some concept of a value +// that does not match the CdlValuable class then that will need a +// separate CdlConflict derived class. + +void +CdlConflict_IllegalValueBody::make(CdlTransaction trans, CdlNode node_arg, CdlProperty prop_arg) +{ + CdlConflict_IllegalValue tmp = new CdlConflict_IllegalValueBody(trans, node_arg, prop_arg); + CYG_UNUSED_PARAM(CdlConflict_IllegalValue, tmp); +} + +CdlConflict_IllegalValueBody::CdlConflict_IllegalValueBody(CdlTransaction trans, CdlNode node_arg, CdlProperty prop_arg) + : CdlConflictBody(trans, node_arg, prop_arg, false) +{ + CYG_REPORT_FUNCNAME("CdlConflict_IllegalValue:: constructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITIONC(0 != dynamic_cast(node_arg)); + + explanation = ""; + cdlconflict_illegalvaluebody_cookie = CdlConflict_IllegalValueBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlConflict_IllegalValueBody::~CdlConflict_IllegalValueBody() +{ + CYG_REPORT_FUNCNAME("CdlConflict_IllegalValue:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlconflict_illegalvaluebody_cookie = CdlConflict_IllegalValueBody_Invalid; + explanation = ""; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// If the property is legal_values then it should be a list expression +// property. Display the current value and the original expression. +// +// If the property is check_proc or entry_proc, the Tcl code should +// have produced an explanation string and stored it in the conflict +// object. +std::string +CdlConflict_IllegalValueBody::get_explanation() const +{ + CYG_REPORT_FUNCNAME("CdlConflict_IllegalValue::get_explanation()"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlConstValuable valuable = dynamic_cast(node); + CYG_ASSERTC(0 != valuable); + + std::string result = ""; + + // FIXME: analyse the current value and flavor a bit more + result += "Illegal current value " + valuable->get_value() + "\n"; + + if (CdlPropertyId_LegalValues == property->get_property_name()) { + + CdlConstProperty_ListExpression expr = dynamic_cast(property); + CYG_ASSERTC(0 != expr); + result += "Legal values are: " + expr->get_original_string(); + + } else if (explanation != "") { + + result += explanation; + } else { + + CYG_FAIL("Inexplicable illegal value"); + } + + CYG_REPORT_RETURN(); + return result; +} + +void +CdlConflict_IllegalValueBody::set_explanation(std::string explanation_arg) +{ + CYG_REPORT_FUNCNAME("CdlConflict_IllegalValue::set_explanation"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + explanation = explanation_arg; + + CYG_REPORT_RETURN(); +} + +// ---------------------------------------------------------------------------- +// Inference is implemented. The actual inference code is in infer.cxx +bool +CdlConflict_IllegalValueBody::resolution_implemented() const +{ + CYG_REPORT_FUNCNAME("CdlConflict_IllegalValue::resolution_implemented"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return true; +} + +// ---------------------------------------------------------------------------- +bool +CdlConflict_IllegalValueBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlConflict_IllegalValueBody_Magic != cdlconflict_illegalvaluebody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + + return CdlConflictBody::check_this(zeal); +} + +bool +CdlConflict_IllegalValueBody::test(CdlConflict conf) +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict_IllegalValue::test", "result %d"); + CYG_REPORT_FUNCARG1XV(conf); + CYG_PRECONDITION_CLASSC(conf); + + bool result = false; + CdlConflict_IllegalValue tmp = dynamic_cast(conf); + if (0 != tmp) { + result = true; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ CdlConflict_EvalException + +// ---------------------------------------------------------------------------- +// Run-time expression failures are possible because of division by +// zero, if for no other reason. The evaluation code should have +// stored a suitable diagnostic with the conflict. This is not part +// of the constructor, allowing the conflict object to be re-used +// if the detailed reason changes + +void +CdlConflict_EvalExceptionBody::make(CdlTransaction trans, CdlNode node_arg, CdlProperty prop_arg, std::string msg_arg) +{ + CdlConflict_EvalException tmp = new CdlConflict_EvalExceptionBody(trans, node_arg, prop_arg, msg_arg); + CYG_UNUSED_PARAM(CdlConflict_EvalException, tmp); +} + +CdlConflict_EvalExceptionBody::CdlConflict_EvalExceptionBody(CdlTransaction trans, CdlNode node_arg, CdlProperty prop_arg, + std::string msg_arg) + : CdlConflictBody(trans, node_arg, prop_arg, false) +{ + CYG_REPORT_FUNCNAME("CdlConflict_EvalException"); + CYG_REPORT_FUNCARG1XV(this); + + explanation = msg_arg; + cdlconflict_evalexceptionbody_cookie = CdlConflict_EvalExceptionBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlConflict_EvalExceptionBody::~CdlConflict_EvalExceptionBody() +{ + CYG_REPORT_FUNCNAME("CdlConflict_EvalException"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlconflict_evalexceptionbody_cookie = CdlConflict_EvalExceptionBody_Invalid; + explanation = ""; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +// If there has been an eval exception then the property must be an +// ordinary expression, a list expression, or a goal expression +std::string +CdlConflict_EvalExceptionBody::get_explanation() const +{ + CYG_REPORT_FUNCNAME("CdlConflict_EvalException::get_explanation"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::string result = node->get_name() + ", property " + property->get_property_name() + "\n"; + result += "Error while evaluation expression: "; + if ("" != explanation) { + result += explanation; + } + result += "\n"; + + if (CdlConstProperty_Expression expr = dynamic_cast(property)) { + + result += "Expression: " + expr->get_original_string(); + + } else if (CdlConstProperty_ListExpression lexpr = dynamic_cast(property)) { + + result += "List expression: " + lexpr->get_original_string(); + + } else if (CdlConstProperty_GoalExpression gexpr = dynamic_cast(property)) { + + result += "Goal expression: " + gexpr->get_original_string(); + + } else { + CYG_FAIL("Unknown expression type"); + } + + CYG_REPORT_RETURN(); + return result; +} + +void +CdlConflict_EvalExceptionBody::set_explanation(std::string explanation_arg) +{ + CYG_REPORT_FUNCNAME("CdlConflict_EvalException::set_explanation"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + explanation = explanation_arg; + + CYG_REPORT_RETURN(); +} + +bool +CdlConflict_EvalExceptionBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlConflict_EvalExceptionBody_Magic != cdlconflict_evalexceptionbody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + return CdlConflictBody::check_this(zeal); +} + +bool +CdlConflict_EvalExceptionBody::test(CdlConflict conf) +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict_EvalException::test", "result %d"); + CYG_REPORT_FUNCARG1XV(conf); + CYG_PRECONDITION_CLASSC(conf); + + bool result = false; + CdlConflict_EvalException tmp = dynamic_cast(conf); + if (0 != tmp) { + result = true; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ CdlConflict_Requires + +// ---------------------------------------------------------------------------- +// A requires constraint is not satisfied. Producing a decent diagnostic +// here requires a detailed understanding of goal expressions. For now +// there is no extra data associated with goal expressions. + +void +CdlConflict_RequiresBody::make(CdlTransaction trans, CdlNode node_arg, CdlProperty prop_arg) +{ + CdlConflict_Requires tmp = new CdlConflict_RequiresBody(trans, node_arg, prop_arg); + CYG_UNUSED_PARAM(CdlConflict_Requires, tmp); +} + +CdlConflict_RequiresBody::CdlConflict_RequiresBody(CdlTransaction trans, CdlNode node_arg, CdlProperty prop_arg) + : CdlConflictBody(trans, node_arg, prop_arg, false) +{ + CYG_REPORT_FUNCNAME("CdlConflict_Requires:: constructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITIONC(0 != dynamic_cast(prop_arg)); + + cdlconflict_requiresbody_cookie = CdlConflict_RequiresBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlConflict_RequiresBody::~CdlConflict_RequiresBody() +{ + CYG_REPORT_FUNCNAME("CdlConflict_Requires:: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlconflict_requiresbody_cookie = CdlConflict_RequiresBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +// FIXME: implement properly +std::string +CdlConflict_RequiresBody::get_explanation() const +{ + CYG_REPORT_FUNCNAME("CdlConflict::get_explanation"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CdlConstProperty_GoalExpression gexpr = dynamic_cast(property); + CYG_ASSERTC(0 != gexpr); + + std::string result = ""; + result += "\"requires\" constraint not satisfied: " + gexpr->get_original_string(); + + CYG_REPORT_RETURN(); + return result; +} + +// Inference is implemented, see infer.cxx +bool +CdlConflict_RequiresBody::resolution_implemented() const +{ + CYG_REPORT_FUNCNAME("CdlConflict_Requires"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + CYG_REPORT_RETURN(); + return true; +} + +bool +CdlConflict_RequiresBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlConflict_RequiresBody_Magic != cdlconflict_requiresbody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + return CdlConflictBody::check_this(zeal); +} + +bool +CdlConflict_RequiresBody::test(CdlConflict conf) +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict_Requires::test", "result %d"); + CYG_REPORT_FUNCARG1XV(conf); + CYG_PRECONDITION_CLASSC(conf); + + bool result = false; + CdlConflict_Requires tmp = dynamic_cast(conf); + if (0 != tmp) { + result = true; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} +//{{{ CdlConflict_Data + +// ---------------------------------------------------------------------------- +// There is some strange problem in the configuration data, for example +// a parent property that is resolved but the target is not a container. + +void +CdlConflict_DataBody::make(CdlTransaction trans, CdlNode node_arg, CdlProperty prop_arg, std::string message_arg) +{ + CdlConflict_Data tmp = new CdlConflict_DataBody(trans, node_arg, prop_arg, message_arg); + CYG_UNUSED_PARAM(CdlConflict_Data, tmp); +} + +CdlConflict_DataBody::CdlConflict_DataBody(CdlTransaction trans, CdlNode node_arg, CdlProperty prop_arg, + std::string message_arg) + : CdlConflictBody(trans, node_arg, prop_arg, true) +{ + CYG_REPORT_FUNCNAME("CdlConflict_Data:: constructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITIONC("" != message_arg); + + message = message_arg; + cdlconflict_databody_cookie = CdlConflict_DataBody_Magic; + CYGDBG_MEMLEAK_CONSTRUCTOR(); + + CYG_POSTCONDITION_THISC(); + CYG_REPORT_RETURN(); +} + +CdlConflict_DataBody::~CdlConflict_DataBody() +{ + CYG_REPORT_FUNCNAME("CdlConflict_ata: destructor"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + cdlconflict_databody_cookie = CdlConflict_DataBody_Invalid; + CYGDBG_MEMLEAK_DESTRUCTOR(); + + CYG_REPORT_RETURN(); +} + +std::string +CdlConflict_DataBody::get_explanation() const +{ + CYG_REPORT_FUNCNAME("CdlConflict_Data::get_explanation"); + CYG_REPORT_FUNCARG1XV(this); + CYG_PRECONDITION_THISC(); + + std::string result = message; + + CYG_REPORT_RETURN(); + return result; +} + +bool +CdlConflict_DataBody::check_this(cyg_assert_class_zeal zeal) const +{ + if (CdlConflict_DataBody_Magic != cdlconflict_databody_cookie) { + return false; + } + CYGDBG_MEMLEAK_CHECKTHIS(); + return CdlConflictBody::check_this(zeal); +} + +bool +CdlConflict_DataBody::test(CdlConflict conf) +{ + CYG_REPORT_FUNCNAMETYPE("CdlConflict_Data::test", "result %d"); + CYG_REPORT_FUNCARG1XV(conf); + CYG_PRECONDITION_CLASSC(conf); + + bool result = false; + CdlConflict_Data tmp = dynamic_cast(conf); + if (0 != tmp) { + result = true; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +//}}} diff --git a/tools/src/libcdl/database.cxx b/tools/src/libcdl/database.cxx new file mode 100644 index 00000000..1ff986d8 --- /dev/null +++ b/tools/src/libcdl/database.cxx @@ -0,0 +1,1627 @@ +//{{{ Banner + +//============================================================================ +// +// database.cxx +// +// Temporary implementation of the CdlPackagesDatabase class +// Implementations of the temporary CdlTargetsDatabase and +// CdlTemplatesDatabase classes. +// +//============================================================================ +//####COPYRIGHTBEGIN#### +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 1999, 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================ +//#####DESCRIPTIONBEGIN#### +// +// Author(s): bartv +// Contact(s): bartv +// Date: 1999/01/21 +// Version: 0.02 +// +//####DESCRIPTIONEND#### +//============================================================================ + +//}}} +//{{{ #include's + +// ---------------------------------------------------------------------------- +#include "cdlconfig.h" + +// Get the infrastructure types, assertions, tracing and similar +// facilities. +#include +#include + +// defines everything implemented in this module. +// It implicitly supplies , and because +// the class definitions rely on these headers. +#include + +// strcmp() is useful when dealing with Tcl strings. +#include + +//}}} + +//{{{ Statics + +// ---------------------------------------------------------------------------- +// Some test cases may want to read in a file other than +// "ecos.db", e.g. to facilitate testing the error conditions. +char* +CdlPackagesDatabaseBody::database_name = "ecos.db"; + +// Should warnings be issued for minor database inconsistencies? +bool CdlPackagesDatabaseBody::verbose_mode = false; + +// The new_package etc. commands need to store the name of the +// current package so that subsequent commands can do the right thing. +// Using constant strings as the key avoids typo problems. +const char* dbparser_pkgname = "::dbparser_pkgname"; +const char* dbparser_pkgdata = "__cdl_dbparser_pkgdata"; +const char* dbparser_targetname = "::dbparser_targetname"; +const char* dbparser_targetdata = "__cdl_dbparser_targetdata"; +const char* dbparser_component_repository = "::component_repository"; +const char* dbparser_database_key = "__dbparser_key"; // for assoc data +const char* template_description_key = "__cdl_extract_template_description"; // ditto +const char* template_packages_key = "__cdl_extract_template_packages"; + +// These are useful for generating diagnostics. +static std::string diag_package = std::string("package "); +static std::string diag_target = std::string("target "); + +CYGDBG_DEFINE_MEMLEAK_COUNTER(CdlPackagesDatabaseBody); + +//}}} +//{{{ Tcl commands for the parser + +//{{{ CdlDbParser class + +// ---------------------------------------------------------------------------- +// Commands that get invoked from inside the Tcl interpreter. These +// need access to the internals of the database objects, which can be +// achieved by making them static members of a CdlDbParser class. + +class CdlDbParser { + public: + static int new_package(CdlInterpreter, int, const char*[]); + static int package_description(CdlInterpreter, int, const char*[]); + static int package_alias(CdlInterpreter, int, const char*[]); + static int package_directory(CdlInterpreter, int, const char*[]); + static int package_script(CdlInterpreter, int, const char*[]); + static int package_hardware(CdlInterpreter, int, const char*[]); + + static int new_target(CdlInterpreter, int, const char*[]); + static int target_description(CdlInterpreter, int, const char*[]); + static int target_alias(CdlInterpreter, int, const char*[]); + static int target_packages(CdlInterpreter, int, const char*[]); + static int target_enable(CdlInterpreter, int, const char*[]); + static int target_disable(CdlInterpreter, int, const char*[]); + static int target_set_value(CdlInterpreter, int, const char*[]); +}; + +//}}} +//{{{ CdlDbParser::package-related + +// ---------------------------------------------------------------------------- +// package + +int +CdlDbParser::new_package(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::new_package", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + CdlPackagesDatabase db = static_cast(interp->get_assoc_data(dbparser_database_key)); + CYG_INVARIANT_CLASSC(CdlPackagesDatabaseBody, db); + + if (3 != argc) { + if (argc < 2) { + CdlParse::report_error(interp, "", "Invalid package command, missing name and contents."); + } else if (argc == 2) { + CdlParse::report_error(interp, diag_package + argv[1], "Invalid package command, missing body."); + } else { + CdlParse::report_error(interp, diag_package + argv[1], + "Invalid package command, expecting just name and body."); + } + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; + } + std::string pkg_name = argv[1]; + + // Better make sure that this is not a duplicate definition. + if (std::find(db->package_names.begin(), db->package_names.end(), pkg_name) != db->package_names.end()) { + CdlParse::report_warning(interp, diag_package + pkg_name, "Duplicate package entry, ignoring second occurence."); + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; + } + + // The package data is constructed locally. It only gets added to + // the database in the absence of errors. + bool package_ok = true; + int old_error_count = CdlParse::get_error_count(interp); + + CdlPackagesDatabaseBody::package_data package; + package.description = ""; + package.directory = ""; + package.script = ""; + package.hardware = false; + + // aliases and versions are vectors and will take care of themselves + // And the name had better be valid as well. + if (!Cdl::is_valid_cdl_name(pkg_name)) { + CdlParse::report_error(interp, diag_package + pkg_name, "This is not a valid CDL name."); + } + + // Sort out the commands, then invoke the script in argv[2]. There is + // no need to worry about error recovery here, any errors will be + // fatal anyway. + CdlInterpreterCommandEntry commands[] = { + CdlInterpreterCommandEntry("description", &CdlDbParser::package_description ), + CdlInterpreterCommandEntry("alias", &CdlDbParser::package_alias ), + CdlInterpreterCommandEntry("directory", &CdlDbParser::package_directory ), + CdlInterpreterCommandEntry("script", &CdlDbParser::package_script ), + CdlInterpreterCommandEntry("hardware", &CdlDbParser::package_hardware ), + CdlInterpreterCommandEntry("", 0 ) + }; + CdlInterpreterBody::CommandSupport cmds(interp, commands); + CdlInterpreterBody::VariableSupport interp_name(interp, dbparser_pkgname, pkg_name); + CdlInterpreterBody::AssocSupport interp_data(interp, dbparser_pkgdata, static_cast(&package)); + int result = interp->eval(argv[2]); + if (TCL_OK == result) { + + // The body has been parsed OK. Check that it is valid. + if ("" == package.directory) { + CdlParse::report_error(interp, diag_package + pkg_name, "Missing directory specification."); + } + if ("" == package.script) { + CdlParse::report_error(interp, diag_package + pkg_name, "Missing script specification."); + } + if (0 == package.aliases.size()) { + CdlParse::report_error(interp, diag_package + pkg_name, "At least one alias should be supplied."); + } + + // Additional checks. Is the package directory actually present? + // Note that there are scenarios where a package may be listed + // in the database but not installed, e.g. an anoncvs checkout + // of selected modules. + if ("" != package.directory) { + std::string repo = interp->get_variable(dbparser_component_repository); + CYG_ASSERTC("" != repo); + + std::string pkgdir = repo + "/" + package.directory; + if (!interp->is_directory(pkgdir)) { + if (CdlPackagesDatabaseBody::verbose_mode) { + CdlParse::report_warning(interp, diag_package + pkg_name, + std::string("This package is not present in the component repository.\n" + "There is no directory `") + pkgdir + "'."); + } + package_ok = false; + } else { + + // Now look for version subdirectories. There should be at least one. + std::vector subdirs; + unsigned int i; + interp->locate_subdirs(pkgdir, subdirs); + std::sort(subdirs.begin(), subdirs.end(), Cdl::version_cmp()); + + for (i = 0; i < subdirs.size(); i++) { + if (("CVS" == subdirs[i]) || ("cvs" == subdirs[i])) { + continue; + } + if ("" != package.script) { + if (!(interp->is_file(pkgdir + "/" + subdirs[i] + "/cdl/" + package.script) || + interp->is_file(pkgdir + "/" + subdirs[i] + "/" + package.script))) { + CdlParse::report_warning(interp, diag_package + pkg_name, + std::string("Version subdirectory `") + subdirs[i] + + "' does not have a CDL script `" + package.script + "'."); + continue; + } + } + package.versions.push_back(subdirs[i]); + } + if (0 == package.versions.size()) { + CdlParse::report_warning(interp, diag_package + pkg_name, + "This package does not have any valid version subdirectories."); + package_ok = false; + } + } + } + } + + // If the package is still ok, now is the time to add it to the database. + if (package_ok && (old_error_count == CdlParse::get_error_count(interp))) { + db->package_names.push_back(pkg_name); + db->packages[pkg_name] = package; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +// Syntax: description +int +CdlDbParser::package_description(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::package_description", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_pkgname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::package_data* package = + static_cast(interp->get_assoc_data(dbparser_pkgdata)); + + if (2 != argc) { + CdlParse::report_error(interp, diag_package + name, "Invalid description, expecting a single string."); + } else if ("" != package->description) { + CdlParse::report_warning(interp, diag_package + name, "A package should have only one description."); + } else { + package->description = argv[1]; + } + + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + +// Syntax: alias +// For example: alias { "This is an alias" another_alias dummy_name } +int +CdlDbParser::package_alias(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::package_alias", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_pkgname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::package_data* package = + static_cast(interp->get_assoc_data(dbparser_pkgdata)); + + // There should be one argument, a list of valid packages. + // Also, the alias command should be used only once + if (2 != argc) { + CdlParse::report_error(interp, diag_package + name, + "The alias command should be followed by a list of known aliases."); + } else if (0 < package->aliases.size()) { + CdlParse::report_warning(interp, diag_package + name, "There should be only one list of aliases."); + } else { + int list_count = 0; + const char** list_entries = 0; + Tcl_Interp* tcl_interp = interp->get_tcl_interpreter(); + if (TCL_OK != Tcl_SplitList(tcl_interp, CDL_TCL_CONST_CAST(char*, argv[1]), &list_count, CDL_TCL_CONST_CAST(char***, &list_entries))) { + CdlParse::report_error(interp, diag_package + name, Tcl_GetStringResult(tcl_interp)); + } else { + if (0 == list_count) { + CdlParse::report_error(interp, diag_package + name, "At least one alias should be supplied."); + } else { + for (int i = 0; i < list_count; i++) { + package->aliases.push_back(list_entries[i]); + } + } + Tcl_Free((char*)list_entries); + } + } + + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + +// Syntax: directory +// The path is of course relative to the component repository. +int +CdlDbParser::package_directory(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::package_directory", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_pkgname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::package_data* package = + static_cast(interp->get_assoc_data(dbparser_pkgdata)); + + // There should be exactly one argument, and the directory command + // should be used only once. + if (2 != argc) { + CdlParse::report_error(interp, diag_package + name, "Only one directory can be specified."); + } else if ("" != package->directory) { + CdlParse::report_warning(interp, diag_package + name, "A package can be located in only one directory."); + } else { + package->directory = argv[1]; + } + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + +// Syntax: hardware +// There are no arguments. +int +CdlDbParser::package_hardware(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::package_hardware", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_pkgname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::package_data* package = + static_cast(interp->get_assoc_data(dbparser_pkgdata)); + + if (1 != argc) { + CdlParse::report_error(interp, diag_package + name, "There should be no further data after hardware."); + } else if (package->hardware) { + CdlParse::report_warning(interp, diag_package + name, "The hardware property should be specified only once"); + } else { + package->hardware = true; + } + + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + +// Syntax: script +int +CdlDbParser::package_script(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::package_script", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_pkgname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::package_data* package = + static_cast(interp->get_assoc_data(dbparser_pkgdata)); + + // There should be exactly one argument, and the script command + // should be used only once + if (2 != argc) { + CdlParse::report_error(interp, diag_package + name, "Only one CDL script can be specified."); + } else if ("" != package->script) { + CdlParse::report_warning(interp, diag_package + name, "A package can have only one starting CDL script."); + } else { + package->script = argv[1]; + } + + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + +//}}} +//{{{ CdlDbParser::target-related + +// ---------------------------------------------------------------------------- +// target + +int +CdlDbParser::new_target(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::new_target", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + CdlPackagesDatabase db = static_cast(interp->get_assoc_data(dbparser_database_key)); + CYG_INVARIANT_CLASSC(CdlPackagesDatabaseBody, db); + + if (3 != argc) { + if (argc < 2) { + CdlParse::report_error(interp, "", "Invalid target command, missing name and contents."); + } else if (argc == 2) { + CdlParse::report_error(interp, diag_target + argv[1], "Invalid target command, missing body."); + } else { + CdlParse::report_error(interp, diag_target + argv[1], "Invalid target command, expecting just name and body."); + } + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; + } + + std::string target_name = argv[1]; + + // Better make sure that this is not a duplicate definition. + if (std::find(db->target_names.begin(), db->target_names.end(), target_name) != db->target_names.end()) { + CdlParse::report_warning(interp, diag_target + target_name, + "Duplicate target entry, ignoring second occurence."); + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; + } + + // The target data is constructed locally. It only gets added to the + // database in the absence of errors. + bool target_ok = true; + int old_error_count = CdlParse::get_error_count(interp); + + CdlPackagesDatabaseBody::target_data target; + target.description = ""; + // aliases, packages and compiler_flags are vectors and will take care of themselves + + // Sort out the commands, then invoke the script in argv[2]. There is + // no need to worry about error recovery here, any errors will be + // fatal anyway. + CdlInterpreterCommandEntry commands[] = { + CdlInterpreterCommandEntry("description", &CdlDbParser::target_description ), + CdlInterpreterCommandEntry("alias", &CdlDbParser::target_alias ), + CdlInterpreterCommandEntry("packages", &CdlDbParser::target_packages ), + CdlInterpreterCommandEntry("enable", &CdlDbParser::target_enable ), + CdlInterpreterCommandEntry("disable", &CdlDbParser::target_disable ), + CdlInterpreterCommandEntry("set_value", &CdlDbParser::target_set_value ), + CdlInterpreterCommandEntry("", 0 ) + }; + CdlInterpreterBody::CommandSupport interp_cmds(interp, commands); + CdlInterpreterBody::VariableSupport interp_name(interp, dbparser_targetname, target_name); + CdlInterpreterBody::AssocSupport interp_data(interp, dbparser_targetdata, static_cast(&target)); + int result = interp->eval(argv[2]); + if (TCL_OK == result) { + + if (0 == target.aliases.size()) { + CdlParse::report_error(interp, diag_target + target_name, "At least one alias should be supplied."); + } + + // There is no check for > 0 hardware packages. This is an unlikely + // scenario but should be allowed for. + // Add this target to the list. + } + + if (target_ok && (old_error_count == CdlParse::get_error_count(interp))) { + db->target_names.push_back(target_name); + db->targets[target_name] = target; + } + + CYG_REPORT_RETVAL(result); + return result; +} + +// Syntax: description +int +CdlDbParser::target_description(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::target_description", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_targetname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::target_data* target = + static_cast(interp->get_assoc_data(dbparser_targetdata)); + + if (2 != argc) { + CdlParse::report_error(interp, diag_target + name, "The target description should be a single string."); + } else if ("" != target->description) { + CdlParse::report_warning(interp, diag_target + name, "A target should have only one description."); + } else { + target->description = argv[1]; + } + + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + +// Syntax: alias +// For example: alias { "This is an alias" another_alias dummy_name } +int +CdlDbParser::target_alias(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::target_alias", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_targetname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::target_data* target = + static_cast(interp->get_assoc_data(dbparser_targetdata)); + + // There should be one argument, a list of valid aliases + // The alias command should be used only once + if (2 != argc) { + CdlParse::report_error(interp, diag_target + name, "The alias command should be followed by a list of known aliases"); + } else if (0 < target->aliases.size()) { + CdlParse::report_warning(interp, diag_target + name, "There should be only one list of aliases."); + } else { + int list_count = 0; + const char** list_entries = 0; + Tcl_Interp* tcl_interp = interp->get_tcl_interpreter(); + if (TCL_OK != Tcl_SplitList(tcl_interp, CDL_TCL_CONST_CAST(char*, argv[1]), &list_count, CDL_TCL_CONST_CAST(char***, &list_entries))) { + CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp)); + } else { + if (0 == list_count) { + CdlParse::report_error(interp, diag_target + name, "At least one alias should be supplied."); + } else { + for (int i = 0; i < list_count; i++) { + target->aliases.push_back(list_entries[i]); + } + } + Tcl_Free((char*)list_entries); + } + } + + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + +// Syntax: packages ... +// For example: packages { CYGPKG_HAL_XXX CYGPKG_HAL_YYY } +int +CdlDbParser::target_packages(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::target_packages", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_targetname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::target_data* target = + static_cast(interp->get_assoc_data(dbparser_targetdata)); + + // There should be one argument, a list of valid packages. + // The packages command should be used only once + if (2 != argc) { + CdlParse::report_error(interp, diag_target + name, "`packages' should be followed by a list of known packages."); + } else if (0 < target->packages.size()) { + CdlParse::report_warning(interp, diag_target + name, "There should be only one list of packages."); + } else { + int list_count = 0; + const char** list_entries = 0; + Tcl_Interp* tcl_interp = interp->get_tcl_interpreter(); + if (TCL_OK != Tcl_SplitList(tcl_interp, CDL_TCL_CONST_CAST(char*, argv[1]), &list_count, CDL_TCL_CONST_CAST(char***, &list_entries))) { + CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp)); + } else { + // Allow for a dummy target spec, just in case it proves useful. + if (0 != list_count) { + for (int i = 0; i < list_count; i++) { + target->packages.push_back(list_entries[i]); + } + } + Tcl_Free((char*)list_entries); + } + } + + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + +// Syntax: enable { opt1 opt2 ... } +// For example: enable { CYGPKG_HAL_ARM_CL7xxx_7211 } +int +CdlDbParser::target_enable(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::target_enable", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_targetname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::target_data* target = + static_cast(interp->get_assoc_data(dbparser_targetdata)); + + // There should be one argument, a list of valid flags. + if (2 != argc) { + CdlParse::report_error(interp, diag_target + name, "`enable' should be followed by a list of CDL options."); + } else { + int list_count = 0; + const char** list_entries = 0; + Tcl_Interp* tcl_interp = interp->get_tcl_interpreter(); + if (TCL_OK != Tcl_SplitList(tcl_interp, CDL_TCL_CONST_CAST(char*, argv[1]), &list_count, CDL_TCL_CONST_CAST(char***, &list_entries))) { + CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp)); + } else { + for (int i = 0; i < list_count; i++) { + target->enable.push_back(list_entries[i]); + } + Tcl_Free((char *) list_entries); + } + } + + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + + +// Syntax: disable { opt1 opt2 ... } +// For example: disable { CYGPKG_HAL_ARM_CL7xxx_7111 } +int +CdlDbParser::target_disable(CdlInterpreter interp, int argc, const char* argv[]) +{ + CYG_REPORT_FUNCNAMETYPE("CdlDbParser::target_disable", "result %d"); + CYG_REPORT_FUNCARG1XV(argc); + CYG_PRECONDITION_CLASSC(interp); + + std::string name = interp->get_variable(dbparser_targetname); + CYG_ASSERTC("" != name); + CdlPackagesDatabaseBody::target_data* target = + static_cast(interp->get_assoc_data(dbparser_targetdata)); + + // There should be one argument, a list of valid flags. + if (2 != argc) { + CdlParse::report_error(interp, diag_target + name, "`disable' should be followed by a list of CDL options."); + } else { + int list_count = 0; + const char** list_entries = 0; + Tcl_Interp* tcl_interp = interp->get_tcl_interpreter(); + if (TCL_OK != Tcl_SplitList(tcl_interp, CDL_TCL_CONST_CAST(char*, argv[1]), &list_count, CDL_TCL_CONST_CAST(char***, &list_entries))) { + CdlParse::report_error(interp, diag_target + name, Tcl_GetStringResult(tcl_interp)); + } else { + for (int i = 0; i < list_count; i++) { + target->disable.push_back(list_entries[i]); + } + Tcl_Free((char *) list_entries); + } + } + + CYG_REPORT_RETVAL(TCL_OK); + return TCL_OK; +} + +// Syntax: set_value