diff --git a/Makefile b/Makefile index 4e00a76..824ef7d 100644 --- a/Makefile +++ b/Makefile @@ -8,34 +8,6 @@ # The `make' will compile everything, including a kernel, utilities # and a root filesystem image. -# -# Supported boards -# -MAX32 = sys/pic32/max32/MAX32 -FUBARINO = sys/pic32/fubarino/FUBARINO -FUBARINOBIG = sys/pic32/fubarino/FUBARINO-UART2CONS-UART1-SRAMC -SDXL = sys/pic32/sdxl/SDXL -MAXIMITE = sys/pic32/maximite/MAXIMITE -MAXCOLOR = sys/pic32/maximite-color/MAXCOLOR -DUINOMITE = sys/pic32/duinomite/DUINOMITE -DUINOMITEUART = sys/pic32/duinomite-uart/DUINOMITE-UART -DUINOMITEE = sys/pic32/duinomite-e/DUINOMITE-E -DUINOMITEEUART = sys/pic32/duinomite-e-uart/DUINOMITE-E-UART -PINGUINO = sys/pic32/pinguino-micro/PINGUINO-MICRO -MMBMX7 = sys/pic32/mmb-mx7/MMB-MX7 -WF32 = sys/pic32/wf32/WF32 -UBW32 = sys/pic32/ubw32/UBW32 -UBW32UART = sys/pic32/ubw32-uart/UBW32-UART -UBW32UARTSDRAM = sys/pic32/ubw32-uart-sdram/UBW32-UART-SDRAM -EXPLORER16 = sys/pic32/explorer16/EXPLORER16 -STARTERKIT = sys/pic32/starter-kit/STARTER-KIT -BAREMETAL = sys/pic32/baremetal/BAREMETAL -RETROONE = sys/pic32/retroone/RETROONE -PINGUINO-MICRO = sys/pic32/pinguino-micro/PINGUINO-MICRO - -# Select target board -TARGET ?= $(MAX32) - # Filesystem and swap sizes. FS_MBYTES = 100 U_MBYTES = 100 @@ -57,8 +29,6 @@ FSUTIL = tools/fsutil/fsutil -include Makefile.user -TARGETDIR = $(shell dirname $(TARGET)) -TARGETNAME = $(shell basename $(TARGET)) TOPSRC = $(shell pwd) CONFIG = $(TOPSRC)/tools/configsys/config @@ -69,11 +39,8 @@ all: .profile $(MAKE) kernel $(MAKE) fs -kernel: $(TARGETDIR)/Makefile - $(MAKE) -C $(TARGETDIR) - -$(TARGETDIR)/Makefile: $(CONFIG) $(TARGETDIR)/$(TARGETNAME) - cd $(TARGETDIR) && ../../../tools/configsys/config $(TARGETNAME) +kernel: $(CONFIG) + $(MAKE) -C sys/pic32 all fs: sdcard.img diff --git a/sys/include/exec.h b/sys/include/exec.h index 3d1011a..0dfe247 100644 --- a/sys/include/exec.h +++ b/sys/include/exec.h @@ -8,19 +8,11 @@ #define _SYS_EXEC_H_ #ifdef KERNEL -#ifdef EXEC_SCRIPT #define SHSIZE 64 #define SHPATHLEN 64 -#endif -#ifdef EXEC_ELF #define STRLEN 32 -#endif -#ifdef EXEC_AOUT #include "exec_aout.h" -#endif -#ifdef EXEC_ELF #include "exec_elf.h" -#endif #define NO_ADDR ((caddr_t)(~0U)) /* Indicates addr. not yet filled in */ @@ -34,29 +26,20 @@ struct exec_params { char **userargp; char **userenvp; union { -#ifdef EXEC_SCRIPT char sh[SHSIZE]; -#endif -#ifdef EXEC_AOUT struct exec aout; -#endif -#ifdef EXEC_ELF struct elf_ehdr elf; -#endif } hdr; /* head of file to exec */ int hdr_len; /* number of bytes valid in image_header */ char **argp, **envp; u_short argc, envc; /* count of argument and environment strings */ u_short argbc, envbc; /* total number of chars in argc and envc string pool */ union { -#ifdef EXEC_SCRIPT struct { char interpname[20]; /* real name of the script interpreter */ char interparg[SHPATHLEN]; /* interpreter arg */ char interpreted; /* flag - this executable is interpreted */ } sh; -#endif -#ifdef EXEC_ELF struct { struct buf *stbp; /* String table buffer pointer */ int stbpos; /* String table pos in buffer */ @@ -64,11 +47,8 @@ struct exec_params { int stoffset; /* String table file pos */ char str[STRLEN]; } elf; -#endif -#ifdef EXEC_AOUT struct { } aout; -#endif }; gid_t gid; diff --git a/sys/include/exec_elf.h b/sys/include/exec_elf.h index 6663299..be95611 100644 --- a/sys/include/exec_elf.h +++ b/sys/include/exec_elf.h @@ -476,13 +476,11 @@ struct elf_args { #include "opt_execfmt.h" #endif -#ifdef EXEC_ELF int exec_elf_makecmds __P((struct proc *, struct exec_package *)); int elf_read_from __P((struct proc *, struct vnode *, u_long, caddr_t, int)); void *elf_copyargs __P((struct exec_package *, struct ps_strings *, void *, void *)); -#endif /* common */ int exec_elf_setup_stack __P((struct proc *, struct exec_package *)); diff --git a/sys/include/param.h b/sys/include/param.h index 5d57ebb..42d7940 100644 --- a/sys/include/param.h +++ b/sys/include/param.h @@ -51,7 +51,7 @@ /* * Signals */ -#include +#include #define NBPW sizeof(int) /* number of bytes in an integer */ @@ -111,7 +111,7 @@ #define MAXHOSTNAMELEN 64 #if defined(KERNEL) && defined(INET) -# include "machine/net_mac.h" +# include #endif /* diff --git a/sys/include/vmsystm.h b/sys/include/vmsystm.h index 6f68a56..c3ddc81 100644 --- a/sys/include/vmsystm.h +++ b/sys/include/vmsystm.h @@ -1,4 +1,6 @@ /* + * Miscellaneous virtual memory subsystem variables and structures. + * * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. @@ -6,20 +8,6 @@ * @(#)vmsystm.h 7.2.1 (2.11BSD GTE) 1/15/95 */ -/* - * Miscellaneous virtual memory subsystem variables and structures. - */ - -#if defined(KERNEL) && defined(UCB_METER) && !defined(SUPERVISOR) -size_t freemem; /* remaining clicks of free memory */ - -u_short avefree; /* moving average of remaining free clicks */ -u_short avefree30; /* 30 sec (avefree is 5 sec) moving average */ - -/* writable copies of tunables */ -int maxslp; /* max sleep time before very swappable */ -#endif - /* * Fork/vfork accounting. */ @@ -31,6 +19,16 @@ struct forkstat long sizvfork; }; -#if defined(KERNEL) && defined(UCB_METER) && !defined(SUPERVISOR) +#if defined(KERNEL) && defined(UCB_METER) +size_t freemem; /* remaining clicks of free memory */ + +u_short avefree; /* moving average of remaining free clicks */ +u_short avefree30; /* 30 sec (avefree is 5 sec) moving average */ + +/* + * writable copies of tunables + */ +int maxslp; /* max sleep time before very swappable */ + struct forkstat forkstat; #endif diff --git a/sys/kernel/exec_aout.c b/sys/kernel/exec_aout.c index 68aa9d8..89cbff2 100644 --- a/sys/kernel/exec_aout.c +++ b/sys/kernel/exec_aout.c @@ -1,20 +1,20 @@ -#include "param.h" -#include "systm.h" -#include "map.h" -#include "inode.h" -#include "user.h" -#include "proc.h" -#include "buf.h" -#include "namei.h" -#include "fs.h" -#include "mount.h" -#include "file.h" -#include "resource.h" -#include "exec.h" -#include "exec_aout.h" -#include "dir.h" -#include "uio.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include int exec_aout_check(struct exec_params *epp) { diff --git a/sys/kernel/exec_conf.c b/sys/kernel/exec_conf.c index 002ca0a..60ac3eb 100644 --- a/sys/kernel/exec_conf.c +++ b/sys/kernel/exec_conf.c @@ -1,5 +1,3 @@ -/* $NetBSD: exec_conf.c,v 1.43 2000/06/09 22:38:57 oki Exp $ */ - /* * Copyright (c) 1993, 1994 Christopher G. Demetriou * All rights reserved. @@ -29,31 +27,18 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include +#include +#include -#include "param.h" -#include "inode.h" -#include "exec.h" - -#ifdef EXEC_SCRIPT int exec_script_check(struct exec_params *epp); -#endif -#ifdef EXEC_AOUT int exec_aout_check(struct exec_params *epp); -#endif -#ifdef EXEC_ELF int exec_elf_check(struct exec_params *epp); -#endif const struct execsw execsw[] = { -#ifdef EXEC_AOUT { exec_aout_check, "a.out" }, /* a.out binaries */ -#endif -#ifdef EXEC_ELF { exec_elf_check, "elf" }, /* 32bit ELF bins */ -#endif -#ifdef EXEC_SCRIPT { exec_script_check, "script" }, /* shell scripts */ -#endif }; int nexecs = (sizeof(execsw) / sizeof(*execsw)); int exec_maxhdrsz; diff --git a/sys/kernel/exec_elf.c b/sys/kernel/exec_elf.c index 82062b0..e2d9c1c 100644 --- a/sys/kernel/exec_elf.c +++ b/sys/kernel/exec_elf.c @@ -1,5 +1,3 @@ -/* $NetBSD: exec_elf32.c,v 1.49.2.2 2000/11/03 20:00:38 tv Exp $ */ - /*- * Copyright (c) 1994 The NetBSD Foundation, Inc. * All rights reserved. @@ -62,22 +60,20 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - - -#include "param.h" -#include "systm.h" -#include "kernel.h" -#include "map.h" -#include "user.h" -#include "proc.h" -#include "inode.h" -#include "namei.h" -#include "exec.h" -#include "exec_elf.h" -#include "fcntl.h" -#include "signalvar.h" -#include "mount.h" -#include "stat.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include extern char sigcode[], esigcode[]; diff --git a/sys/kernel/exec_script.c b/sys/kernel/exec_script.c index fa04b86..315bee1 100644 --- a/sys/kernel/exec_script.c +++ b/sys/kernel/exec_script.c @@ -1,10 +1,10 @@ -#include "param.h" -#include "inode.h" -#include "dir.h" -#include "namei.h" -#include "exec.h" -#include "user.h" -#include "systm.h" +#include +#include +#include +#include +#include +#include +#include int exec_script_check(struct exec_params *epp) diff --git a/sys/kernel/exec_subr.c b/sys/kernel/exec_subr.c index 3f58560..998e755 100644 --- a/sys/kernel/exec_subr.c +++ b/sys/kernel/exec_subr.c @@ -1,19 +1,19 @@ -#include "param.h" -#include "systm.h" -#include "map.h" -#include "inode.h" -#include "user.h" -#include "proc.h" -#include "buf.h" -#include "namei.h" -#include "fs.h" -#include "mount.h" -#include "file.h" -#include "resource.h" -#include "exec.h" -#include "dir.h" -#include "uio.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* * How memory is set up. @@ -260,13 +260,11 @@ void exec_save_args(struct exec_params *epp) if ((argp = epp->userargp) != NULL) while (argp[argc]) argc++; -#ifdef EXEC_SCRIPT if (epp->sh.interpreted) { argc++; if (epp->sh.interparg[0]) argc++; } -#endif if (argc != 0) { if ((epp->argp = (char **)exec_alloc(argc * sizeof(char *), NBPW, epp)) == NULL) return; @@ -283,7 +281,7 @@ void exec_save_args(struct exec_params *epp) ap = *argp++; else ap = NULL; -#ifdef EXEC_SCRIPT + if (epp->sh.interpreted) { if (epp->argc == 0) ap = epp->sh.interpname; @@ -295,7 +293,6 @@ void exec_save_args(struct exec_params *epp) --argp; } } -#endif if (ap == 0) break; l = strlen(ap)+1; diff --git a/sys/kernel/init_main.c b/sys/kernel/init_main.c index 593b49c..8251313 100644 --- a/sys/kernel/init_main.c +++ b/sys/kernel/init_main.c @@ -3,25 +3,25 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "fs.h" -#include "mount.h" -#include "map.h" -#include "proc.h" -#include "ioctl.h" -#include "inode.h" -#include "conf.h" -#include "buf.h" -#include "fcntl.h" -#include "vm.h" -#include "clist.h" -#include "reboot.h" -#include "systm.h" -#include "kernel.h" -#include "namei.h" -#include "stat.h" -#include "rdisk.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include u_int swapstart, nswap; /* start and size of swap space */ size_t physmem; /* total amount of physical memory */ @@ -150,8 +150,11 @@ main() s = spl0(); rdisk_init(); - pipedev = rootdev = get_boot_device(); - swapdev = get_swap_device(); + if (rootdev == NODEV) + rootdev = get_boot_device(); + if (swapdev == NODEV) + swapdev = get_swap_device(); + pipedev = rootdev; /* Mount a root filesystem. */ for (;;) { diff --git a/sys/kernel/init_sysent.c b/sys/kernel/init_sysent.c index ce46da4..1466335 100644 --- a/sys/kernel/init_sysent.c +++ b/sys/kernel/init_sysent.c @@ -5,9 +5,9 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "glob.h" +#include +#include +#include #ifdef INET # define ifnet(narg, name) narg, name diff --git a/sys/kernel/kern_clock.c b/sys/kernel/kern_clock.c index 1c93cb8..3b63959 100644 --- a/sys/kernel/kern_clock.c +++ b/sys/kernel/kern_clock.c @@ -3,13 +3,13 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "callout.h" -#include "dk.h" -#include "kernel.h" -#include "systm.h" +#include +#include +#include +#include +#include +#include +#include int noproc; /* no one is running just now */ diff --git a/sys/kernel/kern_descrip.c b/sys/kernel/kern_descrip.c index 6200ecc..c35e4a4 100644 --- a/sys/kernel/kern_descrip.c +++ b/sys/kernel/kern_descrip.c @@ -3,20 +3,20 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "file.h" -#include "systm.h" -#include "inode.h" -#include "ioctl.h" -#include "stat.h" -#include "conf.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef INET -#include "socket.h" -#include "socketvar.h" +#include +#include #endif -#include +#include const struct devspec fddevs[] = { { 0, "stdin" }, diff --git a/sys/kernel/kern_exec.c b/sys/kernel/kern_exec.c index 18f0162..95530f5 100644 --- a/sys/kernel/kern_exec.c +++ b/sys/kernel/kern_exec.c @@ -3,20 +3,20 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "map.h" -#include "inode.h" -#include "user.h" -#include "proc.h" -#include "buf.h" -#include "namei.h" -#include "fs.h" -#include "mount.h" -#include "file.h" -#include "signalvar.h" -#include "exec.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* * exec system call, with and without environments. @@ -66,9 +66,7 @@ int exec_check(struct exec_params *epp) * Read the first 'SHSIZE' bytes from the file to execute */ DEBUG("Read header %d bytes from %d\n", sizeof(epp->hdr), 0); -#ifdef EXEC_SCRIPT epp->hdr.sh[0] = '\0'; /* for zero length files */ -#endif error = rdwri (UIO_READ, epp->ip, (caddr_t) &epp->hdr, sizeof(epp->hdr), (off_t)0, IO_UNIT, &r); @@ -153,4 +151,3 @@ done: if (ip) iput(ip); } - diff --git a/sys/kernel/kern_exit.c b/sys/kernel/kern_exit.c index 2dbe097..9a10ff9 100644 --- a/sys/kernel/kern_exit.c +++ b/sys/kernel/kern_exit.c @@ -3,16 +3,16 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "map.h" -#include "user.h" -#include "proc.h" -#include "inode.h" -#include "vm.h" -#include "file.h" -#include "wait.h" -#include "kernel.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* * Notify parent that vfork child is finished with parent's data. Called diff --git a/sys/kernel/kern_fork.c b/sys/kernel/kern_fork.c index 656df03..f5e7d81 100644 --- a/sys/kernel/kern_fork.c +++ b/sys/kernel/kern_fork.c @@ -3,16 +3,16 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "map.h" -#include "user.h" -#include "proc.h" -#include "inode.h" -#include "file.h" -#include "vm.h" -#include "kernel.h" -#include "syslog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include int mpid; /* generic for unique process id's */ diff --git a/sys/kernel/kern_glob.c b/sys/kernel/kern_glob.c index 71b3e59..0054950 100644 --- a/sys/kernel/kern_glob.c +++ b/sys/kernel/kern_glob.c @@ -6,9 +6,9 @@ * byte = rdglob(addr); * success = wrglob(addr,byte); */ -#include "param.h" -#include "systm.h" -#include "user.h" +#include +#include +#include #ifndef GLOBSZ #define GLOBSZ 256 diff --git a/sys/kernel/kern_mman.c b/sys/kernel/kern_mman.c index 4705f05..b7f324d 100644 --- a/sys/kernel/kern_mman.c +++ b/sys/kernel/kern_mman.c @@ -3,11 +3,11 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "vm.h" -#include "systm.h" +#include +#include +#include +#include +#include void brk() diff --git a/sys/kernel/kern_proc.c b/sys/kernel/kern_proc.c index da4d820..4a302d6 100644 --- a/sys/kernel/kern_proc.c +++ b/sys/kernel/kern_proc.c @@ -3,10 +3,10 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "systm.h" +#include +#include +#include +#include /* * Is p an inferior of the current process? diff --git a/sys/kernel/kern_prot.c b/sys/kernel/kern_prot.c index 7b7306c..8666885 100644 --- a/sys/kernel/kern_prot.c +++ b/sys/kernel/kern_prot.c @@ -5,10 +5,10 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "systm.h" +#include +#include +#include +#include void getpid() diff --git a/sys/kernel/kern_prot2.c b/sys/kernel/kern_prot2.c index bbe5287..c184cb3 100644 --- a/sys/kernel/kern_prot2.c +++ b/sys/kernel/kern_prot2.c @@ -35,10 +35,10 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "systm.h" +#include +#include +#include +#include void setuid() diff --git a/sys/kernel/kern_resource.c b/sys/kernel/kern_resource.c index 707da9c..63bb3de 100644 --- a/sys/kernel/kern_resource.c +++ b/sys/kernel/kern_resource.c @@ -3,12 +3,12 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "systm.h" -#include "vm.h" -#include "kernel.h" +#include +#include +#include +#include +#include +#include /* * Resource controls and accounting. diff --git a/sys/kernel/kern_sig.c b/sys/kernel/kern_sig.c index 0d52cbd..02cbb63 100644 --- a/sys/kernel/kern_sig.c +++ b/sys/kernel/kern_sig.c @@ -3,13 +3,13 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "user.h" -#include "inode.h" -#include "proc.h" -#include "namei.h" -#include "signalvar.h" +#include +#include +#include +#include +#include +#include +#include /* * Can the current process send the signal `signum' to process `q'? diff --git a/sys/kernel/kern_subr.c b/sys/kernel/kern_subr.c index d1d88e5..9cb5d52 100644 --- a/sys/kernel/kern_subr.c +++ b/sys/kernel/kern_subr.c @@ -3,11 +3,11 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "user.h" -#include "buf.h" -#include "uio.h" +#include +#include +#include +#include +#include /* * Move data to/from user space. diff --git a/sys/kernel/kern_synch.c b/sys/kernel/kern_synch.c index f8d011f..2b35c1f 100644 --- a/sys/kernel/kern_synch.c +++ b/sys/kernel/kern_synch.c @@ -3,15 +3,15 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "buf.h" -#include "signal.h" -#include "signalvar.h" -#include "vm.h" -#include "kernel.h" -#include "systm.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include #define SQSIZE 16 /* Must be power of 2 */ diff --git a/sys/kernel/kern_sysctl.c b/sys/kernel/kern_sysctl.c index a7a28b6..bdf7f77 100644 --- a/sys/kernel/kern_sysctl.c +++ b/sys/kernel/kern_sysctl.c @@ -49,7 +49,7 @@ #include #include #include -#include +#include sysctlfn kern_sysctl; sysctlfn hw_sysctl; diff --git a/sys/kernel/kern_time.c b/sys/kernel/kern_time.c index f585529..4c488b1 100644 --- a/sys/kernel/kern_time.c +++ b/sys/kernel/kern_time.c @@ -3,11 +3,11 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "kernel.h" -#include "systm.h" +#include +#include +#include +#include +#include static void setthetime (tv) diff --git a/sys/kernel/rdisk.c b/sys/kernel/rdisk.c index 6631c10..dcede24 100644 --- a/sys/kernel/rdisk.c +++ b/sys/kernel/rdisk.c @@ -1,12 +1,12 @@ -#include "param.h" -#include "systm.h" -#include "buf.h" -#include "errno.h" -#include "dk.h" -#include "debug.h" -#include "ioctl.h" -#include "rdisk.h" -#include "conf.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include #define Q2(X) #X #define QUOTE(X) Q2((X)) @@ -32,19 +32,19 @@ extern int sdopen(int unit, int flags, int mode); extern int sdsize(int unit); #ifdef SRAMC_ENABLED -#include +#include #endif #ifdef SDRAMP_ENABLED -#include +#include #endif #ifdef FLASH_ENABLED -#include +#include #endif #ifdef MRAMS_ENABLED -#include +#include #endif #ifdef SPIRAMS_ENABLED -#include +#include #endif int no_deinit(int u) { return 0; } diff --git a/sys/kernel/subr_log.c b/sys/kernel/subr_log.c index a45d936..ec4063b 100644 --- a/sys/kernel/subr_log.c +++ b/sys/kernel/subr_log.c @@ -19,18 +19,18 @@ #define NLOG 1 int nlog = 1; -#include "param.h" -#include "user.h" -#include "proc.h" -#include "ioctl.h" -#include "msgbuf.h" -#include "file.h" -#include "inode.h" -#include "errno.h" -#include "uio.h" -#include "map.h" -#include "systm.h" -#include "conf.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include const struct devspec logdevs[] = { { 0, "klog" }, diff --git a/sys/kernel/subr_prf.c b/sys/kernel/subr_prf.c index c7c3065..902d467 100644 --- a/sys/kernel/subr_prf.c +++ b/sys/kernel/subr_prf.c @@ -3,16 +3,16 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "buf.h" -#include "msgbuf.h" -#include "conf.h" -#include "ioctl.h" -#include "tty.h" -#include "reboot.h" -#include "systm.h" -#include "syslog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #define TOCONS 0x1 #define TOTTY 0x2 diff --git a/sys/kernel/subr_rmap.c b/sys/kernel/subr_rmap.c index 56eb615..66fddab 100644 --- a/sys/kernel/subr_rmap.c +++ b/sys/kernel/subr_rmap.c @@ -3,10 +3,10 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "map.h" -#include "vm.h" +#include +#include +#include +#include /* * Resource map handling routines. diff --git a/sys/kernel/sys_generic.c b/sys/kernel/sys_generic.c index c052fe5..197aa49 100644 --- a/sys/kernel/sys_generic.c +++ b/sys/kernel/sys_generic.c @@ -3,17 +3,17 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "signalvar.h" -#include "inode.h" -#include "file.h" -#include "ioctl.h" -#include "conf.h" -#include "uio.h" -#include "kernel.h" -#include "systm.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include int selwait; @@ -228,7 +228,7 @@ selscan(ibits, obits, nfd, retval) fd_set *ibits, *obits; int nfd, *retval; { - register int i, j, flag; + register int i, j, flag = 0; fd_mask bits; struct file *fp; int which, n = 0; diff --git a/sys/kernel/sys_inode.c b/sys/kernel/sys_inode.c index 2ba579a..a285881 100644 --- a/sys/kernel/sys_inode.c +++ b/sys/kernel/sys_inode.c @@ -3,23 +3,23 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "signalvar.h" -#include "inode.h" -#include "buf.h" -#include "fs.h" -#include "file.h" -#include "stat.h" -#include "mount.h" -#include "conf.h" -#include "uio.h" -#include "ioctl.h" -#include "tty.h" -#include "kernel.h" -#include "systm.h" -#include "syslog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include daddr_t rablock; /* block to be read ahead */ diff --git a/sys/kernel/sys_pipe.c b/sys/kernel/sys_pipe.c index bf3e5e0..7c380ba 100644 --- a/sys/kernel/sys_pipe.c +++ b/sys/kernel/sys_pipe.c @@ -3,15 +3,15 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "user.h" -#include "proc.h" -#include "inode.h" -#include "file.h" -#include "fs.h" -#include "mount.h" -#include "uio.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include int readp (fp, uio, flag) diff --git a/sys/kernel/sys_process.c b/sys/kernel/sys_process.c index 1f9ecd8..66b49f3 100644 --- a/sys/kernel/sys_process.c +++ b/sys/kernel/sys_process.c @@ -3,13 +3,13 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "user.h" -#include "proc.h" -#include "inode.h" -#include "vm.h" -#include "ptrace.h" +#include +#include +#include +#include +#include +#include +#include /* * sys-trace system call. diff --git a/sys/kernel/tty.c b/sys/kernel/tty.c index 4933a94..a5fef87 100644 --- a/sys/kernel/tty.c +++ b/sys/kernel/tty.c @@ -3,19 +3,19 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "ioctl.h" -#include "tty.h" -#include "proc.h" -#include "file.h" -#include "conf.h" -#include "dk.h" -#include "uio.h" -#include "kernel.h" -#include "systm.h" -#include "inode.h" -#include "syslog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include static int rts = TIOCM_RTS; diff --git a/sys/kernel/tty_pty.c b/sys/kernel/tty_pty.c index 5a08a92..32cedc4 100644 --- a/sys/kernel/tty_pty.c +++ b/sys/kernel/tty_pty.c @@ -6,22 +6,22 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "pty.h" +#include #if NPTY > 0 -#include "param.h" -#include "systm.h" -#include "ioctl.h" -#include "tty.h" -#include "user.h" -#include "conf.h" -#include "file.h" -#include "proc.h" -#include "uio.h" -#include "kernel.h" -#include "inode.h" -#include "types.h" -#include "ttydev.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include const struct devspec ptsdevs[] = { { 0, "ttyp0" }, { 1, "ttyp1" }, { 2, "ttyp2" }, { 3, "ttyp3" }, diff --git a/sys/kernel/tty_subr.c b/sys/kernel/tty_subr.c index 9d3d4ea..0c785d7 100644 --- a/sys/kernel/tty_subr.c +++ b/sys/kernel/tty_subr.c @@ -3,11 +3,11 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "clist.h" -#include "ioctl.h" -#include "tty.h" -#include "systm.h" +#include +#include +#include +#include +#include char cwaiting; diff --git a/sys/kernel/tty_tty.c b/sys/kernel/tty_tty.c index 8a63d5d..63774a4 100644 --- a/sys/kernel/tty_tty.c +++ b/sys/kernel/tty_tty.c @@ -10,12 +10,12 @@ * Indirect driver for controlling tty. * */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "ioctl.h" -#include "tty.h" -#include "conf.h" +#include +#include +#include +#include +#include +#include const struct devspec sydevs[] = { { 0, "tty" }, diff --git a/sys/kernel/ufs_alloc.c b/sys/kernel/ufs_alloc.c index 2d78f67..8670241 100644 --- a/sys/kernel/ufs_alloc.c +++ b/sys/kernel/ufs_alloc.c @@ -3,16 +3,16 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "fs.h" -#include "dir.h" -#include "inode.h" -#include "buf.h" -#include "user.h" -#include "kernel.h" -#include "mount.h" -#include "proc.h" -#include "systm.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include typedef struct fblk *FBLKP; diff --git a/sys/kernel/ufs_bio.c b/sys/kernel/ufs_bio.c index 5e4ce91..00d04bb 100644 --- a/sys/kernel/ufs_bio.c +++ b/sys/kernel/ufs_bio.c @@ -3,15 +3,15 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "buf.h" -#include "user.h" -#include "conf.h" -#include "fs.h" -#include "dk.h" -#include "systm.h" -#include "map.h" -#include "proc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include /* * Read in (if necessary) the block and return a buffer pointer. diff --git a/sys/kernel/ufs_bmap.c b/sys/kernel/ufs_bmap.c index f768f37..54ce4ed 100644 --- a/sys/kernel/ufs_bmap.c +++ b/sys/kernel/ufs_bmap.c @@ -3,16 +3,16 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "conf.h" -#include "dir.h" -#include "inode.h" -#include "user.h" -#include "buf.h" -#include "fs.h" -#include "mount.h" -#include "uio.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* * Bmap defines the structure of file system storage diff --git a/sys/kernel/ufs_dsort.c b/sys/kernel/ufs_dsort.c index 4e8f9fc..f3e7a83 100644 --- a/sys/kernel/ufs_dsort.c +++ b/sys/kernel/ufs_dsort.c @@ -9,11 +9,10 @@ /* * generalized seek sort for disk */ - -#include "param.h" -#include "systm.h" -#include "buf.h" -#include "dk.h" +#include +#include +#include +#include void disksort (dp, bp) diff --git a/sys/kernel/ufs_fio.c b/sys/kernel/ufs_fio.c index 8f7d33b..ea707db 100644 --- a/sys/kernel/ufs_fio.c +++ b/sys/kernel/ufs_fio.c @@ -3,14 +3,14 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "fs.h" -#include "inode.h" -#include "mount.h" -#include "namei.h" -#include "systm.h" -#include "stat.h" +#include +#include +#include +#include +#include +#include +#include +#include /* * Check mode permission on inode pointer. diff --git a/sys/kernel/ufs_inode.c b/sys/kernel/ufs_inode.c index 31bf5a0..860336c 100644 --- a/sys/kernel/ufs_inode.c +++ b/sys/kernel/ufs_inode.c @@ -3,16 +3,16 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "inode.h" -#include "fs.h" -#include "mount.h" -#include "kernel.h" -#include "buf.h" -#include "systm.h" -#include "syslog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #define INOHSZ 16 /* must be power of two */ #define INOHASH(dev,ino) (((dev)+(ino))&(INOHSZ-1)) diff --git a/sys/kernel/ufs_mount.c b/sys/kernel/ufs_mount.c index 0e2f91b..e934889 100644 --- a/sys/kernel/ufs_mount.c +++ b/sys/kernel/ufs_mount.c @@ -3,19 +3,19 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "user.h" -#include "inode.h" -#include "fs.h" -#include "buf.h" -#include "mount.h" -#include "file.h" -#include "namei.h" -#include "conf.h" -#include "stat.h" -#include "ioctl.h" -#include "proc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* * Common code for mount and umount. diff --git a/sys/kernel/ufs_namei.c b/sys/kernel/ufs_namei.c index 905a651..f86fe40 100644 --- a/sys/kernel/ufs_namei.c +++ b/sys/kernel/ufs_namei.c @@ -3,16 +3,16 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "dir.h" -#include "inode.h" -#include "fs.h" -#include "mount.h" -#include "user.h" -#include "buf.h" -#include "namei.h" -#include "proc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include int dirchk = 0; diff --git a/sys/kernel/ufs_subr.c b/sys/kernel/ufs_subr.c index bf4b889..38e4b19 100644 --- a/sys/kernel/ufs_subr.c +++ b/sys/kernel/ufs_subr.c @@ -3,15 +3,15 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "fs.h" -#include "inode.h" -#include "buf.h" -#include "mount.h" -#include "kernel.h" -#include "systm.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include int updlock; /* lock for sync */ diff --git a/sys/kernel/ufs_syscalls.c b/sys/kernel/ufs_syscalls.c index 85a425c..3ec55dc 100644 --- a/sys/kernel/ufs_syscalls.c +++ b/sys/kernel/ufs_syscalls.c @@ -3,16 +3,16 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "user.h" -#include "inode.h" -#include "namei.h" -#include "fs.h" -#include "file.h" -#include "stat.h" -#include "kernel.h" -#include "proc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* * Common routine for chroot and chdir. diff --git a/sys/kernel/ufs_syscalls2.c b/sys/kernel/ufs_syscalls2.c index f3dfed2..39bc460 100644 --- a/sys/kernel/ufs_syscalls2.c +++ b/sys/kernel/ufs_syscalls2.c @@ -2,17 +2,17 @@ * ufs_syscalls was getting too large. Various UFS related system calls were * relocated to this file. */ -#include "param.h" -#include "sys/file.h" -#include "user.h" -#include "inode.h" -#include "buf.h" -#include "fs.h" -#include "namei.h" -#include "mount.h" -#include "kernel.h" -#include "systm.h" -#include "proc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include static int statfs1 (mp, sbp) diff --git a/sys/kernel/vfs_vnops.c b/sys/kernel/vfs_vnops.c index 98ecd3e..56080f3 100644 --- a/sys/kernel/vfs_vnops.c +++ b/sys/kernel/vfs_vnops.c @@ -41,8 +41,7 @@ #include #include #include - -#include "systm.h" +#include /* * 2.11BSD does not have "vnodes", having instead only old fashioned "inodes". diff --git a/sys/kernel/vm_sched.c b/sys/kernel/vm_sched.c index 8a9cb88..72aa3ee 100644 --- a/sys/kernel/vm_sched.c +++ b/sys/kernel/vm_sched.c @@ -3,13 +3,13 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "vm.h" -#include "kernel.h" -#include "systm.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include #define MINFINITY -32767 /* minus infinity */ diff --git a/sys/kernel/vm_swap.c b/sys/kernel/vm_swap.c index d89f5ae..588b011 100644 --- a/sys/kernel/vm_swap.c +++ b/sys/kernel/vm_swap.c @@ -3,13 +3,13 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "map.h" -#include "buf.h" -#include "systm.h" -#include "vm.h" +#include +#include +#include +#include +#include +#include +#include /* * Swap a process in. diff --git a/sys/kernel/vm_swp.c b/sys/kernel/vm_swp.c index 4af7dd3..34cc484 100644 --- a/sys/kernel/vm_swp.c +++ b/sys/kernel/vm_swp.c @@ -3,14 +3,14 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "proc.h" -#include "buf.h" -#include "conf.h" -#include "systm.h" -#include "vm.h" -#include "uio.h" +#include +#include +#include +#include +#include +#include +#include +#include /* * swap I/O diff --git a/sys/pic32/32mxsdram-uart/Makefile b/sys/pic32/32mxsdram-uart/Makefile deleted file mode 100644 index 66cec62..0000000 --- a/sys/pic32/32mxsdram-uart/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel - -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) - -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rd_sdramp.o rdisk.o sdram.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = - -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=tty2 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DHZ=1000 -DEFS += -DKERNEL -DEFS += -DKERNEL_EXECUTABLE_RAM -DEFS += -DLED_DISK_PIN=13 -DEFS += -DLED_DISK_PORT=TRISC -DEFS += -DLED_KERNEL_PIN=15 -DEFS += -DLED_KERNEL_PORT=TRISA -DEFS += -DLED_SWAP_PIN=14 -DEFS += -DLED_SWAP_PORT=TRISC -DEFS += -DLED_TTY_PIN=14 -DEFS += -DLED_TTY_PORT=TRISA -DEFS += -DNMOUNT=3 -DEFS += -DNPROC=20 -DEFS += -DPARTITION="sdramp0:sa@2048,fs@14000" -DEFS += -DPIC32MX7 -DEFS += -DPWM_ENABLED=YES -DEFS += -DSD0_CS_PIN=3 -DEFS += -DSD0_CS_PORT=TRISF -DEFS += -DSD0_ENA_PIN=13 -DEFS += -DSD0_ENA_PORT=TRISB -DEFS += -DSD0_MHZ=13 -DEFS += -DSD0_PORT=4 -DEFS += -DSDRAMP_ENABLED=YES -DEFS += -DUART3_BAUD=115200 -DEFS += -DUART3_ENABLED=YES -DEFS += -DUCB_METER - - -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-sdram.ld - -CONFIG = 32MXSDRAM-UART -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk diff --git a/sys/pic32/32mxsdram-uart/.gitignore b/sys/pic32/32mxsdram/.gitignore similarity index 77% rename from sys/pic32/32mxsdram-uart/.gitignore rename to sys/pic32/32mxsdram/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/32mxsdram-uart/.gitignore +++ b/sys/pic32/32mxsdram/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/32mxsdram/32mxsdram-schematics.pdf b/sys/pic32/32mxsdram/32mxsdram-schematics.pdf new file mode 100644 index 0000000..57a37d5 Binary files /dev/null and b/sys/pic32/32mxsdram/32mxsdram-schematics.pdf differ diff --git a/sys/pic32/32mxsdram/Config b/sys/pic32/32mxsdram/Config new file mode 100644 index 0000000..506aa41 --- /dev/null +++ b/sys/pic32/32mxsdram/Config @@ -0,0 +1,79 @@ +# +# 32MXSDRAM board PCB v1.0 with UART console +# =========================================== +# Console on UART3. +# +# To build the kernel, use: +# cd sys/pic32/32mxsdram +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "CUSTOM_32MXSDRAM" # Board type +ldscript "32mxsdram/bootloader.ld" # Linker script + +# Standard system options +options "HZ=1000" # Rate of timer interrupt +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 +options "NPROC=20" + +# LED +options "LED_KERNEL_PORT=TRISA" # for kernel activity LED... +options "LED_KERNEL_PIN=15" # ...use pin RA15 +options "LED_DISK_PORT=TRISC" # for disk activity LED... +options "LED_DISK_PIN=13" # ...use pin RC13 +options "LED_SWAP_PORT=TRISC" # for swap activity LED... +options "LED_SWAP_PIN=14" # ...use pin RC14 +options "LED_TTY_PORT=TRISA" # for serial activity LED... +options "LED_TTY_PIN=14" # ...use pin RA14 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Serial UART ports +device uart3 + +# Console options +options "CONSOLE_DEVICE=tty2" # /dev/tty2 + +# SPI ports +controller spi4 # SD card + +# sdcard's definition for the SPI port, sdcard's chipselect and high-side power switch +# because of a mod on the board we use power=B13, otherwise it shall be D12 +device sd0 at spi4 + pins RF3, RB13 # select pin, enable pin +options "SD0_MHZ=10" # speed 10 MHz +options "SD0_PORT=4" # at spi4 TODO: delete +options "SD0_CS_PORT=TRISF" # for chip select... TODO: delete +options "SD0_CS_PIN=3" # ...use pin RF3 TODO: delete +options "SD0_ENA_PORT=TRISB" # for microSD enable... TODO: delete +options "SD0_ENA_PIN=13" # ...use pin RB13 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm + +# Use SDRAM driver for the external ramdisk +device sdramp0 # SDRAM on external memory bus +options "KERNEL_EXECUTABLE_RAM" # allow kernel code in RAM area + +# This defines the swap size and a fs partition size on the external ramdisk. +# When the sa@XXXX is larger than the SWAP_KBYTES, the system will use +# the swap located on the external ramdisk automatically. +# (sd@xxxx + fs@xxxx) <= ramdisk_size +options "PARTITION='sdramp0:sa@2048,fs@14000'" +options "NMOUNT=3" diff --git a/sys/pic32/32mxsdram/Makefile b/sys/pic32/32mxsdram/Makefile new file mode 100644 index 0000000..c78572d --- /dev/null +++ b/sys/pic32/32mxsdram/Makefile @@ -0,0 +1,371 @@ +PARAM = -DCUSTOM_32MXSDRAM +PARAM += -DPIC32MX7 +PARAM += -DUART3_ENABLED +PARAM += -DSPI4_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSDRAMP_ENABLED +PARAM += -DNMOUNT=3 +PARAM += -DPARTITION='sdramp0:sa@2048,fs@14000' +PARAM += -DKERNEL_EXECUTABLE_RAM +PARAM += -DSD0_ENA_PIN=13 +PARAM += -DSD0_ENA_PORT=TRISB +PARAM += -DSD0_CS_PIN=3 +PARAM += -DSD0_CS_PORT=TRISF +PARAM += -DSD0_PORT=4 +PARAM += -DSD0_MHZ=10 +PARAM += -DCONSOLE_DEVICE=tty2 +PARAM += -DLED_TTY_PIN=14 +PARAM += -DLED_TTY_PORT=TRISA +PARAM += -DLED_SWAP_PIN=14 +PARAM += -DLED_SWAP_PORT=TRISC +PARAM += -DLED_DISK_PIN=13 +PARAM += -DLED_DISK_PORT=TRISC +PARAM += -DLED_KERNEL_PIN=15 +PARAM += -DLED_KERNEL_PORT=TRISA +PARAM += -DNPROC=20 +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +PARAM += -DHZ=1000 +LDSCRIPT = "32mxsdram/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk + +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump + +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif + +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o rd_sdramp.o sdram.o signal.o spi.o spi_bus.o swap.o \ + sysctl.o uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/rd_sdramp.c $S/pic32/signal.c \ + $S/pic32/spi.c $S/pic32/spi_bus.c $S/pic32/swap.c \ + $S/pic32/sysctl.c $S/pic32/uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +rd_sdramp.o: $S/pic32/rd_sdramp.c + ${COMPILE_C} + +sdram.o: $S/pic32/sdram.S + ${COMPILE_S} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +uart.o: $S/pic32/uart.c + ${COMPILE_C} + + +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/cfg/bootloader-sdram.ld b/sys/pic32/32mxsdram/bootloader.ld similarity index 95% rename from sys/pic32/cfg/bootloader-sdram.ld rename to sys/pic32/32mxsdram/bootloader.ld index ba65550..b9da665 100644 --- a/sys/pic32/cfg/bootloader-sdram.ld +++ b/sys/pic32/32mxsdram/bootloader.ld @@ -14,6 +14,7 @@ MEMORY u0area (rw!x): ORIGIN = 0x800062C0, LENGTH = 3K uarea (rw!x): ORIGIN = 0x80006EC0, LENGTH = 3K keram (rwx) : ORIGIN = 0x80007AC0, LENGTH = 0x540 + devcfg (r) : ORIGIN = 0x9fc02ff0, LENGTH = 16 /* Required by Microchip C32 linker */ kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0x80000 @@ -46,6 +47,8 @@ SECTIONS *(.glue_7t) *(.glue_7) __rodata_start = . ; *(.rodata .rodata.* .gnu.linkonce.r.* .rel.dyn) + __abiflags = . ; + *(.MIPS.abiflags) *(.dinit) /* Align here to ensure that the .text section ends on word boundary. */ . = ALIGN (32 / 8); @@ -66,6 +69,15 @@ SECTIONS _edata = .; } > ram + /* Device configuration. */ + .config : + { + *(.config3) + *(.config2) + *(.config1) + *(.config0) + } > devcfg + .bss ADDR (.data) + SIZEOF (.data) (NOLOAD) : { __bss_start = .; diff --git a/sys/pic32/32mxsdram-uart/devcfg.c b/sys/pic32/32mxsdram/devcfg.c similarity index 100% rename from sys/pic32/32mxsdram-uart/devcfg.c rename to sys/pic32/32mxsdram/devcfg.c diff --git a/sys/pic32/Config.generic b/sys/pic32/Config.generic new file mode 100644 index 0000000..9b9aef1 --- /dev/null +++ b/sys/pic32/Config.generic @@ -0,0 +1,261 @@ +# +# Generic kernel configuration for PIC32 processor. +# +# This file contains all the devices and all the options available +# for the pic32 platform. It's not expected to be buildable, as some +# devices and options are mutually exclusive or incompatible. +# It's intended to be used as a reference or as a starting point +# when creating configuration for a new board. +# +# For details, see http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "CHIPKIT_MAX32" # Board type + +# Linker script +ldscript "max32/bootloader.ld" + +# Need to set locally +timezone 8 dst +maxusers 2 + +# Standard system options +options "HZ=100" # Rate of clock interrupt +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 +options "EXEC_AOUT" # Run a.out binaries +options "EXEC_ELF" # Run ELF binaries +options "EXEC_SCRIPT" # Run shell scripts +options "UCB_METER" # Collect kernel statistics +options "NPROC=10" # Number of processes, default 10 +options "NBUF=10" # Number of i/o buffers, default 10 +options "NFILE=24" # Number of files, default 24 +options "NINODE=24" # Number of i-nodes, default 24 +options "NMOUNT=2" # Number of mounted filesystems, default 2 +options "SMAPSIZ=NPROC" # Size of swap map, default NPROC +options "HALTREBOOT" # Reboot the processor on halt() +options "KERNEL_HIGHLIGHT" # Highlight kernel messages +options "PARTITION='%1'" # Partition schema for RAM device + +# LEDs +options "LED_DISK_PORT=TRISF" # for disk activity LED... +options "LED_DISK_PIN=0" # ...use pin RF0 +options "LED_DISK_INVERT" # invert disk LED +options "LED_SWAP_PORT=TRISF" # for swap activity LED... +options "LED_SWAP_PIN=1" # ...use pin RF1 +options "LED_SWAP_INVERT" # invert swap LED +options "LED_TTY_PORT=TRISA" # for tty LED... +options "LED_TTY_PIN=2" # ...use pin RA2 +options "LED_TTY_INVERT" # invert tty LED +options "LED_KERNEL_PORT=TRISA" # for kernel actibity LED... +options "LED_KERNEL_PIN=3" # ...use pin RA3 +options "LED_KERNEL_INVERT" # invert kernel LED + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + dumps on sd0b + +# Serial UART ports +device uart1 # Serial-to-USB converter +device uart2 +device uart3 +device uart4 +options "UART1_BAUD=115200" # default speed +options "UART2_BAUD=115200" # default speed +options "UART3_BAUD=115200" # default speed +options "UART4_BAUD=115200" # default speed +options "UART4_ENA_PORT=TRISB" # to enable power for uart4... +options "UART4_ENA_PIN=13" # ...use pin RB13 + +# USB UART ports +device uartusb # USB device mode, CDC function +options "UARTUSB_BAUD=115200" # default speed +options "USB_AUTOBOOT=YES" # don't wait for on boot +options "USB_MAX_EP_NUMBER=3" # parameters of USB device... +options "USB_NUM_STRING_DESCRIPTORS=3" # ...specific for CDC function + +# Console options +options "CONSOLE_DEVICE=tty0" # /dev/tty0 +#TODO: options "CONS_MAJOR=17" # use UART device as console +#TODO: options "CONS_MINOR=0" # use uart1 unit as console + +# SPI ports +controller spi2 # SD card + +# microSD card +device sd0 at spi2 + pins RC14, RA5 # select pin, enable pin +options "SD0_MHZ=10" # speed 10 MHz +options "SD0_PORT=2" # at spi2 TODO: delete +options "SD0_CS_PORT=TRISC" # for chip select... TODO: delete +options "SD0_CS_PIN=14" # ...use pin RC14 TODO: delete +options "SD0_ENA_PORT=TRISA" # to enable SD card... TODO: delete +options "SD0_ENA_PIN=5" # ...use pin RA5 TODO: delete + +# General purpose I/O ports +device gpio0 +options "GPIO_CLEAR_PORT=TRISA" # clear on startup... +options "GPIO_CLEAR_PIN=5" # ...pin RA5 + +# ADC driver +device adc + +# PWM driver +device pwm + +# GLCD driver +device glcd + +# HX8357 driver +device hxtft + +# Skeleton driver +device skel + +# Pseudo terminals +service pty 4 + +# System log +service log + +# Power control +device power +options "POWER_LED_PORT=TRISA" # for power LED... +options "POWER_LED_PIN=3" # ...use pin RA3 +options "POWER_SWITCH_PORT=TRISA" # for power switch... +options "POWER_SWITCH_PIN=4" # ...use pin RA4 +options "POWER_CONTROL_PORT=TRISA" # for power switch... +options "POWER_CONTROL_PIN=5" # ...use pin RA5 + +#-------------------------------------------- +# Custom RAM disk devices +# + +# sdramp - SDRAM block device +device sdramp0 # SDRAM on external memory bus +options "KERNEL_EXECUTABLE_RAM" # allow kernel code in RAM area + +# sramc - SRAM block device +device sramc0 # SRAM via 4-wire CPLD interface +options "SRAMC_DATA_PORT=TRISE" # for DATA signal... +options "SRAMC_DATA_PIN=0" # ...use pin RE0 +options "SRAMC_LDA_PORT=TRISC" # for LDA signal... +options "SRAMC_LDA_PIN=13" # ...use pin RC13 +options "SRAMC_RD_PORT=TRISF" # for RD signal... +options "SRAMC_RD_PIN=1" # ...use pin RF1 +options "SRAMC_WR_PORT=TRISF" # for WR signal... +options "SRAMC_WR_PIN=0" # ...use pin RF0 + +# picga - SPI block device +controller spi1 # RAM disk: picga +device picga0 at spi1 +options "PICGA_BUS=SPI1CON" # TODO: delete this option +options "PICGA_CS_PORT=TRISA" # for CS... +options "PICGA_CS_PIN=4" # ...use pin RA4 + +# mrams - SPI block device +controller spi1 # RAM disk: mrams +device mrams0 at spi1 +options "MRAMS_PORT=SPI1CON" # TODO: delete this option +options "MRAMS_CHIPS=6" # number of chips +options "MRAMS_CHIPSIZE=512" # chip size in kbytes +options "MRAMS_MHZ=10" # speed 10 MHz +options "MRAMS_CS0_PORT=TRISA" # for CS0... +options "MRAMS_CS0_PIN=4" # ...use pin RA4 +options "MRAMS_CS1_PORT=TRISA" # for CS1... +options "MRAMS_CS1_PIN=2" # ...use pin RA2 +options "MRAMS_CS2_PORT=TRISB" # for CS2... +options "MRAMS_CS2_PIN=14" # ...use pin RB14 +options "MRAMS_CS3_PORT=TRISB" # for CS3... +options "MRAMS_CS3_PIN=12" # ...use pin RB12 +options "MRAMS_CS4_PORT=TRISB" # for CS4... +options "MRAMS_CS4_PIN=10" # ...use pin RB10 +options "MRAMS_CS5_PORT=TRISB" # for CS5... +options "MRAMS_CS5_PIN=11" # ...use pin RB11 +options "MRAMS_LED0_PORT=TRISF" # for LED0... +options "MRAMS_LED0_PIN=0" # ...use pin RF0 +options "MRAMS_LED1_PORT=TRISF" # for LED1... +options "MRAMS_LED1_PIN=1" # ...use pin RF1 +options "MRAMS_LED2_PORT=TRISF" # for LED2... +options "MRAMS_LED2_PIN=2" # ...use pin RF2 +options "MRAMS_LED3_PORT=TRISF" # for LED3... +options "MRAMS_LED3_PIN=3" # ...use pin RF3 +options "MRAMS_LED4_PORT=TRISF" # for LED4... +options "MRAMS_LED4_PIN=4" # ...use pin RF4 +options "MRAMS_LED5_PORT=TRISF" # for LED5... +options "MRAMS_LED5_PIN=5" # ...use pin RF5 + +# spirams - SPI block device +controller spi1 # RAM disk: spirams +device spirams0 at spi1 +options "SPIRAMS_PORT=SPI1CON" # TODO: delete this option +options "SPIRAMS_CHIPSIZE=128" # chip size in kbytes +options "SPIRAMS_CHIPS=16" # number of chips +options "SPIRAMS_MHZ=10" # speed 10 MHz +options "SPIRAMS_CS0_PORT=TRISF" # for CS0... +options "SPIRAMS_CS0_PIN=0" # ...use pin RF0 +options "SPIRAMS_CS1_PORT=TRISF" # for CS1... +options "SPIRAMS_CS1_PIN=1" # ...use pin RF1 +options "SPIRAMS_CS2_PORT=TRISF" # for CS2... +options "SPIRAMS_CS2_PIN=2" # ...use pin RF2 +options "SPIRAMS_CS3_PORT=TRISF" # for CS3... +options "SPIRAMS_CS3_PIN=3" # ...use pin RF3 +options "SPIRAMS_CS4_PORT=TRISF" # for CS4... +options "SPIRAMS_CS4_PIN=4" # ...use pin RF4 +options "SPIRAMS_CS5_PORT=TRISF" # for CS5... +options "SPIRAMS_CS5_PIN=5" # ...use pin RF5 +options "SPIRAMS_CS6_PORT=TRISF" # for CS6... +options "SPIRAMS_CS6_PIN=6" # ...use pin RF6 +options "SPIRAMS_CS7_PORT=TRISF" # for CS7... +options "SPIRAMS_CS7_PIN=7" # ...use pin RF7 +options "SPIRAMS_CS8_PORT=TRISF" # for CS8... +options "SPIRAMS_CS8_PIN=8" # ...use pin RF8 +options "SPIRAMS_CS9_PORT=TRISF" # for CS9... +options "SPIRAMS_CS9_PIN=9" # ...use pin RF9 +options "SPIRAMS_CS10_PORT=TRISF" # for CS10... +options "SPIRAMS_CS10_PIN=10" # ...use pin RF10 +options "SPIRAMS_CS11_PORT=TRISF" # for CS11... +options "SPIRAMS_CS11_PIN=11" # ...use pin RF11 +options "SPIRAMS_CS12_PORT=TRISF" # for CS12... +options "SPIRAMS_CS12_PIN=12" # ...use pin RF12 +options "SPIRAMS_CS13_PORT=TRISF" # for CS13... +options "SPIRAMS_CS13_PIN=13" # ...use pin RF13 +options "SPIRAMS_CS14_PORT=TRISF" # for CS14... +options "SPIRAMS_CS14_PIN=14" # ...use pin RF14 +options "SPIRAMS_CS15_PORT=TRISF" # for CS15... +options "SPIRAMS_CS15_PIN=15" # ...use pin RF15 +options "SPIRAMS_LED0_PORT=TRISG" # for LED0... +options "SPIRAMS_LED0_PIN=0" # ...use pin RG0 +options "SPIRAMS_LED1_PORT=TRISG" # for LED1... +options "SPIRAMS_LED1_PIN=1" # ...use pin RG1 +options "SPIRAMS_LED2_PORT=TRISG" # for LED2... +options "SPIRAMS_LED2_PIN=2" # ...use pin RG2 +options "SPIRAMS_LED3_PORT=TRISG" # for LED3... +options "SPIRAMS_LED3_PIN=3" # ...use pin RG3 +options "SPIRAMS_LED4_PORT=TRISG" # for LED4... +options "SPIRAMS_LED4_PIN=4" # ...use pin RG4 +options "SPIRAMS_LED5_PORT=TRISG" # for LED5... +options "SPIRAMS_LED5_PIN=5" # ...use pin RG5 +options "SPIRAMS_LED6_PORT=TRISG" # for LED6... +options "SPIRAMS_LED6_PIN=6" # ...use pin RG6 +options "SPIRAMS_LED7_PORT=TRISG" # for LED7... +options "SPIRAMS_LED7_PIN=7" # ...use pin RG7 +options "SPIRAMS_LED8_PORT=TRISG" # for LED8... +options "SPIRAMS_LED8_PIN=8" # ...use pin RG8 +options "SPIRAMS_LED9_PORT=TRISG" # for LED9... +options "SPIRAMS_LED9_PIN=9" # ...use pin RG9 +options "SPIRAMS_LED10_PORT=TRISG" # for LED10... +options "SPIRAMS_LED10_PIN=10" # ...use pin RG10 +options "SPIRAMS_LED11_PORT=TRISG" # for LED11... +options "SPIRAMS_LED11_PIN=11" # ...use pin RG11 +options "SPIRAMS_LED12_PORT=TRISG" # for LED12... +options "SPIRAMS_LED12_PIN=12" # ...use pin RG12 +options "SPIRAMS_LED13_PORT=TRISG" # for LED13... +options "SPIRAMS_LED13_PIN=13" # ...use pin RG13 +options "SPIRAMS_LED14_PORT=TRISG" # for LED14... +options "SPIRAMS_LED14_PIN=14" # ...use pin RG14 +options "SPIRAMS_LED15_PORT=TRISG" # for LED15... +options "SPIRAMS_LED15_PIN=15" # ...use pin RG15 diff --git a/sys/pic32/Makefile b/sys/pic32/Makefile index b07418a..5af89ad 100644 --- a/sys/pic32/Makefile +++ b/sys/pic32/Makefile @@ -1,11 +1,9 @@ # Programs that live in subdirectories, and have makefiles of their own. # -SUBDIR = baremetal duinomite duinomite-uart duinomite-e \ - duinomite-e-uart explorer16 max32 maximite \ - meb starter-kit sdxl ubw32 ubw32-uart \ - ubw32-uart-sdram baremetal fubarino mmb-mx7 maximite-color \ - 32mxsdram-uart picadillo wf32 pinguino-micro +SUBDIR = baremetal duinomite duinomite-emega explorer16 \ + fubarino max32 maximite maximite-color mmb-mx7 \ + picadillo pinguino-micro sdxl starter-kit ubw32 wf32 default: @@ -16,9 +14,15 @@ install: clean: -for i in $(SUBDIR); do ${MAKE} -C $$i clean; done - find .. -name \*~ | xargs rm -f + +clean-all: + -for i in $(SUBDIR); do ${MAKE} -C $$i clean-all; done reconfig: + -for i in $(SUBDIR); do ${MAKE} -C $$i reconfig; done + +configsys: -for i in $(SUBDIR); do echo $$i; \ I=`echo $$i | awk '{print toupper($$0)}'`; \ - (cd $$i; ../../../tools/configsys/config $$I); done + if [ ! -f $$i/Config ]; then \ + (cd $$i; ../../../tools/configsys/config $$I); fi; done diff --git a/sys/pic32/Makefile.kconf b/sys/pic32/Makefile.kconf new file mode 100644 index 0000000..604ade9 --- /dev/null +++ b/sys/pic32/Makefile.kconf @@ -0,0 +1,91 @@ +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk + +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump + +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif + +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +%OBJS + +%CFILES + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +%LOAD + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +%RULES + +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/README b/sys/pic32/README index e8b9cf3..e32461c 100644 --- a/sys/pic32/README +++ b/sys/pic32/README @@ -1,22 +1,39 @@ Build directories: -max32 - chipKIT Max32 board. + 32mxsdram/ - 32MXSDRAM custom board with external SDRAM + used as a volatile disk storage (swap). -ubw32 - Sparkfun UBW32 board, USB console. + baremetal/ - PIC32MX processor on a custom board. -ubw32-uart - Sparkfun UBW32 board, UART console. + duinomite/ - Olimex Duinomite or Duinomite-Mega board. -maximite - Maximite computer. + duinomite-emega/ - Olimex Duinomite-eMega board. -explorer16 - Microchip Explorer 16 board, with - PIC32 CAN-USB plug-in module and SD & MMC pictail. + explorer16/ - Microchip Explorer 16 board, + with PIC32MX plug-in module + and SD & MMC pictail. -starter-kit - Microchip PIC32 USB or Ethernet Starter Kit, - with I/O Expansion board and SD & MMC pictail. + fubarino/ - Fubarino SD board. -dip - eflightworks.net PIC32-on-DIP board. - (work in progress) + max32/ - chipKIT Max32 board. -meb - Microchip Multimedia Expansion board with - Microchip PIC32 USB or Ethernet Starter Kit. - (work in progress) + maximite/ - Maximite computer. + + maximite-color/ - The Colour Maximite computer. + + mmb-mx7/ - MikroElektronika MultiMedia Board for PIC32MX7. + + picadillo/ - 4D Systems Picadillo-35T board. + + pinguino-micro/ - Olimex Pinguino-Micro board equipped + with pic32mx795 processor. + + sdxl/ - Majenko SDXL board. + + starter-kit/ - Microchip PIC32MX USB or Ethernet Starter Kit, + with I/O Expansion board and SD & MMC pictail. + + ubw32/ - Sparkfun UBW32 board. + + wf32/ - ChipKIT WF32 board with + 2.4" LCD TFT display shield. diff --git a/sys/pic32/adc.c b/sys/pic32/adc.c index eb442e7..2a919a6 100644 --- a/sys/pic32/adc.c +++ b/sys/pic32/adc.c @@ -21,15 +21,14 @@ * arising out of or in connection with the use or performance of * this software. */ - -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "systm.h" -#include "uio.h" -#include "adc.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include const struct devspec adcdevs[] = { { 0, "adc0" }, { 1, "adc1" }, { 2, "adc2" }, { 3, "adc3" }, diff --git a/sys/pic32/baremetal/.gitignore b/sys/pic32/baremetal/.gitignore index 60cf8bc..7e25ca8 100644 --- a/sys/pic32/baremetal/.gitignore +++ b/sys/pic32/baremetal/.gitignore @@ -3,8 +3,10 @@ .oldversion machine sys -boot.bin unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/baremetal/Config b/sys/pic32/baremetal/Config new file mode 100644 index 0000000..3f29ea9 --- /dev/null +++ b/sys/pic32/baremetal/Config @@ -0,0 +1,60 @@ +# +# Custom board with UART console +# ============================== +# Console on UART1. +# +# To build the kernel, use: +# cd sys/pic32/baremetal +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "BAREMETAL" # Board type +ldscript "baremetal/script.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISD" # for kernel activity LED... +options "LED_KERNEL_PIN=3" # ...use pin RD3 +options "LED_DISK_PORT=TRISD" # for disk activity LED... +options "LED_DISK_PIN=2" # ...use pin RD2 +options "LED_TTY_PORT=TRISD" # for serial activity LED... +options "LED_TTY_PIN=12" # ...use pin RD12 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Serial UART ports +device uart1 + +# Console options +options "CONSOLE_DEVICE=tty0" # /dev/tty0 + +# SPI ports +controller spi2 # SD card + +# SD card +device sd0 at spi2 pin RD1 # select pin +options "SD0_MHZ=16" # speed 16 MHz +options "SD0_PORT=2" # at spi2 TODO: delete +options "SD0_CS_PORT=TRISD" # for chip select... TODO: delete +options "SD0_CS_PIN=1" # ...use pin RD1 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/baremetal/Makefile b/sys/pic32/baremetal/Makefile index 9605724..55d8765 100644 --- a/sys/pic32/baremetal/Makefile +++ b/sys/pic32/baremetal/Makefile @@ -1,45 +1,354 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DBAREMETAL +PARAM += -DPIC32MX7 +PARAM += -DUART1_ENABLED +PARAM += -DSPI2_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_CS_PIN=1 +PARAM += -DSD0_CS_PORT=TRISD +PARAM += -DSD0_PORT=2 +PARAM += -DSD0_MHZ=16 +PARAM += -DCONSOLE_DEVICE=tty0 +PARAM += -DLED_TTY_PIN=12 +PARAM += -DLED_TTY_PORT=TRISD +PARAM += -DLED_DISK_PIN=2 +PARAM += -DLED_DISK_PORT=TRISD +PARAM += -DLED_KERNEL_PIN=3 +PARAM += -DLED_KERNEL_PORT=TRISD +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "baremetal/script.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=tty0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=2 -DEFS += -DLED_DISK_PORT=TRISD -DEFS += -DLED_KERNEL_PIN=3 -DEFS += -DLED_KERNEL_PORT=TRISD -DEFS += -DLED_TTY_PIN=12 -DEFS += -DLED_TTY_PORT=TRISD -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=1 -DEFS += -DSD0_CS_PORT=TRISD -DEFS += -DSD0_MHZ=16 -DEFS += -DSD0_PORT=2 -DEFS += -DUART1_BAUD=115200 -DEFS += -DUART1_ENABLED=YES -DEFS += -DUCB_METER +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +uart.o: $S/pic32/uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bare.ld - -CONFIG = BAREMETAL -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/baremetal/devcfg.c b/sys/pic32/baremetal/devcfg.c index 38790ea..ba09d61 100644 --- a/sys/pic32/baremetal/devcfg.c +++ b/sys/pic32/baremetal/devcfg.c @@ -7,7 +7,7 @@ PIC32_DEVCFG ( DEVCFG0_DEBUG_DISABLED, /* ICE debugger enabled */ DEVCFG1_FNOSC_FRCDIVPLL | /* Internal FRC oscillator with PLL */ - DEVCFG1_POSCMOD_DISABLE | /* No crystal */ + DEVCFG1_POSCMOD_DISABLE | /* No crystal */ DEVCFG1_OSCIOFNC | /* CLKO output active */ DEVCFG1_FPBDIV_1 | /* Peripheral bus clock = SYSCLK/1 */ DEVCFG1_FCKM_DISABLE | /* Fail-safe clock monitor disable */ diff --git a/sys/pic32/cfg/bare.ld b/sys/pic32/baremetal/script.ld similarity index 99% rename from sys/pic32/cfg/bare.ld rename to sys/pic32/baremetal/script.ld index adc7434..69bab8d 100644 --- a/sys/pic32/cfg/bare.ld +++ b/sys/pic32/baremetal/script.ld @@ -82,6 +82,9 @@ SECTIONS *(.glue_7t) *(.glue_7) __rodata_start = . ; *(.rodata .rodata.* .gnu.linkonce.r.* .rel.dyn) + __abiflags = . ; + *(.MIPS.abiflags) + *(.dinit) /* Align here to ensure that the .text section ends on word boundary. */ . = ALIGN (32 / 8); _etext = .; diff --git a/sys/pic32/clock.c b/sys/pic32/clock.c index 8f46aff..00ea1aa 100644 --- a/sys/pic32/clock.c +++ b/sys/pic32/clock.c @@ -3,8 +3,8 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "machine/pic32mx.h" +#include +#include /* * Setup core timer for `hz' timer interrupts per second. diff --git a/sys/pic32/cons.c b/sys/pic32/cons.c index 5734bc5..7573ac3 100644 --- a/sys/pic32/cons.c +++ b/sys/pic32/cons.c @@ -5,15 +5,15 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "tty.h" -#include "systm.h" +#include +#include +#include +#include +#include +#include -#include "uart.h" -#include "usb_uart.h" +#include +#include #define CONCAT(x,y) x ## y #define BBAUD(x) CONCAT(B,x) diff --git a/tools/kconfig/devices.kconf b/sys/pic32/devices.kconf similarity index 100% rename from tools/kconfig/devices.kconf rename to sys/pic32/devices.kconf diff --git a/sys/pic32/devsw.c b/sys/pic32/devsw.c index 4f2c5a9..7dd562e 100644 --- a/sys/pic32/devsw.c +++ b/sys/pic32/devsw.c @@ -3,54 +3,52 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "conf.h" -#include "buf.h" -#include "time.h" -#include "ioctl.h" -#include "resource.h" -#include "inode.h" -#include "proc.h" -#include "clist.h" -#include "tty.h" -#include "systm.h" -#include "rdisk.h" -#include "errno.h" -#include "uart.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include "swap.h" +#include extern int strcmp(char *s1, char *s2); #ifdef UARTUSB_ENABLED -# include "usb_uart.h" +# include #endif #ifdef GPIO_ENABLED -# include "gpio.h" +# include #endif #ifdef ADC_ENABLED -# include "adc.h" -#endif -#ifdef SPI_ENABLED -# include "spi.h" +# include #endif #ifdef GLCD_ENABLED -# include "glcd.h" +# include #endif #ifdef PWM_ENABLED -# include "pwm.h" +# include #endif #ifdef PICGA_ENABLED -# include "picga.h" +# include #endif #ifdef PTY_ENABLED -# include "pty.h" +# include #endif #ifdef HX8357_ENABLED -# include "hx8357.h" +# include #endif #ifdef SKEL_ENABLED -# include "skel.h" +# include #endif /* @@ -215,7 +213,8 @@ const struct cdevsw cdevsw[] = { #endif }, { /* 12 - spi */ -#ifdef SPI_ENABLED +#if defined(SPI1_ENABLED) || defined(SPI2_ENABLED) || \ + defined(SPI3_ENABLED) || defined(SPI4_ENABLED) spidev_open, spidev_close, spidev_read, spidev_write, spidev_ioctl, nulldev, 0, seltrue, nostrategy, 0, 0, spidevs diff --git a/sys/pic32/duinomite-e-uart/Makefile b/sys/pic32/duinomite-e-uart/Makefile deleted file mode 100644 index e0c4acc..0000000 --- a/sys/pic32/duinomite-e-uart/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel - -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) - -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = - -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=40000 -DEFS += -DCONSOLE_DEVICE=tty5 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=1 -DEFS += -DLED_DISK_PORT=TRISC -DEFS += -DLED_KERNEL_PIN=15 -DEFS += -DLED_KERNEL_PORT=TRISB -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=12 -DEFS += -DSD0_CS_PORT=TRISG -DEFS += -DSD0_ENA_PIN=13 -DEFS += -DSD0_ENA_PORT=TRISG -DEFS += -DSD0_PORT=3 -DEFS += -DUART5_BAUD=115200 -DEFS += -DUART5_ENABLED=YES -DEFS += -DUART5_ENA_PIN=13 -DEFS += -DUART5_ENA_PORT=TRISG -DEFS += -DUCB_METER - - -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-maximite.ld - -CONFIG = DUINOMITE-E-UART -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk diff --git a/sys/pic32/duinomite-e/.gitignore b/sys/pic32/duinomite-e/.gitignore deleted file mode 100644 index 6a22af6..0000000 --- a/sys/pic32/duinomite-e/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.compileversion -.deps/ -.oldversion -machine -sys -unix.bin -unix.map -usbboot.map -vers.c diff --git a/sys/pic32/duinomite-e/Makefile b/sys/pic32/duinomite-e/Makefile deleted file mode 100644 index 12abe54..0000000 --- a/sys/pic32/duinomite-e/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel - -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) - -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = - -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=40000 -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=1 -DEFS += -DLED_DISK_PORT=TRISC -DEFS += -DLED_KERNEL_PIN=15 -DEFS += -DLED_KERNEL_PORT=TRISB -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=12 -DEFS += -DSD0_CS_PORT=TRISG -DEFS += -DSD0_ENA_PIN=13 -DEFS += -DSD0_ENA_PORT=TRISG -DEFS += -DSD0_PORT=3 -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 - - -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-maximite.ld - -CONFIG = DUINOMITE-E -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk diff --git a/sys/pic32/duinomite-e-uart/.gitignore b/sys/pic32/duinomite-emega/.gitignore similarity index 77% rename from sys/pic32/duinomite-e-uart/.gitignore rename to sys/pic32/duinomite-emega/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/duinomite-e-uart/.gitignore +++ b/sys/pic32/duinomite-emega/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/duinomite-emega/Config b/sys/pic32/duinomite-emega/Config new file mode 100644 index 0000000..c575749 --- /dev/null +++ b/sys/pic32/duinomite-emega/Config @@ -0,0 +1,64 @@ +# +# Olimex Duinomite-eMega board +# ============================ +# Console on USB. +# For Windows, use the driver: http://www.schmalzhaus.com/UBW32/FW/UBW32inf.zip +# For details, see https://github.com/RetroBSD/retrobsd/wiki/Board-Olimex-Duinomite +# +# To build the kernel, use: +# cd sys/pic32/duinomite-emega +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "DUINOMITE" # Board type +ldscript "maximite/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=40000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISB" # for kernel activity LED... +options "LED_KERNEL_PIN=15" # ...use pin RB15 +options "LED_DISK_PORT=TRISC" # for disk activity LED... +options "LED_DISK_PIN=1" # ...use pin RC1 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# SPI ports +controller spi3 # SD card + +# microSD card +device sd0 at spi3 + pins RG12, RG13 # select pin, enable pin +options "SD0_PORT=3" # at spi3 TODO: delete +options "SD0_CS_PORT=TRISG" # for chip select... TODO: delete +options "SD0_CS_PIN=12" # ...use pin RG12 TODO: delete +options "SD0_ENA_PORT=TRISG" # for SD enable... TODO: delete +options "SD0_ENA_PIN=13" # ...use pin RG13 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/duinomite-emega/Config-uart b/sys/pic32/duinomite-emega/Config-uart new file mode 100644 index 0000000..56ddaf7 --- /dev/null +++ b/sys/pic32/duinomite-emega/Config-uart @@ -0,0 +1,64 @@ +# +# Olimex Duinomite-eMega board +# ============================ +# Console on UART5. +# For Windows, use the driver: http://www.schmalzhaus.com/UBW32/FW/UBW32inf.zip +# For details, see https://github.com/RetroBSD/retrobsd/wiki/Board-Olimex-Duinomite +# +# To build the kernel, use: +# cd sys/pic32/duinomite-emega +# kconfig Config-uart +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "DUINOMITE" # Board type +ldscript "maximite/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=40000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISB" # for kernel activity LED... +options "LED_KERNEL_PIN=15" # ...use pin RB15 +options "LED_DISK_PORT=TRISC" # for disk activity LED... +options "LED_DISK_PIN=1" # ...use pin RC1 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=tty4" # Console on UART5 + +# Serial UART ports +device uart5 pin RB13 # RS-232 port, enable pin +options "UART5_ENA_PORT=TRISB" # for RS-232 enable... TODO: delete +options "UART5_ENA_PIN=13" # ...use pin RB13 TODO: delete + +# SPI ports +controller spi3 # SD card + +# microSD card +device sd0 at spi3 + pins RG12, RG13 # select pin, enable pin +options "SD0_PORT=3" # at spi3 TODO: delete +options "SD0_CS_PORT=TRISG" # for chip select... TODO: delete +options "SD0_CS_PIN=12" # ...use pin RG12 TODO: delete +options "SD0_ENA_PORT=TRISG" # for SD enable... TODO: delete +options "SD0_ENA_PIN=13" # ...use pin RG13 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/duinomite-emega/Makefile b/sys/pic32/duinomite-emega/Makefile new file mode 100644 index 0000000..a7d3454 --- /dev/null +++ b/sys/pic32/duinomite-emega/Makefile @@ -0,0 +1,363 @@ +PARAM = -DDUINOMITE +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DSPI3_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_ENA_PIN=13 +PARAM += -DSD0_ENA_PORT=TRISG +PARAM += -DSD0_CS_PIN=12 +PARAM += -DSD0_CS_PORT=TRISG +PARAM += -DSD0_PORT=3 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_DISK_PIN=1 +PARAM += -DLED_DISK_PORT=TRISC +PARAM += -DLED_KERNEL_PIN=15 +PARAM += -DLED_KERNEL_PORT=TRISB +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=40000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "maximite/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk + +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump + +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif + +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o usb_device.o \ + usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/usb_device.c $S/pic32/usb_function_cdc.c \ + $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} + + +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/duinomite-uart/.gitignore b/sys/pic32/duinomite-uart/.gitignore deleted file mode 100644 index 6a22af6..0000000 --- a/sys/pic32/duinomite-uart/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.compileversion -.deps/ -.oldversion -machine -sys -unix.bin -unix.map -usbboot.map -vers.c diff --git a/sys/pic32/duinomite-uart/Makefile b/sys/pic32/duinomite-uart/Makefile deleted file mode 100644 index a605dac..0000000 --- a/sys/pic32/duinomite-uart/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel - -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) - -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = - -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=tty4 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=12 -DEFS += -DLED_DISK_PORT=TRISB -DEFS += -DLED_KERNEL_PIN=15 -DEFS += -DLED_KERNEL_PORT=TRISB -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=5 -DEFS += -DSD0_CS_PORT=TRISD -DEFS += -DSD0_ENA_PIN=13 -DEFS += -DSD0_ENA_PORT=TRISB -DEFS += -DSD0_PORT=3 -DEFS += -DUART5_BAUD=115200 -DEFS += -DUART5_ENABLED=YES -DEFS += -DUART5_ENA_PIN=13 -DEFS += -DUART5_ENA_PORT=TRISB -DEFS += -DUCB_METER - - -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-maximite.ld - -CONFIG = DUINOMITE-UART -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk diff --git a/sys/pic32/duinomite/.gitignore b/sys/pic32/duinomite/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/duinomite/.gitignore +++ b/sys/pic32/duinomite/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/duinomite/Config b/sys/pic32/duinomite/Config new file mode 100644 index 0000000..3d35b24 --- /dev/null +++ b/sys/pic32/duinomite/Config @@ -0,0 +1,63 @@ +# +# Duinomite and Duinomite-Mega boards +# =================================== +# Console on USB. +# For details, see https://github.com/RetroBSD/retrobsd/wiki/Board-Olimex-Duinomite +# +# To build the kernel, use: +# cd sys/pic32/duinomite +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "DUINOMITE" # Board type +ldscript "maximite/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISB" # for kernel activity LED... +options "LED_KERNEL_PIN=15" # ...use pin RB15 +options "LED_DISK_PORT=TRISB" # for disk activity LED... +options "LED_DISK_PIN=12" # ...use pin RB12 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb0 +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# SPI ports +controller spi3 # SD card + +# microSD card +device sd0 at spi3 + pins RD5, RB13 # select pin, enable pin +options "SD0_PORT=3" # at spi3 TODO: delete +options "SD0_CS_PORT=TRISD" # for chip select... TODO: delete +options "SD0_CS_PIN=5" # ...use pin RD5 TODO: delete +options "SD0_ENA_PORT=TRISB" # for SD enable... TODO: delete +options "SD0_ENA_PIN=13" # ...use pin RB13 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/duinomite/Config-uart b/sys/pic32/duinomite/Config-uart new file mode 100644 index 0000000..eae416e --- /dev/null +++ b/sys/pic32/duinomite/Config-uart @@ -0,0 +1,63 @@ +# +# Duinomite and Duinomite-Mega boards +# =================================== +# Console on UART5. +# For details, see https://github.com/RetroBSD/retrobsd/wiki/Board-Olimex-Duinomite +# +# To build the kernel, use: +# cd sys/pic32/duinomite +# kconfig Config-uart +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "DUINOMITE" # Board type +ldscript "maximite/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISB" # for kernel activity LED... +options "LED_KERNEL_PIN=15" # ...use pin RB15 +options "LED_DISK_PORT=TRISB" # for disk activity LED... +options "LED_DISK_PIN=12" # ...use pin RB12 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=tty4" # Console on UART5 + +# Serial UART ports +device uart5 pin RB13 # RS-232 port, enable pin +options "UART5_ENA_PORT=TRISB" # for RS-232 enable... TODO: delete +options "UART5_ENA_PIN=13" # ...use pin RB13 TODO: delete + +# SPI ports +controller spi3 # SD card + +# microSD card +device sd0 at spi3 + pins RD5, RB13 # select pin, enable pin +options "SD0_PORT=3" # at spi3 TODO: delete +options "SD0_CS_PORT=TRISD" # for chip select... TODO: delete +options "SD0_CS_PIN=5" # ...use pin RD5 TODO: delete +options "SD0_ENA_PORT=TRISB" # for SD enable... TODO: delete +options "SD0_ENA_PIN=13" # ...use pin RB13 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/duinomite/Makefile b/sys/pic32/duinomite/Makefile index 1801c95..3c09c0d 100644 --- a/sys/pic32/duinomite/Makefile +++ b/sys/pic32/duinomite/Makefile @@ -1,48 +1,363 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DDUINOMITE +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DSPI3_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_ENA_PIN=13 +PARAM += -DSD0_ENA_PORT=TRISB +PARAM += -DSD0_CS_PIN=5 +PARAM += -DSD0_CS_PORT=TRISD +PARAM += -DSD0_PORT=3 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_DISK_PIN=12 +PARAM += -DLED_DISK_PORT=TRISB +PARAM += -DLED_KERNEL_PIN=15 +PARAM += -DLED_KERNEL_PORT=TRISB +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "maximite/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=12 -DEFS += -DLED_DISK_PORT=TRISB -DEFS += -DLED_KERNEL_PIN=15 -DEFS += -DLED_KERNEL_PORT=TRISB -DEFS += -DPIC32MX7 -DEFS += -DPWM_ENABLED=YES -DEFS += -DSD0_CS_PIN=5 -DEFS += -DSD0_CS_PORT=TRISD -DEFS += -DSD0_ENA_PIN=13 -DEFS += -DSD0_ENA_PORT=TRISB -DEFS += -DSD0_PORT=3 -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o usb_device.o \ + usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/usb_device.c $S/pic32/usb_function_cdc.c \ + $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-maximite.ld - -CONFIG = DUINOMITE -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/exception.c b/sys/pic32/exception.c index c7dbd45..4f2c3d3 100644 --- a/sys/pic32/exception.c +++ b/sys/pic32/exception.c @@ -3,15 +3,15 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "signalvar.h" -#include "systm.h" -#include "user.h" -#include "proc.h" -#include "vm.h" -#include "uart.h" -#include "usb_uart.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include //#define TRACE_EXCEPTIONS diff --git a/sys/pic32/explorer16/.gitignore b/sys/pic32/explorer16/.gitignore index 2b28c2d..7e25ca8 100644 --- a/sys/pic32/explorer16/.gitignore +++ b/sys/pic32/explorer16/.gitignore @@ -4,7 +4,9 @@ machine sys unix.bin -boot.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/explorer16/Config b/sys/pic32/explorer16/Config new file mode 100644 index 0000000..a17f395 --- /dev/null +++ b/sys/pic32/explorer16/Config @@ -0,0 +1,62 @@ +# +# Microchip Explorer16 board with SD card expansion module +# ======================================================== +# Console on UART2. +# +# To build the kernel, use: +# cd sys/pic32/explorer16 +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "EXPLORER16" # Board type +ldscript "baremetal/script.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_DISK_PORT=TRISA" # for disk activity LED... +options "LED_DISK_PIN=0" # ...use pin RA0 +options "LED_KERNEL_PORT=TRISA" # for kernel activity LED... +options "LED_KERNEL_PIN=1" # ...use pin RA1 +options "LED_TTY_PORT=TRISA" # for serial activity LED... +options "LED_TTY_PIN=2" # ...use pin RA2 +options "LED_SWAP_PORT=TRISA" # for swap activity LED... +options "LED_SWAP_PIN=3" # ...use pin RA3 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Serial UART ports +device uart2 + +# Console options +options "CONSOLE_DEVICE=tty1" # /dev/tty1 + +# SPI ports +controller spi1 # SD card + +# SD card +device sd0 at spi1 pin RB1 # select pin +options "SD0_MHZ=10" # speed 10 MHz +options "SD0_PORT=1" # at spi1 TODO: delete +options "SD0_CS_PORT=TRISB" # for chip select... TODO: delete +options "SD0_CS_PIN=1" # ...use pin RB1 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/explorer16/Makefile b/sys/pic32/explorer16/Makefile index cc3b2b4..d498544 100644 --- a/sys/pic32/explorer16/Makefile +++ b/sys/pic32/explorer16/Makefile @@ -1,48 +1,356 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DEXPLORER16 +PARAM += -DPIC32MX7 +PARAM += -DUART2_ENABLED +PARAM += -DSPI1_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_CS_PIN=1 +PARAM += -DSD0_CS_PORT=TRISB +PARAM += -DSD0_PORT=1 +PARAM += -DSD0_MHZ=10 +PARAM += -DCONSOLE_DEVICE=tty1 +PARAM += -DLED_SWAP_PIN=3 +PARAM += -DLED_SWAP_PORT=TRISA +PARAM += -DLED_TTY_PIN=2 +PARAM += -DLED_TTY_PORT=TRISA +PARAM += -DLED_KERNEL_PIN=1 +PARAM += -DLED_KERNEL_PORT=TRISA +PARAM += -DLED_DISK_PIN=0 +PARAM += -DLED_DISK_PORT=TRISA +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "baremetal/script.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=tty1 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=0 -DEFS += -DLED_DISK_PORT=TRISA -DEFS += -DLED_KERNEL_PIN=1 -DEFS += -DLED_KERNEL_PORT=TRISA -DEFS += -DLED_SWAP_PIN=3 -DEFS += -DLED_SWAP_PORT=TRISA -DEFS += -DLED_TTY_PIN=2 -DEFS += -DLED_TTY_PORT=TRISA -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=1 -DEFS += -DSD0_CS_PORT=TRISB -DEFS += -DSD0_MHZ=10 -DEFS += -DSD0_PORT=1 -DEFS += -DUART2_BAUD=115200 -DEFS += -DUART2_ENABLED=YES -DEFS += -DUCB_METER +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +uart.o: $S/pic32/uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bare.ld - -CONFIG = EXPLORER16 -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/files.kconf b/sys/pic32/files.kconf new file mode 100644 index 0000000..dff2eb4 --- /dev/null +++ b/sys/pic32/files.kconf @@ -0,0 +1,79 @@ +kernel/exec_aout.c standard +kernel/exec_conf.c standard +kernel/exec_elf.c standard +kernel/exec_script.c standard +kernel/exec_subr.c standard +kernel/init_main.c standard +kernel/init_sysent.c standard +kernel/kern_clock.c standard +kernel/kern_descrip.c standard +kernel/kern_exec.c standard +kernel/kern_exit.c standard +kernel/kern_fork.c standard +kernel/kern_mman.c standard +kernel/kern_proc.c standard +kernel/kern_prot.c standard +kernel/kern_prot2.c standard +kernel/kern_resource.c standard +kernel/kern_sig.c standard +kernel/kern_sig2.c standard +kernel/kern_subr.c standard +kernel/kern_synch.c standard +kernel/kern_sysctl.c standard +kernel/kern_time.c standard +kernel/rdisk.c standard +kernel/subr_log.c optional log +kernel/subr_prf.c standard +kernel/subr_rmap.c standard +kernel/sys_generic.c standard +kernel/sys_inode.c standard +kernel/sys_pipe.c standard +kernel/sys_process.c standard +kernel/syscalls.c standard +kernel/tty.c standard +kernel/tty_subr.c standard +kernel/tty_tty.c standard +kernel/ufs_alloc.c standard +kernel/ufs_bio.c standard +kernel/ufs_bmap.c standard +kernel/ufs_dsort.c standard +kernel/ufs_fio.c standard +kernel/ufs_inode.c standard +kernel/ufs_mount.c standard +kernel/ufs_namei.c standard +kernel/ufs_subr.c standard +kernel/ufs_syscalls.c standard +kernel/ufs_syscalls2.c standard +kernel/vfs_vnops.c standard +kernel/vm_sched.c standard +kernel/vm_swap.c standard +kernel/vm_swp.c standard +pic32/adc.c optional adc +pic32/clock.c standard +pic32/cons.c standard +pic32/devsw.c standard +pic32/exception.c standard +pic32/glcd.c optional glcd +pic32/gpio.c optional gpio +pic32/hx8357.c optional hxtft +pic32/machdep.c standard +pic32/mem.c standard +pic32/picga.c optional picga +pic32/power_control.c optional power +pic32/pwm.c optional pwm +pic32/rd_mrams.c optional mrams +pic32/rd_sd.c optional sd +pic32/rd_sdramp.c optional sdramp +pic32/rd_spirams.c optional spirams +pic32/rd_sramc.c optional sramc +pic32/sdram.S optional sdramp +pic32/signal.c standard +pic32/skel.c optional skel +pic32/spi.c optional spi +pic32/spi_bus.c optional spi +pic32/swap.c standard +pic32/sysctl.c standard +pic32/uart.c optional uart +pic32/usb_device.c optional uartusb +pic32/usb_function_cdc.c optional uartusb +pic32/usb_uart.c optional uartusb diff --git a/sys/pic32/fubarino/.gitignore b/sys/pic32/fubarino/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/fubarino/.gitignore +++ b/sys/pic32/fubarino/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/fubarino/Config b/sys/pic32/fubarino/Config new file mode 100644 index 0000000..ab3e758 --- /dev/null +++ b/sys/pic32/fubarino/Config @@ -0,0 +1,61 @@ +# +# Fubarino SD board +# ================================== +# Console on USB. +# For details, see https://github.com/RetroBSD/retrobsd/wiki/Board-Fubarino-SD +# +# To build the kernel, use: +# cd sys/pic32/fubarino +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "FUBARINO" # Board type +ldscript "max32/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISE" # for kernel activity LED... +options "LED_KERNEL_PIN=5" # ...use pin RE5 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# SPI ports +controller spi2 # SD card + +# microSD card +device sd0 at spi2 pin RG9 # select pin +options "SD0_PORT=2" # sd0 at spi2 TODO: delete +options "SD0_CS_PORT=TRISG" # for chip select... TODO: delete +options "SD0_CS_PIN=9" # ...use pin RA9 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm + +# GLCD driver +device glcd diff --git a/sys/pic32/fubarino/Config-uart-sramc b/sys/pic32/fubarino/Config-uart-sramc new file mode 100644 index 0000000..844bdc7 --- /dev/null +++ b/sys/pic32/fubarino/Config-uart-sramc @@ -0,0 +1,67 @@ +# +# Fubarino SD board SRAMC swap disk +# ================================= +# Console on UART2. +# Overclocked to 120MHz. +# Clock rate increased to 1000Hz. +# +# To build the kernel, use: +# cd sys/pic32/fubarino-uart-sramc +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "FUBARINO" # Board type +ldscript "max32/bootloader.ld" # Linker script + +# Standard system options +options "HZ=1000" # Rate of clock interrupt +options "CPU_KHZ=120000" # Oscillator frequency of CPU core +options "BUS_KHZ=120000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 +options "NBUF=8" +options "NMOUNT=3" +options "NPROC=25" + +# LED +options "LED_KERNEL_PORT=TRISE" # for kernel activity LED... +options "LED_KERNEL_PIN=5" # ...use pin RE5 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=tty1" # Console on UART2 + +# Serial UART ports +device uart1 # Additional serial port +device uart2 # Console + +# SPI ports +controller spi2 # SD card + +# microSD card +device sd0 at spi2 pin RG9 # select pin +options "SD0_PORT=2" # sd0 at spi2 TODO: delete +options "SD0_CS_PORT=TRISG" # for chip select... TODO: delete +options "SD0_CS_PIN=9" # ...use pin RA9 TODO: delete +options "SD0_MHZ=20" # increase data speed + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm + +# sramc - SRAM block device +device sramc0 # SRAM via 4-wire CPLD interface +options "PARTITION='sramc0:sa@2048,fs@6140'" # Partition schema diff --git a/sys/pic32/fubarino/Makefile b/sys/pic32/fubarino/Makefile index 1c6771e..6b1bdb0 100644 --- a/sys/pic32/fubarino/Makefile +++ b/sys/pic32/fubarino/Makefile @@ -1,46 +1,363 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DFUBARINO +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DSPI2_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DGLCD_ENABLED +PARAM += -DSD0_CS_PIN=9 +PARAM += -DSD0_CS_PORT=TRISG +PARAM += -DSD0_PORT=2 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_KERNEL_PIN=5 +PARAM += -DLED_KERNEL_PORT=TRISE +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "max32/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o glcd.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGLCD_ENABLED=YES -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_KERNEL_PIN=5 -DEFS += -DLED_KERNEL_PORT=TRISE -DEFS += -DPIC32MX7 -DEFS += -DPWM_ENABLED=YES -DEFS += -DSD0_CS_PIN=9 -DEFS += -DSD0_CS_PORT=TRISG -DEFS += -DSD0_PORT=2 -DEFS += -DSPI_ENABLED=YES -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o glcd.o gpio.o machdep.o mem.o \ + pwm.o rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o \ + usb_device.o usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/glcd.c $S/pic32/gpio.c $S/pic32/machdep.c \ + $S/pic32/mem.c $S/pic32/pwm.c $S/pic32/rd_sd.c $S/pic32/signal.c \ + $S/pic32/spi.c $S/pic32/spi_bus.c $S/pic32/swap.c \ + $S/pic32/sysctl.c $S/pic32/usb_device.c \ + $S/pic32/usb_function_cdc.c $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +glcd.o: $S/pic32/glcd.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-max32.ld - -CONFIG = FUBARINO -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/gcc-config.mk b/sys/pic32/gcc-config.mk index 30c202d..f52eff6 100644 --- a/sys/pic32/gcc-config.mk +++ b/sys/pic32/gcc-config.mk @@ -1,9 +1,11 @@ # chipKIT PIC32 compiler from UECIDE -ifdef UECIDE -ifndef GCCPREFIX - GCCPREFIX = ${UECIDE}/compilers/pic32-tools/bin/pic32- - LDFLAGS = -Wl,--oformat=elf32-tradlittlemips -endif +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Use UECIDE package from http://uecide.org/download +ifndef MIPS_GCC_PREFIX + ifdef UECIDE + MIPS_GCC_PREFIX = $(UECIDE)/compilers/pic32-tools/bin/pic32- + MIPS_GCC_FORMAT = elf32-tradlittlemips + endif endif # chipKIT PIC32 compiler on Linux @@ -14,62 +16,53 @@ endif # to pic32-tools/lib/gcc/pic32mx/4.5.1/include. # MPLABX C32 compiler doesn't support some functionality # we need, so use chipKIT compiler by default. -ifndef GCCPREFIX -ifeq (/usr/local/pic32-tools/bin/pic32-gcc,$(wildcard /usr/local/pic32-tools/bin/pic32-gcc)) - GCCPREFIX = /usr/local/pic32-tools/bin/pic32- - LDFLAGS = -Wl,--oformat=elf32-tradlittlemips -endif +ifndef MIPS_GCC_PREFIX + ifeq (/usr/local/pic32-tools/bin/pic32-gcc,$(wildcard /usr/local/pic32-tools/bin/pic32-gcc)) + MIPS_GCC_PREFIX = /usr/local/pic32-tools/bin/pic32- + MIPS_GCC_FORMAT = elf32-tradlittlemips + endif endif # Generic MIPS toolchain # ~~~~~~~~~~~~~~~~~~~~~~ # You can build it from sources, as described on page # http://retrobsd.org/wiki/doku.php/doc/toolchain-mips -ifndef GCCPREFIX -ifeq (/usr/local/mips-gcc-4.8.1/bin/mips-elf-gcc,$(wildcard /usr/local/mips-gcc-4.8.1/bin/mips-elf-gcc)) - GCCPREFIX = /usr/local/mips-gcc-4.8.1/bin/mips-elf- - LDFLAGS = -endif +ifndef MIPS_GCC_PREFIX + ifeq (/usr/local/mips-gcc-4.8.1/bin/mips-elf-gcc,$(wildcard /usr/local/mips-gcc-4.8.1/bin/mips-elf-gcc)) + MIPS_GCC_PREFIX = /usr/local/mips-gcc-4.8.1/bin/mips-elf- + endif endif # Mentor Sourcery CodeBench Lite toolchain # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# You can download a Linux or Windows binary package from -# https://sourcery.mentor.com/GNUToolchain/release2641 -ifndef GCCPREFIX -ifeq (/usr/local/mips-2013.11/bin/mips-sde-elf-gcc,$(wildcard /usr/local/mips-2013.11/bin/mips-sde-elf-gcc)) - GCCPREFIX = /usr/local/mips-2013.11/bin/mips-sde-elf- - LDFLAGS = -Wl,--oformat=elf32-tradlittlemips -endif -endif -ifndef GCCPREFIX -ifeq (/usr/local/mips-2014.05/bin/mips-sde-elf-gcc,$(wildcard /usr/local/mips-2014.05/bin/mips-sde-elf-gcc)) - GCCPREFIX = /usr/local/mips-2014.05/bin/mips-sde-elf- - LDFLAGS = -Wl,--oformat=elf32-tradlittlemips +ifndef MIPS_GCC_PREFIX + # Download a Linux binary package from + # https://sourcery.mentor.com/GNUToolchain/release2641 + ifeq (/usr/local/mips-2013.11/bin/mips-sde-elf-gcc,$(wildcard /usr/local/mips-2013.11/bin/mips-sde-elf-gcc)) + MIPS_GCC_PREFIX = /usr/local/mips-2013.11/bin/mips-sde-elf- + MIPS_GCC_FORMAT = elf32-tradlittlemips + endif endif +ifndef MIPS_GCC_PREFIX + # Download a Linux binary package from + # https://sourcery.mentor.com/GNUToolchain/release2774 + ifeq (/usr/local/mips-2014.05/bin/mips-sde-elf-gcc,$(wildcard /usr/local/mips-2014.05/bin/mips-sde-elf-gcc)) + MIPS_GCC_PREFIX = /usr/local/mips-2014.05/bin/mips-sde-elf- + MIPS_GCC_FORMAT = elf32-tradlittlemips + endif endif -ifndef GCCPREFIX +# Imagination Codescape MIPS SDK Essentials +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Download a Linux binary package from: +# http://community.imgtec.com/developers/mips/tools/codescape-mips-sdk/download-codescape-mips-sdk-essentials/ +ifndef MIPS_GCC_ROOT + ifeq (/opt/imgtec/Toolchains/mips-mti-elf/2015.01-7,$(wildcard /opt/imgtec/Toolchains/mips-mti-elf/2015.01-7)) + MIPS_GCC_ROOT = /opt/imgtec/Toolchains/mips-mti-elf/2015.01-7 + MIPS_GCC_FORMAT = elf32-tradlittlemips + endif +endif + +ifndef MIPS_GCC_PREFIX $(error Unable to locate any GCC MIPS toolchain!) endif - -# UECIDE on Linux -ifneq (,$(wildcard $UECIDE/cores/chipKIT)) - AVRDUDE = $UECIDE/cores/chipKIT/tools/linux64/avrdude \ - -C $UECIDE/cores/chipKIT/tools/linux64/avrdude.conf -V \ - -P /dev/ttyUSB* -endif - -# chipKIT MPIDE on Mac OS X -ifneq (,$(wildcard /Applications/Mpide.app/Contents/Resources/Java/hardware/tools/avr)) - AVRDUDE = /Applications/Mpide.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude \ - -C /Applications/Mpide.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf \ - -P /dev/tty.usbserial-* -endif - -# chipKIT MPIDE on Linux -ifneq (,$(wildcard /opt/mpide-0023-linux-20120903/hardware/tools/avrdude)) - AVRDUDE = /opt/mpide-0023-linux-20120903/hardware/tools/avrdude \ - -C /opt/mpide-0023-linux-20120903/hardware/tools/avrdude.conf \ - -P /dev/ttyUSB0 -endif diff --git a/sys/pic32/glcd.c b/sys/pic32/glcd.c index a27d6dc..7adcb34 100644 --- a/sys/pic32/glcd.c +++ b/sys/pic32/glcd.c @@ -21,14 +21,14 @@ * arising out of or in connection with the use or performance of * this software. */ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "systm.h" -#include "sys/uio.h" -#include "glcd.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include const struct devspec glcddevs[] = { { 0, "glcd0" }, diff --git a/sys/pic32/gpio.c b/sys/pic32/gpio.c index a6d474a..0937fe9 100644 --- a/sys/pic32/gpio.c +++ b/sys/pic32/gpio.c @@ -21,13 +21,13 @@ * arising out of or in connection with the use or performance of * this software. */ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "gpio.h" -#include "systm.h" -#include "uio.h" +#include +#include +#include +#include +#include +#include +#include const struct devspec gpiodevs[] = { { 0, "porta" }, { 1, "portb" }, { 2, "portc" }, { 3, "portd" }, diff --git a/sys/pic32/hx8357.c b/sys/pic32/hx8357.c index f827ff1..e496326 100644 --- a/sys/pic32/hx8357.c +++ b/sys/pic32/hx8357.c @@ -21,17 +21,16 @@ * arising out of or in connection with the use or performance of * this software. */ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "systm.h" -#include "uio.h" -#include "adc.h" -#include "debug.h" -#include "hx8357.h" - -#include "fonts/default.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include char frame[40][80]; diff --git a/sys/pic32/maximite/kbd.c b/sys/pic32/kbd.c similarity index 65% rename from sys/pic32/maximite/kbd.c rename to sys/pic32/kbd.c index 2d57e3c..13bdf19 100644 --- a/sys/pic32/maximite/kbd.c +++ b/sys/pic32/kbd.c @@ -85,9 +85,87 @@ int key_state, key_count, key_parity, key_timer; #define SCRL 0x7e #ifdef USASCII -#include "usascii.inc" +// +// Map of standard keyboard, US ASCII layout +// +const char lowerKey[128]={ + 0, F9, 0, F5, F3, F1, F2, F12, //00 + 0, F10, F8, F6, F4, TAB, '`', 0, //08 + 0, 0, L_SHF, 0, L_CTL, 'q', '1', 0, //10 + 0, 0, 'z', 's', 'a', 'w', '2', 0, //18 + 0, 'c', 'x', 'd', 'e', '4', '3', 0, //20 + 0, ' ', 'v', 'f', 't', 'r', '5', 0, //28 + 0, 'n', 'b', 'h', 'g', 'y', '6', 0, //30 + 0, 0, 'm', 'j', 'u', '7', '8', 0, //38 + 0, ',', 'k', 'i', 'o', '0', '9', 0, //40 + 0, '.', '/', 'l', ';', 'p', '-', 0, //48 + 0, 0, '\'', 0, '[', '=', 0, 0, //50 + CAPS, R_SHF, ENTER, ']', 0, '\\', 0, 0, //58 + 0, 0, 0, 0, 0, 0, BKSP, 0, //60 + 0, '1', 0, '4', '7', 0, 0, 0, //68 + '0', '.', '2', '5', '6', '8', ESC, NUM, //70 + F11, '+', '3', '-', '*', '9', 0, 0 //78 +}; + +const char upperKey[128] = { + 0, F9, 0, F5, F3, F1, F2, F12, //00 + 0, F10, F8, F6, F4, TAB, '~', 0, //08 + 0, 0, L_SHF, 0, L_CTL, 'Q', '!', 0, //10 + 0, 0, 'Z', 'S', 'A', 'W', '@', 0, //18 + 0, 'C', 'X', 'D', 'E', '$', '#', 0, //20 + 0, ' ', 'V', 'F', 'T', 'R', '%', 0, //28 + 0, 'N', 'B', 'H', 'G', 'Y', '^', 0, //30 + 0, 0, 'M', 'J', 'U', '&', '*', 0, //38 + 0, '<', 'K', 'I', 'O', ')', '(', 0, //40 + 0, '>', '?', 'L', ':', 'P', '_', 0, //48 + 0, 0, '\"', 0, '{', '+', 0, 0, //50 + CAPS, R_SHF, ENTER, '}', 0, '|', 0, 0, //58 + 0, 0, 0, 0, 0, 0, BKSP, 0, //60 + 0, '1', 0, '4', '7', 0, 0, 0, //68 + '0', '.', '2', '5', '6', '8', ESC, NUM, //70 + F11, '+', '3', '-', '*', '9', 0, 0 //78 +}; #elif defined RUSSIAN -#include "russian.inc" +// +// Map of standard keyboard, Russian Windows layout +// +const char lowerKey[128]={ + 0, F9, 0, F5, F3, F1, F2, F12, //00 + 0, F10, F8, F6, F4, TAB, 'ё', 0, //08 + 0, 0, L_SHF, 0, L_CTL, 'й', '1', 0, //10 + 0, 0, 'я', 'ы', 'ф', 'ц', '2', 0, //18 + 0, 'с', 'ч', 'в', 'у', '4', '3', 0, //20 + 0, ' ', 'м', 'а', 'е', 'к', '5', 0, //28 + 0, 'т', 'и', 'р', 'п', 'н', '6', 0, //30 + 0, 0, 'ь', 'о', 'г', '7', '8', 0, //38 + 0, 'б', 'л', 'ш', 'щ', '0', '9', 0, //40 + 0, 'ю', '.', 'д', 'ж', 'з', '-', 0, //48 + 0, 0, 'э', 0, 'х', '=', 0, 0, //50 + CAPS, R_SHF, ENTER, 'ъ', 0, '\\', 0, 0, //58 + 0, 0, 0, 0, 0, 0, BKSP, 0, //60 + 0, '1', 0, '4', '7', 0, 0, 0, //68 + '0', ',', '2', '5', '6', '8', ESC, NUM, //70 + F11, '+', '3', '-', '*', '9', 0, 0 //78 +}; + +const char upperKey[128] = { + 0, F9, 0, F5, F3, F1, F2, F12, //00 + 0, F10, F8, F6, F4, TAB, 'Ё', 0, //08 + 0, 0, L_SHF, 0, L_CTL, 'Й', '!', 0, //10 + 0, 0, 'Я', 'Ы', 'Ф', 'Ц', '\"', 0, //18 + 0, 'С', 'Ч', 'В', 'У', ';', '№', 0, //20 + 0, ' ', 'М', 'А', 'Е', 'К', '%', 0, //28 + 0, 'Т', 'И', 'Р', 'П', 'Н', ':', 0, //30 + 0, 0, 'Ь', 'О', 'Г', '?', '*', 0, //38 + 0, 'Б', 'Л', 'Ш', 'Щ', ')', '(', 0, //40 + 0, 'Ю', ',', 'Д', 'Ж', 'З', '_', 0, //48 + 0, 0, 'Э', 0, 'Х', '+', 0, 0, //50 + CAPS, R_SHF, ENTER, 'Ъ', 0, '/', 0, 0, //58 + 0, 0, 0, 0, 0, 0, BKSP, 0, //60 + 0, '1', 0, '4', '7', 0, 0, 0, //68 + '0', ',', '2', '5', '6', '8', ESC, NUM, //70 + F11, '+', '3', '-', '*', '9', 0, 0 //78 +}; #endif /* diff --git a/sys/pic32/maximite/kbd.h b/sys/pic32/kbd.h similarity index 100% rename from sys/pic32/maximite/kbd.h rename to sys/pic32/kbd.h diff --git a/sys/pic32/kernel-post.mk b/sys/pic32/kernel-post.mk deleted file mode 100644 index dff8579..0000000 --- a/sys/pic32/kernel-post.mk +++ /dev/null @@ -1,64 +0,0 @@ - -DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep -CFLAGS = -I. -I$(H) -O $(DEFS) $(DEPFLAGS) -ASFLAGS = -I. -I$(H) $(DEFS) $(DEPFLAGS) - -include $(BUILDPATH)/gcc-config.mk - -CC = $(GCCPREFIX)gcc -EL -g -mips32r2 -CC += -nostdinc -fno-builtin -Werror -Wall -fno-dwarf2-cfi-asm -LDFLAGS += -nostdlib -SIZE = $(GCCPREFIX)size -OBJDUMP = $(GCCPREFIX)objdump -OBJCOPY = $(GCCPREFIX)objcopy -PROGTOOL = $(AVRDUDE) -c stk500v2 -p pic32 -b 115200 - -DEFS += -DCONFIG=$(CONFIG) - -all: .deps sys machine unix.elf - $(SIZE) unix.elf - -clean: - rm -rf .deps *.o *.elf *.bin *.dis *.map *.srec core \ - mklog assym.h vers.c genassym sys machine - -.deps: - mkdir .deps - -sys: - ln -s $(BUILDPATH)/../include $@ - -machine: - ln -s $(BUILDPATH) $@ - -unix.elf: $(KERNOBJ) $(LDSCRIPT) - $(CC) $(LDFLAGS) -T $(LDSCRIPT) -Wl,-Map=unix.map $(KERNOBJ) -o $@ - chmod -x $@ - $(OBJDUMP) -d -S $@ > unix.dis - $(OBJCOPY) -O binary -R .boot -R .config $@ unix.bin - $(OBJCOPY) -O binary -j .boot -j .config $@ boot.bin - test -s boot.bin || rm boot.bin - $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ unix.hex - chmod -x $@ unix.bin - -load: unix.hex - pic32prog $(BLREBOOT) unix.hex - -loadmax: unix.hex - $(PROGTOOL) -U flash:w:unix.hex:i - -vers.o: $(BUILDPATH)/newvers.sh $(H)/*.h $(M)/*.[ch] $(S)/*.c - sh $(BUILDPATH)/newvers.sh > vers.c - $(CC) -c vers.c - -reconfig: - ../../../tools/configsys/config $(CONFIG) - -.SUFFIXES: .i .srec .hex .dis .cpp .cxx .bin .elf - -.o.dis: - $(OBJDUMP) -d -z -S $< > $@ - -ifeq (.deps, $(wildcard .deps)) --include .deps/*.dep -endif diff --git a/sys/pic32/machdep.c b/sys/pic32/machdep.c index 504ed99..2d8c9da 100644 --- a/sys/pic32/machdep.c +++ b/sys/pic32/machdep.c @@ -3,32 +3,32 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "dir.h" -#include "inode.h" -#include "user.h" -#include "proc.h" -#include "fs.h" -#include "map.h" -#include "buf.h" -#include "file.h" -#include "clist.h" -#include "callout.h" -#include "reboot.h" -#include "msgbuf.h" -#include "namei.h" -#include "mount.h" -#include "systm.h" -#include "debug.h" -#include "uart.h" -#include "usb_uart.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef UARTUSB_ENABLED # include # include #endif #ifdef HX8357_ENABLED -#include "hx8357.h" +#include #endif #ifdef POWER_ENABLED @@ -100,10 +100,14 @@ extern void power_off(); #define LED_MISC4_OFF() LAT_CLR(LED_MISC4_PORT) = 1 << LED_MISC4_PIN #endif -int hz = HZ; -int usechz = (1000000L + HZ - 1) / HZ; +int hz = HZ; +int usechz = (1000000L + HZ - 1) / HZ; +#ifdef TIMEZONE +struct timezone tz = { TIMEZONE, DST }; +#else struct timezone tz = { 8*60, 1 }; -int nproc = NPROC; +#endif +int nproc = NPROC; struct namecache namecache [NNAMECACHE]; char bufdata [NBUF * MAXBSIZE]; @@ -113,8 +117,8 @@ struct mount mount [NMOUNT]; struct buf buf [NBUF], bfreelist [BQUEUES]; struct bufhd bufhash [BUFHSZ]; struct cblock cfree [NCLIST]; -struct proc proc [NPROC]; -struct file file [NFILE]; +struct proc proc [NPROC]; +struct file file [NFILE]; /* * Remove the ifdef/endif to run the kernel in unsecure mode even when in @@ -147,9 +151,15 @@ nodump(dev) int (*dump)(dev_t) = nodump; -dev_t rootdev, swapdev, pipedev; - +#ifdef CONFIG +/* + * Build using old configuration utility (configsys). + */ +dev_t rootdev = NODEV; +dev_t swapdev = NODEV; dev_t dumpdev = NODEV; +#endif +dev_t pipedev; daddr_t dumplo = (daddr_t) 1024; /* @@ -178,7 +188,7 @@ startup() #ifdef KERNEL_EXECUTABLE_RAM /* * Set boundry for kernel executable ram on smallest - * 2k boundry required to allow the keram segement to fit. + * 2k boundry required to allow the keram segment to fit. * This means that there is possibly some u0area ramspace that * is executable, but as it is isolated from userspace this * should be ok, given the apparent goals of this project. @@ -498,7 +508,7 @@ boot(dev, howto) (*dump)(dumpdev); } /* Restart from dev, howto */ -#ifdef USB_NUM_STRING_DESCRIPTORS +#ifdef UARTUSB_ENABLED /* Disable USB module, and wait awhile for the USB cable * capacitance to discharge down to disconnected (SE0) state. */ @@ -539,15 +549,15 @@ boot(dev, howto) #ifdef HALTREBOOT printf("press any key to reboot..."); cngetc(); - /* Unlock access to reset register */ - SYSKEY = 0; - SYSKEY = 0xaa996655; - SYSKEY = 0x556699aa; - /* Reset microcontroller */ - RSWRSTSET = 1; - (void) RSWRST; + /* Unlock access to reset register */ + SYSKEY = 0; + SYSKEY = 0xaa996655; + SYSKEY = 0x556699aa; + /* Reset microcontroller */ + RSWRSTSET = 1; + (void) RSWRST; #endif for (;;) { diff --git a/sys/pic32/machparam.h b/sys/pic32/machparam.h index c2eb51b..9ccca1f 100644 --- a/sys/pic32/machparam.h +++ b/sys/pic32/machparam.h @@ -40,7 +40,9 @@ #ifndef NBUF #define NBUF 10 /* number of i/o buffers */ #endif +#ifndef MAXUSERS #define MAXUSERS 1 /* number of user logins */ +#endif #ifndef NPROC #define NPROC 10 /* number of processes */ #endif @@ -116,6 +118,13 @@ extern void _keram_start(), _keram_end(); #define USIZE 3072 #define SSIZE 2048 /* initial stack size (bytes) */ +/* + * Collect kernel statistics by default. + */ +#if !defined(UCB_METER) && !defined(NO_UCB_METER) +#define UCB_METER +#endif + #ifdef KERNEL #include "machine/io.h" diff --git a/sys/pic32/max32/.gitignore b/sys/pic32/max32/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/max32/.gitignore +++ b/sys/pic32/max32/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/max32/Config b/sys/pic32/max32/Config new file mode 100644 index 0000000..e615fa9 --- /dev/null +++ b/sys/pic32/max32/Config @@ -0,0 +1,62 @@ +# +# chipKIT Max32 board with SD card shield +# ======================================= +# For details, see https://github.com/RetroBSD/retrobsd/wiki/Board-chipKIT-Max32 +# +# To build the kernel, use: +# cd sys/pic32/max32 +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "MAX32" # Board type +ldscript "max32/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISA" # for kernel activity LED... +options "LED_KERNEL_PIN=3" # ...use pin RA3 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Serial UART ports +device uart1 # Serial-to-USB converter +device uart2 +device uart3 +device uart4 + +# Console options +options "CONSOLE_DEVICE=tty0" # /dev/tty0 + +# SPI ports +controller spi2 # SD card + +# microSD card +device sd0 at spi2 pin RC14 # select pin +options "SD0_MHZ=10" # speed 10 MHz +options "SD0_PORT=2" # at spi2 TODO: delete +options "SD0_CS_PORT=TRISC" # for chip select... TODO: use flags +options "SD0_CS_PIN=14" # ...use pin RC14 TODO: use flags + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm + +# Skeleton driver +#device skel diff --git a/sys/pic32/max32/Makefile b/sys/pic32/max32/Makefile index d5d74e8..d2ccf00 100644 --- a/sys/pic32/max32/Makefile +++ b/sys/pic32/max32/Makefile @@ -1,51 +1,353 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DMAX32 +PARAM += -DPIC32MX7 +PARAM += -DUART1_ENABLED +PARAM += -DUART2_ENABLED +PARAM += -DUART3_ENABLED +PARAM += -DUART4_ENABLED +PARAM += -DSPI2_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_CS_PIN=14 +PARAM += -DSD0_CS_PORT=TRISC +PARAM += -DSD0_PORT=2 +PARAM += -DSD0_MHZ=10 +PARAM += -DCONSOLE_DEVICE=tty0 +PARAM += -DLED_KERNEL_PIN=3 +PARAM += -DLED_KERNEL_PORT=TRISA +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "max32/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=tty0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_KERNEL_PIN=3 -DEFS += -DLED_KERNEL_PORT=TRISA -DEFS += -DPIC32MX7 -DEFS += -DPWM_ENABLED=YES -DEFS += -DSD0_CS_PIN=14 -DEFS += -DSD0_CS_PORT=TRISC -DEFS += -DSD0_MHZ=10 -DEFS += -DSD0_PORT=2 -DEFS += -DSPI_ENABLED=YES -DEFS += -DUART1_BAUD=115200 -DEFS += -DUART1_ENABLED=YES -DEFS += -DUART2_BAUD=115200 -DEFS += -DUART2_ENABLED=YES -DEFS += -DUART3_BAUD=115200 -DEFS += -DUART3_ENABLED=YES -DEFS += -DUART4_BAUD=115200 -DEFS += -DUART4_ENABLED=YES -DEFS += -DUCB_METER +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +uart.o: $S/pic32/uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-max32.ld - -CONFIG = MAX32 -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/cfg/bootloader-max32.ld b/sys/pic32/max32/bootloader.ld similarity index 98% rename from sys/pic32/cfg/bootloader-max32.ld rename to sys/pic32/max32/bootloader.ld index 54bc462..a5ce399 100644 --- a/sys/pic32/cfg/bootloader-max32.ld +++ b/sys/pic32/max32/bootloader.ld @@ -42,6 +42,8 @@ SECTIONS *(.glue_7t) *(.glue_7) __rodata_start = . ; *(.rodata .rodata.* .gnu.linkonce.r.* .rel.dyn) + __abiflags = . ; + *(.MIPS.abiflags) *(.dinit) /* Align here to ensure that the .text section ends on word boundary. */ . = ALIGN (32 / 8); diff --git a/sys/pic32/maximite-color/.gitignore b/sys/pic32/maximite-color/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/maximite-color/.gitignore +++ b/sys/pic32/maximite-color/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/maximite-color/Config b/sys/pic32/maximite-color/Config new file mode 100644 index 0000000..416585e --- /dev/null +++ b/sys/pic32/maximite-color/Config @@ -0,0 +1,60 @@ +# +# Colour Maximite Computer +# ======================== +# Console on USB. +# +# To build the kernel, use: +# cd sys/pic32/maximite +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "MAXIMITE_COLOR" # Board type +ldscript "maximite-color/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISE" # for kernel activity LED... +options "LED_KERNEL_PIN=0" # ...use pin RE0... +options "LED_KERNEL_INVERT" # ...inverted +options "LED_DISK_PORT=TRISE" # for disk activity LED... +options "LED_DISK_PIN=1" # ...use pin RE1 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# SPI ports +controller spi4 # SD card + +# microSD card +device sd0 at spi4 pin RA1 # select pin +options "SD0_PORT=4" # at spi3 TODO: delete +options "SD0_CS_PORT=TRISA" # for chip select... TODO: delete +options "SD0_CS_PIN=1" # ...use pin RA1 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/maximite-color/Makefile b/sys/pic32/maximite-color/Makefile index 39866d1..17f5dc3 100644 --- a/sys/pic32/maximite-color/Makefile +++ b/sys/pic32/maximite-color/Makefile @@ -1,45 +1,362 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DMAXIMITE_COLOR +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DSPI4_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_CS_PIN=1 +PARAM += -DSD0_CS_PORT=TRISA +PARAM += -DSD0_PORT=4 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_DISK_PIN=1 +PARAM += -DLED_DISK_PORT=TRISE +PARAM += -DLED_KERNEL_INVERT +PARAM += -DLED_KERNEL_PIN=0 +PARAM += -DLED_KERNEL_PORT=TRISE +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "maximite-color/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ='CPU_KHZ/BUS_DIV' -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ='((CRYSTAL*1000)/CPU_IDIV*CPU_MUL/CPU_ODIV)' -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=1 -DEFS += -DLED_DISK_PORT=TRISE -DEFS += -DLED_KERNEL_INVERT=YES -DEFS += -DLED_KERNEL_PIN=0 -DEFS += -DLED_KERNEL_PORT=TRISE -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=1 -DEFS += -DSD0_CS_PORT=TRISA -DEFS += -DSD0_PORT=4 -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o usb_device.o \ + usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/usb_device.c $S/pic32/usb_function_cdc.c \ + $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-maxcolor.ld - -CONFIG = MAXIMITE-COLOR -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/cfg/bootloader-maxcolor.ld b/sys/pic32/maximite-color/bootloader.ld similarity index 98% rename from sys/pic32/cfg/bootloader-maxcolor.ld rename to sys/pic32/maximite-color/bootloader.ld index 84af529..62f0934 100644 --- a/sys/pic32/cfg/bootloader-maxcolor.ld +++ b/sys/pic32/maximite-color/bootloader.ld @@ -42,6 +42,8 @@ SECTIONS *(.glue_7t) *(.glue_7) __rodata_start = . ; *(.rodata .rodata.* .gnu.linkonce.r.* .rel.dyn) + __abiflags = . ; + *(.MIPS.abiflags) *(.dinit) /* Align here to ensure that the .text section ends on word boundary. */ . = ALIGN (32 / 8); diff --git a/sys/pic32/maximite/.gitignore b/sys/pic32/maximite/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/maximite/.gitignore +++ b/sys/pic32/maximite/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/maximite/Config b/sys/pic32/maximite/Config new file mode 100644 index 0000000..dedd3d6 --- /dev/null +++ b/sys/pic32/maximite/Config @@ -0,0 +1,61 @@ +# +# Maximite Computer (Original) +# ============================ +# Console on USB. +# For details, see https://github.com/RetroBSD/retrobsd/wiki/Board-Geoffs-Maximite +# +# To build the kernel, use: +# cd sys/pic32/maximite +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "MAXIMITE" # Board type +ldscript "maximite/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISF" # for kernel activity LED... +options "LED_KERNEL_PIN=0" # ...use pin RF0... +options "LED_KERNEL_INVERT" # ...inverted +options "LED_DISK_PORT=TRISE" # for disk activity LED... +options "LED_DISK_PIN=1" # ...use pin RE1 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# SPI ports +controller spi4 # SD card + +# microSD card +device sd0 at spi4 pin RE0 # select pin +options "SD0_PORT=4" # at spi3 TODO: delete +options "SD0_CS_PORT=TRISE" # for chip select... TODO: delete +options "SD0_CS_PIN=0" # ...use pin RE0 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/maximite/Makefile b/sys/pic32/maximite/Makefile index dbb7a20..2282a0a 100644 --- a/sys/pic32/maximite/Makefile +++ b/sys/pic32/maximite/Makefile @@ -1,45 +1,362 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DMAXIMITE +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DSPI4_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_CS_PIN=0 +PARAM += -DSD0_CS_PORT=TRISE +PARAM += -DSD0_PORT=4 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_DISK_PIN=1 +PARAM += -DLED_DISK_PORT=TRISE +PARAM += -DLED_KERNEL_INVERT +PARAM += -DLED_KERNEL_PIN=0 +PARAM += -DLED_KERNEL_PORT=TRISF +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "maximite/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ='CPU_KHZ/BUS_DIV' -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ='((CRYSTAL*1000)/CPU_IDIV*CPU_MUL/CPU_ODIV)' -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=1 -DEFS += -DLED_DISK_PORT=TRISE -DEFS += -DLED_KERNEL_INVERT=YES -DEFS += -DLED_KERNEL_PIN=0 -DEFS += -DLED_KERNEL_PORT=TRISF -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=0 -DEFS += -DSD0_CS_PORT=TRISE -DEFS += -DSD0_PORT=4 -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o usb_device.o \ + usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/usb_device.c $S/pic32/usb_function_cdc.c \ + $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-maximite.ld - -CONFIG = MAXIMITE -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/cfg/bootloader-maximite.ld b/sys/pic32/maximite/bootloader.ld similarity index 100% rename from sys/pic32/cfg/bootloader-maximite.ld rename to sys/pic32/maximite/bootloader.ld diff --git a/sys/pic32/maximite/devcfg.c b/sys/pic32/maximite/devcfg.c deleted file mode 100644 index ad48c89..0000000 --- a/sys/pic32/maximite/devcfg.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Chip configuration. - */ -#include "machine/pic32mx.h" - -PIC32_DEVCFG ( - DEVCFG0_DEBUG_DISABLED, /* ICE debugger enabled */ - - DEVCFG1_FNOSC_PRIPLL | /* Primary oscillator with PLL */ - DEVCFG1_POSCMOD_HS | /* HS oscillator */ - DEVCFG1_FPBDIV_1 | /* Peripheral bus clock = SYSCLK/1 */ - DEVCFG1_IESO | /* Internal-external switch over */ - DEVCFG1_WDTPS_1, /* Watchdog postscale = 1/1 */ - - DEVCFG2_FPLLIDIV_2 | /* PLL divider = 1/2 */ - DEVCFG2_FPLLMUL_20 | /* PLL multiplier = 20x */ - DEVCFG2_UPLLIDIV_2 | /* USB PLL divider = 1/2 */ - DEVCFG2_FPLLODIV_1, /* PLL postscaler = 1/1 */ - - DEVCFG3_USERID(0xffff) | /* User-defined ID */ - DEVCFG3_FSRSSEL_7 | /* Assign irq priority 7 to shadow set */ - DEVCFG3_FUSBIDIO | /* USBID pin: controlled by USB */ - DEVCFG3_FVBUSONIO | /* VBuson pin: controlled by USB */ - DEVCFG3_FCANIO | /* Default CAN pins */ - DEVCFG3_FETHIO); /* Default Ethernet i/o pins */ diff --git a/sys/pic32/maximite/russian.inc b/sys/pic32/maximite/russian.inc deleted file mode 100644 index 17f6a51..0000000 --- a/sys/pic32/maximite/russian.inc +++ /dev/null @@ -1,50 +0,0 @@ -/* - * - * RetroBSD - PS2 keyboard driver for the Maximite PIC32 board - * - * Copyright (C) 2011 Rob Judd - * All rights reserved. The three clause ("New" or "Modified") - * Berkeley software License Agreement specifies the terms and - * conditions for redistribution. - * - */ - -// Map of standard keyboard, Russian Windows layout -const char lowerKey[128]={ - 0, F9, 0, F5, F3, F1, F2, F12, //00 - 0, F10, F8, F6, F4, TAB, 'ё', 0, //08 - 0, 0, L_SHF, 0, L_CTL, 'й', '1', 0, //10 - 0, 0, 'я', 'ы', 'ф', 'ц', '2', 0, //18 - 0, 'с', 'ч', 'в', 'у', '4', '3', 0, //20 - 0, ' ', 'м', 'а', 'е', 'к', '5', 0, //28 - 0, 'т', 'и', 'р', 'п', 'н', '6', 0, //30 - 0, 0, 'ь', 'о', 'г', '7', '8', 0, //38 - 0, 'б', 'л', 'ш', 'щ', '0', '9', 0, //40 - 0, 'ю', '.', 'д', 'ж', 'з', '-', 0, //48 - 0, 0, 'э', 0, 'х', '=', 0, 0, //50 - CAPS, R_SHF, ENTER, 'ъ', 0, '\\', 0, 0, //58 - 0, 0, 0, 0, 0, 0, BKSP, 0, //60 - 0, '1', 0, '4', '7', 0, 0, 0, //68 - '0', ',', '2', '5', '6', '8', ESC, NUM, //70 - F11, '+', '3', '-', '*', '9', 0, 0 //78 - }; - -const char upperKey[128] = { - 0, F9, 0, F5, F3, F1, F2, F12, //00 - 0, F10, F8, F6, F4, TAB, 'Ё', 0, //08 - 0, 0, L_SHF, 0, L_CTL, 'Й', '!', 0, //10 - 0, 0, 'Я', 'Ы', 'Ф', 'Ц', '\"', 0, //18 - 0, 'С', 'Ч', 'В', 'У', ';', '№', 0, //20 - 0, ' ', 'М', 'А', 'Е', 'К', '%', 0, //28 - 0, 'Т', 'И', 'Р', 'П', 'Н', ':', 0, //30 - 0, 0, 'Ь', 'О', 'Г', '?', '*', 0, //38 - 0, 'Б', 'Л', 'Ш', 'Щ', ')', '(', 0, //40 - 0, 'Ю', ',', 'Д', 'Ж', 'З', '_', 0, //48 - 0, 0, 'Э', 0, 'Х', '+', 0, 0, //50 - CAPS, R_SHF, ENTER, 'Ъ', 0, '/', 0, 0, //58 - 0, 0, 0, 0, 0, 0, BKSP, 0, //60 - 0, '1', 0, '4', '7', 0, 0, 0, //68 - '0', ',', '2', '5', '6', '8', ESC, NUM, //70 - F11, '+', '3', '-', '*', '9', 0, 0 //78 - }; - diff --git a/sys/pic32/maximite/usascii.inc b/sys/pic32/maximite/usascii.inc deleted file mode 100644 index 9bfaece..0000000 --- a/sys/pic32/maximite/usascii.inc +++ /dev/null @@ -1,50 +0,0 @@ -/* - * - * RetroBSD - PS2 keyboard driver for the Maximite PIC32 board - * - * Copyright (C) 2011 Rob Judd - * All rights reserved. The three clause ("New" or "Modified") - * Berkeley software License Agreement specifies the terms and - * conditions for redistribution. - * - */ - -// Map of standard keyboard, US ASCII layout -const char lowerKey[128]={ - 0, F9, 0, F5, F3, F1, F2, F12, //00 - 0, F10, F8, F6, F4, TAB, '`', 0, //08 - 0, 0, L_SHF, 0, L_CTL, 'q', '1', 0, //10 - 0, 0, 'z', 's', 'a', 'w', '2', 0, //18 - 0, 'c', 'x', 'd', 'e', '4', '3', 0, //20 - 0, ' ', 'v', 'f', 't', 'r', '5', 0, //28 - 0, 'n', 'b', 'h', 'g', 'y', '6', 0, //30 - 0, 0, 'm', 'j', 'u', '7', '8', 0, //38 - 0, ',', 'k', 'i', 'o', '0', '9', 0, //40 - 0, '.', '/', 'l', ';', 'p', '-', 0, //48 - 0, 0, '\'', 0, '[', '=', 0, 0, //50 - CAPS, R_SHF, ENTER, ']', 0, '\\', 0, 0, //58 - 0, 0, 0, 0, 0, 0, BKSP, 0, //60 - 0, '1', 0, '4', '7', 0, 0, 0, //68 - '0', '.', '2', '5', '6', '8', ESC, NUM, //70 - F11, '+', '3', '-', '*', '9', 0, 0 //78 - }; - -const char upperKey[128] = { - 0, F9, 0, F5, F3, F1, F2, F12, //00 - 0, F10, F8, F6, F4, TAB, '~', 0, //08 - 0, 0, L_SHF, 0, L_CTL, 'Q', '!', 0, //10 - 0, 0, 'Z', 'S', 'A', 'W', '@', 0, //18 - 0, 'C', 'X', 'D', 'E', '$', '#', 0, //20 - 0, ' ', 'V', 'F', 'T', 'R', '%', 0, //28 - 0, 'N', 'B', 'H', 'G', 'Y', '^', 0, //30 - 0, 0, 'M', 'J', 'U', '&', '*', 0, //38 - 0, '<', 'K', 'I', 'O', ')', '(', 0, //40 - 0, '>', '?', 'L', ':', 'P', '_', 0, //48 - 0, 0, '\"', 0, '{', '+', 0, 0, //50 - CAPS, R_SHF, ENTER, '}', 0, '|', 0, 0, //58 - 0, 0, 0, 0, 0, 0, BKSP, 0, //60 - 0, '1', 0, '4', '7', 0, 0, 0, //68 - '0', '.', '2', '5', '6', '8', ESC, NUM, //70 - F11, '+', '3', '-', '*', '9', 0, 0 //78 - }; - diff --git a/sys/pic32/meb/.gitignore b/sys/pic32/meb/.gitignore deleted file mode 100644 index 6a22af6..0000000 --- a/sys/pic32/meb/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.compileversion -.deps/ -.oldversion -machine -sys -unix.bin -unix.map -usbboot.map -vers.c diff --git a/sys/pic32/meb/Makefile b/sys/pic32/meb/Makefile deleted file mode 100644 index e8cf681..0000000 --- a/sys/pic32/meb/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel - -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) - -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = - -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=1 -DEFS += -DLED_DISK_PORT=TRISD -DEFS += -DLED_KERNEL_PIN=2 -DEFS += -DLED_KERNEL_PORT=TRISD -DEFS += -DLED_TTY_PIN=0 -DEFS += -DLED_TTY_PORT=TRISD -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=9 -DEFS += -DSD0_CS_PORT=TRISA -DEFS += -DSD0_PORT=1 -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 - - -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader.ld - -CONFIG = MEB -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk diff --git a/sys/pic32/meb/README b/sys/pic32/meb/README deleted file mode 100644 index aebbad0..0000000 --- a/sys/pic32/meb/README +++ /dev/null @@ -1,5 +0,0 @@ -NOTE -==== - -This device configuration is not currently supported by the -rdisk system. A new driver is needed for the SD card chip. diff --git a/sys/pic32/mem.c b/sys/pic32/mem.c index e8e9301..bf406a0 100644 --- a/sys/pic32/mem.c +++ b/sys/pic32/mem.c @@ -3,11 +3,11 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "conf.h" -#include "systm.h" -#include "uio.h" +#include +#include +#include +#include +#include const struct devspec mmdevs[] = { { 0, "mem" }, diff --git a/sys/pic32/mmb-mx7/.gitignore b/sys/pic32/mmb-mx7/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/mmb-mx7/.gitignore +++ b/sys/pic32/mmb-mx7/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/mmb-mx7/Config b/sys/pic32/mmb-mx7/Config new file mode 100644 index 0000000..a44870e --- /dev/null +++ b/sys/pic32/mmb-mx7/Config @@ -0,0 +1,70 @@ +# +# Board: MMB for PIC32MX7, by MikroElektronika +# ================================== +# Console on USB. +# +# To build the kernel, use: +# cd sys/pic32/mmb-mx7 +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "MMB_MX7" # Board type +ldscript "mmb-mx7/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISA" # for kernel activity LED... +options "LED_KERNEL_PIN=0" # ...use pin RA0... +options "LED_KERNEL_INVERT" # ...inverted +options "LED_SWAP_PORT=TRISD" # for swap activity LED... +options "LED_SWAP_PIN=9" # ...use pin RD9... +options "LED_SWAP_INVERT" # ...inverted +options "LED_TTY_PORT=TRISA" # for console activity LED... +options "LED_TTY_PIN=1" # ...use pin RA1... +options "LED_TTY_INVERT" # ...inverted + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# Serial UART ports +device uart1 # RS-232 port + +# SPI ports +controller spi1 # SD card + +# microSD card +device sd0 at spi1 pin RA9 # select pin +options "SD0_PORT=1" # sd0 at spi1 TODO: delete +options "SD0_CS_PORT=TRISA" # for sd0 chip select...TODO: delete +options "SD0_CS_PIN=9" # ...use pin RA9 TODO: delete +options "SD0_MHZ=8" # speed 8 MHz + +# General purpose I/O ports +device gpio +options "GPIO_CLEAR_PORT=TRISD" # clear on startup... +options "GPIO_CLEAR_PIN=2" # ...pin RD2 + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/mmb-mx7/Makefile b/sys/pic32/mmb-mx7/Makefile index b738a62..f7c4ce1 100644 --- a/sys/pic32/mmb-mx7/Makefile +++ b/sys/pic32/mmb-mx7/Makefile @@ -1,54 +1,373 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DMMB_MX7 +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DUART1_ENABLED +PARAM += -DSPI1_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DGPIO_CLEAR_PIN=2 +PARAM += -DGPIO_CLEAR_PORT=TRISD +PARAM += -DSD0_MHZ=8 +PARAM += -DSD0_CS_PIN=9 +PARAM += -DSD0_CS_PORT=TRISA +PARAM += -DSD0_PORT=1 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_TTY_INVERT +PARAM += -DLED_TTY_PIN=1 +PARAM += -DLED_TTY_PORT=TRISA +PARAM += -DLED_SWAP_INVERT +PARAM += -DLED_SWAP_PIN=9 +PARAM += -DLED_SWAP_PORT=TRISD +PARAM += -DLED_KERNEL_INVERT +PARAM += -DLED_KERNEL_PIN=0 +PARAM += -DLED_KERNEL_PORT=TRISA +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "mmb-mx7/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ='CPU_KHZ/BUS_DIV' -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ='((CRYSTAL*1000)/CPU_IDIV*CPU_MUL/CPU_ODIV)' -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_CLEAR_PIN=2 -DEFS += -DGPIO_CLEAR_PORT=TRISD -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_KERNEL_INVERT=YES -DEFS += -DLED_KERNEL_PIN=0 -DEFS += -DLED_KERNEL_PORT=TRISA -DEFS += -DLED_SWAP_INVERT=YES -DEFS += -DLED_SWAP_PIN=9 -DEFS += -DLED_SWAP_PORT=TRISD -DEFS += -DLED_TTY_INVERT=YES -DEFS += -DLED_TTY_PIN=1 -DEFS += -DLED_TTY_PORT=TRISA -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=9 -DEFS += -DSD0_CS_PORT=TRISA -DEFS += -DSD0_MHZ=8 -DEFS += -DSD0_PORT=1 -DEFS += -DUART1_ENABLED=YES -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o uart.o \ + usb_device.o usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/uart.c $S/pic32/usb_device.c \ + $S/pic32/usb_function_cdc.c $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +uart.o: $S/pic32/uart.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader.ld - -CONFIG = MMB-MX7 -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/cfg/bootloader.ld b/sys/pic32/mmb-mx7/bootloader.ld similarity index 100% rename from sys/pic32/cfg/bootloader.ld rename to sys/pic32/mmb-mx7/bootloader.ld diff --git a/sys/pic32/newvers.sh b/sys/pic32/newvers.sh index 7bb01fb..6dc5638 100644 --- a/sys/pic32/newvers.sh +++ b/sys/pic32/newvers.sh @@ -23,13 +23,13 @@ echo $GITREV >.oldversion echo $GITREV ${USER-root} `pwd` `date +'%Y-%m-%d'` `hostname` $CV| \ awk ' { - version = $1; + version = $1; user = $2; dir = $3; date = $4; - host = $5; + host = $5; cv = $6; - printf "const char version[] = \"2.11 BSD Unix for PIC32, revision G%s build %d:\\n", version, cv; - printf " Compiled %s by %s@%s:\\n", date, user, host; - printf " %s\\n\";\n", dir; + printf "const char version[] = \"2.11 BSD Unix for PIC32, revision G%s build %d:\\n", version, cv; + printf " Compiled %s by %s@%s:\\n", date, user, host; + printf " %s\\n\";\n", dir; }' diff --git a/sys/pic32/picadillo/.gitignore b/sys/pic32/picadillo/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/picadillo/.gitignore +++ b/sys/pic32/picadillo/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/picadillo/Config b/sys/pic32/picadillo/Config new file mode 100644 index 0000000..9ddb4d6 --- /dev/null +++ b/sys/pic32/picadillo/Config @@ -0,0 +1,56 @@ +# +# 4D Systems Picadillo-35T board +# ============================== +# Console on USB UART port. +# For details, see http://www.4dsystems.com.au/product/Picadillo_35T/ +# +# To build the kernel, use: +# cd sys/pic32/picadillo +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "PICADILLO_35T" # Board type +ldscript "max32/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Serial UART ports +device uart1 # Serial-to-USB converter + +# Console options +options "CONSOLE_DEVICE=tty0" # /dev/tty0 + +# SPI ports +controller spi2 # SD card + +# microSD card +device sd0 at spi2 pin RG9 # select pin +options "SD0_MHZ=10" # speed 10 MHz +options "SD0_PORT=2" # at spi2 TODO: delete +options "SD0_CS_PORT=TRISG" # for chip select... TODO: delete +options "SD0_CS_PIN=9" # ...use pin RG9 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm + +# HX8357 TFT display driver +device hxtft diff --git a/sys/pic32/picadillo/Config-rambo b/sys/pic32/picadillo/Config-rambo new file mode 100644 index 0000000..f262d57 --- /dev/null +++ b/sys/pic32/picadillo/Config-rambo @@ -0,0 +1,96 @@ +# +# 4D Systems Picadillo-35T board with SPI RAM disk +# ================================================ +# Console on TFT display. +# For details, see http://www.4dsystems.com.au/product/Picadillo_35T/ +# +# To build the kernel, use: +# cd sys/pic32/picadillo +# kconfig Config-rambo +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "PICADILLO_35T" # Board type +ldscript "max32/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Serial UART ports +device uart1 # Serial-to-USB converter + +# Console options +options "CONSOLE_DEVICE=tft0" # LCD screen + +# SPI ports +controller spi2 # SD card +controller spi4 # RAM disk: spirams + +# microSD card +device sd0 at spi2 pin RG9 # select pin +options "SD0_MHZ=10" # speed 10 MHz +options "SD0_PORT=2" # at spi2 TODO: delete +options "SD0_CS_PORT=TRISG" # for chip select... TODO: delete +options "SD0_CS_PIN=9" # ...use pin RG9 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm + +# HX8357 TFT display driver +device hxtft + +# spirams - SPI block device +device spirams0 at spi4 +options "PARTITION='spirams0:sa@2040'" # Partition schema +options "SPIRAMS_PORT=SPI4CON" # TODO: delete this option +options "SPIRAMS_CHIPSIZE=128" # chip size in kbytes +options "SPIRAMS_CHIPS=16" # number of chips +options "SPIRAMS_CS0_PORT=TRISA" # for CS0... +options "SPIRAMS_CS0_PIN=0" # ...use pin RA0 +options "SPIRAMS_CS1_PORT=TRISA" # for CS1... +options "SPIRAMS_CS1_PIN=1" # ...use pin RA1 +options "SPIRAMS_CS2_PORT=TRISA" # for CS2... +options "SPIRAMS_CS2_PIN=4" # ...use pin RA4 +options "SPIRAMS_CS3_PORT=TRISA" # for CS3... +options "SPIRAMS_CS3_PIN=5" # ...use pin RA5 +options "SPIRAMS_CS4_PORT=TRISA" # for CS4... +options "SPIRAMS_CS4_PIN=2" # ...use pin RA2 +options "SPIRAMS_CS5_PORT=TRISD" # for CS5... +options "SPIRAMS_CS5_PIN=1" # ...use pin RD1 +options "SPIRAMS_CS6_PORT=TRISD" # for CS6... +options "SPIRAMS_CS6_PIN=2" # ...use pin RD2 +options "SPIRAMS_CS7_PORT=TRISB" # for CS7... +options "SPIRAMS_CS7_PIN=14" # ...use pin RB14 +options "SPIRAMS_CS8_PORT=TRISD" # for CS8... +options "SPIRAMS_CS8_PIN=14" # ...use pin RFD14 +options "SPIRAMS_CS9_PORT=TRISD" # for CS9... +options "SPIRAMS_CS9_PIN=8" # ...use pin RD8 +options "SPIRAMS_CS10_PORT=TRISA" # for CS10... +options "SPIRAMS_CS10_PIN=6" # ...use pin RA6 +options "SPIRAMS_CS11_PORT=TRISA" # for CS11... +options "SPIRAMS_CS11_PIN=7" # ...use pin RA7 +options "SPIRAMS_CS12_PORT=TRISG" # for CS12... +options "SPIRAMS_CS12_PIN=14" # ...use pin RG14 +options "SPIRAMS_CS13_PORT=TRISG" # for CS13... +options "SPIRAMS_CS13_PIN=12" # ...use pin RG12 +options "SPIRAMS_CS14_PORT=TRISG" # for CS14... +options "SPIRAMS_CS14_PIN=13" # ...use pin RG13 +options "SPIRAMS_CS15_PORT=TRISF" # for CS15... +options "SPIRAMS_CS15_PIN=5" # ...use pin RF5 diff --git a/sys/pic32/picadillo/Makefile b/sys/pic32/picadillo/Makefile index 956047a..fb07079 100644 --- a/sys/pic32/picadillo/Makefile +++ b/sys/pic32/picadillo/Makefile @@ -1,43 +1,353 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DPICADILLO_35T +PARAM += -DPIC32MX7 +PARAM += -DUART1_ENABLED +PARAM += -DSPI2_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DHXTFT_ENABLED +PARAM += -DSD0_CS_PIN=9 +PARAM += -DSD0_CS_PORT=TRISG +PARAM += -DSD0_PORT=2 +PARAM += -DSD0_MHZ=10 +PARAM += -DCONSOLE_DEVICE=tty0 +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "max32/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o hx8357.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=tty0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DHX8357_ENABLED -DEFS += -DKERNEL -DEFS += -DPIC32MX7 -DEFS += -DPWM_ENABLED=YES -DEFS += -DSD0_CS_PIN=9 -DEFS += -DSD0_CS_PORT=TRISG -DEFS += -DSD0_PORT=2 -DEFS += -DSPI_ENABLED=YES -DEFS += -DUART1_BAUD=115200 -DEFS += -DUART1_ENABLED=YES -DEFS += -DUCB_METER +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o hx8357.o machdep.o \ + mem.o pwm.o rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o \ + uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/hx8357.c $S/pic32/machdep.c \ + $S/pic32/mem.c $S/pic32/pwm.c $S/pic32/rd_sd.c $S/pic32/signal.c \ + $S/pic32/spi.c $S/pic32/spi_bus.c $S/pic32/swap.c \ + $S/pic32/sysctl.c $S/pic32/uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +hx8357.o: $S/pic32/hx8357.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +uart.o: $S/pic32/uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-max32.ld - -CONFIG = PICADILLO -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/picadillo_rambo/.gitignore b/sys/pic32/picadillo_rambo/.gitignore deleted file mode 100644 index 6a22af6..0000000 --- a/sys/pic32/picadillo_rambo/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.compileversion -.deps/ -.oldversion -machine -sys -unix.bin -unix.map -usbboot.map -vers.c diff --git a/sys/pic32/picadillo_rambo/Makefile b/sys/pic32/picadillo_rambo/Makefile deleted file mode 100644 index a37cfa6..0000000 --- a/sys/pic32/picadillo_rambo/Makefile +++ /dev/null @@ -1,102 +0,0 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel - -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) - -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o hx8357.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rd_spirams.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = - -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=tft0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DDC0_DEBUG=DEVCFG0_DEBUG_DISABLED -DEFS += -DDC0_ICE=0 -DEFS += -DDC1_CKM=0 -DEFS += -DDC1_CKS=0 -DEFS += -DDC1_FNOSC=DEVCFG1_FNOSC_PRIPLL -DEFS += -DDC1_IESO=DEVCFG1_IESO -DEFS += -DDC1_OSCIOFNC=0 -DEFS += -DDC1_PBDIV=DEVCFG1_FPBDIV_1 -DEFS += -DDC1_POSCMOD=DEVCFG1_POSCMOD_HS -DEFS += -DDC1_SOSC=0 -DEFS += -DDC1_WDTEN=0 -DEFS += -DDC1_WDTPS=DEVCFG1_WDTPS_1 -DEFS += -DDC2_PLLIDIV=DEVCFG2_FPLLIDIV_2 -DEFS += -DDC2_PLLMUL=DEVCFG2_FPLLMUL_20 -DEFS += -DDC2_PLLODIV=DEVCFG2_FPLLODIV_1 -DEFS += -DDC2_UPLL=0 -DEFS += -DDC2_UPLLIDIV=DEVCFG2_UPLLIDIV_2 -DEFS += -DDC3_CAN=DEVCFG3_FCANIO -DEFS += -DDC3_ETH=DEVCFG3_FETHIO -DEFS += -DDC3_MII=DEVCFG3_FMIIEN -DEFS += -DDC3_SRS=DEVCFG3_FSRSSEL_7 -DEFS += -DDC3_USBID=DEVCFG3_FUSBIDIO -DEFS += -DDC3_USERID=0xffff -DEFS += -DDC3_VBUSON=DEVCFG3_FVBUSONIO -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DHX8357_ENABLED -DEFS += -DKERNEL -DEFS += -DPARTITION="spirams0:sa@2040" -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=9 -DEFS += -DSD0_CS_PORT=TRISG -DEFS += -DSD0_PORT=2 -DEFS += -DSPIRAMS_CHIPS=16 -DEFS += -DSPIRAMS_CHIPSIZE=128 -DEFS += -DSPIRAMS_CS0_PIN=0 -DEFS += -DSPIRAMS_CS0_PORT=TRISA -DEFS += -DSPIRAMS_CS10_PIN=6 -DEFS += -DSPIRAMS_CS10_PORT=TRISA -DEFS += -DSPIRAMS_CS11_PIN=7 -DEFS += -DSPIRAMS_CS11_PORT=TRISA -DEFS += -DSPIRAMS_CS12_PIN=14 -DEFS += -DSPIRAMS_CS12_PORT=TRISG -DEFS += -DSPIRAMS_CS13_PIN=12 -DEFS += -DSPIRAMS_CS13_PORT=TRISG -DEFS += -DSPIRAMS_CS14_PIN=13 -DEFS += -DSPIRAMS_CS14_PORT=TRISG -DEFS += -DSPIRAMS_CS15_PIN=5 -DEFS += -DSPIRAMS_CS15_PORT=TRISF -DEFS += -DSPIRAMS_CS1_PIN=1 -DEFS += -DSPIRAMS_CS1_PORT=TRISA -DEFS += -DSPIRAMS_CS2_PIN=4 -DEFS += -DSPIRAMS_CS2_PORT=TRISA -DEFS += -DSPIRAMS_CS3_PIN=5 -DEFS += -DSPIRAMS_CS3_PORT=TRISA -DEFS += -DSPIRAMS_CS4_PIN=2 -DEFS += -DSPIRAMS_CS4_PORT=TRISA -DEFS += -DSPIRAMS_CS5_PIN=1 -DEFS += -DSPIRAMS_CS5_PORT=TRISD -DEFS += -DSPIRAMS_CS6_PIN=2 -DEFS += -DSPIRAMS_CS6_PORT=TRISD -DEFS += -DSPIRAMS_CS7_PIN=14 -DEFS += -DSPIRAMS_CS7_PORT=TRISB -DEFS += -DSPIRAMS_CS8_PIN=14 -DEFS += -DSPIRAMS_CS8_PORT=TRISD -DEFS += -DSPIRAMS_CS9_PIN=8 -DEFS += -DSPIRAMS_CS9_PORT=TRISD -DEFS += -DSPIRAMS_ENABLED -DEFS += -DSPIRAMS_PORT=4 -DEFS += -DUART1_BAUD=115200 -DEFS += -DUART1_ENABLED=YES -DEFS += -DUCB_METER - - -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-max32.ld - -CONFIG = PICADILLO_RAMBO -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk diff --git a/sys/pic32/picga.c b/sys/pic32/picga.c index c6aec3f..8aaf924 100644 --- a/sys/pic32/picga.c +++ b/sys/pic32/picga.c @@ -21,16 +21,15 @@ * arising out of or in connection with the use or performance of * this software. */ - -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "systm.h" -#include "uio.h" -#include "picga.h" -#include "spi_bus.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include const struct devspec picgadevs[] = { { 0, "picga" }, @@ -45,7 +44,7 @@ void blockdelay(unsigned int v) { for( ; v>0 ; v--) asm volatile ("nop"); -} +} void picga_command(unsigned char cmd, unsigned char len, void *data) { diff --git a/sys/pic32/pinguino-micro/.gitignore b/sys/pic32/pinguino-micro/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/pinguino-micro/.gitignore +++ b/sys/pic32/pinguino-micro/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/pinguino-micro/Config b/sys/pic32/pinguino-micro/Config new file mode 100644 index 0000000..c9766c0 --- /dev/null +++ b/sys/pic32/pinguino-micro/Config @@ -0,0 +1,58 @@ +# +# Olimex Pinguino-Micro board with PIC32MX795 processor +# ===================================================== +# Console on USB. +# +# To build the kernel, use: +# cd sys/pic32/pinguino-micro +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "PINGUINO_MICRO" # Board type +ldscript "maximite/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISD" # for kernel activity LED... +options "LED_KERNEL_PIN=1" # ...use pin RD1 +options "LED_KERNEL_INVERT" # ...inverted + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# SPI ports +controller spi2 # SD card + +# microSD card +device sd0 at spi2 pin RB13 # select pin +options "SD0_PORT=2" # at spi2 TODO: delete +options "SD0_CS_PORT=TRISB" # for chip select... TODO: delete +options "SD0_CS_PIN=13" # ...use pin RB13 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/pinguino-micro/Makefile b/sys/pic32/pinguino-micro/Makefile index 256d658..024442a 100644 --- a/sys/pic32/pinguino-micro/Makefile +++ b/sys/pic32/pinguino-micro/Makefile @@ -1,44 +1,360 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DPINGUINO_MICRO +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DSPI2_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_CS_PIN=13 +PARAM += -DSD0_CS_PORT=TRISB +PARAM += -DSD0_PORT=2 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_KERNEL_INVERT +PARAM += -DLED_KERNEL_PIN=1 +PARAM += -DLED_KERNEL_PORT=TRISD +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "maximite/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ='CPU_KHZ/BUS_DIV' -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ='((CRYSTAL*1000)/CPU_IDIV*CPU_MUL/CPU_ODIV)' -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_KERNEL_INVERT=YES -DEFS += -DLED_KERNEL_PIN=1 -DEFS += -DLED_KERNEL_PORT=TRISD -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=13 -DEFS += -DSD0_CS_PORT=TRISB -DEFS += -DSD0_PORT=2 -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o usb_device.o \ + usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/usb_device.c $S/pic32/usb_function_cdc.c \ + $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-maximite.ld - -CONFIG = PINGUINO-MICRO -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/power_control.c b/sys/pic32/power_control.c index 2a379c5..bfb3d37 100644 --- a/sys/pic32/power_control.c +++ b/sys/pic32/power_control.c @@ -1,9 +1,9 @@ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "systm.h" -#include "machparam.h" -#include "reboot.h" +#include +#include +#include +#include +#include +#include volatile unsigned int psCounter; int countdown; diff --git a/sys/pic32/pwm.c b/sys/pic32/pwm.c index e52206c..792bbdc 100644 --- a/sys/pic32/pwm.c +++ b/sys/pic32/pwm.c @@ -22,14 +22,14 @@ * arising out of or in connection with the use or performance of * this software. */ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "systm.h" -#include "sys/uio.h" -#include "pwm.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include /* * Devices: diff --git a/sys/pic32/rd_flash.c b/sys/pic32/rd_flash.c index 51ec7fa..d3eef65 100644 --- a/sys/pic32/rd_flash.c +++ b/sys/pic32/rd_flash.c @@ -1,9 +1,9 @@ -#include "param.h" -#include "systm.h" -#include "buf.h" -#include "errno.h" -#include "dk.h" -#include "debug.h" +#include +#include +#include +#include +#include +#include extern unsigned char flash_data[] asm("_binary_flash_img_start"); extern unsigned char flash_data_size[] asm("_binary_flash_img_size"); diff --git a/sys/pic32/rd_mrams.c b/sys/pic32/rd_mrams.c index 92bf16e..6446e7d 100644 --- a/sys/pic32/rd_mrams.c +++ b/sys/pic32/rd_mrams.c @@ -1,12 +1,11 @@ -#include "param.h" -#include "systm.h" -#include "buf.h" -#include "errno.h" -#include "dk.h" -#include "rdisk.h" -#include "spi_bus.h" - -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include #define MRAM_WREN 0x06 #define MRAM_WRDI 0x04 diff --git a/sys/pic32/rd_sd.c b/sys/pic32/rd_sd.c index 8cd84f2..6da12ce 100644 --- a/sys/pic32/rd_sd.c +++ b/sys/pic32/rd_sd.c @@ -29,15 +29,14 @@ * arising out of or in connection with the use or performance of * this software. */ -#include "param.h" -#include "systm.h" -#include "buf.h" -#include "errno.h" -#include "dk.h" -#include "rdisk.h" -#include "spi_bus.h" - -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include /* * Two SD/MMC disks on SPI. diff --git a/sys/pic32/rd_sdramp.c b/sys/pic32/rd_sdramp.c index 8640dbc..661a3db 100644 --- a/sys/pic32/rd_sdramp.c +++ b/sys/pic32/rd_sdramp.c @@ -5,20 +5,19 @@ * * This code could use a bit of optimization. */ - -#include "param.h" -#include "systm.h" -#include "buf.h" -#include "errno.h" -#include "dk.h" -#include "sdram.h" -#include "rd_sdramp.h" -#include "rdisk.h" +#include +#include +#include +#include +#include +#include +#include +#include /* * See rd_sdramp_config.h for sdramp port/pin configuration */ -#include "rd_sdramp_config.h" +#include int sw_dkn = -1; /* Statistics slot number */ diff --git a/sys/pic32/rd_spirams.c b/sys/pic32/rd_spirams.c index eb6bdd7..0fd3277 100644 --- a/sys/pic32/rd_spirams.c +++ b/sys/pic32/rd_spirams.c @@ -1,12 +1,11 @@ -#include "param.h" -#include "systm.h" -#include "buf.h" -#include "errno.h" -#include "dk.h" -#include "rdisk.h" -#include "spi_bus.h" - -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include +#include #define SPIRAM_WREN 0x06 #define SPIRAM_WRDI 0x04 diff --git a/sys/pic32/rd_sramc.c b/sys/pic32/rd_sramc.c index 08cadd5..56fb10a 100644 --- a/sys/pic32/rd_sramc.c +++ b/sys/pic32/rd_sramc.c @@ -16,14 +16,13 @@ * Signals PMRD, PMWR are active LOW and idle HIGH * Signal PMA0 is LOW when accessing RAM Data, and HIGH when accessing RAM Addresses */ -#include "param.h" -#include "systm.h" -#include "buf.h" -#include "errno.h" -#include "dk.h" -#include "rdisk.h" - -#include "debug.h" +#include +#include +#include +#include +#include +#include +#include int sw_dkn = -1; /* Statistics slot number */ diff --git a/sys/pic32/retroone/.gitignore b/sys/pic32/retroone/.gitignore deleted file mode 100644 index 6a22af6..0000000 --- a/sys/pic32/retroone/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.compileversion -.deps/ -.oldversion -machine -sys -unix.bin -unix.map -usbboot.map -vers.c diff --git a/sys/pic32/retroone/Makefile b/sys/pic32/retroone/Makefile deleted file mode 100644 index c08ebdd..0000000 --- a/sys/pic32/retroone/Makefile +++ /dev/null @@ -1,133 +0,0 @@ -# -# Build RetroBSD kernel for PIC32 platform. -# -H = ../../include -M = .. -S = ../../kernel - -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) - -# Kernel options. -DEFS += -I. -I$(H) -DKERNEL -DUCB_METER -DPIC32MX7 -DEFS += -DGLOBAL_DEBUG - -# CPU frequency 80 MHz. -DEFS += -DCPU_KHZ=80000 -DEFS += -DBUS_KHZ=80000 -DBUS_DIV=1 - -# -# Basic pic32mx795f512l chip with internal oscillator -# =================================================== -# -# Console on UART1 with hardware handshaking -DEFS += -DCONSOLE_UART1 #-DCONSOLE_RTSCTS -# SD/MMC card driver on SPI1 -DEFS += -DSD0_PORT=1 -DSD0_MHZ=20 -# /CS0 at pin B1 -DEFS += -DSD0_CS_PORT=TRISD -DSD0_CS_PIN=9 -# LEDs at pins A0, A1, A2, A3 -DEFS += -DLED_DISK_PORT=TRISA -DLED_DISK_PIN=14 -DEFS += -DLED_KERNEL_PORT=TRISB -DLED_KERNEL_PIN=8 -DEFS += -DLED_TTY_PORT=TRISB -DLED_TTY_PIN=9 -DEFS += -DLED_AUX_PORT=TRISA -DLED_AUX_PIN=9 - -DEPFLAGS = -MT $@ -MD -MP -MF .deps/$*.dep -CFLAGS = -O $(DEFS) $(DEPFLAGS) -ASFLAGS = $(DEFS) $(DEPFLAGS) - -include ../gcc-config.mk - -CC = $(GCCPREFIX)gcc -EL -g -mips32r2 -CC += -nostdinc -fno-builtin -Werror -Wall -fno-dwarf2-cfi-asm -LDFLAGS += -nostdlib -T ../cfg/bare.ld -Wl,-Map=unix.map -SIZE = $(GCCPREFIX)size -OBJDUMP = $(GCCPREFIX)objdump -OBJCOPY = $(GCCPREFIX)objcopy -MPIDE = /Applications/Mpide.app/Contents/Resources/Java/ - -# Machine-dependent files: -# startup.o MUST be loaded first. -KERNOBJ = startup.o clock.o devsw.o cons.o sysctl.o \ - signal.o machdep.o mem.o exception.o - -# Kernel. -KERNOBJ += init_main.o init_sysent.o kern_clock.o \ - kern_descrip.o kern_exec.o kern_exit.o kern_fork.o \ - kern_mman.o kern_proc.o kern_prot.o \ - kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ - kern_subr.o kern_synch.o kern_sysctl.o kern_time.o \ - subr_log.o subr_prf.o subr_rmap.o \ - sys_generic.o sys_inode.o syscalls.o \ - sys_pipe.o sys_process.o tty.o exec_conf.o exec_subr.o \ - tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o \ - ufs_bmap.o ufs_dsort.o ufs_fio.o \ - ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o \ - ufs_syscalls.o ufs_syscalls2.o vfs_vnops.o \ - vm_sched.o vm_swap.o vm_swp.o kern_glob.o swap.o spi_bus.o - -# Drivers. -KERNOBJ += rd_sd.o rdisk.o - -# Configuration-dependent files. -KERNOBJ += vers.o devcfg.o - -# Include any local specific configuration overrides --include Makefile.local - -# GPIO driver -KERNOBJ += gpio.o -DEFS += -DGPIO_ENABLED - -# ADC driver -KERNOBJ += adc.o -DEFS += -DADC_ENABLED - -# GLCD driver -KERNOBJ += glcd.o -DEFS += -DGLCD_ENABLED - -# PWM driver -KERNOBJ += pwm.o -DEFS += -DPWM_ENABLED - -all: .deps sys machine unix.elf - $(SIZE) unix.elf - -clean: - rm -rf .deps *.o *.elf *.bin *.dis *.map *.srec core \ - mklog assym.h vers.c genassym sys machine - -cleanest: clean - rm -f unix.hex - -.deps: - mkdir .deps - -sys: - ln -s ../../include $@ - -machine: - ln -s .. $@ - -unix.elf: $(KERNOBJ) ../cfg/bare.ld - $(CC) $(LDFLAGS) $(KERNOBJ) -o $@ - chmod -x $@ - $(OBJDUMP) -d -S $@ > unix.dis - $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ unix.hex - -load: unix.elf - pic32prog unix.hex - -vers.o: ../newvers.sh $(H)/*.h $(M)/*.[ch] $(S)/*.c - sh ../newvers.sh > vers.c - $(CC) -c vers.c - -.SUFFIXES: .i .srec .hex .dis .cpp .cxx .bin .elf - -.o.dis: - $(OBJDUMP) -d -z -S $< > $@ - -ifeq (.deps, $(wildcard .deps)) --include .deps/*.dep -endif diff --git a/sys/pic32/retroone/README b/sys/pic32/retroone/README deleted file mode 100644 index c648880..0000000 --- a/sys/pic32/retroone/README +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains an example of RetroBSD kernel build -using plain Makefile (no configsys or kconfig tools). diff --git a/sys/pic32/retroone/devcfg.c b/sys/pic32/retroone/devcfg.c deleted file mode 100644 index e17d102..0000000 --- a/sys/pic32/retroone/devcfg.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Chip configuration. - */ -#include "machine/pic32mx.h" - -PIC32_DEVCFG ( - DEVCFG0_DEBUG_ENABLED, /* ICE debugger enabled */ - - DEVCFG1_FNOSC_FRCDIVPLL | /* Primary oscillator with PLL */ - DEVCFG1_POSCMOD_DISABLE | /* HS oscillator */ - DEVCFG1_OSCIOFNC | /* CLKO output active */ - DEVCFG1_FPBDIV_1 | /* Peripheral bus clock = SYSCLK/1 */ - DEVCFG1_FCKM_DISABLE | /* Fail-safe clock monitor disable */ - DEVCFG1_FCKS_DISABLE | /* Clock switching disable */ - DEVCFG1_WDTPS_1024, /* Watchdog postscale = 1/1024 */ - - DEVCFG2_FPLLIDIV_2 | /* PLL divider = 1/2 */ - DEVCFG2_FPLLMUL_20 | /* PLL multiplier = 20x */ - DEVCFG2_UPLLIDIV_2 | /* USB PLL divider = 1/2 */ - DEVCFG2_UPLLDIS | /* Disable USB PLL */ - DEVCFG2_FPLLODIV_1, /* PLL postscaler = 1/1 */ - - DEVCFG3_USERID(0xffff) | /* User-defined ID */ - DEVCFG3_FSRSSEL_7 | /* Assign irq priority 7 to shadow set */ - DEVCFG3_FETHIO); /* Default Ethernet i/o pins */ diff --git a/sys/pic32/sdram.S b/sys/pic32/sdram.S index 47b86cb..93b4fb5 100644 --- a/sys/pic32/sdram.S +++ b/sys/pic32/sdram.S @@ -15,7 +15,7 @@ /* * See rd_sdramp_config.h for sdramp port/pin configuration */ -#include "rd_sdramp_config.h" +#include /* Offsets (from TRISA) for the various port control registers */ #define TRIS_OFFSET 0x0 diff --git a/sys/pic32/sdxl/.gitignore b/sys/pic32/sdxl/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/sdxl/.gitignore +++ b/sys/pic32/sdxl/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/sdxl/Config b/sys/pic32/sdxl/Config new file mode 100644 index 0000000..5e0ddc6 --- /dev/null +++ b/sys/pic32/sdxl/Config @@ -0,0 +1,62 @@ +# +# Majenko SDXL board +# ================== +# Ardiuno-compatible bootloader. +# Console on USB. +# LED at pin E7 (label 23). +# +# To build the kernel, use: +# cd sys/pic32/sdxl +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "SDXL" # Board type +ldscript "max32/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISE" # for kernel activity LED... +options "LED_KERNEL_PIN=7" # ...use pin RE7 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# SPI ports +controller spi2 # SD card + +# microSD card +device sd0 at spi2 pin RG9 # select pin RG9 +options "SD0_PORT=2" # sd0 at spi2 TODO: delete +options "SD0_CS_PORT=TRISG" # for chip select... TODO: delete +options "SD0_CS_PIN=9" # ...use pin RA9 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm + +# GLCD driver +device glcd diff --git a/sys/pic32/sdxl/Makefile b/sys/pic32/sdxl/Makefile index 6baf2eb..c49e37f 100644 --- a/sys/pic32/sdxl/Makefile +++ b/sys/pic32/sdxl/Makefile @@ -1,45 +1,363 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DSDXL +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DSPI2_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DGLCD_ENABLED +PARAM += -DSD0_CS_PIN=9 +PARAM += -DSD0_CS_PORT=TRISG +PARAM += -DSD0_PORT=2 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_KERNEL_PIN=7 +PARAM += -DLED_KERNEL_PORT=TRISE +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "max32/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o glcd.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o pwm.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGLCD_ENABLED=YES -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_KERNEL_PIN=7 -DEFS += -DLED_KERNEL_PORT=TRISE -DEFS += -DPIC32MX7 -DEFS += -DPWM_ENABLED=YES -DEFS += -DSD0_CS_PIN=9 -DEFS += -DSD0_CS_PORT=TRISG -DEFS += -DSD0_PORT=2 -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o glcd.o gpio.o machdep.o mem.o \ + pwm.o rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o \ + usb_device.o usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/glcd.c $S/pic32/gpio.c $S/pic32/machdep.c \ + $S/pic32/mem.c $S/pic32/pwm.c $S/pic32/rd_sd.c $S/pic32/signal.c \ + $S/pic32/spi.c $S/pic32/spi_bus.c $S/pic32/swap.c \ + $S/pic32/sysctl.c $S/pic32/usb_device.c \ + $S/pic32/usb_function_cdc.c $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +glcd.o: $S/pic32/glcd.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-max32.ld - -CONFIG = SDXL -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/signal.c b/sys/pic32/signal.c index c25e170..1a97819 100644 --- a/sys/pic32/signal.c +++ b/sys/pic32/signal.c @@ -3,14 +3,14 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "systm.h" -#include "signalvar.h" -#include "user.h" -#include "proc.h" -#include "buf.h" -#include "map.h" -#include "syslog.h" +#include +#include +#include +#include +#include +#include +#include +#include //#define DIAGNOSTIC diff --git a/sys/pic32/skel.c b/sys/pic32/skel.c index 015085e..e5e3989 100644 --- a/sys/pic32/skel.c +++ b/sys/pic32/skel.c @@ -21,13 +21,13 @@ * arising out of or in connection with the use or performance of * this software. */ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "systm.h" -#include "uio.h" -#include "skel.h" +#include +#include +#include +#include +#include +#include +#include /* * List of device names and minor numbers. diff --git a/sys/pic32/spi.c b/sys/pic32/spi.c index fe4ca18..5cc83a2 100644 --- a/sys/pic32/spi.c +++ b/sys/pic32/spi.c @@ -21,14 +21,14 @@ * arising out of or in connection with the use or performance of * this software. */ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "systm.h" -#include "uio.h" -#include "spi.h" -#include "spi_bus.h" +#include +#include +#include +#include +#include +#include +#include +#include const struct devspec spidevs[] = { { 0, "spi1" }, diff --git a/sys/pic32/spi_bus.c b/sys/pic32/spi_bus.c index 814d836..0431b6d 100644 --- a/sys/pic32/spi_bus.c +++ b/sys/pic32/spi_bus.c @@ -1,10 +1,10 @@ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "systm.h" -#include "uio.h" -#include "spi_bus.h" +#include +#include +#include +#include +#include +#include +#include #define NSPI 4 /* Ports SPI1...SPI4 */ diff --git a/sys/pic32/ssd1926-sdcard.c b/sys/pic32/ssd1926-sdcard.c deleted file mode 100644 index 3bc2260..0000000 --- a/sys/pic32/ssd1926-sdcard.c +++ /dev/null @@ -1,854 +0,0 @@ -/* - * SSD1926 hardware SD card driver - * - * Copyright (C) 2008 Microchip Technology Inc. All rights reserved. - * Microchip licenses to you the right to use, modify, copy and distribute - * Software only when embedded on a Microchip microcontroller or digital - * signal controller, which is integrated into your product or third party - * product (pursuant to the sublicense terms in the accompanying license - * agreement). - * - * You should refer to the license agreement accompanying this Software - * for additional information regarding your rights and obligations. - * - * SOFTWARE AND DOCUMENTATION ARE PROVIDED 'AS IS' WITHOUT WARRANTY OF ANY - * KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY - * OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR - * PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR - * OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, - * BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT - * DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, - * INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, - * COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY - * CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), - * OR OTHER SIMILAR COSTS. - * - * Author Date Comments - * ----------------------------------------------------- - * Sean Justice 15_Sept-2008 First release - * Anton Alkhimenok 06_Jun-2009 Ported to PIC24 - */ -#include "ssd1926.h" - -/* - * Helper Macros - */ -#define CheckDataInhibit() while(GetReg(0x1124) & 0x02) -#define CheckCommandInhibit() while(GetReg(0x1124) & 0x01) -#define GetDataPortReg0() GetReg(0x1120) -#define SetDataPortReg0(data) SetReg(0x1120, data) -#define SetTransferMode(mode) SetReg(0x110C, mode) - -/* - * Set graphics controller register (byte access) - */ -void SetReg(WORD index, BYTE value) -{ - DisplaySetCommand(); // set RS line to low for command - DisplayEnable(); // enable SSD1926 - - DeviceWrite(((WORD_VAL) index).v[1]); - DeviceWrite(index << 8); - - DisplaySetData(); // set RS line to high for data - - if(index & 0x0001) - DeviceWrite(value); - else - DeviceWrite(value << 8); - - DisplayDisable(); // disable SSD1926 -} - -/* - * Read graphics controller register value (byte access) - */ -BYTE GetReg(WORD index) -{ - WORD value; - - DisplaySetCommand(); // set RS line to low for command - DisplayEnable(); // enable SSD1926 - - DeviceWrite(((WORD_VAL) index).v[1]); - DeviceWrite(index << 8); - - DisplaySetData(); // set RS line to high for data - - value = DeviceRead(); - value = DeviceRead(); - - DisplayDisable(); // disable SSD1926 - - if(index & 0x0001) - value &= 0x00ff; - else - value = (value >> 8) & 0x00ff; - - return (value); -} - -/* - * Helper Functions - */ -inline void __attribute__ ((always_inline)) -SetCommandArgument(DWORD arg) -{ - SetReg(0x110B, ((DWORD_VAL) arg).v[3]); - SetReg(0x110A, ((DWORD_VAL) arg).v[2]); - SetReg(0x1109, ((DWORD_VAL) arg).v[1]); - SetReg(0x1108, ((DWORD_VAL) arg).v[0]); -} - -inline void __attribute__ ((always_inline)) -SetCommand(BYTE idx, BYTE flags) -{ - SetReg(0x110E, flags); //set response type - SetReg(0x110F, idx); //command index -} - -inline volatile DWORD __attribute__ ((always_inline)) -GetCommandResponse(BYTE idx) -{ - DWORD_VAL rsp; - - idx <<= 2; - - rsp.v[0] = GetReg(0x1110 + idx); - rsp.v[1] = GetReg(0x1111 + idx); - rsp.v[2] = GetReg(0x1112 + idx); - rsp.v[3] = GetReg(0x1113 + idx); - - return (rsp.Val); -} - -void ReadCmdResponse(DWORD *rsp, UINT size) -{ - DWORD idx; - for(idx = 0; idx < size; idx++) - { - *rsp = GetCommandResponse(idx); - rsp++; - } -} - -/* - * Global Variables - */ -DWORD finalLBA; -WORD sectorSize; -DWORD maxBusClock; -BYTE hcMode; -MEDIA_INFORMATION mediaInformation; - -/* - * Local Prototypes - */ -BYTE SDInit(void); -BYTE SDSetClock(DWORD clockMax); -BYTE SDSendCommand(BYTE cmd_idx, BYTE flags, DWORD arg); -BYTE SDSendAppCommand(BYTE cmd_idx, BYTE flags, DWORD arg1, DWORD arg2); -void SDReset(BYTE type); - -/* - * Function: - * BYTE SDSetClock(DWORD clockMax) - * Input: - * clockMax - SD card maximum frequency, - * Output: - * returns non-zero if the operation is successfull. - * Overview: - * Sets the SD card clock frequency close to clockMax - */ -BYTE SDSetClock(DWORD clockMax) -{ - DWORD mclk; - BYTE reg; - BYTE div; - - mclk = SSD_SYS_CLOCK * GetReg(SSD_REG_PLL_CONFIG1); - mclk /= (GetReg(SSD_REG_PLL_CONFIG0) & 0x1F); - mclk /= ((GetReg(SSD_REG_MCLK_CONIG) & 0x1F) + 1); - - if(GetReg(SSD_REG_MCLK_CONIG) & 0x01) - mclk /= 2; - - reg = GetReg(SSD_SDCARD_REG_CLK_CNTL); - - reg = reg &~((BYTE) SSD_SD_CLK_ENABLE); - SetReg(SSD_SDCARD_REG_CLK_CNTL, reg); - - reg |= SSD_SD_INT_CLK_ENABLE; - SetReg(SSD_SDCARD_REG_CLK_CNTL, reg); - - DelayMs(1); - if(!(GetReg(SSD_SDCARD_REG_CLK_CNTL) & SSD_SD_INT_CLK_STABLE)) - return (FALSE); - - div = 0; - while(mclk > clockMax) - { - mclk >>= 1; - div++; - } - - div = 1 << (div - 1); - - SetReg(SSD_SDCARD_REG_CLK_DIV, div); - - reg |= SSD_SD_CLK_ENABLE; - SetReg(SSD_SDCARD_REG_CLK_CNTL, reg); - - return (TRUE); -} - -/* - * Function: - * BYTE SDSendCommand(BYTE cmd_idx, BYTE flags, DWORD arg) - * Input: - * cmd_idx - command start index, - * flags - command flags, - * arg - command arguments. - * Output: - * Returns non-zero if the operation is successful - * Overview: - * Send SD card command. - */ -BYTE SDSendCommand(BYTE cmd_idx, BYTE flags, DWORD arg) -{ - DWORD timeout; - - SetReg(0x112E, 0x0E); // Data Timeout Counter Value = MCLK x 2^27 - CheckCommandInhibit(); - - // Clear interrupt flags - SetReg(0x1130, 0xff); - - // Enable command complete interrupt - SetReg(0x1134, GetReg(0x1134) | 0x01); - - // Clear error interrupt flags - SetReg(0x1132, 0xff); - SetReg(0x1133, 0xff); - - // Enable all interrupts - SetReg(0x1136, 0xff); - SetReg(0x1137, 0xff); - - SetCommandArgument(arg); - SetCommand(cmd_idx, flags); - - timeout = SD_TIMEOUT; - while(1) - { - if(GetReg(0x1130) & 0x01) - { - break; - } - - if(!timeout--) - { - return (FALSE); - } - } - - return (TRUE); -} - -/* - * Function: - * BYTE SDSendAppCommand(BYTE cmd_idx, BYTE flags, DWORD arg1, DWORD arg2) - * Input: - * cmd_idx - command start index, - * flags - command flags, - * arg1 - application command arguments 1 - * arg2 - application command arguments 2 - * Output: - * Returns non-zero if the operation is successful - * Overview: - * Send SD card application command. - */ -BYTE SDSendAppCommand(BYTE cmd_idx, BYTE flags, DWORD arg1, DWORD arg2) -{ - if(!SDSendCommand(CMD_APP_CMD, SSD_RESPONSE_48, arg1)) - return (FALSE); - - if(!SDSendCommand(cmd_idx, flags, arg2)) - return (FALSE); - - return (TRUE); -} - -/* - * Function: - * void SDReset(BYTE type) - * Input: - * type - type of reset. - * Overview: - * Resets the SD card module - */ -void SDReset(BYTE type) -{ - DWORD timeout; - - SetReg(SSD_SDCARD_REG_SW_RESET, type); - - timeout = SD_TIMEOUT; - while(1) - { - if(!timeout--) - return; - if(!(GetReg(SSD_SDCARD_REG_SW_RESET) & type)) - return; - } -} - -/* - * Function: - * void SDPower(BYTE on) - * Input: - * on - '0' means off, '1' means on. - * Overview: - * Powers on the SD card. - */ -void SDPower(BYTE on) -{ - if(on) - SetReg(SSD_SDCARD_REG_PWR_CNTL, 0x0F); - else - SetReg(SSD_SDCARD_REG_PWR_CNTL, 0x0E); -} - -/* - * Function: - * BYTE SDDetect(void) - * Output: - * TRUE - card detected, - * FALSE - no card detected. - * Overview: - * Detects if the SD card is inserted. - */ -BYTE SDDetect(void) -{ - BYTE reg; - - reg = GetReg(SSD_SDCARD_REG_PRSNT_STATE_2); - - if(!(reg & SSD_CARD_DETECT)) - return (FALSE); - - if(reg & SSD_CARD_INSERTED) - { - DWORD timeout; - - timeout = SD_TIMEOUT; - while(1) - { - if(!timeout--) - return (FALSE); - if(GetReg(SSD_SDCARD_REG_PRSNT_STATE_2) & SSD_CARD_STABLE) - break; - } - } - else - return (FALSE); - - return (TRUE); -} - -/* - * Function: - * BYTE SDWriteProtectState(void) - * Output: - * Returns the status of the "write enabled" pin. - * Overview: - * Determines if the card is write-protected. - */ -BYTE SDWriteProtectState(void) -{ - return (GetReg(SSD_SDCARD_REG_PRSNT_STATE_2) & SSD_WRITE_PROTECT); -} - -/* - * Function: - * BYTE SDInit(void) - * Output: - * Returns TRUE if media is initialized, FALSE otherwise. - * Overview: - * MediaInitialize initializes the media card and supporting variables. - */ -BYTE SDInit(void) -{ - DWORD timeout; - DWORD response; - DWORD voltage; - DWORD CSD_C_SIZE; - DWORD CSD_C_SIZE_MULT; - DWORD CSD_RD_BL_LEN; - DWORD RCA; - DWORD CSD[4]; - - if(!SDSendCommand(CMD_RESET, SSD_NO_RESPONSE, 0xFFFFFFFF)) - return (FALSE); - - - if(!SDSendCommand(CMD_SEND_IF_COND, SSD_RESPONSE_48 | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, 0x000001AA)) - return (FALSE); - - response = GetCommandResponse(0); - - if(response == 0x000001AA) - { - voltage = 0x40200000; - hcMode = 1; - }else{ - voltage = 0x00200000; - hcMode = 0; - } - - timeout = 10; - do - { - if(!timeout--) - { - return (FALSE); - } - - SDReset(SSD_RESET_DATA|SSD_RESET_CMD); - if(!SDSendAppCommand(ACMD_SEND_OCR, SSD_RESPONSE_48, 0, voltage)) - return (FALSE); // ask card send OCR back - DelayMs(150); - response = GetCommandResponse(0); - } while((response&0x80000000) == 0); - - if((response&0x40000000L) == 0){ - hcMode = 0; - } - - if(!SDSendCommand(CMD_SEND_ALL_CID, SSD_RESPONSE_136 | SSD_CMD_CRC_CHK, 0xFFFFFFFF)) - return (FALSE); - - DelayMs(150); - - if(!SDSendCommand(CMD_SEND_RCA, SSD_RESPONSE_48 | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, 0xFFFFFFFF)) - return (FALSE); - - RCA = GetCommandResponse(0); - RCA |= 0x0000ffff; - - //CMD9 - Request CSD from SD Card - if(!SDSendCommand(CMD_SEND_CSD, SSD_CMD_IDX_CHK | SSD_CMD_CRC_CHK | SSD_RESPONSE_136, RCA)) - return (FALSE); - - ReadCmdResponse(CSD, 4); - - CSD_C_SIZE = ((CSD[2] & 0x00000003) << 10) | ((CSD[1] & 0xFFC00000) >> 22); //CSD Bit[73:62] => Bit[65:54] (Deduct CRC-7 as CRC-7 is not stored in response register) - CSD_C_SIZE_MULT = ((CSD[1] & 0x00000380) >> 7); //CSD Bit[49:47] =? Bit[41:39] - CSD_RD_BL_LEN = (CSD[2] & 0x00000F00) >> 8; //CSD Bit[83:80] -> Bit[75:72] - finalLBA = (CSD_C_SIZE + 1) * (1 << (CSD_C_SIZE_MULT + 2)); - sectorSize = (1 << CSD_RD_BL_LEN); - if((CSD[3] & 0x000000FF) == 0x32) - maxBusClock = 25000000; // 25MHz - else - maxBusClock = 25000000; // 50MHz - SDReset(SSD_RESET_CMD); - - //CMD7 Select Card - if(!SDSendCommand(CMD_SELECT_CARD, SSD_RESPONSE_48_BUSY | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, RCA)) - return (FALSE); - - sectorSize = 512L; - - //CMD16 Set the block size. - if(!SDSendCommand(CMD_SET_BLKLEN, SSD_RESPONSE_48 | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, sectorSize)) - return (FALSE); - - //CMD55 + ACMD6 Set bus width = 4 Bit - if(!SDSendAppCommand(ACMD_SET_BUS_WIDTH, SSD_RESPONSE_48 | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, RCA, 0xFFFFFFFE)) - return (FALSE); - - //Data width 4bits - SetReg(0x1128, 0x02); - - return (TRUE); -} - -/* - * Function: - * INT32 SDGetStatus(void) - * Output: - * SD card status. - * Overview: - * Returns SD card status. If the returned value is -1 the there's an error. - */ -INT32 SDGetStatus(void) -{ - DWORD status; - DWORD RCA; - - SDReset(SSD_RESET_CMD); - - //Normal interrupt handling - SetReg(0x1134, GetReg(0x1134) | 0x01); //enable read interrupt - SetReg(0x1130, 0x01); //clear previous interrupt - - //Error interrupt handling - SetReg(0x1136, GetReg(0x1136) | 0x8F); //enable error interrupt - SetReg(0x1137, GetReg(0x1137) | 0x71); //enable error interrupt - SetReg(0x1132, 0x8F); //enable error interrupt - SetReg(0x1133, 0x71); //enable error interrupt - if(!SDSendCommand(CMD_SEND_RCA, SSD_RESPONSE_48 | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, 0xFFFFFFFF)) - return (DWORD) (-1); - - RCA = GetCommandResponse(0); - RCA |= 0x0000ffff; - - if(!SDSendCommand(CMD_SEND_STATUS, SSD_RESPONSE_48 | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, RCA)) - return (DWORD) (-1); - - while(!(GetReg(0x1130) & 0x01)); - - //check cmd complt int - SetReg(0x1130, 0x01); //clear previous int - while((GetReg(0x1132) & 0x8F) || (GetReg(0x1133) & 0x71)); - SetReg(0x1132, 0x8F); //enable error interrupt - SetReg(0x1133, 0x71); //enable error interrupt - ReadCmdResponse(&status, 1); - - return (status); -} - -/* - * Function: - * MEDIA_INFORMATION* SDInitialize(void) - * Output: - * Returns a pointer to the media inforamtion structure. - * Overview: - * SDInitialize initializes the media card and supporting variables. - * Sets maximum clock frequency for the SD card. - */ -MEDIA_INFORMATION *SDInitialize(void) -{ - DWORD timeout; - - SDReset(SSD_RESET_DATA | SSD_RESET_CMD | SSD_RESET_ALL); - - SDPower(TRUE); - - mediaInformation.errorCode = MEDIA_NO_ERROR; - mediaInformation.validityFlags.value = 0; - - if(!SDSetClock(SSD_SD_CLK_INIT)) - { - mediaInformation.errorCode = MEDIA_DEVICE_NOT_PRESENT; - return (&mediaInformation); - } - - timeout = 10; - while(!SDInit()) - { - if(!timeout--) - { - mediaInformation.errorCode = MEDIA_DEVICE_NOT_PRESENT; - return (&mediaInformation); - } - } - - mediaInformation.validityFlags.bits.sectorSize = 1; - mediaInformation.sectorSize = sectorSize; - - if(!SDSetClock(maxBusClock>>1)) - mediaInformation.errorCode = MEDIA_DEVICE_NOT_PRESENT; - - return (&mediaInformation); -} - -/* - * Function: BYTE SDSectorRead(DWORD sector_addr, BYTE *buffer) - * - * Input: sector_addr - Sector address - * buffer - Buffer where data will be stored, see - * 'ram_acs.h' for 'block' definition. - * 'Block' is dependent on whether internal or - * external memory is used - * - * Output: Returns TRUE if read successful, false otherwise - * - * Overview: SectorRead reads data from the card starting - * at the sector address specified by sector_addr and stores - * them in the location pointed to by 'buffer'. - * - * Note: The device expects the address field in the command packet - * to be byte address. Therefore the sector_addr must first - * be converted to byte address. - */ -BYTE SDSectorRead(DWORD sector_addr, BYTE *buffer) -{ - if(!hcMode) - { - sector_addr *= sectorSize; - } - - CheckDataInhibit(); - - SDReset(SSD_RESET_DATA); - - SetTransferMode(0x10); - - // Block size is one sector - SetReg(0x1104, ((WORD_VAL) sectorSize).v[0]); // write block size - SetReg(0x1105, ((WORD_VAL) sectorSize).v[1]); // write block size - - //Clear error interrupt flags - SetReg(0x1136, 0xff); - SetReg(0x1137, 0xff); - SetReg(0x1132, 0xff); - SetReg(0x1133, 0xff); - - // Buffer Read Ready, Transfer Complete, Command Complete interrupts enable - SetReg(0x1134, 0x23); - - // Clear previous interrupt flags - SetReg(0x1130, 0x23); - - // Send command - if - ( - !SDSendCommand - ( - CMD_RD_SINGLE, - SSD_RESPONSE_48 | SSD_DATA_PRESENT | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, - sector_addr - ) - ) return (FALSE); - - // Wait for transfer complete - while(!(GetReg(0x1130) & 0x20)); - - // Clear transfer complete flag - SetReg(0x1130, 0x20); - - // Read data - WORD counter = 0; - while(GetReg(0x1125) & 0x08) - { - if(counter < sectorSize) - *buffer++ = GetDataPortReg0(); - counter++; - } - - if(counter > sectorSize) - return (FALSE); - - return (TRUE); -} - -/* - * Function: - * BYTE SDSectorDMARead(DWORD sector_addr, DWORD dma_addr, UINT16 num_blk) - * Input: - * sector_addr - Sector address - * buffer - Buffer where data will be stored, see - * 'ram_acs.h' for 'block' definition. - * 'Block' is dependent on whether internal or - * external memory is used - * - * Output: - * Returns TRUE if read successful, false otherwise. - * Overview: SectorRead reads data from the card starting - * at the sector address specified by sector_addr and stores - * them in the location pointed to by 'buffer'. - * - * Note: The device expects the address field in the command packet - * to be byte address. Therefore the sector_addr must first - * be converted to byte address. - */ -BYTE SDSectorDMARead(DWORD sector_addr, DWORD dma_addr, UINT16 num_blk) -{ - DWORD dma_size; - BYTE boundary; - - if(!hcMode) - { - sector_addr *= sectorSize; - } - - CheckDataInhibit(); - SDReset(SSD_RESET_DATA); - - // set up the DMA address - SetReg(0x1100, ((DWORD_VAL) dma_addr).v[0]); - SetReg(0x1101, ((DWORD_VAL) dma_addr).v[1]); - SetReg(0x1102, ((DWORD_VAL) dma_addr).v[2]); - SetReg(0x1103, ((DWORD_VAL) dma_addr).v[3]); - - // set up the transefer mode (Multi-Blk, Read, Blk Cnt, DMA) - SetTransferMode(0x33); - - // set up the DMA buffer size (4k) and sector block size - dma_size = (DWORD) num_blk * sectorSize; - - dma_size >>= 12; - boundary = 0; - while(dma_size) - { - dma_size >>= 1; - boundary++; - } - - boundary <<= 4; - boundary |= ((WORD_VAL) sectorSize).v[1] & 0x0F; - - SetReg(0x1104, ((WORD_VAL) sectorSize).v[0]); // write block size - SetReg(0x1105, boundary); // write block size - - // Set the number of blocks to read - SetReg(0x1106, (BYTE) (num_blk & 0xFF)); // write block size - SetReg(0x1107, (BYTE) (num_blk >> 8)); // write block size - - // set up the normal status register 0 - SetReg(0x1134, 0x0B); // enable read interrupt - SetReg(0x1130, GetReg(0x1130) | 0x0B); // clear previous interrupt - - // set up the error status register - SetReg(0x1136, 0xFF); // clear previous interrupt - SetReg(0x1132, 0xFF); // clear previous interrupt - SetReg(0x1133, 0x01); // clear previous interrupt - SetReg(0x1130, 0x08); // clear previous interrupt - - // set the command to read multiple blocks - if - ( - !SDSendCommand - ( - CMD_RD_MULTIPLE, - SSD_RESPONSE_48 | SSD_DATA_PRESENT | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, - sector_addr - ) - ) return (FALSE); - - // wait until the dma transfer is done - while(!(GetReg(0x1130) & 0x08) && (GetReg(0x1125) & 0x02)); - SetReg(0x1130, 0x08); - - // stop the transmission - if - ( - !SDSendCommand - ( - CMD_STOP_TRANSMISSION, - SSD_CMD_TYPE_ABORT | SSD_RESPONSE_48_BUSY | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, - 0xFFFFFFFF - ) - ) return (FALSE); - SetReg(0x1130, 0x01); //clear previous interrupt - SetReg(0x1106, 0); // write block size - SetReg(0x1107, 0); // write block size - - // disable the transfer mode - SetTransferMode(0); - - return (TRUE); -} - -/* - * Function: BYTE SDSectorWrite(DWORD sector_addr, BYTE *buffer, BYTE allowWriteToZero) - * - * Input: sector_addr - Sector address - * buffer - Buffer where data will be read - * allowWriteToZero - If true, writes to the MBR will be valid - * - * Output: Returns TRUE if write successful, FALSE otherwise - * - * Overview: SectorWrite sends data from the location - * pointed to by 'buffer' to the card starting - * at the sector address specified by sector_addr. - * - * Note: The sample device expects the address field in the command packet - * to be byte address. Therefore the sector_addr must first - * be converted to byte address. - */ -BYTE SDSectorWrite(DWORD sector_addr, BYTE *buffer, BYTE allowWriteToZero) -{ - UINT16 i; - - if(!hcMode) - { - sector_addr *= sectorSize; - } - - CheckDataInhibit(); - SDReset(SSD_RESET_DATA); - SetTransferMode(0); - - SetReg(0x1104, ((WORD_VAL) sectorSize).v[0]); // write block size - SetReg(0x1105, ((WORD_VAL) sectorSize).v[1]); // write block size - - //Clear error interrupt flags - SetReg(0x1136, 0xff); - SetReg(0x1137, 0xff); - SetReg(0x1132, 0xff); - SetReg(0x1133, 0xff); - - //Normal interrupt handling - SetReg(0x1134, 0x13); //enable write interrupt - SetReg(0x1130, 0x13); //clear all type of normal interrupt - - if - ( - !SDSendCommand - ( - CMD_WR_SINGLE, - SSD_RESPONSE_48 | SSD_DATA_PRESENT | SSD_CMD_CRC_CHK | SSD_CMD_IDX_CHK, - sector_addr - ) - ) return (FALSE); - - SetReg(0x1130, 0x01); //clear previous interrupt - while(!(GetReg(0x1130)&0x10) && !(GetReg(0x1125) & 0x04)); //check Buffer write int - SetReg(0x1130, 0x10); //clear previous interrupt - - for(i = 0; i < sectorSize; i++) - { - //check if Write Enable bit set, which mean buffer is free for new data - while(!(GetReg(0x1125) & 0x04)); - //put data that need be written into SSD1928 buffers - SetDataPortReg0(*buffer++); - } - - SetReg(0x1130, 0x10); //clear previous interrupt - while(!(GetReg(0x1130)&0x02)); //check Transfer complt int - SetReg(0x1130, 0x02); // clear previous interrupt - - return (TRUE); -} - -/* - * Function: - * WORD SDReadSectorSize(void) - * PreCondition: - * MediaInitialize() is complete - * Output: - * Size of the sectors for this physical media. - * Overview: - * Returns size of the sectors for this physical media. - */ -WORD SDReadSectorSize(void) -{ - return (sectorSize); -} - -/* - * Function: - * DWORD SDReadCapacity(void) - * PreCondition: - * MediaInitialize() is complete - * Output: - * Number of sectors. - * Overview: - * Returns number of sectors. - */ -DWORD SDReadCapacity(void) -{ - return (finalLBA); -} diff --git a/sys/pic32/ssd1926.h b/sys/pic32/ssd1926.h deleted file mode 100644 index 9e4f7e5..0000000 --- a/sys/pic32/ssd1926.h +++ /dev/null @@ -1,157 +0,0 @@ -/* - * SSD1926 hardware definitions - * - * Copyright (C) 2008 Microchip Technology Inc. All rights reserved. - * Microchip licenses to you the right to use, modify, copy and distribute - * Software only when embedded on a Microchip microcontroller or digital - * signal controller, which is integrated into your product or third party - * product (pursuant to the sublicense terms in the accompanying license - * agreement). - * - * You should refer to the license agreement accompanying this Software - * for additional information regarding your rights and obligations. - * - * SOFTWARE AND DOCUMENTATION ARE PROVIDED 'AS IS' WITHOUT WARRANTY OF ANY - * KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY - * OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR - * PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR - * OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, - * BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT - * DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, - * INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, - * COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY - * CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), - * OR OTHER SIMILAR COSTS. - * - * Author Date Comments - * ----------------------------------------------------- - * Sean Justice 15_Sept-2008 First release - * Anton Alkhimenok 06_Jun-2009 Ported to PIC24 - */ -#ifndef _SSD1926_H - -#define _SSD1926_H - -/* - * User Defines - */ -#define SSD_SYS_CLOCK (DWORD) (4000000) /* SSD1926 crystal frequncy */ -#define SSD_SD_CLK_INIT (DWORD) (400000) -#define SD_TIMEOUT (DWORD) (3000000) - -/* - * Registers - */ -#define SSD_REG_PLL_CONFIG0 0x0126 -#define SSD_REG_PLL_CONFIG1 0x0127 -#define SSD_REG_MCLK_CONIG 0x0004 -#define SSD_SDCARD_SD_CLK 0x1001 -#define SSD_SDCARD_REG_DMA_ADDR 0x1100 -#define SSD_SDCARD_REG_BLK_SIZE 0x1104 -#define SSD_SDCARD_REG_BLK_CNT 0x1106 -#define SSD_SDCARD_REG_ARG_32BIT 0x1108 -#define SSD_SDCARD_REG_XFR_MODE 0x110c -#define SSD_SDCARD_REG_CMD 0x110e -#define SSD_SDCARD_REG_RSP 0x1110 -#define SSD_SDCARD_REG_DATA_PORT 0x1120 -#define SSD_SDCARD_REG_RSVD1 0x1121 -#define SSD_SDCARD_REG_PRSNT_STATE_0 0x1124 -#define SSD_SDCARD_REG_PRSNT_STATE_1 0x1125 -#define SSD_SDCARD_REG_PRSNT_STATE_2 0x1126 -#define SSD_SDCARD_REG_PRSNT_STATE_3 0x1127 -#define SSD_SDCARD_REG_HST_CNTL 0x1128 -#define SSD_SDCARD_REG_PWR_CNTL 0x1129 -#define SSD_SDCARD_REG_BLK_GAP_CNTL 0x112a -#define SSD_SDCARD_REG_WKUP_CNTL 0x112b -#define SSD_SDCARD_REG_CLK_CNTL 0x112c -#define SSD_SDCARD_REG_CLK_DIV 0x112d -#define SSD_SDCARD_REG_TOUT_CNTL 0x112e -#define SSD_SDCARD_REG_SW_RESET 0x112f -#define SSD_SDCARD_REG_NRM_INTR_STATUS 0x1130 -#define SSD_SDCARD_REG_ERR_INTR_STATUS 0x1132 -#define SSD_SDCARD_REG_NRM_INTR_STATUS_EN 0x1134 -#define SSD_SDCARD_REG_ERR_INTR_STATUS_EN 0x1136 -#define SSD_SDCARD_REG_NRM_INTR_SIG_EN 0x1138 -#define SSD_SDCARD_REG_ERR_INTR_SIG_EN 0x113a -#define SSD_SDCARD_REG_ACMD12_ERR_STATUS 0x113c -#define SSD_SDCARD_REG_RSVD2 0x113e -#define SSD_SDCARD_REG_CAPABILITIES 0x1140 -#define SSD_SDCARD_REG_CAP_RSVD 0x1144 -#define SSD_SDCARD_REG_MAX_CURR_CAP 0x1148 -#define SSD_SDCARD_REG_MAX_CURR_CAP_RSVD 0x114c -#define SSD_SDCARD_REG_RSVD3 0x1150 -#define SSD_SDCARD_REG_SLOT_INTR_STATUS 0x11fc -#define SSD_SDCARD_REG_HCVER 0x11fe - -/* - * SD Commands - */ -#define CMD_RESET 0 -#define CMD_SEND_OCR 1 // used exclusively in MMC -#define CMD_SEND_ALL_CID 2 // R2: R136 -#define CMD_SEND_RCA 3 // R1 (MMC) or R6(SDMEM) -#define CMD_SET_DSR 4 -#define CMD_IO_SEND_OCR 5 // R4, unique to IO cards -#define CMD_SELECT_CARD 7 // R1, arg=rca[31..16] or 0 -#define CMD_SEND_IF_COND 8 -#define CMD_SEND_CSD 9 // R2: R136 -#define CMD_SEND_CID 10 // R2: R136 -#define CMD_STOP_TRANSMISSION 12 // R1b: arg=stuff bits -#define CMD_SEND_STATUS 13 // R1 -#define CMD_GO_INACTIVE 15 // None, arg=rca[31..16], stuff[15..0] -#define CMD_SET_BLKLEN 16 // R1, arg=block len[31..0] -#define CMD_RD_SINGLE 17 // R1, arg=block address[31..0] -#define CMD_RD_MULTIPLE 18 // R1, arg=block address[31..0] -#define CMD_WR_SINGLE 24 // R1, arg=block address[31..0] -#define CMD_WR_MULTIPLE 25 // R1, arg=block address[31..0] -#define CMD_SET_WP 28 // R1b, arg=wp address[31..0] -#define CMD_CLR_WP 29 // R1b, arg=wp address[31..0] -#define CMD_SEND_WP 30 // R1, DATA, arg=wp address[31..0] -#define CMD_ERASE_SADDR 32 // R1, arg=block address[31..0] -#define CMD_ERASE_EADDR 33 // R1, arg=block address[31..0] -#define CMD_ERASE_GRP_SADDR 35 // R1, arg=block address[31..0] -#define CMD_ERASE_GRP_EADDR 36 // R1, arg=block address[31..0] -#define CMD_ERASE 38 // R1b, arg=stuff bits[31..0] -#define CMD_IO_RW_DIRECT 52 // R5 -#define CMD_IO_RW_EXTENDED 53 // R1, data transfer -#define CMD_APP_CMD 55 // R1, arg=rca[31..16], stuff[15..0] -#define CMD_GEN_CMD 56 // R1, data, arg=stuff[31..1], RD/WR[0] -#define ACMD_SET_BUS_WIDTH 6 // R1, arg=[1..0] = bus width, [31:2] stuff bits -#define ACMD_SEND_STATUS 13 // R1, DATA, arg=stuff bits [31..0] -#define ACMD_SEND_NUM_WR_BLK 22 // R1, DATA, arg=stuff bits [31..0] -#define ACMD_SEND_OCR 41 -#define ACMD_SEND_SCR 51 // R1, arg=stuff bits[31..0] - -/* - * Flags - */ -#define SSD_SD_CLK_CTRL_ON (DWORD) 0x80000000 -#define SSD_SD_CLK_ENABLE (DWORD) 0x00000004 -#define SSD_SD_INT_CLK_STABLE (DWORD) 0x00000002 -#define SSD_SD_INT_CLK_ENABLE (DWORD) 0x00000001 -#define SSD_SD_CLK_FLAGS (SSD_SD_CLK_CTRL_ON | SSD_SD_CLK_ENABLE | SSD_SD_INT_CLK_ENABLE) -#define SSD_CMD_TYPE_ABORT 0xC0 -#define SDD_CMD_TYPE_RESUME 0x80 -#define SDD_CMD_TYPE_SUSPEND 0x40 -#define SDD_CMD_TYPE_NORMAL 0x00 -#define SSD_DATA_PRESENT 0x20 -#define SSD_CMD_IDX_CHK 0x10 -#define SSD_CMD_CRC_CHK 0x08 -#define SSD_NO_RESPONSE 0x00 -#define SSD_RESPONSE_136 0x01 -#define SSD_RESPONSE_48 0x02 -#define SSD_RESPONSE_48_BUSY 0x03 - -#define SSD_CARD_DETECT 0x04 -#define SSD_CARD_STABLE 0x02 -#define SSD_CARD_INSERTED 0x01 - -#define SSD_WRITE_PROTECT 0x08 - -#define SSD_RESET_ALL 0x01 -#define SSD_RESET_CMD 0x02 -#define SSD_RESET_DATA 0x04 - -#define WAIT_CNT (DWORD) 10000000l - -#endif /* _SSD1926_H */ diff --git a/sys/pic32/starter-kit/.gitignore b/sys/pic32/starter-kit/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/starter-kit/.gitignore +++ b/sys/pic32/starter-kit/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/starter-kit/Config b/sys/pic32/starter-kit/Config new file mode 100644 index 0000000..92c7532 --- /dev/null +++ b/sys/pic32/starter-kit/Config @@ -0,0 +1,60 @@ +# +# Microchip PIC32MX Ethernet/USB Starter Kit +# with I/O Expansion board and SD card pictail module +# =================================================== +# Console on USB. +# +# To build the kernel, use: +# cd sys/pic32/explorer16 +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "STARTERKIT" # Board type +ldscript "baremetal/script.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_DISK_PORT=TRISD" # for disk activity LED... +options "LED_DISK_PIN=1" # ...use pin RD1 +options "LED_KERNEL_PORT=TRISD" # for kernel activity LED... +options "LED_KERNEL_PIN=2" # ...use pin RD2 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# SPI ports +controller spi1 # SD card + +# SD card +device sd0 at spi1 pin RB1 # select pin RB1 +options "SD0_PORT=1" # at spi1 TODO: delete +options "SD0_CS_PORT=TRISB" # for chip select... TODO: delete +options "SD0_CS_PIN=1" # ...use pin RB1 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/starter-kit/Makefile b/sys/pic32/starter-kit/Makefile index ed46173..f381907 100644 --- a/sys/pic32/starter-kit/Makefile +++ b/sys/pic32/starter-kit/Makefile @@ -1,45 +1,361 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DSTARTERKIT +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DSPI1_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_CS_PIN=1 +PARAM += -DSD0_CS_PORT=TRISB +PARAM += -DSD0_PORT=1 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_KERNEL_PIN=2 +PARAM += -DLED_KERNEL_PORT=TRISD +PARAM += -DLED_DISK_PIN=1 +PARAM += -DLED_DISK_PORT=TRISD +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "baremetal/script.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ='CPU_KHZ/BUS_DIV' -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ='((CRYSTAL*1000)/CPU_IDIV*CPU_MUL/CPU_ODIV)' -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=1 -DEFS += -DLED_DISK_PORT=TRISD -DEFS += -DLED_KERNEL_PIN=2 -DEFS += -DLED_KERNEL_PORT=TRISD -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=1 -DEFS += -DSD0_CS_PORT=TRISB -DEFS += -DSD0_PORT=1 -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o usb_device.o \ + usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/usb_device.c $S/pic32/usb_function_cdc.c \ + $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader.ld - -CONFIG = STARTER-KIT -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/startup.S b/sys/pic32/startup.S index 6e3599a..fcbe9b2 100644 --- a/sys/pic32/startup.S +++ b/sys/pic32/startup.S @@ -22,7 +22,7 @@ # arising out of or in connection with the use or performance of # this software. # -#include "machine/io.h" +#include #define UBASE 0x7f008000 /* User space base address */ diff --git a/sys/pic32/swap.c b/sys/pic32/swap.c index 1feb0fa..36b01ac 100644 --- a/sys/pic32/swap.c +++ b/sys/pic32/swap.c @@ -2,18 +2,17 @@ * Simple proxy for swap partition. Forwards requests for /dev/swap on to the * device specified by swapdev */ - -#include "param.h" -#include "systm.h" -#include "buf.h" -#include "errno.h" -#include "dk.h" -#include "uio.h" -#include "conf.h" -#include "fcntl.h" -#include "map.h" -#include "swap.h" -#include "rdisk.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifndef NTMP #define NTMP 3 diff --git a/sys/pic32/sysctl.c b/sys/pic32/sysctl.c index 230e762..aa1bbd2 100644 --- a/sys/pic32/sysctl.c +++ b/sys/pic32/sysctl.c @@ -3,24 +3,24 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "user.h" -#include "ioctl.h" -#include "proc.h" -#include "kernel.h" -#include "file.h" -#include "inode.h" -#include "sysctl.h" -#include "cpu.h" -#include "tty.h" -#include "systm.h" -#include "dk.h" -#include "vmsystm.h" -#include "ptrace.h" -#include "namei.h" -#include "vmmeter.h" -#include "map.h" -#include "conf.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* * Errno messages. diff --git a/sys/pic32/uart.c b/sys/pic32/uart.c index 7539d70..c4d5a22 100644 --- a/sys/pic32/uart.c +++ b/sys/pic32/uart.c @@ -5,13 +5,13 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include "param.h" -#include "conf.h" -#include "user.h" -#include "ioctl.h" -#include "tty.h" -#include "systm.h" -#include "uart.h" +#include +#include +#include +#include +#include +#include +#include #define CONCAT(x,y) x ## y #define BBAUD(x) CONCAT(B,x) diff --git a/sys/pic32/ubw32-uart-sdram/.gitignore b/sys/pic32/ubw32-uart-sdram/.gitignore deleted file mode 100644 index 6a22af6..0000000 --- a/sys/pic32/ubw32-uart-sdram/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.compileversion -.deps/ -.oldversion -machine -sys -unix.bin -unix.map -usbboot.map -vers.c diff --git a/sys/pic32/ubw32-uart-sdram/Makefile b/sys/pic32/ubw32-uart-sdram/Makefile deleted file mode 100644 index a0f9359..0000000 --- a/sys/pic32/ubw32-uart-sdram/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel - -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) - -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rd_sdramp.o rdisk.o sdram.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = - -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ='CPU_KHZ/BUS_DIV' -DEFS += -DCONSOLE_DEVICE=tty1 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ='((CRYSTAL*1000)/CPU_IDIV*CPU_MUL/CPU_ODIV)' -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DKERNEL -DEFS += -DKERNEL_EXECUTABLE_RAM -DEFS += -DLED_DISK_INVERT=YES -DEFS += -DLED_DISK_PIN=9 -DEFS += -DLED_DISK_PORT=TRISB -DEFS += -DLED_KERNEL_INVERT=YES -DEFS += -DLED_KERNEL_PIN=10 -DEFS += -DLED_KERNEL_PORT=TRISB -DEFS += -DLED_SWAP_INVERT=YES -DEFS += -DLED_SWAP_PIN=8 -DEFS += -DLED_SWAP_PORT=TRISB -DEFS += -DLED_TTY_INVERT=YES -DEFS += -DLED_TTY_PIN=11 -DEFS += -DLED_TTY_PORT=TRISB -DEFS += -DPARTITION="sdramp0:sa@2048,fs@14000" -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=9 -DEFS += -DSD0_CS_PORT=TRISA -DEFS += -DSD0_PORT=2 -DEFS += -DSDRAMP_ENABLED=YES -DEFS += -DUART2_ENABLED=YES -DEFS += -DUCB_METER - - -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-sdram.ld - -CONFIG = UBW32-UART-SDRAM -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk diff --git a/sys/pic32/ubw32-uart-sdram/devcfg.c b/sys/pic32/ubw32-uart-sdram/devcfg.c deleted file mode 100644 index ad48c89..0000000 --- a/sys/pic32/ubw32-uart-sdram/devcfg.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Chip configuration. - */ -#include "machine/pic32mx.h" - -PIC32_DEVCFG ( - DEVCFG0_DEBUG_DISABLED, /* ICE debugger enabled */ - - DEVCFG1_FNOSC_PRIPLL | /* Primary oscillator with PLL */ - DEVCFG1_POSCMOD_HS | /* HS oscillator */ - DEVCFG1_FPBDIV_1 | /* Peripheral bus clock = SYSCLK/1 */ - DEVCFG1_IESO | /* Internal-external switch over */ - DEVCFG1_WDTPS_1, /* Watchdog postscale = 1/1 */ - - DEVCFG2_FPLLIDIV_2 | /* PLL divider = 1/2 */ - DEVCFG2_FPLLMUL_20 | /* PLL multiplier = 20x */ - DEVCFG2_UPLLIDIV_2 | /* USB PLL divider = 1/2 */ - DEVCFG2_FPLLODIV_1, /* PLL postscaler = 1/1 */ - - DEVCFG3_USERID(0xffff) | /* User-defined ID */ - DEVCFG3_FSRSSEL_7 | /* Assign irq priority 7 to shadow set */ - DEVCFG3_FUSBIDIO | /* USBID pin: controlled by USB */ - DEVCFG3_FVBUSONIO | /* VBuson pin: controlled by USB */ - DEVCFG3_FCANIO | /* Default CAN pins */ - DEVCFG3_FETHIO); /* Default Ethernet i/o pins */ diff --git a/sys/pic32/ubw32-uart/.gitignore b/sys/pic32/ubw32-uart/.gitignore deleted file mode 100644 index 6a22af6..0000000 --- a/sys/pic32/ubw32-uart/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.compileversion -.deps/ -.oldversion -machine -sys -unix.bin -unix.map -usbboot.map -vers.c diff --git a/sys/pic32/ubw32-uart/Makefile b/sys/pic32/ubw32-uart/Makefile deleted file mode 100644 index ad56cbf..0000000 --- a/sys/pic32/ubw32-uart/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel - -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) - -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = - -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ='CPU_KHZ/BUS_DIV' -DEFS += -DCONSOLE_DEVICE=tty1 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ='((CRYSTAL*1000)/CPU_IDIV*CPU_MUL/CPU_ODIV)' -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_INVERT=YES -DEFS += -DLED_DISK_PIN=1 -DEFS += -DLED_DISK_PORT=TRISE -DEFS += -DLED_KERNEL_INVERT=YES -DEFS += -DLED_KERNEL_PIN=2 -DEFS += -DLED_KERNEL_PORT=TRISE -DEFS += -DLED_SWAP_INVERT=YES -DEFS += -DLED_SWAP_PIN=0 -DEFS += -DLED_SWAP_PORT=TRISE -DEFS += -DLED_TTY_INVERT=YES -DEFS += -DLED_TTY_PIN=3 -DEFS += -DLED_TTY_PORT=TRISE -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=9 -DEFS += -DSD0_CS_PORT=TRISA -DEFS += -DSD0_PORT=1 -DEFS += -DSD1_CS_PIN=10 -DEFS += -DSD1_CS_PORT=TRISA -DEFS += -DSD1_PORT=1 -DEFS += -DUART2_ENABLED=YES -DEFS += -DUCB_METER - - -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-ubw32.ld - -CONFIG = UBW32-UART -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk diff --git a/sys/pic32/ubw32-uart/devcfg.c b/sys/pic32/ubw32-uart/devcfg.c deleted file mode 100644 index ad48c89..0000000 --- a/sys/pic32/ubw32-uart/devcfg.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Chip configuration. - */ -#include "machine/pic32mx.h" - -PIC32_DEVCFG ( - DEVCFG0_DEBUG_DISABLED, /* ICE debugger enabled */ - - DEVCFG1_FNOSC_PRIPLL | /* Primary oscillator with PLL */ - DEVCFG1_POSCMOD_HS | /* HS oscillator */ - DEVCFG1_FPBDIV_1 | /* Peripheral bus clock = SYSCLK/1 */ - DEVCFG1_IESO | /* Internal-external switch over */ - DEVCFG1_WDTPS_1, /* Watchdog postscale = 1/1 */ - - DEVCFG2_FPLLIDIV_2 | /* PLL divider = 1/2 */ - DEVCFG2_FPLLMUL_20 | /* PLL multiplier = 20x */ - DEVCFG2_UPLLIDIV_2 | /* USB PLL divider = 1/2 */ - DEVCFG2_FPLLODIV_1, /* PLL postscaler = 1/1 */ - - DEVCFG3_USERID(0xffff) | /* User-defined ID */ - DEVCFG3_FSRSSEL_7 | /* Assign irq priority 7 to shadow set */ - DEVCFG3_FUSBIDIO | /* USBID pin: controlled by USB */ - DEVCFG3_FVBUSONIO | /* VBuson pin: controlled by USB */ - DEVCFG3_FCANIO | /* Default CAN pins */ - DEVCFG3_FETHIO); /* Default Ethernet i/o pins */ diff --git a/sys/pic32/ubw32/.gitignore b/sys/pic32/ubw32/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/ubw32/.gitignore +++ b/sys/pic32/ubw32/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/ubw32/Config b/sys/pic32/ubw32/Config new file mode 100644 index 0000000..cae3fc9 --- /dev/null +++ b/sys/pic32/ubw32/Config @@ -0,0 +1,73 @@ +# +# UBW32 board with two SD card slots +# ================================== +# For details, see https://github.com/RetroBSD/retrobsd/wiki/Board-Sparkfun-UBW32 +# Console on USB. +# For Windows, use the driver: http://www.schmalzhaus.com/UBW32/FW/UBW32inf.zip +# +# To build the kernel, use: +# cd sys/pic32/ubw32 +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "UBW32" # Board type +ldscript "ubw32/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISE" # for kernel activity LED... +options "LED_KERNEL_PIN=2" # ...use pin RE2 +options "LED_KERNEL_INVERT" +options "LED_DISK_PORT=TRISE" # for disk activity LED... +options "LED_DISK_PIN=1" # ...use pin RE1 +options "LED_DISK_INVERT" +options "LED_SWAP_PORT=TRISE" # for swap activity LED... +options "LED_SWAP_PIN=0" # ...use pin RE0 +options "LED_SWAP_INVERT" +options "LED_TTY_PORT=TRISE" # for console activity LED... +options "LED_TTY_PIN=3" # ...use pin RE3 +options "LED_TTY_INVERT" + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=ttyUSB0" # Console on USB + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# SPI ports +controller spi1 # SD card + +# microSD card +device sd0 at spi1 pin RA9 # select pin +device sd1 at spi1 pin RA10 # select pin +options "SD0_PORT=1" # sd0 at spi1 TODO: delete +options "SD0_CS_PORT=TRISA" # for sd0 chip select...TODO: delete +options "SD0_CS_PIN=9" # ...use pin RA9 TODO: delete +options "SD1_PORT=1" # sd1 at spi1 TODO: delete +options "SD1_CS_PORT=TRISA" # for sd1 chip select...TODO: delete +options "SD1_CS_PIN=10" # ...use pin RA9 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/ubw32/Config-uart b/sys/pic32/ubw32/Config-uart new file mode 100644 index 0000000..2352608 --- /dev/null +++ b/sys/pic32/ubw32/Config-uart @@ -0,0 +1,70 @@ +# +# UBW32 board with two SD card slots +# ================================== +# For details, see https://github.com/RetroBSD/retrobsd/wiki/Board-Sparkfun-UBW32 +# Console on UART2. +# +# To build the kernel, use: +# cd sys/pic32/ubw32 +# kconfig Config-uart +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "UBW32" # Board type +ldscript "ubw32/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISE" # for kernel activity LED... +options "LED_KERNEL_PIN=2" # ...use pin RE2 +options "LED_KERNEL_INVERT" +options "LED_DISK_PORT=TRISE" # for disk activity LED... +options "LED_DISK_PIN=1" # ...use pin RE1 +options "LED_DISK_INVERT" +options "LED_SWAP_PORT=TRISE" # for swap activity LED... +options "LED_SWAP_PIN=0" # ...use pin RE0 +options "LED_SWAP_INVERT" +options "LED_TTY_PORT=TRISE" # for console activity LED... +options "LED_TTY_PIN=3" # ...use pin RE3 +options "LED_TTY_INVERT" + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONSOLE_DEVICE=tty1" # Console on UART2 + +# Serial UART ports +device uart2 # USB-to-serial adapter + +# SPI ports +controller spi1 # SD card + +# microSD card +device sd0 at spi1 pin RA9 # select pin +device sd1 at spi1 pin RA10 # select pin +options "SD0_PORT=1" # sd0 at spi1 TODO: delete +options "SD0_CS_PORT=TRISA" # for sd0 chip select...TODO: delete +options "SD0_CS_PIN=9" # ...use pin RA9 TODO: delete +options "SD1_PORT=1" # sd1 at spi1 TODO: delete +options "SD1_CS_PORT=TRISA" # for sd1 chip select...TODO: delete +options "SD1_CS_PIN=10" # ...use pin RA9 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/ubw32/Makefile b/sys/pic32/ubw32/Makefile index 5e9a101..f1bac69 100644 --- a/sys/pic32/ubw32/Makefile +++ b/sys/pic32/ubw32/Makefile @@ -1,55 +1,373 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DUBW32 +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DSPI1_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DSD1_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD1_CS_PIN=10 +PARAM += -DSD1_CS_PORT=TRISA +PARAM += -DSD1_PORT=1 +PARAM += -DSD0_CS_PIN=9 +PARAM += -DSD0_CS_PORT=TRISA +PARAM += -DSD0_PORT=1 +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONSOLE_DEVICE=ttyUSB0 +PARAM += -DLED_TTY_INVERT +PARAM += -DLED_TTY_PIN=3 +PARAM += -DLED_TTY_PORT=TRISE +PARAM += -DLED_SWAP_INVERT +PARAM += -DLED_SWAP_PIN=0 +PARAM += -DLED_SWAP_PORT=TRISE +PARAM += -DLED_DISK_INVERT +PARAM += -DLED_DISK_PIN=1 +PARAM += -DLED_DISK_PORT=TRISE +PARAM += -DLED_KERNEL_INVERT +PARAM += -DLED_KERNEL_PIN=2 +PARAM += -DLED_KERNEL_PORT=TRISE +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "ubw32/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ='CPU_KHZ/BUS_DIV' -DEFS += -DCONSOLE_DEVICE=ttyUSB0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ='((CRYSTAL*1000)/CPU_IDIV*CPU_MUL/CPU_ODIV)' -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_INVERT=YES -DEFS += -DLED_DISK_PIN=1 -DEFS += -DLED_DISK_PORT=TRISE -DEFS += -DLED_KERNEL_INVERT=YES -DEFS += -DLED_KERNEL_PIN=2 -DEFS += -DLED_KERNEL_PORT=TRISE -DEFS += -DLED_SWAP_INVERT=YES -DEFS += -DLED_SWAP_PIN=0 -DEFS += -DLED_SWAP_PORT=TRISE -DEFS += -DLED_TTY_INVERT=YES -DEFS += -DLED_TTY_PIN=3 -DEFS += -DLED_TTY_PORT=TRISE -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=9 -DEFS += -DSD0_CS_PORT=TRISA -DEFS += -DSD0_PORT=1 -DEFS += -DSD1_CS_PIN=10 -DEFS += -DSD1_CS_PORT=TRISA -DEFS += -DSD1_PORT=1 -DEFS += -DUARTUSB_ENABLED=YES -DEFS += -DUCB_METER -DEFS += -DUSB_MAX_EP_NUMBER=3 -DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3 +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o usb_device.o \ + usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/usb_device.c $S/pic32/usb_function_cdc.c \ + $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-ubw32.ld - -CONFIG = UBW32 -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/sys/pic32/cfg/bootloader-ubw32.ld b/sys/pic32/ubw32/bootloader.ld similarity index 98% rename from sys/pic32/cfg/bootloader-ubw32.ld rename to sys/pic32/ubw32/bootloader.ld index ac39fe0..5b856fe 100644 --- a/sys/pic32/cfg/bootloader-ubw32.ld +++ b/sys/pic32/ubw32/bootloader.ld @@ -42,6 +42,8 @@ SECTIONS *(.glue_7t) *(.glue_7) __rodata_start = . ; *(.rodata .rodata.* .gnu.linkonce.r.* .rel.dyn) + __abiflags = . ; + *(.MIPS.abiflags) *(.dinit) /* Align here to ensure that the .text section ends on word boundary. */ . = ALIGN (32 / 8); diff --git a/sys/pic32/ubw32/devcfg.c b/sys/pic32/ubw32/devcfg.c deleted file mode 100644 index ad48c89..0000000 --- a/sys/pic32/ubw32/devcfg.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Chip configuration. - */ -#include "machine/pic32mx.h" - -PIC32_DEVCFG ( - DEVCFG0_DEBUG_DISABLED, /* ICE debugger enabled */ - - DEVCFG1_FNOSC_PRIPLL | /* Primary oscillator with PLL */ - DEVCFG1_POSCMOD_HS | /* HS oscillator */ - DEVCFG1_FPBDIV_1 | /* Peripheral bus clock = SYSCLK/1 */ - DEVCFG1_IESO | /* Internal-external switch over */ - DEVCFG1_WDTPS_1, /* Watchdog postscale = 1/1 */ - - DEVCFG2_FPLLIDIV_2 | /* PLL divider = 1/2 */ - DEVCFG2_FPLLMUL_20 | /* PLL multiplier = 20x */ - DEVCFG2_UPLLIDIV_2 | /* USB PLL divider = 1/2 */ - DEVCFG2_FPLLODIV_1, /* PLL postscaler = 1/1 */ - - DEVCFG3_USERID(0xffff) | /* User-defined ID */ - DEVCFG3_FSRSSEL_7 | /* Assign irq priority 7 to shadow set */ - DEVCFG3_FUSBIDIO | /* USBID pin: controlled by USB */ - DEVCFG3_FVBUSONIO | /* VBuson pin: controlled by USB */ - DEVCFG3_FCANIO | /* Default CAN pins */ - DEVCFG3_FETHIO); /* Default Ethernet i/o pins */ diff --git a/sys/pic32/usb_console.c b/sys/pic32/usb_console.c deleted file mode 100644 index c13cbb8..0000000 --- a/sys/pic32/usb_console.c +++ /dev/null @@ -1,453 +0,0 @@ -/* - * Console driver via USB. - * - * Copyright (C) 2011 Serge Vakulenko, - * - * Permission to use, copy, modify, and distribute this software - * and its documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice appear in all - * copies and that both that the copyright notice and this - * permission notice and warranty disclaimer appear in supporting - * documentation, and that the name of the author not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * - * The author disclaim all warranties with regard to this - * software, including all implied warranties of merchantability - * and fitness. In no event shall the author be liable for any - * special, indirect or consequential damages or any damages - * whatsoever resulting from loss of use, data or profits, whether - * in an action of contract, negligence or other tortious action, - * arising out of or in connection with the use or performance of - * this software. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct tty cnttys [1]; - -void cnstart (struct tty *tp); - -/* - * Initialize USB module SFRs and firmware variables to known state. - * Enable interrupts. - */ -void cninit() -{ - usb_device_init(); - IECSET(1) = 1 << (PIC32_IRQ_USB - 32); - - /* Wait for any user input. */ - while (! cdc_consume(0)) - usb_device_tasks(); -} - -void cnidentify() -{ - printf ("console: USB\n"); -} - -int cnopen (dev, flag, mode) - dev_t dev; -{ - register struct tty *tp = &cnttys[0]; - - tp->t_oproc = cnstart; - if ((tp->t_state & TS_ISOPEN) == 0) { - ttychars(tp); - tp->t_state = TS_ISOPEN | TS_CARR_ON; - tp->t_flags = ECHO | XTABS | CRMOD | CRTBS | CRTERA | CTLECH | CRTKIL; - } - if ((tp->t_state & TS_XCLUDE) && u.u_uid != 0) - return (EBUSY); - - return ttyopen (dev, tp); -} - -int cnclose (dev, flag, mode) - dev_t dev; -{ - register struct tty *tp = &cnttys[0]; - - ttywflush(tp); - ttyclose (tp); - return 0; -} - -int cnread (dev, uio, flag) - dev_t dev; - struct uio *uio; - int flag; -{ - register struct tty *tp = &cnttys[0]; - - return ttread (tp, uio, flag); -} - -int cnwrite (dev, uio, flag) - dev_t dev; - struct uio *uio; - int flag; -{ - register struct tty *tp = &cnttys[0]; - - return ttwrite (tp, uio, flag); -} - -int cnioctl (dev, cmd, addr, flag) - dev_t dev; - register u_int cmd; - caddr_t addr; -{ - register struct tty *tp = &cnttys[0]; - register int error; - - error = ttioctl (tp, cmd, addr, flag); - if (error < 0) - error = ENOTTY; - return error; -} - -int cnselect (dev, rw) - register dev_t dev; - int rw; -{ - register struct tty *tp = &cnttys[0]; - - return ttyselect (tp, rw); -} - -void cnstart (tp) - register struct tty *tp; -{ - register int s; - - s = spltty(); - if (tp->t_state & (TS_TIMEOUT | TS_BUSY | TS_TTSTOP)) { -out: /* Disable transmit_interrupt. */ - led_control (LED_TTY, 0); - splx (s); - return; - } - ttyowake(tp); - if (tp->t_outq.c_cc == 0) - goto out; - if (cdc_is_tx_ready()) { - while (tp->t_outq.c_cc != 0) { - int c = getc (&tp->t_outq); - if (cdc_putc (c) == 0) - break; - } - cdc_tx_service(); - tp->t_state |= TS_BUSY; - } - led_control (LED_TTY, 1); - splx (s); -} - -/* - * Put a symbol on console terminal. - */ -void cnputc (c) - char c; -{ - register int s; - - s = spltty(); - while (! cdc_is_tx_ready()) { - usb_device_tasks(); - cdc_tx_service(); - } - led_control (LED_TTY, 1); -again: - cdc_putc (c); - cdc_tx_service(); - - while (! cdc_is_tx_ready()) { - cdc_tx_service(); - usb_device_tasks(); - } - if (c == '\n') { - c = '\r'; - goto again; - } - - led_control (LED_TTY, 0); - splx (s); -} - -static int getc_data; - -/* - * Receive a character for getc. - */ -static void store_char (int c) -{ - getc_data = (unsigned char) c; -} - -/* - * Receive a symbol from console terminal. - */ -int -cngetc () -{ - register int s; - - s = spltty(); - for (getc_data = -1; getc_data < 0; ) { - usb_device_tasks(); - cdc_consume (store_char); - cdc_tx_service(); - } - splx (s); - return getc_data; -} - -/* - * Receive a character from CDC. - */ -static void cn_rx (int c) -{ - register struct tty *tp = &cnttys[0]; - - if ((tp->t_state & TS_ISOPEN) == 0) - return; - ttyinput (c, tp); -} - -/* - * Check bus status and service USB interrupts. - */ -void cnintr (int chan) -{ - register struct tty *tp = &cnttys[0]; - - // Must call this function from interrupt or periodically. - usb_device_tasks(); - - // Check that USB connection is established. - if (usb_device_state < CONFIGURED_STATE || - (U1PWRC & PIC32_U1PWRC_USUSPEND)) - return; - - // Receive data from user. - cdc_consume (cn_rx); - - if (cdc_is_tx_ready()) { - // Transmitter empty. - led_control (LED_TTY, 0); - - if (tp->t_state & TS_BUSY) { - tp->t_state &= ~TS_BUSY; - ttstart (tp); - } - } - - // Transmit data to user. - cdc_tx_service(); -} - -/* - * USB Callback Functions - */ - -/* - * This function is called when the device becomes initialized. - * It should initialize the endpoints for the device's usage - * according to the current configuration. - */ -void usbcb_init_ep() -{ - cdc_init_ep(); -} - -/* - * Process device-specific SETUP requests. - */ -void usbcb_check_other_req() -{ - cdc_check_request(); -} - -#if 0 -/* - * Wake up a host PC. - */ -void usb_send_resume (void) -{ - /* Start RESUME signaling. */ - U1CON |= PIC32_U1CON_RESUME; - - /* Set RESUME line for 1-13 ms. */ - udelay (5000); - - U1CON &= ~PIC32_U1CON_RESUME; -} -#endif - -#ifndef CONSOLE_VID -# define CONSOLE_VID 0x04D8 // Vendor ID: Microchip -#endif -#ifndef CONSOLE_PID -# define CONSOLE_PID 0x000A // Product ID: CDC RS-232 Emulation Demo -#endif - -/* - * Device Descriptor - */ -const USB_DEVICE_DESCRIPTOR usb_device = { - sizeof(usb_device), // Size of this descriptor in bytes - USB_DESCRIPTOR_DEVICE, // DEVICE descriptor type - 0x0200, // USB Spec Release Number in BCD format - CDC_DEVICE, // Class Code - 0x00, // Subclass code - 0x00, // Protocol code - USB_EP0_BUFF_SIZE, // Max packet size for EP0, see usb_config.h - CONSOLE_VID, // Vendor ID - CONSOLE_PID, // Product ID - 0x0100, // Device release number in BCD format - 0x01, // Manufacturer string index - 0x02, // Product string index - 0x00, // Device serial number string index - 0x01 // Number of possible configurations -}; - -/* - * Configuration 1 Descriptor - */ -const unsigned char usb_config1_descriptor[] = -{ - /* Configuration Descriptor */ - 9, // sizeof(USB_CFG_DSC) - USB_DESCRIPTOR_CONFIGURATION, // CONFIGURATION descriptor type - 67, 0, // Total length of data for this cfg - 2, // Number of interfaces in this cfg - 1, // Index value of this configuration - 0, // Configuration string index - _DEFAULT | _SELF, // Attributes, see usb_device.h - 150, // Max power consumption (2X mA) - - /* Interface Descriptor */ - 9, // sizeof(USB_INTF_DSC) - USB_DESCRIPTOR_INTERFACE, // INTERFACE descriptor type - 0, // Interface Number - 0, // Alternate Setting Number - 1, // Number of endpoints in this intf - COMM_INTF, // Class code - ABSTRACT_CONTROL_MODEL, // Subclass code - V25TER, // Protocol code - 0, // Interface string index - - /* CDC Class-Specific Descriptors */ - sizeof(USB_CDC_HEADER_FN_DSC), - CS_INTERFACE, - DSC_FN_HEADER, - 0x10,0x01, - - sizeof(USB_CDC_ACM_FN_DSC), - CS_INTERFACE, - DSC_FN_ACM, - USB_CDC_ACM_FN_DSC_VAL, - - sizeof(USB_CDC_UNION_FN_DSC), - CS_INTERFACE, - DSC_FN_UNION, - CDC_COMM_INTF_ID, - CDC_DATA_INTF_ID, - - sizeof(USB_CDC_CALL_MGT_FN_DSC), - CS_INTERFACE, - DSC_FN_CALL_MGT, - 0x00, - CDC_DATA_INTF_ID, - - /* Endpoint Descriptor */ - 7, // sizeof(USB_EP_DSC) - USB_DESCRIPTOR_ENDPOINT, // Endpoint Descriptor - _EP02_IN, // EndpointAddress - _INTERRUPT, // Attributes - 0x08, 0x00, // size - 0x02, // Interval - - /* Interface Descriptor */ - 9, // sizeof(USB_INTF_DSC) - USB_DESCRIPTOR_INTERFACE, // INTERFACE descriptor type - 1, // Interface Number - 0, // Alternate Setting Number - 2, // Number of endpoints in this intf - DATA_INTF, // Class code - 0, // Subclass code - NO_PROTOCOL, // Protocol code - 0, // Interface string index - - /* Endpoint Descriptor */ - 7, // sizeof(USB_EP_DSC) - USB_DESCRIPTOR_ENDPOINT, // Endpoint Descriptor - _EP03_OUT, // EndpointAddress - _BULK, // Attributes - 0x40, 0x00, // size - 0x00, // Interval - - /* Endpoint Descriptor */ - 7, // sizeof(USB_EP_DSC) - USB_DESCRIPTOR_ENDPOINT, // Endpoint Descriptor - _EP03_IN, // EndpointAddress - _BULK, // Attributes - 0x40, 0x00, // size - 0x00, // Interval -}; - - -/* - * Language code string descriptor. - */ -static const USB_STRING_INIT(1) string0_descriptor = { - sizeof(string0_descriptor), - USB_DESCRIPTOR_STRING, - { 0x0409 } /* US English */ -}; - -/* - * Manufacturer string descriptor - */ -static const USB_STRING_INIT(25) string1_descriptor = { - sizeof(string1_descriptor), - USB_DESCRIPTOR_STRING, - { 'M','i','c','r','o','c','h','i','p',' ', - 'T','e','c','h','n','o','l','o','g','y', - ' ','I','n','c','.', }, -}; - -/* - * Product string descriptor - */ -static const USB_STRING_INIT(16) string2_descriptor = { - sizeof(string2_descriptor), - USB_DESCRIPTOR_STRING, - { 'R','e','t','r','o','B','S','D',' ','C', - 'o','n','s','o','l','e', }, -}; - -/* - * Array of configuration descriptors - */ -const unsigned char *const usb_config[] = { - (const unsigned char *const) &usb_config1_descriptor, -}; - -/* - * Array of string descriptors - */ -const unsigned char *const usb_string[USB_NUM_STRING_DESCRIPTORS] = { - (const unsigned char *const) &string0_descriptor, - (const unsigned char *const) &string1_descriptor, - (const unsigned char *const) &string2_descriptor, -}; diff --git a/sys/pic32/wf32/.gitignore b/sys/pic32/wf32/.gitignore index 6a22af6..7e25ca8 100644 --- a/sys/pic32/wf32/.gitignore +++ b/sys/pic32/wf32/.gitignore @@ -7,3 +7,6 @@ unix.bin unix.map usbboot.map vers.c +*.h +ioconf.c +swapunix.c diff --git a/sys/pic32/wf32/Config b/sys/pic32/wf32/Config new file mode 100644 index 0000000..e986eb0 --- /dev/null +++ b/sys/pic32/wf32/Config @@ -0,0 +1,58 @@ +# +# chipKIT WF32 board with microSD card on 2.4" LCD TFT display shield +# +# To build the kernel, use: +# cd sys/pic32/wf32 +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "WF32" # Board type +ldscript "max32/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# LED +options "LED_KERNEL_PORT=TRISA" # for kernel activity LED... +options "LED_KERNEL_PIN=0" # ...use pin RA3 +options "LED_DISK_PORT=TRISF" # for disk activity LED... +options "LED_DISK_PIN=0" # ...use pin RF0 +options "LED_TTY_PORT=TRISA" # for serial activity LED... +options "LED_TTY_PIN=1" # ...use pin RA1 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Serial UART ports +device uart1 # Serial-to-USB converter + +# Console options +options "CONSOLE_DEVICE=tty0" # /dev/tty0 + +# SPI ports +controller spi2 # SD card + +# microSD card +device sd0 at spi2 pin RD4 # select pin RD4 +options "SD0_MHZ=10" # speed 10 MHz +options "SD0_PORT=2" # at spi2 TODO: delete +options "SD0_CS_PORT=TRISD" # for chip select... TODO: delete +options "SD0_CS_PIN=4" # ...use pin RD4 TODO: delete + +# General purpose I/O ports +device gpio + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/wf32/Makefile b/sys/pic32/wf32/Makefile index 5e4739a..9e37973 100644 --- a/sys/pic32/wf32/Makefile +++ b/sys/pic32/wf32/Makefile @@ -1,46 +1,354 @@ -BUILDPATH = ../../../tools/configsys/../../sys/pic32 -H = ../../../tools/configsys/../../sys/include -M = ../../../tools/configsys/../../sys/pic32 -S = ../../../tools/configsys/../../sys/kernel +PARAM = -DWF32 +PARAM += -DPIC32MX7 +PARAM += -DUART1_ENABLED +PARAM += -DSPI2_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DSD0_CS_PIN=4 +PARAM += -DSD0_CS_PORT=TRISD +PARAM += -DSD0_PORT=2 +PARAM += -DSD0_MHZ=10 +PARAM += -DCONSOLE_DEVICE=tty0 +PARAM += -DLED_TTY_PIN=1 +PARAM += -DLED_TTY_PORT=TRISA +PARAM += -DLED_DISK_PIN=0 +PARAM += -DLED_DISK_PORT=TRISF +PARAM += -DLED_KERNEL_PIN=0 +PARAM += -DLED_KERNEL_PORT=TRISA +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "max32/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk -vpath %.c $(M):$(S) -vpath %.S $(M):$(S) +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o -EXTRA_TARGETS = +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif -DEFS += -DADC_ENABLED=YES -DEFS += -DBUS_DIV=1 -DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=tty0 -DEFS += -DCPU_IDIV=2 -DEFS += -DCPU_KHZ=80000 -DEFS += -DCPU_MUL=20 -DEFS += -DCPU_ODIV=1 -DEFS += -DCRYSTAL=8 -DEFS += -DEXEC_AOUT -DEFS += -DEXEC_ELF -DEFS += -DEXEC_SCRIPT -DEFS += -DGPIO_ENABLED=YES -DEFS += -DKERNEL -DEFS += -DLED_DISK_PIN=0 -DEFS += -DLED_DISK_PORT=TRISF -DEFS += -DLED_KERNEL_PIN=0 -DEFS += -DLED_KERNEL_PORT=TRISA -DEFS += -DLED_TTY_PIN=1 -DEFS += -DLED_TTY_PORT=TRISA -DEFS += -DPIC32MX7 -DEFS += -DSD0_CS_PIN=4 -DEFS += -DSD0_CS_PORT=TRISD -DEFS += -DSD0_PORT=2 -DEFS += -DUART1_BAUD=115200 -DEFS += -DUART1_ENABLED=YES -DEFS += -DUCB_METER +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o rdisk.o \ + subr_prf.o subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o \ + sys_process.o syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o \ + ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o \ + ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o \ + ufs_syscalls2.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o adc.o \ + clock.o cons.o devsw.o exception.o gpio.o machdep.o mem.o pwm.o \ + rd_sd.o signal.o spi.o spi_bus.o swap.o sysctl.o uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/rdisk.c $S/kernel/subr_prf.c \ + $S/kernel/subr_rmap.c $S/kernel/sys_generic.c \ + $S/kernel/sys_inode.c $S/kernel/sys_pipe.c \ + $S/kernel/sys_process.c $S/kernel/syscalls.c $S/kernel/tty.c \ + $S/kernel/tty_subr.c $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c \ + $S/kernel/ufs_bio.c $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c \ + $S/kernel/ufs_fio.c $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/adc.c $S/pic32/clock.c \ + $S/pic32/cons.c $S/pic32/devsw.c $S/pic32/exception.c \ + $S/pic32/gpio.c $S/pic32/machdep.c $S/pic32/mem.c $S/pic32/pwm.c \ + $S/pic32/rd_sd.c $S/pic32/signal.c $S/pic32/spi.c \ + $S/pic32/spi_bus.c $S/pic32/swap.c $S/pic32/sysctl.c \ + $S/pic32/uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} #ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +rdisk.o: $S/kernel/rdisk.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +rd_sd.o: $S/pic32/rd_sd.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +uart.o: $S/pic32/uart.c + ${COMPILE_C} -LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader-max32.ld - -CONFIG = WF32 -CONFIGPATH = ../../../tools/configsys - -include ../../../tools/configsys/../../sys/pic32/kernel-post.mk +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/tools/Makefile b/tools/Makefile index ae7452a..94d3e23 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,4 +1,4 @@ -SUBDIR = elf2aout fsutil virtualmips mkrd configsys icache +SUBDIR = elf2aout fsutil virtualmips mkrd kconfig icache all install depend: ${SUBDIR} -for i in ${SUBDIR}; do ${MAKE} -C $$i ${MFLAGS} DESTDIR=${DESTDIR} $@; done diff --git a/sys/pic32/32mxsdram-uart/32MXSDRAM-UART b/tools/configsys/board/32MXSDRAM-UART similarity index 100% rename from sys/pic32/32mxsdram-uart/32MXSDRAM-UART rename to tools/configsys/board/32MXSDRAM-UART diff --git a/sys/pic32/baremetal/BAREMETAL b/tools/configsys/board/BAREMETAL similarity index 100% rename from sys/pic32/baremetal/BAREMETAL rename to tools/configsys/board/BAREMETAL diff --git a/sys/pic32/duinomite/DUINOMITE b/tools/configsys/board/DUINOMITE similarity index 100% rename from sys/pic32/duinomite/DUINOMITE rename to tools/configsys/board/DUINOMITE diff --git a/sys/pic32/duinomite-e/DUINOMITE-E b/tools/configsys/board/DUINOMITE-E similarity index 100% rename from sys/pic32/duinomite-e/DUINOMITE-E rename to tools/configsys/board/DUINOMITE-E diff --git a/sys/pic32/duinomite-e-uart/DUINOMITE-E-UART b/tools/configsys/board/DUINOMITE-E-UART similarity index 100% rename from sys/pic32/duinomite-e-uart/DUINOMITE-E-UART rename to tools/configsys/board/DUINOMITE-E-UART diff --git a/sys/pic32/duinomite-uart/DUINOMITE-UART b/tools/configsys/board/DUINOMITE-UART similarity index 100% rename from sys/pic32/duinomite-uart/DUINOMITE-UART rename to tools/configsys/board/DUINOMITE-UART diff --git a/sys/pic32/explorer16/EXPLORER16 b/tools/configsys/board/EXPLORER16 similarity index 100% rename from sys/pic32/explorer16/EXPLORER16 rename to tools/configsys/board/EXPLORER16 diff --git a/sys/pic32/fubarino/FUBARINO b/tools/configsys/board/FUBARINO similarity index 100% rename from sys/pic32/fubarino/FUBARINO rename to tools/configsys/board/FUBARINO diff --git a/sys/pic32/fubarino/FUBARINO-UART2CONS-UART1-SRAMC b/tools/configsys/board/FUBARINO-UART2CONS-UART1-SRAMC similarity index 100% rename from sys/pic32/fubarino/FUBARINO-UART2CONS-UART1-SRAMC rename to tools/configsys/board/FUBARINO-UART2CONS-UART1-SRAMC diff --git a/sys/pic32/max32/MAX32 b/tools/configsys/board/MAX32 similarity index 100% rename from sys/pic32/max32/MAX32 rename to tools/configsys/board/MAX32 diff --git a/sys/pic32/maximite/MAXIMITE b/tools/configsys/board/MAXIMITE similarity index 100% rename from sys/pic32/maximite/MAXIMITE rename to tools/configsys/board/MAXIMITE diff --git a/sys/pic32/maximite-color/MAXIMITE-COLOR b/tools/configsys/board/MAXIMITE-COLOR similarity index 100% rename from sys/pic32/maximite-color/MAXIMITE-COLOR rename to tools/configsys/board/MAXIMITE-COLOR diff --git a/sys/pic32/meb/MEB b/tools/configsys/board/MEB similarity index 100% rename from sys/pic32/meb/MEB rename to tools/configsys/board/MEB diff --git a/sys/pic32/mmb-mx7/MMB-MX7 b/tools/configsys/board/MMB-MX7 similarity index 100% rename from sys/pic32/mmb-mx7/MMB-MX7 rename to tools/configsys/board/MMB-MX7 diff --git a/sys/pic32/picadillo/PICADILLO b/tools/configsys/board/PICADILLO similarity index 100% rename from sys/pic32/picadillo/PICADILLO rename to tools/configsys/board/PICADILLO diff --git a/sys/pic32/picadillo_rambo/PICADILLO_RAMBO b/tools/configsys/board/PICADILLO-RAMBO similarity index 100% rename from sys/pic32/picadillo_rambo/PICADILLO_RAMBO rename to tools/configsys/board/PICADILLO-RAMBO diff --git a/sys/pic32/pinguino-micro/PINGUINO-MICRO b/tools/configsys/board/PINGUINO-MICRO similarity index 100% rename from sys/pic32/pinguino-micro/PINGUINO-MICRO rename to tools/configsys/board/PINGUINO-MICRO diff --git a/sys/pic32/sdxl/SDXL b/tools/configsys/board/SDXL similarity index 100% rename from sys/pic32/sdxl/SDXL rename to tools/configsys/board/SDXL diff --git a/sys/pic32/starter-kit/STARTER-KIT b/tools/configsys/board/STARTER-KIT similarity index 100% rename from sys/pic32/starter-kit/STARTER-KIT rename to tools/configsys/board/STARTER-KIT diff --git a/sys/pic32/ubw32/UBW32 b/tools/configsys/board/UBW32 similarity index 100% rename from sys/pic32/ubw32/UBW32 rename to tools/configsys/board/UBW32 diff --git a/sys/pic32/ubw32-uart/UBW32-UART b/tools/configsys/board/UBW32-UART similarity index 100% rename from sys/pic32/ubw32-uart/UBW32-UART rename to tools/configsys/board/UBW32-UART diff --git a/sys/pic32/ubw32-uart-sdram/UBW32-UART-SDRAM b/tools/configsys/board/UBW32-UART-SDRAM similarity index 100% rename from sys/pic32/ubw32-uart-sdram/UBW32-UART-SDRAM rename to tools/configsys/board/UBW32-UART-SDRAM diff --git a/sys/pic32/wf32/WF32 b/tools/configsys/board/WF32 similarity index 100% rename from sys/pic32/wf32/WF32 rename to tools/configsys/board/WF32 diff --git a/sys/pic32/cfg/adc.dev b/tools/configsys/dev/adc.dev similarity index 100% rename from sys/pic32/cfg/adc.dev rename to tools/configsys/dev/adc.dev diff --git a/sys/pic32/cfg/console.dev b/tools/configsys/dev/console.dev similarity index 100% rename from sys/pic32/cfg/console.dev rename to tools/configsys/dev/console.dev diff --git a/sys/pic32/cfg/devcfg.dev b/tools/configsys/dev/devcfg.dev similarity index 100% rename from sys/pic32/cfg/devcfg.dev rename to tools/configsys/dev/devcfg.dev diff --git a/sys/pic32/cfg/foreignbootloader.dev b/tools/configsys/dev/foreignbootloader.dev similarity index 100% rename from sys/pic32/cfg/foreignbootloader.dev rename to tools/configsys/dev/foreignbootloader.dev diff --git a/sys/pic32/cfg/glcd.dev b/tools/configsys/dev/glcd.dev similarity index 100% rename from sys/pic32/cfg/glcd.dev rename to tools/configsys/dev/glcd.dev diff --git a/sys/pic32/cfg/glob.dev b/tools/configsys/dev/glob.dev similarity index 100% rename from sys/pic32/cfg/glob.dev rename to tools/configsys/dev/glob.dev diff --git a/sys/pic32/cfg/global.dev b/tools/configsys/dev/global.dev similarity index 100% rename from sys/pic32/cfg/global.dev rename to tools/configsys/dev/global.dev diff --git a/sys/pic32/cfg/gpio.dev b/tools/configsys/dev/gpio.dev similarity index 100% rename from sys/pic32/cfg/gpio.dev rename to tools/configsys/dev/gpio.dev diff --git a/sys/pic32/cfg/hxtft.dev b/tools/configsys/dev/hxtft.dev similarity index 100% rename from sys/pic32/cfg/hxtft.dev rename to tools/configsys/dev/hxtft.dev diff --git a/sys/pic32/cfg/kernel.dev b/tools/configsys/dev/kernel.dev similarity index 100% rename from sys/pic32/cfg/kernel.dev rename to tools/configsys/dev/kernel.dev diff --git a/sys/pic32/cfg/log.dev b/tools/configsys/dev/log.dev similarity index 100% rename from sys/pic32/cfg/log.dev rename to tools/configsys/dev/log.dev diff --git a/sys/pic32/cfg/mrams.dev b/tools/configsys/dev/mrams.dev similarity index 100% rename from sys/pic32/cfg/mrams.dev rename to tools/configsys/dev/mrams.dev diff --git a/sys/pic32/cfg/picga.dev b/tools/configsys/dev/picga.dev similarity index 100% rename from sys/pic32/cfg/picga.dev rename to tools/configsys/dev/picga.dev diff --git a/sys/pic32/cfg/power.dev b/tools/configsys/dev/power.dev similarity index 100% rename from sys/pic32/cfg/power.dev rename to tools/configsys/dev/power.dev diff --git a/sys/pic32/cfg/pty.dev b/tools/configsys/dev/pty.dev similarity index 100% rename from sys/pic32/cfg/pty.dev rename to tools/configsys/dev/pty.dev diff --git a/sys/pic32/cfg/pwm.dev b/tools/configsys/dev/pwm.dev similarity index 100% rename from sys/pic32/cfg/pwm.dev rename to tools/configsys/dev/pwm.dev diff --git a/sys/pic32/cfg/rdisk.dev b/tools/configsys/dev/rdisk.dev similarity index 100% rename from sys/pic32/cfg/rdisk.dev rename to tools/configsys/dev/rdisk.dev diff --git a/sys/pic32/cfg/sd.dev b/tools/configsys/dev/sd.dev similarity index 100% rename from sys/pic32/cfg/sd.dev rename to tools/configsys/dev/sd.dev diff --git a/sys/pic32/cfg/sdramp.dev b/tools/configsys/dev/sdramp.dev similarity index 100% rename from sys/pic32/cfg/sdramp.dev rename to tools/configsys/dev/sdramp.dev diff --git a/sys/pic32/cfg/skel.dev b/tools/configsys/dev/skel.dev similarity index 100% rename from sys/pic32/cfg/skel.dev rename to tools/configsys/dev/skel.dev diff --git a/sys/pic32/cfg/spi.dev b/tools/configsys/dev/spi.dev similarity index 100% rename from sys/pic32/cfg/spi.dev rename to tools/configsys/dev/spi.dev diff --git a/sys/pic32/cfg/spibus.dev b/tools/configsys/dev/spibus.dev similarity index 100% rename from sys/pic32/cfg/spibus.dev rename to tools/configsys/dev/spibus.dev diff --git a/sys/pic32/cfg/spirams.dev b/tools/configsys/dev/spirams.dev similarity index 100% rename from sys/pic32/cfg/spirams.dev rename to tools/configsys/dev/spirams.dev diff --git a/sys/pic32/cfg/sramc.dev b/tools/configsys/dev/sramc.dev similarity index 100% rename from sys/pic32/cfg/sramc.dev rename to tools/configsys/dev/sramc.dev diff --git a/sys/pic32/cfg/tty.dev b/tools/configsys/dev/tty.dev similarity index 100% rename from sys/pic32/cfg/tty.dev rename to tools/configsys/dev/tty.dev diff --git a/sys/pic32/cfg/uart.dev b/tools/configsys/dev/uart.dev similarity index 100% rename from sys/pic32/cfg/uart.dev rename to tools/configsys/dev/uart.dev diff --git a/sys/pic32/cfg/uartconsole.dev b/tools/configsys/dev/uartconsole.dev similarity index 100% rename from sys/pic32/cfg/uartconsole.dev rename to tools/configsys/dev/uartconsole.dev diff --git a/sys/pic32/cfg/uartusb.dev b/tools/configsys/dev/uartusb.dev similarity index 100% rename from sys/pic32/cfg/uartusb.dev rename to tools/configsys/dev/uartusb.dev diff --git a/sys/pic32/cfg/ufs.dev b/tools/configsys/dev/ufs.dev similarity index 100% rename from sys/pic32/cfg/ufs.dev rename to tools/configsys/dev/ufs.dev diff --git a/sys/pic32/cfg/usbconsole.dev b/tools/configsys/dev/usbconsole.dev similarity index 100% rename from sys/pic32/cfg/usbconsole.dev rename to tools/configsys/dev/usbconsole.dev diff --git a/sys/pic32/cfg/fubarino.map b/tools/configsys/map/fubarino.map similarity index 100% rename from sys/pic32/cfg/fubarino.map rename to tools/configsys/map/fubarino.map diff --git a/sys/pic32/cfg/generic.map b/tools/configsys/map/generic.map similarity index 100% rename from sys/pic32/cfg/generic.map rename to tools/configsys/map/generic.map diff --git a/sys/pic32/cfg/max32.map b/tools/configsys/map/max32.map similarity index 100% rename from sys/pic32/cfg/max32.map rename to tools/configsys/map/max32.map diff --git a/sys/pic32/cfg/picadillo.map b/tools/configsys/map/picadillo.map similarity index 100% rename from sys/pic32/cfg/picadillo.map rename to tools/configsys/map/picadillo.map diff --git a/sys/pic32/cfg/wf32.map b/tools/configsys/map/wf32.map similarity index 100% rename from sys/pic32/cfg/wf32.map rename to tools/configsys/map/wf32.map diff --git a/tools/kconfig/Makefile b/tools/kconfig/Makefile index 57f981f..c2cee01 100644 --- a/tools/kconfig/Makefile +++ b/tools/kconfig/Makefile @@ -2,8 +2,7 @@ CC = gcc -g CFLAGS = -O -Wall -Werror YACC = byacc -d DESTDIR = /usr/local -OBJS = config.o main.o lang.o mkioconf.o mkmakefile.o mkheaders.o \ - mkswapconf.o +OBJS = config.o main.o lang.o mkioconf.o mkmakefile.o mkswapconf.o PROG = kconfig all: $(PROG) $(PROG).0 diff --git a/tools/kconfig/Makefile.kconf b/tools/kconfig/Makefile.kconf deleted file mode 100644 index 3b587c4..0000000 --- a/tools/kconfig/Makefile.kconf +++ /dev/null @@ -1,149 +0,0 @@ -# -# Makefile for 4.4 BSD, pic32 target -# -# This makefile is constructed from a machine description: -# config machineid -# Most changes should be made in the machine description -# /sys/conf/``machineid'' -# after which you should do -# config machineid -# Machine generic makefile changes should be made in -# /sys/conf/Makefile.``machinetype'' -# after which config should be rerun for all machines of that type. -# -# N.B.: NO DEPENDENCIES ON FOLLOWING FLAGS ARE VISIBLE TO MAKEFILE -# IF YOU CHANGE THE DEFINITION OF ANY OF THESE RECOMPILE EVERYTHING -# -# -DTRACE compile in kernel tracing hooks -# -DQUOTA compile in file system quotas -# -# DEBUG is set to -g by config if debugging is requested (config -g). -# PROF is set to -pg by config if profiling is requested (config -p). - -.if exists(${MIPS_GCC_ROOT}/bin/mips-sde-elf-gcc) -MIPS_GCC_PREFIX ?= ${MIPS_GCC_ROOT}/bin/mips-sde-elf- -.endif -.if exists(${MIPS_GCC_ROOT}/bin/mips-elf-gcc) -MIPS_GCC_PREFIX ?= ${MIPS_GCC_ROOT}/bin/mips-elf- -.endif - -AS= ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL -CC= ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -msoft-float -nostdinc -fno-builtin -Werror -Wall -CPP= ${MIPS_GCC_PREFIX}cpp -LD= ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL -LDFLAGS= -nostdlib -T $A/${LDSCRIPT} -Wl,-Map=vmunix.map -SIZE= ${MIPS_GCC_PREFIX}size -OBJCOPY= ${MIPS_GCC_PREFIX}objcopy -OBJDUMP= ${MIPS_GCC_PREFIX}objdump - -.if exists(${MIPS_GCC_ROOT}/bin/mips-elf-gcc) -LDFLAGS+= -Wl,--oformat=elf32-littlemips -.endif - -# source tree is located via $S relative to the compilation directory -S= ../.. -A= $S/mips - -COPTS= -I. -I$S ${IDENT} -DKERNEL -CFLAGS= -O ${COPTS} - -# compile rules: rules are named ${TYPE}_${SUFFIX}${CONFIG_DEP} -# where TYPE is NORMAL, DRIVER, or PROFILE}; SUFFIX is the file suffix, -# capitalized (e.g. C for a .c file), and CONFIG_DEP is _C if the file -# is marked as config-dependent. - -NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $< -NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${PARAM} $< - -DRIVER_C= ${CC} -c ${CFLAGS} ${PROF} $< -DRIVER_C_C= ${CC} -c ${CFLAGS} ${PROF} ${PARAM} $< - -PROFILE_C= ${CC} -p -c ${COPTS} $< - -NORMAL_S= ${CPP} ${COPTS} $< | ${AS} -o $@ -NORMAL_S_C= ${CPP} ${COPTS} ${PARAM} $< | ${AS} -o $@ - -%OBJS - -%CFILES - -# load lines for config "xxx" will be emitted as: -# xxx: ${SYSTEM_DEP} swapxxx.o -# ${SYSTEM_LD_HEAD} -# ${SYSTEM_LD} swapxxx.o -# ${SYSTEM_LD_TAIL} -SYSTEM_OBJ= locore.o ${OBJS} param.o ioconf.o vnode_if.o -SYSTEM_DEP= Makefile ${SYSTEM_OBJ} $S/libkern/libkern.a -SYSTEM_LD_HEAD= sh $S/conf/newvers.sh; ${CC} $(CFLAGS) -c vers.c; rm -f $@ -SYSTEM_LD= -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -L$S/libkern -lkern -o vmunix.elf; \ - ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -L$S/libkern -lkern -o vmunix.elf -SYSTEM_LD_TAIL= ${SIZE} vmunix.elf; \ - $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ vmunix.hex; \ - $(OBJDUMP) -d -S vmunix.elf > vmunix.dis - -%LOAD - -$S/libkern/libkern.a: - cd $S/libkern && ${MAKE} all - -clean: - rm -f eddep *vmunix.elf vmunix.gdb tags *.o locore.i [a-z]*.s \ - Errs errs linterrs makelinks - -lint: /tmp param.c - @lint -hbxn -DGENERIC -Dvolatile= ${COPTS} ${PARAM} -UKGDB \ - $A/pic32/Locore.c ${CFILES} $A/pic32/swapgeneric.c \ - ioconf.c param.c - -symbols.sort: $A/pic32/symbols.raw - grep -v '^#' $A/pic32/symbols.raw \ - | sed 's/^ //' | sort -u > symbols.sort - -locore.o: $A/pic32/locore.s $A/include/machAsmDefs.h \ - $A/include/machConst.h $A/include/reg.h $A/include/assym.h - ${CPP} ${COPTS} ${PARAM} -DLOCORE $A/pic32/locore.s | \ - ${AS} -o locore.o - -# the following is necessary because autoconf.o depends on #if GENERIC -autoconf.o: Makefile - -# the following are necessary because the files depend on the types of -# cpu's included in the system configuration -clock.o machdep.o autoconf.o conf.o: Makefile - -# depend on network configuration -uipc_proto.o vfs_conf.o: Makefile - -machine: - ln -s $A/include $@ - -depend: machine param.c vnode_if.h - mkdep ${COPTS} ${CFILES} ioconf.c param.c - -links: - egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ - sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink - echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ - sort -u | comm -23 - dontlink | \ - sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks - sh makelinks && rm -f dontlink - -tags: - @echo "see $S/kern/Makefile for tags" - -ioconf.o: ioconf.c - ${CC} -c ${CFLAGS} ioconf.c - -param.c: $S/conf/param.c - rm -f param.c - cp $S/conf/param.c . - -param.o: param.c Makefile - ${CC} -c ${CFLAGS} ${PARAM} param.c - -vnode_if.c: $S/kern/vnode_if.sh $S/kern/vnode_if.src - sh $S/kern/vnode_if.sh $S/kern/vnode_if.src -vnode_if.h: $S/kern/vnode_if.sh $S/kern/vnode_if.src - sh $S/kern/vnode_if.sh $S/kern/vnode_if.src - -%RULES diff --git a/tools/kconfig/config.h b/tools/kconfig/config.h index c08ff50..23cd942 100644 --- a/tools/kconfig/config.h +++ b/tools/kconfig/config.h @@ -82,17 +82,10 @@ struct file_list { /* * Types. */ -#define DRIVER 1 -#define NORMAL 2 -#define INVISIBLE 3 -#define PROFILING 4 -#define SYSTEMSPEC 5 -#define SWAPSPEC 6 - -/* - * Attributes (flags). - */ -#define CONFIGDEP 1 +#define NORMAL 1 +#define INVISIBLE 2 +#define SYSTEMSPEC 3 +#define SWAPSPEC 4 struct idlst { char *id; @@ -100,27 +93,28 @@ struct idlst { }; struct device { - int d_type; /* CONTROLLER, DEVICE, bus adaptor */ - struct device *d_conn; /* what it is connected to */ - char *d_name; /* name of device (e.g. rk11) */ - struct idlst *d_vec; /* interrupt vectors */ - int d_pri; /* interrupt priority */ - int d_addr; /* address of csr */ - int d_unit; /* unit number */ - int d_drive; /* drive number */ - int d_slave; /* slave number */ -#define QUES -1 /* -1 means '?' */ -#define UNKNOWN -2 /* -2 means not set yet */ - int d_dk; /* if init 1 set to number for iostat */ - int d_flags; /* flags for device init */ - char *d_port; /* io port base manifest constant */ - int d_portn; /* io port base (if number not manifest) */ - char *d_mask; /* interrupt mask */ - int d_maddr; /* io memory base */ - int d_msize; /* io memory size */ - int d_drq; /* DMA request */ - int d_irq; /* interrupt request */ - struct device *d_next; /* Next one in list */ + int d_type; /* CONTROLLER, DEVICE, bus adaptor */ + struct device *d_conn; /* what it is connected to */ + char *d_name; /* name of device (e.g. rk11) */ + struct idlst *d_vec; /* interrupt vectors */ + int d_pri; /* interrupt priority */ + int d_addr; /* address of csr */ + int d_unit; /* unit number */ + int d_drive; /* drive number */ + int d_slave; /* slave number */ +#define QUES -1 /* -1 means '?' */ +#define UNKNOWN -2 /* -2 means not set yet */ + int d_flags; /* flags for device init */ + char *d_port; /* io port base manifest constant */ + char *d_mask; /* interrupt mask */ + int d_maddr; /* io memory base */ + int d_msize; /* io memory size */ + int d_drq; /* DMA request */ + int d_irq; /* interrupt request */ + struct device *d_next; /* Next one in list */ +#define MAXPINS 32 /* max number of pins */ + short d_pins[MAXPINS]; /* pins assigned */ + int d_npins; /* pin count */ }; struct config { @@ -129,15 +123,14 @@ struct config { }; /* - * Config has a global notion of which machine type is - * being used. + * Config has a global notion of which architecture is being used. */ -int machine; -char *machinename; -#define MACHINE_PIC32 1 +int arch; +char *archname; +#define ARCH_PIC32 1 /* - * For each machine, a set of CPU's may be specified as supported. + * For each architecture, a set of CPU's may be specified as supported. * These and the options (below) are put in the C flags in the makefile. */ struct cputype { @@ -156,7 +149,7 @@ struct opt { struct opt *op_next; } *opt, *mkopt; -char *ident; +char *board; char *ldscript; int do_trace; @@ -170,8 +163,6 @@ struct file_list *ftab, *conf_list, **confp, *comp_list, **compp; int zone, hadtz; int dst; -int hz; -int profiling; int debugging; int maxusers; diff --git a/tools/kconfig/config.y b/tools/kconfig/config.y index e72f9c2..fb63fc3 100644 --- a/tools/kconfig/config.y +++ b/tools/kconfig/config.y @@ -7,38 +7,36 @@ %token AND %token ANY +%token ARCHITECTURE %token AT +%token BOARD %token COMMA %token CONFIG %token CONTROLLER %token CPU %token CSR %token DEVICE -%token DISK %token DRIVE %token DST %token DUMPS %token EQUALS %token FLAGS %token HZ -%token IDENT %token LDSCRIPT -%token MACHINE %token MAJOR -%token MASTER %token MAXUSERS %token MINOR %token MINUS %token ON %token OPTIONS %token MAKEOPTIONS +%token PINS %token PRIORITY -%token PSEUDO_DEVICE +%token SERVICE %token ROOT %token SEMICOLON %token SEQUENTIAL %token SIZE -%token SLAVE %token SWAP %token TIMEZONE %token TRACE @@ -47,6 +45,7 @@ %token ID %token NUMBER %token FPNUMBER +%token PIN %type Save_id %type Opt_value @@ -139,13 +138,13 @@ Spec: ; Config_spec: - MACHINE Save_id + ARCHITECTURE Save_id = { if (strcmp($2, "pic32") == 0) { - machine = MACHINE_PIC32; - machinename = "pic32"; + arch = ARCH_PIC32; + archname = "pic32"; } else - yyerror("Unknown machine type"); + yyerror("Unknown architecture"); } | CPU Save_id @@ -162,17 +161,14 @@ Config_spec: | MAKEOPTIONS Mkopt_list | - IDENT ID - = { ident = strdup($2); } + BOARD ID + = { board = strdup($2); } | LDSCRIPT ID = { ldscript = strdup($2); } | System_spec | - HZ NUMBER - = { hz = $2; } - | TIMEZONE NUMBER = { zone = 60 * $2; check_tz(); } | @@ -438,25 +434,19 @@ Device_spec: DEVICE Dev_name Dev_info Int_spec = { cur.d_type = DEVICE; } | - MASTER Dev_name Dev_info Int_spec - = { cur.d_type = MASTER; } - | - DISK Dev_name Dev_info Int_spec - = { cur.d_dk = 1; cur.d_type = DEVICE; } - | CONTROLLER Dev_name Dev_info Int_spec = { cur.d_type = CONTROLLER; } | - PSEUDO_DEVICE Init_dev Dev + SERVICE Init_dev Dev = { cur.d_name = $3; - cur.d_type = PSEUDO_DEVICE; + cur.d_type = SERVICE; } | - PSEUDO_DEVICE Init_dev Dev NUMBER + SERVICE Init_dev Dev NUMBER = { cur.d_name = $3; - cur.d_type = PSEUDO_DEVICE; + cur.d_type = SERVICE; cur.d_slave = $4; } ; @@ -467,6 +457,11 @@ Dev_name: cur.d_name = $2; cur.d_unit = $3; } + | + Init_dev Dev + = { + cur.d_name = $2; + } ; Init_dev: @@ -500,17 +495,10 @@ Info: DRIVE NUMBER = { cur.d_drive = $2; } | - SLAVE NUMBER - = { - if (cur.d_conn != 0 && - cur.d_conn->d_type == MASTER) - cur.d_slave = $2; - else - yyerror("can't specify slave--not to master"); - } - | FLAGS NUMBER = { cur.d_flags = $2; } + | + PINS Pin_list ; Int_spec: @@ -536,6 +524,14 @@ Id_list: a->id = $1; a->id_next = $2; $$ = a; } ; + +Pin_list: + PIN + = { cur.d_pins[cur.d_npins++] = $1; } + | + PIN COMMA Pin_list + = { cur.d_pins[cur.d_npins++] = $1; } + ; %% void yyerror(s) @@ -657,7 +653,7 @@ connect(dev, num) for (dp = dtab; dp != 0; dp = dp->d_next) { if ((num != dp->d_unit) || !eq(dev, dp->d_name)) continue; - if (dp->d_type != CONTROLLER && dp->d_type != MASTER) { + if (dp->d_type != CONTROLLER) { (void) sprintf(errbuf, "%s connected to non-controller", dev); yyerror(errbuf); @@ -739,15 +735,15 @@ void init_dev(dp) dp->d_type = DEVICE; dp->d_conn = 0; dp->d_vec = 0; - dp->d_addr = dp->d_flags = dp->d_dk = 0; + dp->d_addr = dp->d_flags; dp->d_pri = -1; dp->d_slave = dp->d_drive = dp->d_unit = UNKNOWN; dp->d_port = (char *)0; - dp->d_portn = 0; dp->d_irq = -1; dp->d_drq = -1; dp->d_maddr = 0; dp->d_msize = 0; + dp->d_npins = 0; dp->d_mask = "null"; } @@ -758,9 +754,9 @@ void check_nexus(dev, num) register struct device *dev; int num; { - switch (machine) { + switch (arch) { - case MACHINE_PIC32: + case ARCH_PIC32: break; } } diff --git a/tools/kconfig/files.kconf b/tools/kconfig/files.kconf deleted file mode 100644 index 42db771..0000000 --- a/tools/kconfig/files.kconf +++ /dev/null @@ -1,179 +0,0 @@ -isofs/cd9660/cd9660_bmap.c optional cd9660 -isofs/cd9660/cd9660_lookup.c optional cd9660 -isofs/cd9660/cd9660_node.c optional cd9660 -isofs/cd9660/cd9660_rrip.c optional cd9660 -isofs/cd9660/cd9660_util.c optional cd9660 -isofs/cd9660/cd9660_vfsops.c optional cd9660 -isofs/cd9660/cd9660_vnops.c optional cd9660 -kern/init_main.c standard -kern/init_sysent.c standard -kern/kern_acct.c standard -kern/kern_clock.c standard -kern/kern_descrip.c standard -kern/kern_exec.c standard -kern/kern_exit.c standard -kern/kern_fork.c standard -kern/kern_ktrace.c standard -kern/kern_malloc.c standard -kern/kern_physio.c standard -kern/kern_proc.c standard -kern/kern_prot.c standard -kern/kern_resource.c standard -kern/kern_sig.c standard -kern/kern_subr.c standard -kern/kern_synch.c standard -kern/kern_sysctl.c standard -kern/kern_time.c standard -kern/kern_xxx.c standard -kern/kern_lock.c standard -kern/subr_log.c standard -kern/subr_prf.c standard -kern/subr_prof.c standard -kern/subr_rmap.c standard -kern/subr_xxx.c standard -kern/sys_generic.c standard -kern/sys_process.c standard -kern/sys_socket.c standard -kern/sysv_shm.c optional sysvshm -kern/tty.c standard -kern/tty_compat.c standard -kern/tty_conf.c standard -kern/tty_pty.c optional pty -kern/tty_subr.c standard -kern/tty_tb.c optional tb -kern/tty_tty.c standard -kern/uipc_domain.c standard -kern/uipc_mbuf.c standard -kern/uipc_proto.c standard -kern/uipc_socket.c standard -kern/uipc_socket2.c standard -kern/uipc_syscalls.c standard -kern/uipc_usrreq.c standard -kern/vfs_bio.c standard -kern/vfs_cache.c standard -kern/vfs_cluster.c standard -kern/vfs_conf.c standard -kern/vfs_init.c standard -kern/vfs_lookup.c standard -kern/vfs_subr.c standard -kern/vfs_syscalls.c standard -kern/vfs_vnops.c standard -miscfs/deadfs/dead_vnops.c standard -miscfs/fdesc/fdesc_vfsops.c optional fdesc -miscfs/fdesc/fdesc_vnops.c optional fdesc -miscfs/fifofs/fifo_vnops.c optional fifo -miscfs/kernfs/kernfs_vfsops.c optional kernfs -miscfs/kernfs/kernfs_vnops.c optional kernfs -miscfs/nullfs/null_subr.c optional nullfs -miscfs/nullfs/null_vfsops.c optional nullfs -miscfs/nullfs/null_vnops.c optional nullfs -miscfs/portal/portal_vfsops.c optional portal -miscfs/portal/portal_vnops.c optional portal -miscfs/procfs/procfs_subr.c optional procfs -miscfs/procfs/procfs_vnops.c optional procfs -miscfs/procfs/procfs_vfsops.c optional procfs -miscfs/procfs/procfs_note.c optional procfs -miscfs/procfs/procfs_mem.c optional procfs -miscfs/procfs/procfs_ctl.c optional procfs -miscfs/procfs/procfs_status.c optional procfs -miscfs/procfs/procfs_regs.c optional procfs -miscfs/procfs/procfs_fpregs.c optional procfs -miscfs/specfs/spec_vnops.c standard -miscfs/umapfs/umap_subr.c optional umapfs -miscfs/umapfs/umap_vfsops.c optional umapfs -miscfs/umapfs/umap_vnops.c optional umapfs -miscfs/union/union_subr.c optional union -miscfs/union/union_vfsops.c optional union -miscfs/union/union_vnops.c optional union -net/bpf.c optional bpfilter -net/bpf_filter.c optional bpfilter -net/if.c standard -net/if_ethersubr.c optional ether -net/if_loop.c optional loop -net/if_sl.c optional sl -net/radix.c standard -net/raw_cb.c standard -net/raw_usrreq.c standard -net/route.c standard -net/rtsock.c standard -net/slcompress.c optional sl -netinet/if_ether.c optional ether -netinet/igmp.c optional inet -netinet/in.c optional inet -netinet/in_pcb.c optional inet -netinet/in_proto.c optional inet -netinet/ip_icmp.c optional inet -netinet/ip_input.c optional inet -netinet/ip_mroute.c optional inet mrouting -netinet/ip_output.c optional inet -netinet/raw_ip.c optional inet -netinet/tcp_debug.c optional inet -netinet/tcp_input.c optional inet -netinet/tcp_output.c optional inet -netinet/tcp_subr.c optional inet -netinet/tcp_timer.c optional inet -netinet/tcp_usrreq.c optional inet -netinet/udp_usrreq.c optional inet -nfs/nfs_bio.c optional nfs -nfs/nfs_node.c optional nfs -nfs/nfs_nqlease.c optional nfs -nfs/nfs_serv.c optional nfs -nfs/nfs_socket.c optional nfs -nfs/nfs_srvcache.c optional nfs -nfs/nfs_subs.c optional nfs -nfs/nfs_syscalls.c optional nfs -nfs/nfs_vfsops.c optional nfs -nfs/nfs_vnops.c optional nfs -ufs/ffs/ffs_alloc.c optional ffs -ufs/ffs/ffs_alloc.c optional mfs -ufs/ffs/ffs_balloc.c optional ffs -ufs/ffs/ffs_balloc.c optional mfs -ufs/ffs/ffs_inode.c optional ffs -ufs/ffs/ffs_inode.c optional mfs -ufs/ffs/ffs_subr.c optional ffs -ufs/ffs/ffs_subr.c optional mfs -ufs/ffs/ffs_tables.c optional ffs -ufs/ffs/ffs_tables.c optional mfs -ufs/ffs/ffs_vfsops.c optional ffs -ufs/ffs/ffs_vfsops.c optional mfs -ufs/ffs/ffs_vnops.c optional ffs -ufs/ffs/ffs_vnops.c optional mfs -ufs/lfs/lfs_alloc.c optional lfs -ufs/lfs/lfs_bio.c optional lfs -ufs/lfs/lfs_balloc.c optional lfs -ufs/lfs/lfs_cksum.c optional lfs -ufs/lfs/lfs_debug.c optional lfs -ufs/lfs/lfs_inode.c optional lfs -ufs/lfs/lfs_segment.c optional lfs -ufs/lfs/lfs_subr.c optional lfs -ufs/lfs/lfs_syscalls.c optional lfs -ufs/lfs/lfs_vfsops.c optional lfs -ufs/lfs/lfs_vnops.c optional lfs -ufs/mfs/mfs_vfsops.c optional mfs -ufs/mfs/mfs_vnops.c optional mfs -ufs/ufs/ufs_bmap.c standard -ufs/ufs/ufs_disksubr.c standard -ufs/ufs/ufs_ihash.c standard -ufs/ufs/ufs_inode.c standard -ufs/ufs/ufs_lockf.c standard -ufs/ufs/ufs_lookup.c standard -ufs/ufs/ufs_quota.c standard -ufs/ufs/ufs_vfsops.c standard -ufs/ufs/ufs_vnops.c standard -vm/device_pager.c optional devpager -vm/swap_pager.c optional swappager -vm/vm_fault.c standard -vm/vm_glue.c standard -vm/vm_init.c standard -vm/vm_kern.c standard -vm/vm_map.c standard -vm/vm_meter.c standard -vm/vm_mmap.c standard -vm/vm_object.c standard -vm/vm_page.c standard -vm/vm_pageout.c standard -vm/vm_pager.c standard -vm/vm_swap.c standard -vm/vm_unix.c standard -vm/vm_user.c standard -vm/vnode_pager.c optional vnodepager diff --git a/tools/kconfig/kconfig.8 b/tools/kconfig/kconfig.8 index cb9f9c4..9475324 100644 --- a/tools/kconfig/kconfig.8 +++ b/tools/kconfig/kconfig.8 @@ -6,7 +6,7 @@ .Nd build kernel configuration files .Sh SYNOPSIS .Nm kconfig -.Op Fl p +.Op Fl g .Ar system_name .Sh DESCRIPTION .Pp @@ -18,7 +18,7 @@ A second file tells .Nm kconfig what files are needed to generate a kernel and can be augmented by configuration specific set of files -that give alternate files for a specific machine. +that give alternate files for a specific architecture. (see the .Sx FILES section below) @@ -26,15 +26,12 @@ section below) Available option and operand: .Pp .Bl -tag -width SYSTEM_NAME -.It Fl p +.It Fl g If the .Fl p option is supplied, .Nm kconfig -will configure a kernel for profiling; for example, -.Xr kgmon 8 -and -.Xr gprof 1 . +will configure a kernel for debugging. .It Ar SYSTEM_NAME specifies the name of the kernel configuration file containing device specifications, configuration options @@ -42,7 +39,7 @@ and other system parameters for one kernel configuration. .El .Pp .Nm Kconfig -should be run from the machine and board specific +should be run from the architecture and board specific subdirectory of the system source (like .Pa sys/pic32/max32 ) . .Nm Kconfig diff --git a/tools/kconfig/lang.l b/tools/kconfig/lang.l index 08e5bd2..08be554 100644 --- a/tools/kconfig/lang.l +++ b/tools/kconfig/lang.l @@ -58,28 +58,26 @@ static struct kt key_words[] = { { "cpu", CPU }, { "csr", CSR }, { "device", DEVICE }, - { "disk", DISK }, { "drive", DRIVE }, { "dst", DST }, { "dumps", DUMPS }, { "flags", FLAGS }, - { "hz", HZ }, - { "ident", IDENT }, + { "board", BOARD }, { "ldscript", LDSCRIPT }, - { "machine", MACHINE }, + { "architecture", ARCHITECTURE }, { "major", MAJOR }, { "makeoptions", MAKEOPTIONS }, - { "master", MASTER }, { "maxusers", MAXUSERS }, { "minor", MINOR }, { "on", ON }, { "options", OPTIONS }, + { "pin", PINS }, + { "pins", PINS }, { "priority", PRIORITY }, - { "pseudo-device", PSEUDO_DEVICE }, { "root", ROOT }, { "sequential", SEQUENTIAL }, + { "service", SERVICE }, { "size", SIZE }, - { "slave", SLAVE }, { "swap", SWAP }, { "tape", DEVICE }, { "timezone", TIMEZONE }, @@ -105,7 +103,14 @@ kw_lookup(word) } %} WORD [A-Za-z_][-A-Za-z_]* +PIN R[A-Z][0-9][0-9]* %% +{PIN} { + /* Pin name from RA0 to RZ255. */ + yylval.val = atoi(yytext + 2) & 0xff; + yylval.val |= (yytext[1] - 'A' + 1) << 8; + return PIN; + } {WORD} { int i; @@ -139,7 +144,6 @@ WORD [A-Za-z_][-A-Za-z_]* return NUMBER; } [0-9]"."[0-9]* { - double atof(); yylval.val = (int) (60 * atof(yytext) + 0.5); return FPNUMBER; } diff --git a/tools/kconfig/main.c b/tools/kconfig/main.c index ee5d6c5..9e9465a 100644 --- a/tools/kconfig/main.c +++ b/tools/kconfig/main.c @@ -48,14 +48,11 @@ int main(argc, argv) { int ch; - while ((ch = getopt(argc, argv, "gp")) != EOF) + while ((ch = getopt(argc, argv, "g")) != EOF) switch (ch) { case 'g': debugging++; break; - case 'p': - profiling++; - break; case '?': default: goto usage; @@ -79,20 +76,18 @@ usage: fputs("usage: kconfig [-gp] sysname\n", stderr); if (yyparse()) exit(3); - switch (machine) { + switch (arch) { - case MACHINE_PIC32: + case ARCH_PIC32: pic32_ioconf(); break; default: - printf("Specify machine type, e.g. ``machine pic32''\n"); + printf("Specify architecture, e.g. ``architecture pic32''\n"); exit(1); } makefile(); /* build Makefile */ - headers(); /* make a lot of .h files */ swapconf(); /* swap config files */ - printf("Don't forget to run \"make depend\"\n"); exit(0); } diff --git a/tools/kconfig/mkheaders.c b/tools/kconfig/mkheaders.c deleted file mode 100644 index 76eec47..0000000 --- a/tools/kconfig/mkheaders.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 1980, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Make all the .h files for the optional entries - */ -#include -#include "config.h" -#include "y.tab.h" - -void do_header(dev, hname, count) - char *dev, *hname; - int count; -{ - char *file, *name, *inw, *toheader(), *tomacro(); - struct file_list *fl, *fl_head, *tflp; - FILE *inf, *outf; - int inc, oldcount; - - file = toheader(hname); - name = tomacro(dev); - inf = fopen(file, "r"); - oldcount = -1; - if (inf == 0) { - outf = fopen(file, "w"); - if (outf == 0) { - perror(file); - exit(1); - } - fprintf(outf, "#define %s %d\n", name, count); - (void) fclose(outf); - return; - } - fl_head = NULL; - for (;;) { - char *cp; - if ((inw = get_word(inf)) == 0 || inw == (char *)EOF) - break; - if ((inw = get_word(inf)) == 0 || inw == (char *)EOF) - break; - inw = strdup(inw); - cp = get_word(inf); - if (cp == 0 || cp == (char *)EOF) - break; - inc = atoi(cp); - if (eq(inw, name)) { - oldcount = inc; - inc = count; - } - cp = get_word(inf); - if (cp == (char *)EOF) - break; - fl = (struct file_list *) malloc(sizeof *fl); - bzero(fl, sizeof(*fl)); - fl->f_fn = inw; - fl->f_type = inc; - fl->f_next = fl_head; - fl_head = fl; - } - (void) fclose(inf); - if (count == oldcount) { - for (fl = fl_head; fl != NULL; fl = tflp) { - tflp = fl->f_next; - free(fl); - } - return; - } - if (oldcount == -1) { - fl = (struct file_list *) malloc(sizeof *fl); - bzero(fl, sizeof(*fl)); - fl->f_fn = name; - fl->f_type = count; - fl->f_next = fl_head; - fl_head = fl; - } - outf = fopen(file, "w"); - if (outf == 0) { - perror(file); - exit(1); - } - for (fl = fl_head; fl != NULL; fl = tflp) { - fprintf(outf, - "#define %s %u\n", fl->f_fn, count ? fl->f_type : 0); - tflp = fl->f_next; - free(fl); - } - (void) fclose(outf); -} - -/* - * count all the devices of a certain type and recurse to count - * whatever the device is connected to - */ -void do_count(dev, hname, search) - register char *dev, *hname; - int search; -{ - register struct device *dp, *mp; - register int count, hicount; - - /* - * After this loop, "count" will be the actual number of units, - * and "hicount" will be the highest unit declared. do_header() - * must use this higher of these values. - */ - for (hicount = count = 0, dp = dtab; dp != 0; dp = dp->d_next) - if (dp->d_unit != -1 && eq(dp->d_name, dev)) { - if (dp->d_type == PSEUDO_DEVICE) { - count = - dp->d_slave != UNKNOWN ? dp->d_slave : 1; - break; - } - count++; - /* - * Allow holes in unit numbering, - * assumption is unit numbering starts - * at zero. - */ - if (dp->d_unit + 1 > hicount) - hicount = dp->d_unit + 1; - if (search) { - mp = dp->d_conn; - if (mp != 0 && mp->d_conn != 0) { - do_count(mp->d_name, hname, 0); - search = 0; - } - } - } - do_header(dev, hname, count > hicount ? count : hicount); -} - -void headers() -{ - register struct file_list *fl; - - for (fl = ftab; fl != 0; fl = fl->f_next) - if (fl->f_needs != 0) - do_count(fl->f_needs, fl->f_needs, 1); -} - -/* - * convert a dev name to a .h file name - */ -char * -toheader(dev) - char *dev; -{ - static char hbuf[80]; - - (void) strcpy(hbuf, dev); - (void) strcat(hbuf, ".h"); - return (hbuf); -} - -/* - * convert a dev name to a macro name - */ -char *tomacro(dev) - register char *dev; -{ - static char mbuf[20]; - register char *cp; - - cp = mbuf; - *cp++ = 'N'; - while (*dev) - *cp++ = islower(*dev) ? toupper(*dev++) : *dev++; - *cp++ = 0; - return (mbuf); -} diff --git a/tools/kconfig/mkioconf.c b/tools/kconfig/mkioconf.c index c01ec62..49acc99 100644 --- a/tools/kconfig/mkioconf.c +++ b/tools/kconfig/mkioconf.c @@ -37,19 +37,19 @@ * build the ioconf.c file */ static void -pseudo_ioconf(fp) +service_ioconf(fp) register FILE *fp; { register struct device *dp; for (dp = dtab; dp != NULL; dp = dp->d_next) - if (dp->d_type == PSEUDO_DEVICE) + if (dp->d_type == SERVICE) fprintf(fp, "extern void %sattach __P((int));\n", dp->d_name); - fprintf(fp, "\nstruct conf_pdev conf_pdinit[] = {\n"); + fprintf(fp, "\nstruct conf_pdev conf_sinit[] = {\n"); for (dp = dtab; dp != NULL; dp = dp->d_next) - if (dp->d_type == PSEUDO_DEVICE) + if (dp->d_type == SERVICE) fprintf(fp, " { %sattach, %d },\n", dp->d_name, dp->d_slave > 0 ? dp->d_slave : 1); @@ -65,11 +65,12 @@ wnum(num) return (errbuf); } -#if MACHINE_PIC32 +#if ARCH_PIC32 void pic32_ioconf() { register struct device *dp, *mp; FILE *fp; + int i; fp = fopen("ioconf.c", "w"); if (fp == 0) { @@ -83,17 +84,17 @@ void pic32_ioconf() /* print controller initialization structures */ for (dp = dtab; dp != 0; dp = dp->d_next) { - if (dp->d_type == PSEUDO_DEVICE) + if (dp->d_type == SERVICE) continue; fprintf(fp, "extern struct driver %sdriver;\n", dp->d_name); } fprintf(fp, "\nstruct conf_ctlr conf_cinit[] = {\n"); fprintf(fp, " /* driver,\t\tunit,\taddr,\t\tpri,\tflags */\n"); for (dp = dtab; dp != 0; dp = dp->d_next) { - if (dp->d_type != CONTROLLER && dp->d_type != MASTER) + if (dp->d_type != CONTROLLER) continue; - if (dp->d_drive != UNKNOWN || dp->d_slave != UNKNOWN) { - printf("can't specify drive/slave for %s%s\n", + if (dp->d_drive != UNKNOWN) { + printf("can't specify drive for %s%s\n", dp->d_name, wnum(dp->d_unit)); continue; } @@ -109,10 +110,9 @@ void pic32_ioconf() /* print devices connected to other controllers */ fprintf(fp, "\nstruct conf_device conf_dinit[] = {\n"); fprintf(fp, - " /* driver,\t\tctlr driver,\tunit,\tctlr,\tdrive,\tslave,\tdk,\tflags */\n"); + " /* driver,\t\tctlr driver,\tunit,\tctlr,\tdrive,\tflags,\tpins */\n"); for (dp = dtab; dp != 0; dp = dp->d_next) { - if (dp->d_type == CONTROLLER || dp->d_type == MASTER || - dp->d_type == PSEUDO_DEVICE) + if (dp->d_type == CONTROLLER || dp->d_type == SERVICE) continue; mp = dp->d_conn; @@ -121,14 +121,29 @@ void pic32_ioconf() fprintf(fp, "&%sdriver,\t%d,\t%d,\t", mp->d_name, dp->d_unit, mp->d_unit); } else { - fprintf(fp, "0,\t\t%d,\t0,\t", - dp->d_unit); + fprintf(fp, "0,\t\t%d,\t0,\t", dp->d_unit); } - fprintf(fp, "%d,\t%d,\t%d,\t0x%x },\n", - dp->d_drive, dp->d_slave, dp->d_dk, dp->d_flags); + fprintf(fp, "%d,\t0x%x,\t", dp->d_drive, dp->d_flags); + if (dp->d_npins > 0) { + fprintf(fp, "{"); + for (i=dp->d_npins-1; i>=0; i--) { + int bit = dp->d_pins[i] & 0xff; + int port = dp->d_pins[i] >> 8; + if (bit > 15 || port < 1 || port > 7) { + printf("R%c%u: invalid pin name\n", 'A'+port-1, bit); + exit(1); + } + fprintf(fp, "0x%x%x", port, bit); + if (i > 0) + fprintf(fp, ","); + } + fprintf(fp, "}"); + } else + fprintf(fp, "{0}"); + fprintf(fp, " },\n"); } fprintf(fp, " { 0 }\n};\n"); - pseudo_ioconf(fp); + service_ioconf(fp); fclose(fp); } #endif diff --git a/tools/kconfig/mkmakefile.c b/tools/kconfig/mkmakefile.c index 88538e4..de6f0e6 100644 --- a/tools/kconfig/mkmakefile.c +++ b/tools/kconfig/mkmakefile.c @@ -34,7 +34,7 @@ /* * Build the makefile for the system, from * the information in the files files and the - * additional files for the machine being compiled to. + * additional files for the architecture being compiled to. */ #include #include "y.tab.h" @@ -108,15 +108,6 @@ new_fent() return (fp); } -static struct users { - int u_default; - int u_min; - int u_max; -} users[] = { - { 2, 1, 16 }, /* MACHINE_PIC32 */ -}; -#define NUSERS (sizeof (users) / sizeof (users[0])) - int opteq(cp, dp) char *cp, *dp; { @@ -147,7 +138,7 @@ void read_files() register struct opt *op; char *wd, *this, *needs, *special; char fname[32]; - int nreqs, first = 1, configdep, isdup, std, filetype; + int nreqs, first = 1, isdup, std, filetype; ftab = 0; (void) strcpy(fname, "../files.kconf"); @@ -158,15 +149,13 @@ void read_files() } next: /* - * filename [ standard | optional ] [ config-dependent ] - * [ dev* | profiling-routine ] [ device-driver] - * [ compile-with "compile rule" ] + * filename [ standard | optional ] [ dev* ] [ compile-with "compile rule" ] */ wd = get_word(fp); if (wd == (char *)EOF) { (void) fclose(fp); if (first == 1) { - (void) sprintf(fname, "files.%s", raise(ident)); + (void) sprintf(fname, "files.%s", raise(board)); first++; fp = fopen(fname, "r"); if (fp != 0) @@ -193,7 +182,6 @@ next: fname, this, tp->f_fn); nreqs = 0; special = 0; - configdep = 0; needs = 0; std = 0; filetype = NORMAL; @@ -207,10 +195,6 @@ nextparam: next_word(fp, wd); if (wd == 0) goto doneparam; - if (eq(wd, "config-dependent")) { - configdep++; - goto nextparam; - } if (eq(wd, "compile-with")) { next_quoted_word(fp, wd); if (wd == 0) { @@ -222,21 +206,13 @@ nextparam: goto nextparam; } nreqs++; - if (eq(wd, "device-driver")) { - filetype = DRIVER; - goto nextparam; - } - if (eq(wd, "profiling-routine")) { - filetype = PROFILING; - goto nextparam; - } if (needs == 0 && nreqs == 1) needs = strdup(wd); if (isdup) goto invis; for (dp = dtab; dp != 0; save_dp = dp, dp = dp->d_next) if (eq(dp->d_name, wd)) { - if (std && dp->d_type == PSEUDO_DEVICE && + if (std && dp->d_type == SERVICE && dp->d_slave <= 0) dp->d_slave = 1; goto nextparam; @@ -245,7 +221,7 @@ nextparam: dp = (struct device *) malloc(sizeof *dp); init_dev(dp); dp->d_name = strdup(wd); - dp->d_type = PSEUDO_DEVICE; + dp->d_type = SERVICE; dp->d_slave = 1; if (save_dp) save_dp->d_next = dp; @@ -283,15 +259,11 @@ doneparam: fname, this); exit(1); } - if (filetype == PROFILING && profiling == 0) - goto next; if (tp == 0) tp = new_fent(); tp->f_fn = this; tp->f_type = filetype; tp->f_flags = 0; - if (configdep) - tp->f_flags |= CONFIGDEP; tp->f_needs = needs; tp->f_special = special; if (pf && pf->f_type == INVISIBLE) @@ -307,7 +279,7 @@ void do_objs(fp) register char *cp, och, *sp; char swapname[32]; - fprintf(fp, "OBJS="); + fprintf(fp, "OBJS = "); lpos = 6; for (tp = ftab; tp != 0; tp = tp->f_next) { if (tp->f_type == INVISIBLE) @@ -344,7 +316,7 @@ void do_cfiles(fp) register int lpos, len; char swapname[32]; - fputs("CFILES=", fp); + fputs("CFILES = ", fp); lpos = 8; for (tp = ftab; tp; tp = tp->f_next) if (tp->f_type != INVISIBLE) { @@ -367,7 +339,7 @@ void do_cfiles(fp) } if (eq(fl->f_fn, "generic")) fprintf(fp, "$A/%s/%s ", - machinename, swapname); + archname, swapname); else fprintf(fp, "%s ", swapname); lpos += len + 1; @@ -400,31 +372,8 @@ void do_rules(f) fprintf(f, "%so: $S/%s%c\n", tail(np), np, och); special = ftp->f_special; if (special == 0) { - char *ftype; static char cmd[128]; - - switch (ftp->f_type) { - - case NORMAL: - ftype = "NORMAL"; - break; - - case DRIVER: - ftype = "DRIVER"; - break; - - case PROFILING: - if (!profiling) - continue; - ftype = "PROFILE"; - break; - - default: - printf("config: don't know rules for %s\n", np); - break; - } - (void)sprintf(cmd, "${%s_%c%s}", ftype, toupper(och), - ftp->f_flags & CONFIGDEP? "_C" : ""); + sprintf(cmd, "${COMPILE_%c}", toupper(och)); special = cmd; } *cp = och; @@ -448,7 +397,7 @@ void do_load(f) fputs("all:", f); for (fl = conf_list; fl; fl = fl->f_next) if (fl->f_type == SYSTEMSPEC) - fprintf(f, " %s.elf", fl->f_needs); + fprintf(f, " %s", fl->f_needs); putc('\n', f); } @@ -460,11 +409,12 @@ void makefile() FILE *ifp, *ofp; char line[BUFSIZ]; struct opt *op; - struct users *up; + struct cputype *cp; + struct device *dp; read_files(); strcpy(line, "../Makefile.kconf"); - //(void) strcat(line, machinename); + //strcat(line, archname); ifp = fopen(line, "r"); if (ifp == 0) { perror(line); @@ -475,51 +425,42 @@ void makefile() perror("Makefile"); exit(1); } - fprintf(ofp, "IDENT=-D%s", raise(ident)); - if (profiling) - fprintf(ofp, " -DGPROF"); + fprintf(ofp, "PARAM = -D%s\n", raise(board)); if (cputype == 0) { printf("cpu type must be specified\n"); exit(1); } - { struct cputype *cp; - for (cp = cputype; cp; cp = cp->cpu_next) - fprintf(ofp, " -D%s", cp->cpu_name); + for (cp = cputype; cp; cp = cp->cpu_next) { + fprintf(ofp, "PARAM += -D%s\n", cp->cpu_name); } - for (op = opt; op; op = op->op_next) - if (op->op_value) - fprintf(ofp, " -D%s=\"%s\"", op->op_name, op->op_value); + for (dp = dtab; dp != 0; dp = dp->d_next) { + if (dp->d_unit <= 0) + fprintf(ofp, "PARAM += -D%s_ENABLED\n", raise(dp->d_name)); else - fprintf(ofp, " -D%s", op->op_name); - fprintf(ofp, "\n"); + fprintf(ofp, "PARAM += -D%s%d_ENABLED\n", raise(dp->d_name), dp->d_unit); + } + for (op = opt; op; op = op->op_next) { + if (op->op_value) + fprintf(ofp, "PARAM += -D%s=\"%s\"\n", op->op_name, op->op_value); + else + fprintf(ofp, "PARAM += -D%s\n", op->op_name); + } + if (hadtz) { + fprintf(ofp, "PARAM += -DTIMEZONE=%d\n", zone); + fprintf(ofp, "PARAM += -DDST=%d\n", dst); + } + if (maxusers > 0) + fprintf(ofp, "PARAM += -DMAXUSERS=%d\n", maxusers); + if (ldscript) - fprintf(ofp, "LDSCRIPT=\"%s\"\n", ldscript); - if (hadtz == 0) - printf("timezone not specified; gmt assumed\n"); - if ((unsigned)machine > NUSERS) { - printf("maxusers config info isn't present, using pic32\n"); - up = &users[MACHINE_PIC32-1]; - } else - up = &users[machine-1]; - if (maxusers == 0) { - printf("maxusers not specified; %d assumed\n", up->u_default); - maxusers = up->u_default; - } else if (maxusers < up->u_min) { - printf("minimum of %d maxusers assumed\n", up->u_min); - maxusers = up->u_min; - } else if (maxusers > up->u_max) - printf("warning: maxusers > %d (%d)\n", up->u_max, maxusers); - fprintf(ofp, "PARAM=-DTIMEZONE=%d -DDST=%d -DMAXUSERS=%d", - zone, dst, maxusers); - if (hz > 0) - fprintf(ofp, " -DHZ=%d", hz); - fprintf(ofp, "\n"); + fprintf(ofp, "LDSCRIPT = \"%s\"\n", ldscript); + for (op = mkopt; op; op = op->op_next) - fprintf(ofp, "%s=%s\n", op->op_name, op->op_value); + fprintf(ofp, "%s = %s\n", op->op_name, op->op_value); + if (debugging) - fprintf(ofp, "DEBUG=-g\n"); - if (profiling) - fprintf(ofp, "PROF=-pg\n"); + fprintf(ofp, "DEBUG = -g\n"); + while (fgets(line, BUFSIZ, ifp) != 0) { if (*line != '%') { fprintf(ofp, "%s", line); @@ -562,9 +503,8 @@ void do_swapspec(f, name) if (!eq(name, "generic")) fprintf(f, "swap%s.o: swap%s.c\n", name, name); else - fprintf(f, "swapgeneric.o: $A/%s/swapgeneric.c\n", - machinename); - fprintf(f, "\t${NORMAL_C}\n\n"); + fprintf(f, "swapgeneric.o: $A/%s/swapgeneric.c\n", archname); + fprintf(f, "\t${COMPILE_C}\n\n"); } struct file_list * @@ -573,6 +513,7 @@ do_systemspec(f, fl, first) register struct file_list *fl; int first; { + fprintf(f, "%s: %s.elf\n\n", fl->f_needs, fl->f_needs); fprintf(f, "%s.elf: ${SYSTEM_DEP} swap%s.o", fl->f_needs, fl->f_fn); // Don't use newvers target. @@ -589,16 +530,20 @@ do_systemspec(f, fl, first) return (fl); } +/* + * Convert a name to uppercase. + * Return a pointer to a static buffer. + */ char * raise(str) register char *str; { - register char *cp = str; + static char buf[100]; + register char *cp = buf; while (*str) { - if (islower(*str)) - *str = toupper(*str); - str++; + *cp++ = islower(*str) ? toupper(*str++) : *str++; } - return (cp); + *cp = 0; + return buf; } diff --git a/tools/kconfig/mkswapconf.c b/tools/kconfig/mkswapconf.c index e680528..d93e302 100644 --- a/tools/kconfig/mkswapconf.c +++ b/tools/kconfig/mkswapconf.c @@ -61,7 +61,6 @@ do_swap(fl) FILE *fp; char swapname[80]; register struct file_list *swap; - dev_t dev; if (eq(fl->f_fn, "generic")) { fl = fl->f_next; @@ -93,10 +92,16 @@ do_swap(fl) fprintf(fp, "dev_t\tdumpdev = makedev(%d, %d);\t/* %s */\n", major(fl->f_dumpdev), minor(fl->f_dumpdev), devtoname(fl->f_dumpdev)); +#if 1 + /* Only one swap device is supported. */ + fprintf(fp, "dev_t\tswapdev = makedev(%d, %d);\t/* %s */\n", + major(swap->f_swapdev), minor(swap->f_swapdev), + devtoname(swap->f_swapdev)); +#else fprintf(fp, "\n"); fprintf(fp, "struct\tswdevt swdevt[] = {\n"); do { - dev = swap->f_swapdev; + int dev = swap->f_swapdev; fprintf(fp, "\t{ makedev(%d, %d), %d, %d },\t/* %s */\n", major(dev), minor(dev), swap->f_swapflag, swap->f_swapsize, swap->f_fn); @@ -104,6 +109,7 @@ do_swap(fl) } while (swap && swap->f_type == SWAPSPEC); fprintf(fp, "\t{ NODEV, 0, 0 }\n"); fprintf(fp, "};\n"); +#endif fclose(fp); return (swap); }