void controller_smart_setcallbacks () { disksim->issuefunc_ctlrsmart = controller_smart_issue_access; disksim->queuefind_ctlrsmart = controller_smart_queuefind; disksim->wakeupfunc_ctlrsmart = controller_smart_wakeup; disksim->donefunc_ctlrsmart_read = controller_smart_host_data_transfer; disksim->donefunc_ctlrsmart_write = controller_smart_request_complete; ioqueue_setcallbacks (); cache_setcallbacks (); }
void iodriver_setcallbacks () { ioqueue_setcallbacks(); }
void ssd_setcallbacks () { ioqueue_setcallbacks(); }
void simpledisk_setcallbacks () { ioqueue_setcallbacks(); }
/* Initialize device structures */ void mems_initialize (void) { int i; int j; int k; mems_t *dev; if (disksim->memsinfo == NULL) return; ioqueue_setcallbacks(); /* Initialize all devices that have been inited (huh?) */ for (i = 0; i < disksim->memsinfo->devices_len; i++) { dev = getmems(i); if (dev) { dev->busowned = -1; addlisttoextraq((event **)&dev->buswait); ioqueue_initialize(dev->queue, i); dev->dataxfer_req = NULL; dev->dataxfer_queue = NULL; /* Segment initialization stuff taken in part from disksim_disk.c */ if ((dev->numsegs > 0) && (dev->seglist == NULL)) { dev->seglist = (struct mems_segment *)DISKSIM_malloc(sizeof(struct mems_segment)); dev->seglist->next = NULL; dev->seglist->prev = NULL; dev->seglist->time = 0.0; dev->seglist->startblkno = 0; dev->seglist->endblkno = 0; for (k = 1; k < dev->numsegs; k++) { struct mems_segment *tmpseg = (struct mems_segment *)DISKSIM_malloc(sizeof(struct mems_segment)); tmpseg->next = dev->seglist; dev->seglist = tmpseg; tmpseg->next->prev = tmpseg; tmpseg->prev = NULL; tmpseg->startblkno = 0; tmpseg->endblkno = 0; } } if (dev->numsegs == 0) addlisttoextraq((event **)&dev->seglist); mems_check_numblocks(dev); for (j = 0; j < dev->num_sleds; j++) { dev->sled[j].dev = dev; ioqueue_initialize(dev->sled[j].queue, i); dev->sled[j].active = MEMS_SLED_INACTIVE; dev->sled[j].active_request = NULL; dev->sled[j].prefetch_info = NULL; dev->sled[j].lastreq_lbn = mems_centermost_lbn(&dev->sled[j]); dev->sled[j].lastreq_comptime = 0.0; /* Initialize sled position, velocity at centermost LBN */ mems_lbn_to_position(dev->sled[j].lastreq_lbn, &dev->sled[j], &dev->sled[j].coordset_up, &dev->sled[j].coordset_dn, &dev->sled[j].tipset, NULL, NULL, NULL); mems_coord_t_copy(&dev->sled[j].coordset_up.servo_start, &dev->sled[j].pos); } mems_statinit(i, TRUE); if (dev->precompute_seek_count > 0) { mems_precompute_seek_curve(dev); } } } }