/*===========================================================================* * sef_cb_init_fresh * *===========================================================================*/ PRIVATE int sef_cb_init_fresh(int type, sef_init_info_t *info) { /* Initialize the Minix file server. */ int i; /* Defaults */ opt.use_orlov = TRUE; opt.mfsalloc = FALSE; opt.use_reserved_blocks = FALSE; opt.block_with_super = 0; opt.use_prealloc = FALSE; /* If we have been given an options string, parse options from there. */ for (i = 1; i < env_argc - 1; i++) if (!strcmp(env_argv[i], "-o")) optset_parse(optset_table, env_argv[++i]); may_use_vmcache = 1; /* Init inode table */ for (i = 0; i < NR_INODES; ++i) { inode[i].i_count = 0; cch[i] = 0; } init_inode_cache(); SELF_E = getprocnr(); /* just a small number before we find out the block size at mount time */ buf_pool(10); fs_block_size = _MIN_BLOCK_SIZE; return(OK); }
/*===========================================================================* * vbox_init * *===========================================================================*/ static int vbox_init(int UNUSED(type), sef_init_info_t *UNUSED(info)) { /* Initialize the device. */ int devind; u16_t vid, did; struct VMMDevReportGuestInfo *req; int r; interval = DEFAULT_INTERVAL; drift = DEFAULT_DRIFT; if (env_argc > 1) optset_parse(optset_table, env_argv[1]); pci_init(); r = pci_first_dev(&devind, &vid, &did); for (;;) { if (r != 1) panic("backdoor device not found"); if (vid == VMMDEV_PCI_VID && did == VMMDEV_PCI_DID) break; r = pci_next_dev(&devind, &vid, &did); } pci_reserve(devind); port = pci_attr_r32(devind, PCI_BAR) & PCI_BAR_IO_MASK; irq = pci_attr_r8(devind, PCI_ILR); hook_id = 0; if ((r = sys_irqsetpolicy(irq, 0 /* IRQ_REENABLE */, &hook_id)) != OK) panic("unable to register IRQ: %d", r); if ((r = sys_irqenable(&hook_id)) != OK) panic("unable to enable IRQ: %d", r); if ((vir_ptr = alloc_contig(VMMDEV_BUF_SIZE, 0, &phys_ptr)) == NULL) panic("unable to allocate memory"); req = (struct VMMDevReportGuestInfo *) vir_ptr; req->add_version = VMMDEV_GUEST_VERSION; req->os_type = VMMDEV_GUEST_OS_OTHER; if ((r = vbox_request(&req->header, phys_ptr, VMMDEV_REQ_REPORTGUESTINFO, sizeof(*req))) != VMMDEV_ERR_OK) panic("backdoor device not functioning"); ticks = sys_hz() * interval; sys_setalarm(ticks, 0); return OK; }
/*===========================================================================* * sef_cb_init_fresh * *===========================================================================*/ PRIVATE int sef_cb_init_fresh(int type, sef_init_info_t *info) { /* Initialize the Minix file server. */ int i, r; /* Defaults */ opt.use_orlov = TRUE; opt.mfsalloc = FALSE; opt.use_reserved_blocks = FALSE; opt.block_with_super = 0; opt.use_prealloc = FALSE; /* If we have been given an options string, parse options from there. */ for (i = 1; i < env_argc - 1; i++) if (!strcmp(env_argv[i], "-o")) optset_parse(optset_table, env_argv[++i]); may_use_vmcache = 1; /* Init inode table */ for (i = 0; i < NR_INODES; ++i) { inode[i].i_count = 0; cch[i] = 0; } init_inode_cache(); /* Init driver mapping */ for (i = 0; i < NR_DEVICES; ++i) driver_endpoints[i].driver_e = NONE; SELF_E = getprocnr(); buf_pool(DEFAULT_NR_BUFS); fs_block_size = _MIN_BLOCK_SIZE; fs_m_in.m_type = FS_READY; if ((r = send(VFS_PROC_NR, &fs_m_in)) != OK) { panic("Error sending login to VFS: %d", r); } return(OK); }
/*===========================================================================* * sef_cb_init_fresh * *===========================================================================*/ static int sef_cb_init_fresh(int type, sef_init_info_t *UNUSED(info)) { clock_t uptime; int r; /* Parse the given parameters. */ if (env_argc > 1) optset_parse(optset_table, env_argv[1]); if (driver_label[0] == '\0') panic("no driver label given"); if (ds_retrieve_label_endpt(driver_label, &driver_endpt)) panic("unable to resolve driver label"); if (driver_minor > 255) panic("no or invalid driver minor given"); #if DEBUG printf("FBD: driver label '%s' (endpt %d), minor %d\n", driver_label, driver_endpt, driver_minor); #endif /* Initialize resources. */ fbd_buf = alloc_contig(BUF_SIZE, 0, NULL); assert(fbd_buf != NULL); if ((r = getticks(&uptime)) != OK) panic("getuptime failed (%d)\n", r); srand48(uptime); /* Announce we are up! */ blockdriver_announce(type); return OK; }
/*===========================================================================* * parse_arguments * *===========================================================================*/ static int parse_arguments(int argc, char *argv[]) { if(argc != 2) return EINVAL; optset_parse(optset_table, argv[1]); if (MAIN_LABEL[0] == 0 || MAIN_MINOR < 0 || MAIN_MINOR > 255) return EINVAL; if (USE_MIRROR && (BACKUP_LABEL[0] == 0 || BACKUP_MINOR < 0 || BACKUP_MINOR > 255)) return EINVAL; /* Checksumming implies a checksum layout. */ if (USE_CHECKSUM) USE_SUM_LAYOUT = 1; /* Determine the checksum size for the chosen checksum type. */ switch (SUM_TYPE) { case ST_NIL: SUM_SIZE = 4; /* for the sector number */ break; case ST_XOR: SUM_SIZE = 16; /* compatibility */ break; case ST_CRC: SUM_SIZE = 4; break; case ST_MD5: SUM_SIZE = 16; break; default: return EINVAL; } if (NR_SUM_SEC <= 0 || SUM_SIZE * NR_SUM_SEC > SECTOR_SIZE) return EINVAL; #if DEBUG printf("Filter starting. Configuration:\n"); printf(" USE_CHECKSUM : %3s ", USE_CHECKSUM ? "yes" : "no"); printf(" USE_MIRROR : %3s\n", USE_MIRROR ? "yes" : "no"); if (USE_CHECKSUM) { printf(" BAD_SUM_ERROR : %3s ", BAD_SUM_ERROR ? "yes" : "no"); printf(" NR_SUM_SEC : %3d\n", NR_SUM_SEC); printf(" SUM_TYPE : "); switch (SUM_TYPE) { case ST_NIL: printf("nil"); break; case ST_XOR: printf("xor"); break; case ST_CRC: printf("crc"); break; case ST_MD5: printf("md5"); break; } printf(" SUM_SIZE : %3d\n", SUM_SIZE); } else printf(" USE_SUM_LAYOUT : %3s\n", USE_SUM_LAYOUT ? "yes" : "no"); printf(" N : %3dx M : %3dx T : %3ds\n", NR_RETRIES, NR_RESTARTS, DRIVER_TIMEOUT); printf(" MAIN_LABEL / MAIN_MINOR : %19s / %d\n", MAIN_LABEL, MAIN_MINOR); if (USE_MIRROR) { printf(" BACKUP_LABEL / BACKUP_MINOR : %15s / %d\n", BACKUP_LABEL, BACKUP_MINOR); } #endif /* Convert timeout seconds to ticks. */ DRIVER_TIMEOUT *= sys_hz(); return OK; }