char dev ioctls
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 10 Nov 2005 23:58:33 +0000 (23:58 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 10 Nov 2005 23:58:33 +0000 (23:58 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1610 c046a42c-6fe2-441c-8c8c-71466251a162

hw/serial.c
vl.h

index 75be4de..0250d77 100644 (file)
@@ -107,6 +107,7 @@ static void serial_update_irq(SerialState *s)
 static void serial_update_parameters(SerialState *s)
 {
     int speed, parity, data_bits, stop_bits;
+    QEMUSerialSetParams ssp;
 
     if (s->lcr & 0x08) {
         if (s->lcr & 0x10)
@@ -124,7 +125,12 @@ static void serial_update_parameters(SerialState *s)
     if (s->divider == 0)
         return;
     speed = 115200 / s->divider;
-#if 0    
+    ssp.speed = speed;
+    ssp.parity = parity;
+    ssp.data_bits = data_bits;
+    ssp.stop_bits = stop_bits;
+    qemu_chr_ioctl(s->chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
+#if 0
     printf("speed=%d parity=%c data=%d stop=%d\n", 
            speed, parity, data_bits, stop_bits);
 #endif
@@ -179,7 +185,8 @@ static void serial_ioport_write(void *opaque, uint32_t addr, uint32_t val)
             break_enable = (val >> 6) & 1;
             if (break_enable != s->last_break_enable) {
                 s->last_break_enable = break_enable;
-                qemu_chr_set_serial_break(s, break_enable);
+                qemu_chr_ioctl(s->chr, CHR_IOCTL_SERIAL_SET_BREAK, 
+                               &break_enable);
             }
         }
         break;
diff --git a/vl.h b/vl.h
index 40de851..574ec3e 100644 (file)
--- a/vl.h
+++ b/vl.h
@@ -200,6 +200,24 @@ void qemu_del_fd_read_handler(int fd);
 #define CHR_EVENT_BREAK 0 /* serial break char */
 #define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */
 
+
+
+#define CHR_IOCTL_SERIAL_SET_PARAMS   1
+typedef struct {
+    int speed;
+    int parity;
+    int data_bits;
+    int stop_bits;
+} QEMUSerialSetParams;
+
+#define CHR_IOCTL_SERIAL_SET_BREAK    2
+
+#define CHR_IOCTL_PP_READ_DATA        3
+#define CHR_IOCTL_PP_WRITE_DATA       4
+#define CHR_IOCTL_PP_READ_CONTROL     5
+#define CHR_IOCTL_PP_WRITE_CONTROL    6
+#define CHR_IOCTL_PP_READ_STATUS      7
+
 typedef void IOEventHandler(void *opaque, int event);
 
 typedef struct CharDriverState {
@@ -207,10 +225,7 @@ typedef struct CharDriverState {
     void (*chr_add_read_handler)(struct CharDriverState *s, 
                                  IOCanRWHandler *fd_can_read, 
                                  IOReadHandler *fd_read, void *opaque);
-    void (*chr_set_serial_parameters)(struct CharDriverState *s,
-                                      int speed, int parity,
-                                      int data_bits, int stop_bits);
-    void (*chr_set_serial_break)(struct CharDriverState *s, int enable);
+    int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
     IOEventHandler *chr_event;
     void (*chr_send_event)(struct CharDriverState *chr, int event);
     void *opaque;
@@ -223,10 +238,7 @@ void qemu_chr_add_read_handler(CharDriverState *s,
                                IOCanRWHandler *fd_can_read, 
                                IOReadHandler *fd_read, void *opaque);
 void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event);
-void qemu_chr_set_serial_parameters(CharDriverState *s,
-                                    int speed, int parity,
-                                    int data_bits, int stop_bits);
-void qemu_chr_set_serial_break(CharDriverState *s, int enable);
+int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
 
 /* consoles */