Lines Matching refs:mic
46 static void init_mic(struct mic_info *mic);
159 tap_configure(struct mic_info *mic, char *dev) in tap_configure() argument
178 mic->name, strerror(errno)); in tap_configure()
184 mic->name, strerror(errno)); in tap_configure()
191 mic->name, strerror(errno)); in tap_configure()
195 snprintf(ipaddr, IFNAMSIZ, "172.31.%d.254/24", mic->id); in tap_configure()
210 mic->name, strerror(errno)); in tap_configure()
216 mic->name, strerror(errno)); in tap_configure()
223 mic->name, strerror(errno)); in tap_configure()
227 mic->name, __func__, __LINE__); in tap_configure()
231 static int tun_alloc(struct mic_info *mic, char *dev) in tun_alloc() argument
253 mic->name, __func__, __LINE__, strerror(errno)); in tun_alloc()
264 mic->name, __func__, __LINE__, strerror(errno)); in tun_alloc()
279 static void set_dp(struct mic_info *mic, int type, void *dp) in set_dp() argument
283 mic->mic_console.console_dp = dp; in set_dp()
286 mic->mic_net.net_dp = dp; in set_dp()
289 mic->mic_virtblk.block_dp = dp; in set_dp()
292 mpsslog("%s %s %d not found\n", mic->name, __func__, type); in set_dp()
296 static void *get_dp(struct mic_info *mic, int type) in get_dp() argument
300 return mic->mic_console.console_dp; in get_dp()
302 return mic->mic_net.net_dp; in get_dp()
304 return mic->mic_virtblk.block_dp; in get_dp()
306 mpsslog("%s %s %d not found\n", mic->name, __func__, type); in get_dp()
311 static struct mic_device_desc *get_device_desc(struct mic_info *mic, int type) in get_device_desc() argument
315 void *dp = get_dp(mic, type); in get_device_desc()
329 mic->name, __func__, d->type, d); in get_device_desc()
334 mpsslog("%s %s %d not found\n", mic->name, __func__, type); in get_device_desc()
362 static inline void verify_out_len(struct mic_info *mic, in verify_out_len() argument
367 mic->name, __func__, __LINE__, in verify_out_len()
375 disp_iovec(struct mic_info *mic, struct mic_copy_desc *copy, in disp_iovec() argument
382 mic->name, s, line, i, in disp_iovec()
404 mic_virtio_copy(struct mic_info *mic, int fd, in mic_virtio_copy() argument
412 mic->name, __func__, __LINE__, in mic_virtio_copy()
423 init_vr(struct mic_info *mic, int fd, int type, in init_vr() argument
435 mic->name, __func__, __LINE__, in init_vr()
439 set_dp(mic, type, va); in init_vr()
446 __func__, mic->name, vr0->va, vr0->info, vr_size, in init_vr()
459 __func__, mic->name, vr1->va, vr1->info, vr_size, in init_vr()
470 wait_for_card_driver(struct mic_info *mic, int fd, int type) in wait_for_card_driver() argument
474 struct mic_device_desc *desc = get_device_desc(mic, type); in wait_for_card_driver()
478 mic->name, __func__, type, desc->status); in wait_for_card_driver()
485 mic->name, __func__, strerror(errno)); in wait_for_card_driver()
491 mic->name, __func__, type, desc->status); in wait_for_card_driver()
494 mic->name, __func__, pollfd.revents); in wait_for_card_driver()
496 mic->name, __func__, type, in wait_for_card_driver()
506 spin_for_descriptors(struct mic_info *mic, struct mic_vring *vr) in spin_for_descriptors() argument
513 mic->name, __func__, in spin_for_descriptors()
532 struct mic_info *mic = (struct mic_info *)arg; in virtio_net() local
540 snprintf(if_name, IFNAMSIZ, "mic%d", mic->id); in virtio_net()
541 mic->mic_net.tap_fd = tun_alloc(mic, if_name); in virtio_net()
542 if (mic->mic_net.tap_fd < 0) in virtio_net()
545 if (tap_configure(mic, if_name)) in virtio_net()
547 mpsslog("MIC name %s id %d\n", mic->name, mic->id); in virtio_net()
549 net_poll[NET_FD_VIRTIO_NET].fd = mic->mic_net.virtio_net_fd; in virtio_net()
551 net_poll[NET_FD_TUN].fd = mic->mic_net.tap_fd; in virtio_net()
554 if (MAP_FAILED == init_vr(mic, mic->mic_net.virtio_net_fd, in virtio_net()
558 mic->name, strerror(errno)); in virtio_net()
563 desc = get_device_desc(mic, VIRTIO_ID_NET); in virtio_net()
579 wait_for_card_driver(mic, mic->mic_net.virtio_net_fd, in virtio_net()
597 mpsslog("%s %s %d hdr->flags 0x%x ", mic->name, in virtio_net()
603 disp_iovec(mic, copy, __func__, __LINE__); in virtio_net()
605 mic->name, __func__, __LINE__, in virtio_net()
608 spin_for_descriptors(mic, &tx_vr); in virtio_net()
612 err = mic_virtio_copy(mic, in virtio_net()
613 mic->mic_net.virtio_net_fd, &tx_vr, in virtio_net()
617 mic->name, __func__, __LINE__, in virtio_net()
621 verify_out_len(mic, ©); in virtio_net()
623 disp_iovec(mic, copy, __func__, __LINE__); in virtio_net()
625 mic->name, __func__, __LINE__, in virtio_net()
631 disp_iovec(mic, ©, __func__, __LINE__); in virtio_net()
632 mpsslog("%s %s %d read failed %s ", mic->name, in virtio_net()
651 err = mic_virtio_copy(mic, in virtio_net()
652 mic->mic_net.virtio_net_fd, &rx_vr, in virtio_net()
661 mic->name, __func__, __LINE__, in virtio_net()
670 verify_out_len(mic, ©); in virtio_net()
672 disp_iovec(mic, copy, __func__, in virtio_net()
675 mic->name, __func__, __LINE__); in virtio_net()
689 disp_iovec(mic, ©, __func__, in virtio_net()
692 mic->name, __func__, in virtio_net()
700 mic->name, __func__, __LINE__, in virtio_net()
707 mpsslog("%s: %s: POLLERR\n", __func__, mic->name); in virtio_net()
728 struct mic_info *mic = (struct mic_info *)arg; in virtio_console() local
749 printf("%s console message goes to %s\n", mic->name, pts_name); in virtio_console()
750 mpsslog("%s console message goes to %s\n", mic->name, pts_name); in virtio_console()
766 console_poll[VIRTIO_CONSOLE_FD].fd = mic->mic_console.virtio_console_fd; in virtio_console()
769 if (MAP_FAILED == init_vr(mic, mic->mic_console.virtio_console_fd, in virtio_console()
773 mic->name, strerror(errno)); in virtio_console()
778 desc = get_device_desc(mic, VIRTIO_ID_CONSOLE); in virtio_console()
790 wait_for_card_driver(mic, in virtio_console()
791 mic->mic_console.virtio_console_fd, in virtio_console()
799 disp_iovec(mic, copy, __func__, __LINE__); in virtio_console()
801 mic->name, __func__, __LINE__, in virtio_console()
804 spin_for_descriptors(mic, &tx_vr); in virtio_console()
808 err = mic_virtio_copy(mic, in virtio_console()
809 mic->mic_console.virtio_console_fd, in virtio_console()
813 mic->name, __func__, __LINE__, in virtio_console()
817 verify_out_len(mic, ©); in virtio_console()
819 disp_iovec(mic, copy, __func__, __LINE__); in virtio_console()
821 mic->name, __func__, __LINE__, in virtio_console()
827 disp_iovec(mic, ©, __func__, __LINE__); in virtio_console()
829 mic->name, __func__, __LINE__, in virtio_console()
843 err = mic_virtio_copy(mic, in virtio_console()
844 mic->mic_console.virtio_console_fd, in virtio_console()
849 verify_out_len(mic, ©); in virtio_console()
851 disp_iovec(mic, copy, __func__, in virtio_console()
854 mic->name, __func__, __LINE__); in virtio_console()
868 disp_iovec(mic, copy, __func__, in virtio_console()
871 mic->name, __func__, in virtio_console()
879 mic->name, __func__, __LINE__, in virtio_console()
886 mpsslog("%s: %s: POLLERR\n", __func__, mic->name); in virtio_console()
895 add_virtio_device(struct mic_info *mic, struct mic_device_desc *dd) in add_virtio_device() argument
900 snprintf(path, PATH_MAX, "/dev/mic%d", mic->id); in add_virtio_device()
915 mic->mic_net.virtio_net_fd = fd; in add_virtio_device()
916 mpsslog("Added VIRTIO_ID_NET for %s\n", mic->name); in add_virtio_device()
919 mic->mic_console.virtio_console_fd = fd; in add_virtio_device()
920 mpsslog("Added VIRTIO_ID_CONSOLE for %s\n", mic->name); in add_virtio_device()
923 mic->mic_virtblk.virtio_block_fd = fd; in add_virtio_device()
924 mpsslog("Added VIRTIO_ID_BLOCK for %s\n", mic->name); in add_virtio_device()
930 set_backend_file(struct mic_info *mic) in set_backend_file() argument
935 snprintf(buff, PATH_MAX, "%s/mpssd%03d.conf", mic_config_dir, mic->id); in set_backend_file()
955 mic->mic_virtblk.backend_file = malloc(strlen(evv) + 1); in set_backend_file()
956 if (mic->mic_virtblk.backend_file == NULL) { in set_backend_file()
957 mpsslog("%s %d can't allocate memory\n", mic->name, mic->id); in set_backend_file()
960 strcpy(mic->mic_virtblk.backend_file, evv + 1); in set_backend_file()
966 set_backend_size(struct mic_info *mic) in set_backend_size() argument
968 mic->mic_virtblk.backend_size = lseek(mic->mic_virtblk.backend, 0, in set_backend_size()
970 if (mic->mic_virtblk.backend_size < 0) { in set_backend_size()
972 mic->name, mic->mic_virtblk.backend_file); in set_backend_size()
976 mic->mic_virtblk.backend_size / SECTOR_SIZE; in set_backend_size()
977 if ((mic->mic_virtblk.backend_size % SECTOR_SIZE) != 0) in set_backend_size()
987 open_backend(struct mic_info *mic) in open_backend() argument
989 if (!set_backend_file(mic)) in open_backend()
991 mic->mic_virtblk.backend = open(mic->mic_virtblk.backend_file, O_RDWR); in open_backend()
992 if (mic->mic_virtblk.backend < 0) { in open_backend()
993 mpsslog("%s: can't open: %s\n", mic->name, in open_backend()
994 mic->mic_virtblk.backend_file); in open_backend()
997 if (!set_backend_size(mic)) in open_backend()
999 mic->mic_virtblk.backend_addr = mmap(NULL, in open_backend()
1000 mic->mic_virtblk.backend_size, in open_backend()
1002 mic->mic_virtblk.backend, 0L); in open_backend()
1003 if (mic->mic_virtblk.backend_addr == MAP_FAILED) { in open_backend()
1005 mic->name, mic->mic_virtblk.backend_file, in open_backend()
1012 close(mic->mic_virtblk.backend); in open_backend()
1014 free(mic->mic_virtblk.backend_file); in open_backend()
1020 close_backend(struct mic_info *mic) in close_backend() argument
1022 munmap(mic->mic_virtblk.backend_addr, mic->mic_virtblk.backend_size); in close_backend()
1023 close(mic->mic_virtblk.backend); in close_backend()
1024 free(mic->mic_virtblk.backend_file); in close_backend()
1028 start_virtblk(struct mic_info *mic, struct mic_vring *vring) in start_virtblk() argument
1032 mic->name); in start_virtblk()
1035 add_virtio_device(mic, &virtblk_dev_page.dd); in start_virtblk()
1036 if (MAP_FAILED == init_vr(mic, mic->mic_virtblk.virtio_block_fd, in start_virtblk()
1040 mic->name, strerror(errno)); in start_virtblk()
1047 stop_virtblk(struct mic_info *mic) in stop_virtblk() argument
1053 ret = munmap(mic->mic_virtblk.block_dp, in stop_virtblk()
1056 mpsslog("%s munmap errno %d\n", mic->name, errno); in stop_virtblk()
1057 close(mic->mic_virtblk.virtio_block_fd); in stop_virtblk()
1137 struct mic_info *mic = (struct mic_info *)arg; in virtio_block() local
1151 if (!open_backend(mic)) { /* No virtblk */ in virtio_block()
1152 for (mic->mic_virtblk.signaled = 0; in virtio_block()
1153 !mic->mic_virtblk.signaled;) in virtio_block()
1159 if (!start_virtblk(mic, &vring)) in virtio_block()
1165 mic->name, strerror(ENOMEM)); in virtio_block()
1169 block_poll.fd = mic->mic_virtblk.virtio_block_fd; in virtio_block()
1171 for (mic->mic_virtblk.signaled = 0; in virtio_block()
1172 !mic->mic_virtblk.signaled;) { in virtio_block()
1210 mic->mic_virtblk.virtio_block_fd, in virtio_block()
1215 mic->name, ret, in virtio_block()
1222 fos = mic->mic_virtblk.backend_addr + in virtio_block()
1256 mic->mic_virtblk.virtio_block_fd, in virtio_block()
1267 mic->mic_virtblk.virtio_block_fd, in virtio_block()
1278 stop_virtblk(mic); in virtio_block()
1280 close_backend(mic); in virtio_block()
1287 reset(struct mic_info *mic) in reset() argument
1291 setsysfs(mic->name, "state", "reset"); in reset()
1294 state = readsysfs(mic->name, "state"); in reset()
1298 mic->name, __func__, __LINE__, state); in reset()
1317 get_mic_shutdown_status(struct mic_info *mic, char *shutdown_status) in get_mic_shutdown_status() argument
1329 mpsslog("%s: BUG invalid status %s\n", mic->name, shutdown_status); in get_mic_shutdown_status()
1334 static int get_mic_state(struct mic_info *mic, char *state) in get_mic_state() argument
1348 mpsslog("%s: BUG invalid state %s\n", mic->name, state); in get_mic_state()
1353 static void mic_handle_shutdown(struct mic_info *mic) in mic_handle_shutdown() argument
1359 shutdown_status = readsysfs(mic->name, "shutdown_status"); in mic_handle_shutdown()
1363 mic->name, __func__, __LINE__, shutdown_status); in mic_handle_shutdown()
1364 switch (get_mic_shutdown_status(mic, shutdown_status)) { in mic_handle_shutdown()
1366 mic->restart = 1; in mic_handle_shutdown()
1380 ret = kill(mic->pid, SIGTERM); in mic_handle_shutdown()
1382 mic->name, __func__, __LINE__, in mic_handle_shutdown()
1383 mic->pid, ret); in mic_handle_shutdown()
1385 ret = waitpid(mic->pid, &stat, in mic_handle_shutdown()
1388 mic->name, __func__, __LINE__, in mic_handle_shutdown()
1389 ret, mic->pid); in mic_handle_shutdown()
1391 if (ret == mic->pid) in mic_handle_shutdown()
1392 reset(mic); in mic_handle_shutdown()
1398 struct mic_info *mic = (struct mic_info *)arg; in mic_config() local
1406 MICSYSFSDIR, mic->name, "state"); in mic_config()
1411 mic->name, pathname, strerror(errno)); in mic_config()
1419 mic->name, pathname, strerror(errno)); in mic_config()
1425 mic->name, pathname, strerror(errno)); in mic_config()
1429 state = readsysfs(mic->name, "state"); in mic_config()
1433 mic->name, __func__, __LINE__, state); in mic_config()
1434 switch (get_mic_state(mic, state)) { in mic_config()
1436 mic_handle_shutdown(mic); in mic_config()
1439 mic->boot_on_resume = 1; in mic_config()
1440 setsysfs(mic->name, "state", "suspend"); in mic_config()
1441 mic_handle_shutdown(mic); in mic_config()
1444 if (mic->boot_on_resume) { in mic_config()
1445 setsysfs(mic->name, "state", "boot"); in mic_config()
1446 mic->boot_on_resume = 0; in mic_config()
1459 mic->name, strerror(errno)); in mic_config()
1468 init_mic(mic); in mic_config()
1473 set_cmdline(struct mic_info *mic) in set_cmdline() argument
1484 mic->id); in set_cmdline()
1486 setsysfs(mic->name, "cmdline", buffer); in set_cmdline()
1487 mpsslog("%s: Command line: \"%s\"\n", mic->name, buffer); in set_cmdline()
1488 snprintf(buffer, PATH_MAX, "172.31.%d.1", mic->id); in set_cmdline()
1489 mpsslog("%s: IPADDR: \"%s\"\n", mic->name, buffer); in set_cmdline()
1493 set_log_buf_info(struct mic_info *mic) in set_log_buf_info() argument
1503 mic->name, errno); in set_log_buf_info()
1509 mic->name, errno); in set_log_buf_info()
1516 mic->name, errno); in set_log_buf_info()
1522 mpsslog("%s: __log_buf not found: %d\n", mic->name, errno); in set_log_buf_info()
1528 setsysfs(mic->name, "log_buf_addr", log_buf); in set_log_buf_info()
1529 mpsslog("%s: log_buf_addr: %s\n", mic->name, log_buf); in set_log_buf_info()
1532 mpsslog("%s: log_buf_len not found: %d\n", mic->name, errno); in set_log_buf_info()
1538 setsysfs(mic->name, "log_buf_len", log_buf); in set_log_buf_info()
1539 mpsslog("%s: log_buf_len: %s\n", mic->name, log_buf); in set_log_buf_info()
1544 static void init_mic(struct mic_info *mic);
1549 struct mic_info *mic; in change_virtblk_backend() local
1551 for (mic = mic_list.next; mic != NULL; mic = mic->next) in change_virtblk_backend()
1552 mic->mic_virtblk.signaled = 1/* true */; in change_virtblk_backend()
1556 init_mic(struct mic_info *mic) in init_mic() argument
1581 mic->pid = fork(); in init_mic()
1582 switch (mic->pid) { in init_mic()
1584 set_log_buf_info(mic); in init_mic()
1585 set_cmdline(mic); in init_mic()
1586 add_virtio_device(mic, &virtcons_dev_page.dd); in init_mic()
1587 add_virtio_device(mic, &virtnet_dev_page.dd); in init_mic()
1588 err = pthread_create(&mic->mic_console.console_thread, NULL, in init_mic()
1589 virtio_console, mic); in init_mic()
1592 mic->name, strerror(err)); in init_mic()
1593 err = pthread_create(&mic->mic_net.net_thread, NULL, in init_mic()
1594 virtio_net, mic); in init_mic()
1597 mic->name, strerror(err)); in init_mic()
1598 err = pthread_create(&mic->mic_virtblk.block_thread, NULL, in init_mic()
1599 virtio_block, mic); in init_mic()
1602 mic->name, strerror(err)); in init_mic()
1607 mic->name, strerror(errno)); in init_mic()
1612 mic->name, mic->id, errno); in init_mic()
1615 if (mic->restart) { in init_mic()
1617 setsysfs(mic->name, "state", buffer); in init_mic()
1619 mic->name, mic->restart); in init_mic()
1620 mic->restart = 0; in init_mic()
1622 pthread_create(&mic->config_thread, NULL, mic_config, mic); in init_mic()
1629 struct mic_info *mic; in start_daemon() local
1631 for (mic = mic_list.next; mic != NULL; mic = mic->next) in start_daemon()
1632 init_mic(mic); in start_daemon()
1641 struct mic_info *mic = &mic_list; in init_mic_list() local
1652 mic->next = calloc(1, sizeof(struct mic_info)); in init_mic_list()
1653 if (mic->next) { in init_mic_list()
1654 mic = mic->next; in init_mic_list()
1655 mic->id = atoi(&file->d_name[3]); in init_mic_list()
1656 mic->name = malloc(strlen(file->d_name) + 16); in init_mic_list()
1657 if (mic->name) in init_mic_list()
1658 strcpy(mic->name, file->d_name); in init_mic_list()
1659 mpsslog("MIC name %s id %d\n", mic->name, in init_mic_list()
1660 mic->id); in init_mic_list()