diff -r c84db039be86 -r 6615dd4045c7 extras/mini-os/blkfront.c --- a/extras/mini-os/blkfront.c Tue Jul 20 15:42:37 2010 -0400 +++ b/extras/mini-os/blkfront.c Tue Jul 20 16:19:10 2010 -0400 @@ -1,3 +1,4 @@ +#ifndef NO_BLKFRONT /* Minimal block driver for Mini-OS. * Copyright (c) 2007-2008 Samuel Thibault. * Based on netfront.c. @@ -552,3 +553,4 @@ return dev->fd; } #endif +#endif diff -r c84db039be86 -r 6615dd4045c7 extras/mini-os/fbfront.c --- a/extras/mini-os/fbfront.c Tue Jul 20 15:42:37 2010 -0400 +++ b/extras/mini-os/fbfront.c Tue Jul 20 16:19:10 2010 -0400 @@ -1,3 +1,4 @@ +#ifndef NO_FBFRONT /* * Frame Buffer + Keyboard driver for Mini-OS. * Samuel Thibault , 2008 @@ -694,4 +695,4 @@ return dev->fd; } #endif - +#endif diff -r c84db039be86 -r 6615dd4045c7 extras/mini-os/fs-front.c --- a/extras/mini-os/fs-front.c Tue Jul 20 15:42:37 2010 -0400 +++ b/extras/mini-os/fs-front.c Tue Jul 20 16:19:10 2010 -0400 @@ -1,3 +1,4 @@ +#ifndef NO_FSFRONT /****************************************************************************** * fs-front.c * @@ -1295,3 +1296,4 @@ } /* TODO: shutdown */ +#endif diff -r c84db039be86 -r 6615dd4045c7 extras/mini-os/kernel.c --- a/extras/mini-os/kernel.c Tue Jul 20 15:42:37 2010 -0400 +++ b/extras/mini-os/kernel.c Tue Jul 20 16:19:10 2010 -0400 @@ -37,17 +37,27 @@ #include #include #include +#ifndef NO_NETFRONT #include +#endif +#ifndef NO_BLKFRONT #include +#endif +#ifndef NO_FBFRONT #include +#endif +#ifndef NO_PCIFRONT #include +#endif #include #include #include #include #include +#ifndef NO_NETFRONT static struct netfront_dev *net_dev; +#endif uint8_t xen_features[XENFEAT_NR_SUBMAPS * 32]; @@ -87,11 +97,14 @@ } } +#ifndef NO_NETFRONT static void netfront_thread(void *p) { net_dev = init_netfront(NULL, NULL, NULL, NULL); } +#endif +#ifndef NO_BLKFRONT static struct blkfront_dev *blk_dev; static struct blkfront_info blk_info; static uint64_t blk_size_read; @@ -256,7 +269,9 @@ #endif } } +#endif +#ifndef NO_FBFRONT #define WIDTH 800 #define HEIGHT 600 #define DEPTH 32 @@ -432,7 +447,9 @@ schedule(); } } +#endif +#ifndef NO_PCIFRONT static struct pcifront_dev *pci_dev; static void print_pcidev(unsigned int domain, unsigned int bus, unsigned int slot, unsigned int fun) @@ -455,11 +472,14 @@ printk("PCI devices:\n"); pcifront_scan(pci_dev, print_pcidev); } +#endif +#ifndef NO_FSFRONT static void fs_thread(void *p) { init_fs_frontend(); } +#endif /* This should be overridden by the application we are linked against. */ __attribute__((weak)) int app_main(start_info_t *si) @@ -467,12 +487,22 @@ printk("Dummy main: start_info=%p\n", si); create_thread("xenbus_tester", xenbus_tester, si); create_thread("periodic_thread", periodic_thread, si); +#ifndef NO_NETFRONT create_thread("netfront", netfront_thread, si); +#endif +#ifndef NO_BLKFRONT create_thread("blkfront", blkfront_thread, si); +#endif +#ifndef NO_FBFRONT create_thread("fbfront", fbfront_thread, si); create_thread("kbdfront", kbdfront_thread, si); +#endif +#ifndef NO_PCIFRONT create_thread("pcifront", pcifront_thread, si); +#endif +#ifndef NO_FSFRONT create_thread("fs-frontend", fs_thread, si); +#endif return 0; } @@ -540,22 +570,32 @@ void stop_kernel(void) { +#ifndef NO_NETFRONT if (net_dev) shutdown_netfront(net_dev); +#endif +#ifndef NO_BLKFRONT if (blk_dev) shutdown_blkfront(blk_dev); +#endif +#ifndef NO_FBFRONT if (fb_dev) shutdown_fbfront(fb_dev); if (kbd_dev) shutdown_kbdfront(kbd_dev); +#endif +#ifndef NO_PCIFRONT if (pci_dev) shutdown_pcifront(pci_dev); +#endif +#ifndef NO_FSFRONT /* TODO: fs import */ +#endif local_irq_disable(); diff -r c84db039be86 -r 6615dd4045c7 extras/mini-os/lib/sys.c --- a/extras/mini-os/lib/sys.c Tue Jul 20 15:42:37 2010 -0400 +++ b/extras/mini-os/lib/sys.c Tue Jul 20 16:19:10 2010 -0400 @@ -24,9 +24,15 @@ #include #include #include +#ifndef NO_NETFRONT #include +#endif +#ifndef NO_BLKFRONT #include +#endif +#ifndef NO_FBFRONT #include +#endif #include #include @@ -83,10 +89,12 @@ } #define NOFILE 32 +#ifndef NO_LIBXC extern int xc_evtchn_close(int fd); struct xc_interface; extern int xc_interface_close_core(struct xc_interface*, int fd); extern int xc_gnttab_close(int fd); +#endif pthread_mutex_t fd_lock = PTHREAD_MUTEX_INITIALIZER; struct file files[NOFILE] = { @@ -159,6 +167,7 @@ int mkdir(const char *pathname, mode_t mode) { +#ifndef NO_FSFRONT int ret; ret = fs_create(fs_import, (char *) pathname, 1, mode); if (ret < 0) { @@ -166,6 +175,10 @@ return -1; } return 0; +#else + errno = ENOSYS; + return -1; +#endif } int posix_openpt(int flags) @@ -198,6 +211,7 @@ } if (!strncmp(pathname, "/dev/ptmx", strlen("/dev/ptmx"))) return posix_openpt(flags); +#ifndef NO_FSFRONT printk("open(%s, %x)", pathname, flags); switch (flags & ~O_ACCMODE) { case 0: @@ -226,6 +240,10 @@ files[fd].file.fd = fs_fd; files[fd].file.offset = 0; return fd; +#else + errno = EIO; + return -1; +#endif } int isatty(int fd) @@ -249,6 +267,7 @@ remove_waiter(w); return ret; } +#ifndef NO_FSFRONT case FTYPE_FILE: { ssize_t ret; if (nbytes > PAGE_SIZE * FSIF_NR_READ_GNTS) @@ -263,10 +282,12 @@ } return 0; } +#endif #ifdef HAVE_LWIP case FTYPE_SOCKET: return lwip_read(files[fd].socket.fd, buf, nbytes); #endif +#ifndef NO_NETFRONT case FTYPE_TAP: { ssize_t ret; ret = netfront_receive(files[fd].tap.dev, buf, nbytes); @@ -276,6 +297,8 @@ } return ret; } +#endif +#ifndef NO_FBFRONT case FTYPE_KBD: { int ret, n; n = nbytes / sizeof(union xenkbd_in_event); @@ -296,6 +319,7 @@ } return ret * sizeof(union xenfb_in_event); } +#endif default: break; } @@ -310,6 +334,7 @@ case FTYPE_CONSOLE: console_print(files[fd].cons.dev, (char *)buf, nbytes); return nbytes; +#ifndef NO_FSFRONT case FTYPE_FILE: { ssize_t ret; if (nbytes > PAGE_SIZE * FSIF_NR_WRITE_GNTS) @@ -324,13 +349,16 @@ } return 0; } +#endif #ifdef HAVE_LWIP case FTYPE_SOCKET: return lwip_write(files[fd].socket.fd, (void*) buf, nbytes); #endif +#ifndef NO_NETFRONT case FTYPE_TAP: netfront_xmit(files[fd].tap.dev, (void*) buf, nbytes); return nbytes; +#endif default: break; } @@ -370,6 +398,7 @@ int fsync(int fd) { switch (files[fd].type) { +#ifndef NO_FSFRONT case FTYPE_FILE: { int ret; ret = fs_sync(fs_import, files[fd].file.fd); @@ -379,6 +408,7 @@ } return 0; } +#endif default: break; } @@ -394,6 +424,7 @@ default: files[fd].type = FTYPE_NONE; return 0; +#ifndef NO_FSFRONT case FTYPE_FILE: { int ret = fs_close(fs_import, files[fd].file.fd); files[fd].type = FTYPE_NONE; @@ -403,6 +434,7 @@ } return 0; } +#endif case FTYPE_XENBUS: xs_daemon_close((void*)(intptr_t) fd); return 0; @@ -413,6 +445,7 @@ return res; } #endif +#ifndef NO_LIBXC case FTYPE_XC: xc_interface_close_core(0,fd); return 0; @@ -422,14 +455,20 @@ case FTYPE_GNTMAP: xc_gnttab_close(fd); return 0; +#endif +#ifndef NO_NETFRONT case FTYPE_TAP: shutdown_netfront(files[fd].tap.dev); files[fd].type = FTYPE_NONE; return 0; +#endif +#ifndef NO_BLKFRONT case FTYPE_BLK: shutdown_blkfront(files[fd].blk.dev); files[fd].type = FTYPE_NONE; return 0; +#endif +#ifndef NO_FBFRONT case FTYPE_KBD: shutdown_kbdfront(files[fd].kbd.dev); files[fd].type = FTYPE_NONE; @@ -442,6 +481,7 @@ fini_console(files[fd].cons.dev); files[fd].type = FTYPE_NONE; return 0; +#endif case FTYPE_NONE: break; } @@ -461,6 +501,7 @@ buf->st_blocks = 0; } +#ifndef NO_FSFRONT static void stat_from_fs(struct stat *buf, struct fsif_stat_response *stat) { buf->st_mode = stat->stat_mode; @@ -471,9 +512,11 @@ buf->st_mtime = stat->stat_mtime; buf->st_ctime = stat->stat_ctime; } +#endif int stat(const char *path, struct stat *buf) { +#ifndef NO_FSFRONT struct fsif_stat_response stat; int ret; int fs_fd; @@ -498,6 +541,10 @@ fs_close(fs_import, fs_fd); out: return ret; +#else + errno = ENOSYS; + return -1; +#endif } int fstat(int fd, struct stat *buf) @@ -515,6 +562,7 @@ buf->st_ctime = time(NULL); return 0; } +#ifndef NO_FSFRONT case FTYPE_FILE: { struct fsif_stat_response stat; int ret; @@ -527,6 +575,7 @@ stat_from_fs(buf, &stat); return 0; } +#endif default: break; } @@ -539,6 +588,7 @@ int ftruncate(int fd, off_t length) { switch (files[fd].type) { +#ifndef NO_FSFRONT case FTYPE_FILE: { int ret; ret = fs_truncate(fs_import, files[fd].file.fd, length); @@ -548,6 +598,7 @@ } return 0; } +#endif default: break; } @@ -559,6 +610,7 @@ int remove(const char *pathname) { +#ifndef NO_FSFRONT int ret; printk("remove(%s)", pathname); ret = fs_remove(fs_import, (char*) pathname); @@ -567,6 +619,10 @@ return -1; } return 0; +#else + errno = ENOSYS; + return -1; +#endif } int unlink(const char *pathname) @@ -606,6 +662,7 @@ DIR *opendir(const char *name) { +#ifndef NO_FSFRONT DIR *ret; ret = malloc(sizeof(*ret)); ret->name = strdup(name); @@ -615,10 +672,15 @@ ret->nbentries = 0; ret->has_more = 1; return ret; +#else + errno = ENOSYS; + return NULL; +#endif } struct dirent *readdir(DIR *dir) { +#ifndef NO_FSFRONT if (dir->curentry >= 0) { free(dir->entries[dir->curentry]); dir->entries[dir->curentry] = NULL; @@ -638,6 +700,10 @@ } dir->dirent.d_name = dir->entries[dir->curentry]; return &dir->dirent; +#else + errno = ENOSYS; + return NULL; +#endif } int closedir(DIR *dir) { @@ -754,11 +820,13 @@ if (FD_ISSET(i, readfds) || FD_ISSET(i, writefds) || FD_ISSET(i, exceptfds)) printk("bogus fd %d in select\n", i); /* Fallthrough. */ +#ifndef NO_FSFRONT case FTYPE_FILE: FD_CLR(i, readfds); FD_CLR(i, writefds); FD_CLR(i, exceptfds); break; +#endif case FTYPE_CONSOLE: if (FD_ISSET(i, readfds)) { if (xencons_ring_avail(files[i].cons.dev)) @@ -886,11 +954,17 @@ /* Tell people we're going to sleep before looking at what they are * saying, hence letting them wake us if events happen between here and * schedule() */ +#ifndef NO_NETFRONT add_waiter(w1, netfront_queue); +#endif add_waiter(w2, event_queue); +#ifndef NO_BLKFRONT add_waiter(w3, blkfront_queue); +#endif add_waiter(w4, xenbus_watch_queue); +#ifndef NO_FBFRONT add_waiter(w5, kbdfront_queue); +#endif add_waiter(w6, console_queue); if (readfds) diff -r c84db039be86 -r 6615dd4045c7 extras/mini-os/main.c --- a/extras/mini-os/main.c Tue Jul 20 15:42:37 2010 -0400 +++ b/extras/mini-os/main.c Tue Jul 20 16:19:10 2010 -0400 @@ -66,8 +66,10 @@ #if defined(HAVE_LWIP) && !defined(CONFIG_QEMU) start_networking(); #endif +#ifndef NO_FSFRONT init_fs_frontend(); #endif +#endif create_thread("pcifront", pcifront_watches, NULL); #ifdef CONFIG_QEMU diff -r c84db039be86 -r 6615dd4045c7 extras/mini-os/netfront.c --- a/extras/mini-os/netfront.c Tue Jul 20 15:42:37 2010 -0400 +++ b/extras/mini-os/netfront.c Tue Jul 20 16:19:10 2010 -0400 @@ -1,3 +1,4 @@ +#ifndef NO_NETFRONT /* Minimal network driver for Mini-OS. * Copyright (c) 2006-2007 Jacob Gorm Hansen, University of Copenhagen. * Based on netfront.c from Xen Linux. @@ -672,3 +673,4 @@ return dev->rlen; } #endif +#endif diff -r c84db039be86 -r 6615dd4045c7 extras/mini-os/pcifront.c --- a/extras/mini-os/pcifront.c Tue Jul 20 15:42:37 2010 -0400 +++ b/extras/mini-os/pcifront.c Tue Jul 20 16:19:10 2010 -0400 @@ -1,3 +1,4 @@ +#ifndef NO_PCIFRONT /* Minimal PCI driver for Mini-OS. * Copyright (c) 2007-2008 Samuel Thibault. * Based on blkfront.c. @@ -611,3 +612,4 @@ return op.err; } +#endif diff -r 22a23fed2920 -r bb97efd3e952 extras/mini-os/lib/sys.c --- a/extras/mini-os/lib/sys.c Tue Jul 20 16:38:40 2010 -0400 +++ b/extras/mini-os/lib/sys.c Tue Jul 20 17:08:50 2010 -0400 @@ -197,7 +197,10 @@ int open(const char *pathname, int flags, ...) { - int fs_fd, fd; +#ifndef NO_FSFRONT + int fs_fd; +#endif + int fd; /* Ugly, but fine. */ if (!strncmp(pathname,LOG_PATH,strlen(LOG_PATH))) { fd = alloc_fd(FTYPE_CONSOLE); diff -r 22a23fed2920 -r bb97efd3e952 extras/mini-os/main.c --- a/extras/mini-os/main.c Tue Jul 20 16:38:40 2010 -0400 +++ b/extras/mini-os/main.c Tue Jul 20 17:08:50 2010 -0400 @@ -8,8 +8,12 @@ #include #include #include +#ifndef NO_NETFRONT #include +#endif +#ifndef NO_PCIFRONT #include +#endif #include #include #include @@ -70,7 +74,9 @@ init_fs_frontend(); #endif #endif +#ifndef NO_PCIFRONT create_thread("pcifront", pcifront_watches, NULL); +#endif #ifdef CONFIG_QEMU /* Fetch argc, argv from XenStore */