void ssd_event_arrive (ioreq_event *curr) { ssd_t *currdisk; // fprintf (outputfile, "Entered ssd_event_arrive: time %f (simtime %f)\n", curr->time, simtime); // fprintf (outputfile, " - devno %d, blkno %d, type %d, cause %d, read = %d\n", curr->devno, curr->blkno, curr->type, curr->cause, curr->flags & READ); currdisk = getssd (curr->devno); switch (curr->type) { case IO_ACCESS_ARRIVE: curr->time = simtime + currdisk->overhead; curr->type = DEVICE_OVERHEAD_COMPLETE; addtointq((event *) curr); break; case DEVICE_OVERHEAD_COMPLETE: ssd_request_arrive(curr); break; case DEVICE_ACCESS_COMPLETE: ssd_access_complete (curr); break; case DEVICE_DATA_TRANSFER_COMPLETE: ssd_bustransfer_complete(curr); break; case IO_INTERRUPT_COMPLETE: ssd_interrupt_complete(curr); break; case IO_QLEN_MAXCHECK: /* Used only at initialization time to set up queue stuff */ curr->tempint1 = -1; curr->tempint2 = ssd_get_maxoutstanding(curr->devno); curr->bcount = 0; break; case SSD_CLEAN_GANG: ssd_clean_gang_complete(curr); break; case SSD_CLEAN_ELEMENT: ssd_clean_element_complete(curr); break; default: fprintf(stderr, "Unrecognized event type at ssd_event_arrive\n"); exit(1); } // fprintf (outputfile, "Exiting ssd_event_arrive\n"); }
void ssd_process_event(ioreq_event *curr) { ssd_t *currdisk; currdisk = getssd (curr->devno); switch (curr->type) { // disksim IO event case DEVICE_OVERHEAD_COMPLETE: ssd_request_arrive(curr); break; case DEVICE_ACCESS_COMPLETE: ssd_access_complete (curr); break; case DEVICE_DATA_TRANSFER_COMPLETE: ssd_bustransfer_complete(curr); break; case IO_INTERRUPT_COMPLETE: ssd_interrupt_complete(curr); break; // SSD IO event //added by tiel case SSD_ACTIVATE_ELEM: ssd_activate(curr); break; case SSD_CLEAN_GANG: ssd_clean_gang_complete(curr); break; case SSD_CLEAN_ELEMENT: ssd_clean_element_complete(curr); break; case SSD_CLEAN_LOG: ssd_clean_logblock_complete(curr); break; default: fprintf(outputfile3, "Unrecognized event type!\n"); exit(1); } }