3283 |
|
|
3284 |
int main_loop(void *opaque) |
int main_loop(void *opaque) |
3285 |
{ |
{ |
3286 |
struct pollfd ufds[2], *pf, *serial_ufd, *net_ufd, *gdb_ufd; |
struct pollfd ufds[3], *pf, *serial_ufd, *net_ufd, *gdb_ufd; |
3287 |
int ret, n, timeout; |
int ret, n, timeout, serial_ok; |
3288 |
uint8_t ch; |
uint8_t ch; |
3289 |
CPUState *env = global_env; |
CPUState *env = global_env; |
3290 |
|
|
3296 |
term_init(); |
term_init(); |
3297 |
} |
} |
3298 |
|
|
3299 |
|
serial_ok = 1; |
3300 |
for(;;) { |
for(;;) { |
3301 |
ret = cpu_x86_exec(env); |
ret = cpu_x86_exec(env); |
3302 |
if (reset_requested) |
if (reset_requested) |
3311 |
/* poll any events */ |
/* poll any events */ |
3312 |
serial_ufd = NULL; |
serial_ufd = NULL; |
3313 |
pf = ufds; |
pf = ufds; |
3314 |
if (!(serial_ports[0].lsr & UART_LSR_DR)) { |
if (serial_ok && !(serial_ports[0].lsr & UART_LSR_DR)) { |
3315 |
serial_ufd = pf; |
serial_ufd = pf; |
3316 |
pf->fd = 0; |
pf->fd = 0; |
3317 |
pf->events = POLLIN; |
pf->events = POLLIN; |
3338 |
n = read(0, &ch, 1); |
n = read(0, &ch, 1); |
3339 |
if (n == 1) { |
if (n == 1) { |
3340 |
serial_received_byte(&serial_ports[0], ch); |
serial_received_byte(&serial_ports[0], ch); |
3341 |
|
} else { |
3342 |
|
/* Closed, stop polling. */ |
3343 |
|
serial_ok = 0; |
3344 |
} |
} |
3345 |
} |
} |
3346 |
if (net_ufd && (net_ufd->revents & POLLIN)) { |
if (net_ufd && (net_ufd->revents & POLLIN)) { |