Commit 2122c51a9c9d5935773d3a542248bd8f369b172c
1 parent
f8d179e3
char dev ioctls
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1610 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
29 additions
and
10 deletions
hw/serial.c
@@ -107,6 +107,7 @@ static void serial_update_irq(SerialState *s) | @@ -107,6 +107,7 @@ static void serial_update_irq(SerialState *s) | ||
107 | static void serial_update_parameters(SerialState *s) | 107 | static void serial_update_parameters(SerialState *s) |
108 | { | 108 | { |
109 | int speed, parity, data_bits, stop_bits; | 109 | int speed, parity, data_bits, stop_bits; |
110 | + QEMUSerialSetParams ssp; | ||
110 | 111 | ||
111 | if (s->lcr & 0x08) { | 112 | if (s->lcr & 0x08) { |
112 | if (s->lcr & 0x10) | 113 | if (s->lcr & 0x10) |
@@ -124,7 +125,12 @@ static void serial_update_parameters(SerialState *s) | @@ -124,7 +125,12 @@ static void serial_update_parameters(SerialState *s) | ||
124 | if (s->divider == 0) | 125 | if (s->divider == 0) |
125 | return; | 126 | return; |
126 | speed = 115200 / s->divider; | 127 | speed = 115200 / s->divider; |
127 | -#if 0 | 128 | + ssp.speed = speed; |
129 | + ssp.parity = parity; | ||
130 | + ssp.data_bits = data_bits; | ||
131 | + ssp.stop_bits = stop_bits; | ||
132 | + qemu_chr_ioctl(s->chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp); | ||
133 | +#if 0 | ||
128 | printf("speed=%d parity=%c data=%d stop=%d\n", | 134 | printf("speed=%d parity=%c data=%d stop=%d\n", |
129 | speed, parity, data_bits, stop_bits); | 135 | speed, parity, data_bits, stop_bits); |
130 | #endif | 136 | #endif |
@@ -179,7 +185,8 @@ static void serial_ioport_write(void *opaque, uint32_t addr, uint32_t val) | @@ -179,7 +185,8 @@ static void serial_ioport_write(void *opaque, uint32_t addr, uint32_t val) | ||
179 | break_enable = (val >> 6) & 1; | 185 | break_enable = (val >> 6) & 1; |
180 | if (break_enable != s->last_break_enable) { | 186 | if (break_enable != s->last_break_enable) { |
181 | s->last_break_enable = break_enable; | 187 | s->last_break_enable = break_enable; |
182 | - qemu_chr_set_serial_break(s, break_enable); | 188 | + qemu_chr_ioctl(s->chr, CHR_IOCTL_SERIAL_SET_BREAK, |
189 | + &break_enable); | ||
183 | } | 190 | } |
184 | } | 191 | } |
185 | break; | 192 | break; |
vl.h
@@ -200,6 +200,24 @@ void qemu_del_fd_read_handler(int fd); | @@ -200,6 +200,24 @@ void qemu_del_fd_read_handler(int fd); | ||
200 | #define CHR_EVENT_BREAK 0 /* serial break char */ | 200 | #define CHR_EVENT_BREAK 0 /* serial break char */ |
201 | #define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */ | 201 | #define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */ |
202 | 202 | ||
203 | + | ||
204 | + | ||
205 | +#define CHR_IOCTL_SERIAL_SET_PARAMS 1 | ||
206 | +typedef struct { | ||
207 | + int speed; | ||
208 | + int parity; | ||
209 | + int data_bits; | ||
210 | + int stop_bits; | ||
211 | +} QEMUSerialSetParams; | ||
212 | + | ||
213 | +#define CHR_IOCTL_SERIAL_SET_BREAK 2 | ||
214 | + | ||
215 | +#define CHR_IOCTL_PP_READ_DATA 3 | ||
216 | +#define CHR_IOCTL_PP_WRITE_DATA 4 | ||
217 | +#define CHR_IOCTL_PP_READ_CONTROL 5 | ||
218 | +#define CHR_IOCTL_PP_WRITE_CONTROL 6 | ||
219 | +#define CHR_IOCTL_PP_READ_STATUS 7 | ||
220 | + | ||
203 | typedef void IOEventHandler(void *opaque, int event); | 221 | typedef void IOEventHandler(void *opaque, int event); |
204 | 222 | ||
205 | typedef struct CharDriverState { | 223 | typedef struct CharDriverState { |
@@ -207,10 +225,7 @@ typedef struct CharDriverState { | @@ -207,10 +225,7 @@ typedef struct CharDriverState { | ||
207 | void (*chr_add_read_handler)(struct CharDriverState *s, | 225 | void (*chr_add_read_handler)(struct CharDriverState *s, |
208 | IOCanRWHandler *fd_can_read, | 226 | IOCanRWHandler *fd_can_read, |
209 | IOReadHandler *fd_read, void *opaque); | 227 | IOReadHandler *fd_read, void *opaque); |
210 | - void (*chr_set_serial_parameters)(struct CharDriverState *s, | ||
211 | - int speed, int parity, | ||
212 | - int data_bits, int stop_bits); | ||
213 | - void (*chr_set_serial_break)(struct CharDriverState *s, int enable); | 228 | + int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg); |
214 | IOEventHandler *chr_event; | 229 | IOEventHandler *chr_event; |
215 | void (*chr_send_event)(struct CharDriverState *chr, int event); | 230 | void (*chr_send_event)(struct CharDriverState *chr, int event); |
216 | void *opaque; | 231 | void *opaque; |
@@ -223,10 +238,7 @@ void qemu_chr_add_read_handler(CharDriverState *s, | @@ -223,10 +238,7 @@ void qemu_chr_add_read_handler(CharDriverState *s, | ||
223 | IOCanRWHandler *fd_can_read, | 238 | IOCanRWHandler *fd_can_read, |
224 | IOReadHandler *fd_read, void *opaque); | 239 | IOReadHandler *fd_read, void *opaque); |
225 | void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event); | 240 | void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event); |
226 | -void qemu_chr_set_serial_parameters(CharDriverState *s, | ||
227 | - int speed, int parity, | ||
228 | - int data_bits, int stop_bits); | ||
229 | -void qemu_chr_set_serial_break(CharDriverState *s, int enable); | 241 | +int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg); |
230 | 242 | ||
231 | /* consoles */ | 243 | /* consoles */ |
232 | 244 |