summaryrefslogtreecommitdiff
path: root/emulators/qemu-devel/files/patch-vl.c-ppbus
diff options
context:
space:
mode:
authorShaun Amott <shaun@FreeBSD.org>2006-08-21 23:02:01 +0000
committerShaun Amott <shaun@FreeBSD.org>2006-08-21 23:02:01 +0000
commitdaf9bed6c4571dbe6481411363257bb1d3655830 (patch)
tree00a8ba4f2cb05c72f7f5e74220c430131298e3b7 /emulators/qemu-devel/files/patch-vl.c-ppbus
parentUpdates to 0.9. This release introduces multitag viewing. (diff)
- Fix build on 4.x [1]
- Respect CFLAGS [2] - Support parallel port under FreeBSD [3] PR: ports/102154 [1], ports/102188 [2] Submitted by: Juergen Lock <nox@jelal.kn-bremen.de> [1], Stanislav Sedov <ssedov@mbsd.msk.ru> [2], Robert Jenssen (via freebsd-ports) [3] Approved by: Juergen Lock <nox@jelal.kn-bremen.de> (maintainer) [2] [3]
Notes
Notes: svn path=/head/; revision=171135
Diffstat (limited to 'emulators/qemu-devel/files/patch-vl.c-ppbus')
-rw-r--r--emulators/qemu-devel/files/patch-vl.c-ppbus92
1 files changed, 92 insertions, 0 deletions
diff --git a/emulators/qemu-devel/files/patch-vl.c-ppbus b/emulators/qemu-devel/files/patch-vl.c-ppbus
new file mode 100644
index 000000000000..fc06147d8f5a
--- /dev/null
+++ b/emulators/qemu-devel/files/patch-vl.c-ppbus
@@ -0,0 +1,92 @@
+--- vl.c.orig Mon Aug 21 23:06:11 2006
++++ vl.c Mon Aug 21 23:04:49 2006
+@@ -48,6 +48,8 @@
+ #endif
+ #ifdef __FreeBSD__
+ #include <sys/module.h>
++#include <dev/ppbus/ppi.h>
++#include <dev/ppbus/ppbconf.h>
+ #endif
+ #else
+ #ifndef __sun__
+@@ -1728,7 +1730,65 @@
+ chr->chr_ioctl = pp_ioctl;
+ return chr;
+ }
+-#endif /* defined(__linux__) */
++#elif defined(__FreeBSD__)
++static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
++{
++ int fd = (int)chr->opaque;
++ uint8_t b;
++
++ switch(cmd) {
++ case CHR_IOCTL_PP_READ_DATA:
++ if (ioctl(fd, PPIGDATA, &b) < 0)
++ return -ENOTSUP;
++ *(uint8_t *)arg = b;
++ break;
++ case CHR_IOCTL_PP_WRITE_DATA:
++ b = *(uint8_t *)arg;
++ if (ioctl(fd, PPISDATA, &b) < 0)
++ return -ENOTSUP;
++ break;
++ case CHR_IOCTL_PP_READ_CONTROL:
++ if (ioctl(fd, PPIGCTRL, &b) < 0)
++ return -ENOTSUP;
++ *(uint8_t *)arg = b;
++ break;
++ case CHR_IOCTL_PP_WRITE_CONTROL:
++ b = *(uint8_t *)arg;
++ if (ioctl(fd, PPISCTRL, &b) < 0)
++ return -ENOTSUP;
++ break;
++ case CHR_IOCTL_PP_READ_STATUS:
++ if (ioctl(fd, PPIGSTATUS, &b) < 0)
++ return -ENOTSUP;
++ *(uint8_t *)arg = b;
++ break;
++ default:
++ return -ENOTSUP;
++ }
++ return 0;
++}
++
++CharDriverState *qemu_chr_open_pp(const char *filename)
++{
++ CharDriverState *chr;
++ int fd;
++
++ fd = open(filename, O_RDWR);
++ if (fd < 0)
++ return NULL;
++
++ chr = qemu_mallocz(sizeof(CharDriverState));
++ if (!chr) {
++ close(fd);
++ return NULL;
++ }
++ chr->opaque = (void *)fd;
++ chr->chr_write = null_chr_write;
++ chr->chr_add_read_handler = null_chr_add_read_handler;
++ chr->chr_ioctl = pp_ioctl;
++ return chr;
++}
++#endif
+
+ #else
+ CharDriverState *qemu_chr_open_pty(void)
+@@ -2562,6 +2622,13 @@
+ #endif
+ #if defined(__linux__)
+ if (strstart(filename, "/dev/parport", NULL)) {
++ return qemu_chr_open_pp(filename);
++ } else
++ if (strstart(filename, "/dev/", NULL)) {
++ return qemu_chr_open_tty(filename);
++ } else
++#elif defined(__FreeBSD__)
++ if (strstart(filename, "/dev/ppi", NULL)) {
+ return qemu_chr_open_pp(filename);
+ } else
+ if (strstart(filename, "/dev/", NULL)) {