Lines Matching refs:mic
158 tap_configure(struct mic_info *mic, char *dev) in tap_configure() argument
177 mic->name, strerror(errno)); in tap_configure()
183 mic->name, strerror(errno)); in tap_configure()
190 mic->name, strerror(errno)); in tap_configure()
194 snprintf(ipaddr, IFNAMSIZ, "172.31.%d.254/24", mic->id + 1); in tap_configure()
209 mic->name, strerror(errno)); in tap_configure()
215 mic->name, strerror(errno)); in tap_configure()
222 mic->name, strerror(errno)); in tap_configure()
226 mic->name, __func__, __LINE__); in tap_configure()
230 static int tun_alloc(struct mic_info *mic, char *dev) in tun_alloc() argument
252 mic->name, __func__, __LINE__, strerror(errno)); in tun_alloc()
262 mic->name, __func__, __LINE__, strerror(errno)); in tun_alloc()
277 static void set_dp(struct mic_info *mic, int type, void *dp) in set_dp() argument
281 mic->mic_console.console_dp = dp; in set_dp()
284 mic->mic_net.net_dp = dp; in set_dp()
287 mic->mic_virtblk.block_dp = dp; in set_dp()
290 mpsslog("%s %s %d not found\n", mic->name, __func__, type); in set_dp()
294 static void *get_dp(struct mic_info *mic, int type) in get_dp() argument
298 return mic->mic_console.console_dp; in get_dp()
300 return mic->mic_net.net_dp; in get_dp()
302 return mic->mic_virtblk.block_dp; in get_dp()
304 mpsslog("%s %s %d not found\n", mic->name, __func__, type); in get_dp()
309 static struct mic_device_desc *get_device_desc(struct mic_info *mic, int type) in get_device_desc() argument
313 void *dp = get_dp(mic, type); in get_device_desc()
327 mic->name, __func__, d->type, d); in get_device_desc()
332 mpsslog("%s %s %d not found\n", mic->name, __func__, type); in get_device_desc()
359 static inline void verify_out_len(struct mic_info *mic, in verify_out_len() argument
364 mic->name, __func__, __LINE__, in verify_out_len()
372 disp_iovec(struct mic_info *mic, struct mic_copy_desc *copy, in disp_iovec() argument
379 mic->name, s, line, i, in disp_iovec()
401 mic_virtio_copy(struct mic_info *mic, int fd, in mic_virtio_copy() argument
409 mic->name, __func__, __LINE__, in mic_virtio_copy()
427 init_vr(struct mic_info *mic, int fd, int type, in init_vr() argument
440 mic->name, __func__, __LINE__, in init_vr()
444 set_dp(mic, type, va); in init_vr()
451 __func__, mic->name, vr0->va, vr0->info, vr_size, in init_vr()
464 __func__, mic->name, vr1->va, vr1->info, vr_size, in init_vr()
475 wait_for_card_driver(struct mic_info *mic, int fd, int type) in wait_for_card_driver() argument
479 struct mic_device_desc *desc = get_device_desc(mic, type); in wait_for_card_driver()
487 mic->name, __func__, type, desc->status); in wait_for_card_driver()
495 mic->name, __func__, strerror(errno)); in wait_for_card_driver()
503 mic->name, __func__, type, in wait_for_card_driver()
509 mic->name, __func__, pollfd.revents); in wait_for_card_driver()
511 mic->name, __func__, type, in wait_for_card_driver()
522 spin_for_descriptors(struct mic_info *mic, struct mic_vring *vr) in spin_for_descriptors() argument
529 mic->name, __func__, in spin_for_descriptors()
548 struct mic_info *mic = (struct mic_info *)arg; in virtio_net() local
556 snprintf(if_name, IFNAMSIZ, "mic%d", mic->id); in virtio_net()
557 mic->mic_net.tap_fd = tun_alloc(mic, if_name); in virtio_net()
558 if (mic->mic_net.tap_fd < 0) in virtio_net()
561 if (tap_configure(mic, if_name)) in virtio_net()
563 mpsslog("MIC name %s id %d\n", mic->name, mic->id); in virtio_net()
565 net_poll[NET_FD_VIRTIO_NET].fd = mic->mic_net.virtio_net_fd; in virtio_net()
567 net_poll[NET_FD_TUN].fd = mic->mic_net.tap_fd; in virtio_net()
570 if (MAP_FAILED == init_vr(mic, mic->mic_net.virtio_net_fd, in virtio_net()
574 mic->name, strerror(errno)); in virtio_net()
579 desc = get_device_desc(mic, VIRTIO_ID_NET); in virtio_net()
595 err = wait_for_card_driver(mic, in virtio_net()
596 mic->mic_net.virtio_net_fd, in virtio_net()
600 mic->name, __func__, __LINE__); in virtio_net()
620 mpsslog("%s %s %d hdr->flags 0x%x ", mic->name, in virtio_net()
626 disp_iovec(mic, copy, __func__, __LINE__); in virtio_net()
628 mic->name, __func__, __LINE__, in virtio_net()
631 spin_for_descriptors(mic, &tx_vr); in virtio_net()
635 err = mic_virtio_copy(mic, in virtio_net()
636 mic->mic_net.virtio_net_fd, &tx_vr, in virtio_net()
640 mic->name, __func__, __LINE__, in virtio_net()
644 verify_out_len(mic, ©); in virtio_net()
646 disp_iovec(mic, copy, __func__, __LINE__); in virtio_net()
648 mic->name, __func__, __LINE__, in virtio_net()
654 disp_iovec(mic, ©, __func__, __LINE__); in virtio_net()
655 mpsslog("%s %s %d read failed %s ", mic->name, in virtio_net()
674 err = mic_virtio_copy(mic, in virtio_net()
675 mic->mic_net.virtio_net_fd, &rx_vr, in virtio_net()
684 mic->name, __func__, __LINE__, in virtio_net()
693 verify_out_len(mic, ©); in virtio_net()
695 disp_iovec(mic, copy, __func__, in virtio_net()
698 mic->name, __func__, __LINE__); in virtio_net()
712 disp_iovec(mic, ©, __func__, in virtio_net()
715 mic->name, __func__, in virtio_net()
723 mic->name, __func__, __LINE__, in virtio_net()
730 mpsslog("%s: %s: POLLERR\n", __func__, mic->name); in virtio_net()
751 struct mic_info *mic = (struct mic_info *)arg; in virtio_console() local
772 printf("%s console message goes to %s\n", mic->name, pts_name); in virtio_console()
773 mpsslog("%s console message goes to %s\n", mic->name, pts_name); in virtio_console()
789 console_poll[VIRTIO_CONSOLE_FD].fd = mic->mic_console.virtio_console_fd; in virtio_console()
792 if (MAP_FAILED == init_vr(mic, mic->mic_console.virtio_console_fd, in virtio_console()
796 mic->name, strerror(errno)); in virtio_console()
801 desc = get_device_desc(mic, VIRTIO_ID_CONSOLE); in virtio_console()
813 err = wait_for_card_driver(mic, in virtio_console()
814 mic->mic_console.virtio_console_fd, in virtio_console()
818 mic->name, __func__, __LINE__); in virtio_console()
828 disp_iovec(mic, copy, __func__, __LINE__); in virtio_console()
830 mic->name, __func__, __LINE__, in virtio_console()
833 spin_for_descriptors(mic, &tx_vr); in virtio_console()
837 err = mic_virtio_copy(mic, in virtio_console()
838 mic->mic_console.virtio_console_fd, in virtio_console()
842 mic->name, __func__, __LINE__, in virtio_console()
846 verify_out_len(mic, ©); in virtio_console()
848 disp_iovec(mic, copy, __func__, __LINE__); in virtio_console()
850 mic->name, __func__, __LINE__, in virtio_console()
856 disp_iovec(mic, ©, __func__, __LINE__); in virtio_console()
858 mic->name, __func__, __LINE__, in virtio_console()
872 err = mic_virtio_copy(mic, in virtio_console()
873 mic->mic_console.virtio_console_fd, in virtio_console()
878 verify_out_len(mic, ©); in virtio_console()
880 disp_iovec(mic, copy, __func__, in virtio_console()
883 mic->name, __func__, __LINE__); in virtio_console()
897 disp_iovec(mic, copy, __func__, in virtio_console()
900 mic->name, __func__, in virtio_console()
908 mic->name, __func__, __LINE__, in virtio_console()
915 mpsslog("%s: %s: POLLERR\n", __func__, mic->name); in virtio_console()
924 add_virtio_device(struct mic_info *mic, struct mic_device_desc *dd) in add_virtio_device() argument
929 snprintf(path, PATH_MAX, "/dev/mic%d", mic->id); in add_virtio_device()
944 mic->mic_net.virtio_net_fd = fd; in add_virtio_device()
945 mpsslog("Added VIRTIO_ID_NET for %s\n", mic->name); in add_virtio_device()
948 mic->mic_console.virtio_console_fd = fd; in add_virtio_device()
949 mpsslog("Added VIRTIO_ID_CONSOLE for %s\n", mic->name); in add_virtio_device()
952 mic->mic_virtblk.virtio_block_fd = fd; in add_virtio_device()
953 mpsslog("Added VIRTIO_ID_BLOCK for %s\n", mic->name); in add_virtio_device()
959 set_backend_file(struct mic_info *mic) in set_backend_file() argument
964 snprintf(buff, PATH_MAX, "%s/mpssd%03d.conf", mic_config_dir, mic->id); in set_backend_file()
984 mic->mic_virtblk.backend_file = malloc(strlen(evv) + 1); in set_backend_file()
985 if (mic->mic_virtblk.backend_file == NULL) { in set_backend_file()
986 mpsslog("%s %d can't allocate memory\n", mic->name, mic->id); in set_backend_file()
989 strcpy(mic->mic_virtblk.backend_file, evv + 1); in set_backend_file()
995 set_backend_size(struct mic_info *mic) in set_backend_size() argument
997 mic->mic_virtblk.backend_size = lseek(mic->mic_virtblk.backend, 0, in set_backend_size()
999 if (mic->mic_virtblk.backend_size < 0) { in set_backend_size()
1001 mic->name, mic->mic_virtblk.backend_file); in set_backend_size()
1005 mic->mic_virtblk.backend_size / SECTOR_SIZE; in set_backend_size()
1006 if ((mic->mic_virtblk.backend_size % SECTOR_SIZE) != 0) in set_backend_size()
1016 open_backend(struct mic_info *mic) in open_backend() argument
1018 if (!set_backend_file(mic)) in open_backend()
1020 mic->mic_virtblk.backend = open(mic->mic_virtblk.backend_file, O_RDWR); in open_backend()
1021 if (mic->mic_virtblk.backend < 0) { in open_backend()
1022 mpsslog("%s: can't open: %s\n", mic->name, in open_backend()
1023 mic->mic_virtblk.backend_file); in open_backend()
1026 if (!set_backend_size(mic)) in open_backend()
1028 mic->mic_virtblk.backend_addr = mmap(NULL, in open_backend()
1029 mic->mic_virtblk.backend_size, in open_backend()
1031 mic->mic_virtblk.backend, 0L); in open_backend()
1032 if (mic->mic_virtblk.backend_addr == MAP_FAILED) { in open_backend()
1034 mic->name, mic->mic_virtblk.backend_file, in open_backend()
1041 close(mic->mic_virtblk.backend); in open_backend()
1043 free(mic->mic_virtblk.backend_file); in open_backend()
1049 close_backend(struct mic_info *mic) in close_backend() argument
1051 munmap(mic->mic_virtblk.backend_addr, mic->mic_virtblk.backend_size); in close_backend()
1052 close(mic->mic_virtblk.backend); in close_backend()
1053 free(mic->mic_virtblk.backend_file); in close_backend()
1057 start_virtblk(struct mic_info *mic, struct mic_vring *vring) in start_virtblk() argument
1061 mic->name); in start_virtblk()
1064 add_virtio_device(mic, &virtblk_dev_page.dd); in start_virtblk()
1065 if (MAP_FAILED == init_vr(mic, mic->mic_virtblk.virtio_block_fd, in start_virtblk()
1069 mic->name, strerror(errno)); in start_virtblk()
1076 stop_virtblk(struct mic_info *mic) in stop_virtblk() argument
1083 ret = munmap(mic->mic_virtblk.block_dp, in stop_virtblk()
1086 mpsslog("%s munmap errno %d\n", mic->name, errno); in stop_virtblk()
1087 close(mic->mic_virtblk.virtio_block_fd); in stop_virtblk()
1171 struct mic_info *mic = (struct mic_info *)arg; in virtio_block() local
1185 if (!open_backend(mic)) { /* No virtblk */ in virtio_block()
1186 for (mic->mic_virtblk.signaled = 0; in virtio_block()
1187 !mic->mic_virtblk.signaled;) in virtio_block()
1193 if (!start_virtblk(mic, &vring)) in virtio_block()
1199 mic->name, strerror(ENOMEM)); in virtio_block()
1203 block_poll.fd = mic->mic_virtblk.virtio_block_fd; in virtio_block()
1205 for (mic->mic_virtblk.signaled = 0; in virtio_block()
1206 !mic->mic_virtblk.signaled;) { in virtio_block()
1244 mic->mic_virtblk.virtio_block_fd, in virtio_block()
1249 mic->name, ret, in virtio_block()
1256 fos = mic->mic_virtblk.backend_addr + in virtio_block()
1290 mic->mic_virtblk.virtio_block_fd, in virtio_block()
1301 mic->mic_virtblk.virtio_block_fd, in virtio_block()
1312 stop_virtblk(mic); in virtio_block()
1314 close_backend(mic); in virtio_block()
1321 reset(struct mic_info *mic) in reset() argument
1325 setsysfs(mic->name, "state", "reset"); in reset()
1328 state = readsysfs(mic->name, "state"); in reset()
1332 mic->name, __func__, __LINE__, state); in reset()
1346 get_mic_shutdown_status(struct mic_info *mic, char *shutdown_status) in get_mic_shutdown_status() argument
1358 mpsslog("%s: BUG invalid status %s\n", mic->name, shutdown_status); in get_mic_shutdown_status()
1363 static int get_mic_state(struct mic_info *mic) in get_mic_state() argument
1369 state = readsysfs(mic->name, "state"); in get_mic_state()
1373 mic->name, __func__, __LINE__, state); in get_mic_state()
1388 mpsslog("%s: BUG invalid state %s\n", mic->name, state); in get_mic_state()
1396 static void mic_handle_shutdown(struct mic_info *mic) in mic_handle_shutdown() argument
1402 shutdown_status = readsysfs(mic->name, "shutdown_status"); in mic_handle_shutdown()
1408 mic->name, __func__, __LINE__, shutdown_status); in mic_handle_shutdown()
1409 switch (get_mic_shutdown_status(mic, shutdown_status)) { in mic_handle_shutdown()
1411 mic->restart = 1; in mic_handle_shutdown()
1427 mic->name, __func__, __LINE__, shutdown_status); in mic_handle_shutdown()
1428 reset(mic); in mic_handle_shutdown()
1431 static int open_state_fd(struct mic_info *mic) in open_state_fd() argument
1437 MICSYSFSDIR, mic->name, "state"); in open_state_fd()
1442 mic->name, pathname, strerror(errno)); in open_state_fd()
1446 static int block_till_state_change(int fd, struct mic_info *mic) in block_till_state_change() argument
1457 mic->name, __func__, __LINE__, strerror(errno)); in block_till_state_change()
1464 mic->name, __func__, __LINE__, strerror(errno)); in block_till_state_change()
1471 mic->name, __func__, __LINE__, strerror(errno)); in block_till_state_change()
1481 struct mic_info *mic = (struct mic_info *)arg; in mic_config() local
1484 fd = open_state_fd(mic); in mic_config()
1487 mic->name, __func__, __LINE__, strerror(errno)); in mic_config()
1492 ret = block_till_state_change(fd, mic); in mic_config()
1495 mic->name, __func__, __LINE__, strerror(errno)); in mic_config()
1499 switch (get_mic_state(mic)) { in mic_config()
1501 mic_handle_shutdown(mic); in mic_config()
1505 ret = kill(mic->pid, SIGTERM); in mic_config()
1507 mic->name, __func__, __LINE__, in mic_config()
1508 mic->pid, ret); in mic_config()
1510 ret = waitpid(mic->pid, &stat, in mic_config()
1513 mic->name, __func__, __LINE__, in mic_config()
1514 ret, mic->pid); in mic_config()
1516 if (mic->boot_on_resume) { in mic_config()
1517 setsysfs(mic->name, "state", "boot"); in mic_config()
1518 mic->boot_on_resume = 0; in mic_config()
1529 init_mic(mic); in mic_config()
1534 set_cmdline(struct mic_info *mic) in set_cmdline() argument
1545 mic->id + 1); in set_cmdline()
1547 setsysfs(mic->name, "cmdline", buffer); in set_cmdline()
1548 mpsslog("%s: Command line: \"%s\"\n", mic->name, buffer); in set_cmdline()
1549 snprintf(buffer, PATH_MAX, "172.31.%d.1", mic->id + 1); in set_cmdline()
1550 mpsslog("%s: IPADDR: \"%s\"\n", mic->name, buffer); in set_cmdline()
1554 set_log_buf_info(struct mic_info *mic) in set_log_buf_info() argument
1564 mic->name, errno); in set_log_buf_info()
1570 mic->name, errno); in set_log_buf_info()
1577 mic->name, errno); in set_log_buf_info()
1583 mpsslog("%s: __log_buf not found: %d\n", mic->name, errno); in set_log_buf_info()
1589 setsysfs(mic->name, "log_buf_addr", log_buf); in set_log_buf_info()
1590 mpsslog("%s: log_buf_addr: %s\n", mic->name, log_buf); in set_log_buf_info()
1593 mpsslog("%s: log_buf_len not found: %d\n", mic->name, errno); in set_log_buf_info()
1599 setsysfs(mic->name, "log_buf_len", log_buf); in set_log_buf_info()
1600 mpsslog("%s: log_buf_len: %s\n", mic->name, log_buf); in set_log_buf_info()
1608 struct mic_info *mic; in change_virtblk_backend() local
1610 for (mic = mic_list.next; mic != NULL; mic = mic->next) in change_virtblk_backend()
1611 mic->mic_virtblk.signaled = 1/* true */; in change_virtblk_backend()
1615 set_mic_boot_params(struct mic_info *mic) in set_mic_boot_params() argument
1617 set_log_buf_info(mic); in set_mic_boot_params()
1618 set_cmdline(mic); in set_mic_boot_params()
1624 struct mic_info *mic = (struct mic_info *)arg; in init_mic() local
1648 fd = open_state_fd(mic); in init_mic()
1651 mic->name, __func__, __LINE__, strerror(errno)); in init_mic()
1656 if (mic->restart) { in init_mic()
1658 setsysfs(mic->name, "state", buffer); in init_mic()
1660 mic->name, mic->restart); in init_mic()
1661 mic->restart = 0; in init_mic()
1665 while (block_till_state_change(fd, mic)) { in init_mic()
1667 mic->name, __func__, __LINE__, strerror(errno)); in init_mic()
1672 if (get_mic_state(mic) == MIC_BOOTING) in init_mic()
1676 mic->pid = fork(); in init_mic()
1677 switch (mic->pid) { in init_mic()
1679 add_virtio_device(mic, &virtcons_dev_page.dd); in init_mic()
1680 add_virtio_device(mic, &virtnet_dev_page.dd); in init_mic()
1681 err = pthread_create(&mic->mic_console.console_thread, NULL, in init_mic()
1682 virtio_console, mic); in init_mic()
1685 mic->name, strerror(err)); in init_mic()
1686 err = pthread_create(&mic->mic_net.net_thread, NULL, in init_mic()
1687 virtio_net, mic); in init_mic()
1690 mic->name, strerror(err)); in init_mic()
1691 err = pthread_create(&mic->mic_virtblk.block_thread, NULL, in init_mic()
1692 virtio_block, mic); in init_mic()
1695 mic->name, strerror(err)); in init_mic()
1700 mic->name, strerror(errno)); in init_mic()
1705 mic->name, mic->id, errno); in init_mic()
1708 err = pthread_create(&mic->config_thread, NULL, in init_mic()
1709 mic_config, mic); in init_mic()
1712 mic->name, strerror(err)); in init_mic()
1721 struct mic_info *mic; in start_daemon() local
1724 for (mic = mic_list.next; mic; mic = mic->next) { in start_daemon()
1725 set_mic_boot_params(mic); in start_daemon()
1726 err = pthread_create(&mic->init_thread, NULL, init_mic, mic); in start_daemon()
1729 mic->name, strerror(err)); in start_daemon()
1739 struct mic_info *mic = &mic_list; in init_mic_list() local
1750 mic->next = calloc(1, sizeof(struct mic_info)); in init_mic_list()
1751 if (mic->next) { in init_mic_list()
1752 mic = mic->next; in init_mic_list()
1753 mic->id = atoi(&file->d_name[3]); in init_mic_list()
1754 mic->name = malloc(strlen(file->d_name) + 16); in init_mic_list()
1755 if (mic->name) in init_mic_list()
1756 strcpy(mic->name, file->d_name); in init_mic_list()
1757 mpsslog("MIC name %s id %d\n", mic->name, in init_mic_list()
1758 mic->id); in init_mic_list()