/* * Shut down SCSI layer */ static void dev_exit (void) { int i, j; struct devstruct *dev; for (i = 0; i < MAX_TOTAL_DEVICES; i++) { dev = &devst[i]; if (dev->opencnt > 0) { /* Abort any outstanding requests */ for (j = 0; j < MAX_ASYNC_REQUESTS; j++) { uaecptr request; if ((request = dev->d_request[i])) abort_async (dev, request, 0, 0); } /* Kill dev thread and wait for it to die */ write_comm_pipe_u32 (&dev->requests, 0, 1); uae_sem_wait (&dev->sync_sem); /* Close device */ dev->opencnt = 0; sys_command_close (DF_SCSI, dev->unitnum); sys_command_close (DF_IOCTL, dev->unitnum); } memset (dev, 0, sizeof (struct devstruct)); dev->unitnum = dev->aunit = -1; } }
static uint32_t REGPARAM2 dev_abortio (TrapContext *context) { uint32_t request = m68k_areg (regs, 1); struct devstruct *dev = getdevstruct (get_long (request + 24)); if (!dev) { put_byte (request + 31, 32); return get_byte (request + 31); } abort_async (dev, request); return 0; }
static void dev_reset (void) { int32_t i; struct devstruct *dev; for (i = 0; i < MAX_TOTAL_DEVICES; i++) { dev = &devst[i]; if (dev->open) { while (dev->ar) abort_async (dev, dev->ar->request); dev_close_3 (dev); uae_sem_wait (&dev->sync_sem); } memset (dev, 0, sizeof (struct devstruct)); } }
static void cmd_reset(struct devstruct *dev, uaecptr req) { while (dev->ar) abort_async (dev, dev->ar->request); put_long (req + io_RBufLen, 8192); put_long (req + io_ExtFlags, 0); put_long (req + io_Baud, 57600); put_long (req + io_BrkTime, 250000); put_long (req + io_TermArray0, 0); put_long (req + io_TermArray1, 0); put_long (req + io_ReadLen, 8); put_long (req + io_WriteLen, 8); put_long (req + io_StopBits, 1); put_long (req + io_SerFlags, SERF_XDISABLED); put_word (req + io_Status, 0); }
static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) { uae_u32 request = m68k_areg (&context->regs, 1); struct priv_devstruct *pdev = getpdevstruct (request); struct devstruct *dev; if (!pdev) { put_byte (request + 31, 32); return get_byte (request + 31); } dev = getdevstruct (pdev->unit); if (!dev) { put_byte (request + 31, 32); return get_byte (request + 31); } put_byte (request + 31, -2); if (log_scsi) write_log ("abortio %s unit=%d, request=%08.8X\n", getdevname (pdev->type), pdev->unit, request); abort_async (dev, request, -2, 0); return 0; }
static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); struct priv_s2devstruct *pdev = getps2devstruct (request); struct s2devstruct *dev; if (!pdev) { write_log (_T("%s abortio but no request %08x found!\n"), getdevname(), request); put_byte (request + 31, 32); return get_byte (request + 31); } dev = gets2devstruct (pdev->unit); if (!dev) { write_log (_T("%s (%d) abortio but no request %08x found!\n"), getdevname(), pdev->unit, request); put_byte (request + 31, 32); return get_byte (request + 31); } if (log_net) write_log (_T("%s:%d abortio %08x\n"), getdevname(), dev->unit, request); abort_async (dev, request); return 0; }