| 1528 | } |
| 1529 | |
| 1530 | static int dev_thread (void *devs) |
| 1531 | { |
| 1532 | struct s2devstruct *dev = (struct s2devstruct*)devs; |
| 1533 | |
| 1534 | uae_set_thread_priority (NULL, 1); |
| 1535 | dev->thread_running = 1; |
| 1536 | uae_sem_post (&dev->sync_sem); |
| 1537 | for (;;) { |
| 1538 | TrapContext *ctx = (TrapContext*)read_comm_pipe_pvoid_blocking(&dev->requests); |
| 1539 | uae_u8 *iobuf = (uae_u8*)read_comm_pipe_pvoid_blocking(&dev->requests); |
| 1540 | uaecptr request = (uaecptr)read_comm_pipe_u32_blocking (&dev->requests); |
| 1541 | uae_sem_wait (&change_sem); |
| 1542 | if (!request) { |
| 1543 | dev->thread_running = 0; |
| 1544 | uae_sem_post (&dev->sync_sem); |
| 1545 | uae_sem_post (&change_sem); |
| 1546 | write_log (_T("%s: dev_thread killed\n"), getdevname ()); |
| 1547 | return 0; |
| 1548 | } |
| 1549 | struct priv_s2devstruct *pdev = getps2devstruct(ctx, iobuf, request); |
| 1550 | asyncreq *ar = get_async_request (dev, request, 1); |
| 1551 | if (ar) { |
| 1552 | storerequest(ctx, ar->request, request); |
| 1553 | uae_ReplyMsg (request); |
| 1554 | release_async_request (dev, request); |
| 1555 | rem_async_packet (dev, request); |
| 1556 | } else if (dev_do_io(ctx, dev, iobuf, request, 0) == 0) { |
| 1557 | storerequest(ctx, iobuf, request); |
| 1558 | uae_ReplyMsg (request); |
| 1559 | rem_async_packet (dev, request); |
| 1560 | } else { |
| 1561 | add_async_request (dev, iobuf, request); |
| 1562 | dev->ctx = ctx; |
| 1563 | ethernet_trigger (pdev->td, dev->sysdata); |
| 1564 | dev->ctx = NULL; |
| 1565 | iobuf = NULL; |
| 1566 | } |
| 1567 | trap_background_set_complete(ctx); |
| 1568 | uae_sem_post (&change_sem); |
| 1569 | } |
| 1570 | return 0; |
| 1571 | } |
| 1572 | |
| 1573 | static uae_u32 REGPARAM2 dev_init_2 (TrapContext *ctx) |
| 1574 | { |
nothing calls this directly
no test coverage detected