static void *dev_thread (void *devs) { struct devstruct *dev = (struct devstruct*)devs; uae_set_thread_priority (2); dev->thread_running = 1; uae_sem_post (&dev->sync_sem); for (;;) { uaecptr request = (uaecptr)read_comm_pipe_u32_blocking (&dev->requests); uae_sem_wait (&change_sem); if (!request) { dev->thread_running = 0; uae_sem_post (&dev->sync_sem); uae_sem_post (&change_sem); return 0; } else if (get_async_request (dev, request, 1)) { uae_ReplyMsg (request); release_async_request (dev, request); } else if (dev_do_io (dev, request, 0) == 0) { uae_ReplyMsg (request); } else { add_async_request (dev, request); uaeser_trigger (dev->sysdata); } uae_sem_post (&change_sem); } return 0; }
static void *dev_thread (void *devs) { struct s2devstruct *dev = (struct s2devstruct*)devs; uae_set_thread_priority (NULL, 1); dev->thread_running = 1; uae_sem_post (&dev->sync_sem); for (;;) { uaecptr request = (uaecptr)read_comm_pipe_u32_blocking (&dev->requests); uae_sem_wait (&change_sem); if (!request) { dev->thread_running = 0; uae_sem_post (&dev->sync_sem); uae_sem_post (&change_sem); write_log (_T("%s: dev_thread killed\n"), getdevname ()); return 0; } else if (get_async_request (dev, request, 1)) { uae_ReplyMsg (request); release_async_request (dev, request); rem_async_packet (dev, request); } else if (dev_do_io (dev, request, 0) == 0) { uae_ReplyMsg (request); rem_async_packet (dev, request); } else { add_async_request (dev, request); ethernet_trigger (dev->sysdata); } uae_sem_post (&change_sem); } return 0; }
static void abort_async (struct s2devstruct *dev, uaecptr request) { struct asyncreq *ar = get_async_request (dev, request, 1); if (!ar) { write_log (_T("%s:%d: abort async but no request %x found!\n"), getdevname(), dev->unit, request); return; } if (log_net) write_log (_T("%s:%d asyncronous request=%08X aborted\n"), getdevname(), dev->unit, request); do_abort_async (dev, request); }
static void abort_async (struct devstruct *dev, uaecptr request) { struct asyncreq *ar = get_async_request (dev, request, 1); if (!ar) { write_log (_T("%s:%d: abort async but no request %x found!\n"), getdevname(), dev->unit, request); return; } if (log_uaeserial) write_log (_T("%s:%d asyncronous request=%08X aborted\n"), getdevname(), dev->unit, request); put_byte (request + 31, IOERR_ABORTED); put_byte (request + 30, get_byte (request + 30) | 0x20); write_comm_pipe_u32 (&dev->requests, request, 1); }