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 | 107 | static void serial_update_parameters(SerialState *s) |
108 | 108 | { |
109 | 109 | int speed, parity, data_bits, stop_bits; |
110 | + QEMUSerialSetParams ssp; | |
110 | 111 | |
111 | 112 | if (s->lcr & 0x08) { |
112 | 113 | if (s->lcr & 0x10) |
... | ... | @@ -124,7 +125,12 @@ static void serial_update_parameters(SerialState *s) |
124 | 125 | if (s->divider == 0) |
125 | 126 | return; |
126 | 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 | 134 | printf("speed=%d parity=%c data=%d stop=%d\n", |
129 | 135 | speed, parity, data_bits, stop_bits); |
130 | 136 | #endif |
... | ... | @@ -179,7 +185,8 @@ static void serial_ioport_write(void *opaque, uint32_t addr, uint32_t val) |
179 | 185 | break_enable = (val >> 6) & 1; |
180 | 186 | if (break_enable != s->last_break_enable) { |
181 | 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 | 192 | break; | ... | ... |
vl.h
... | ... | @@ -200,6 +200,24 @@ void qemu_del_fd_read_handler(int fd); |
200 | 200 | #define CHR_EVENT_BREAK 0 /* serial break char */ |
201 | 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 | 221 | typedef void IOEventHandler(void *opaque, int event); |
204 | 222 | |
205 | 223 | typedef struct CharDriverState { |
... | ... | @@ -207,10 +225,7 @@ typedef struct CharDriverState { |
207 | 225 | void (*chr_add_read_handler)(struct CharDriverState *s, |
208 | 226 | IOCanRWHandler *fd_can_read, |
209 | 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 | 229 | IOEventHandler *chr_event; |
215 | 230 | void (*chr_send_event)(struct CharDriverState *chr, int event); |
216 | 231 | void *opaque; |
... | ... | @@ -223,10 +238,7 @@ void qemu_chr_add_read_handler(CharDriverState *s, |
223 | 238 | IOCanRWHandler *fd_can_read, |
224 | 239 | IOReadHandler *fd_read, void *opaque); |
225 | 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 | 243 | /* consoles */ |
232 | 244 | ... | ... |