int
load_command_line(
mic_ctx_t * mic_ctx,
uint64_t uos_cmd_offset,
uint32_t initramfs_image,
uint32_t initramfs_size);
| card=%d | mic_ctx->bi_id | |
| vnet=%s | "poll" | mic_vnet_mode==VNET_MODE_POLL |
| vnet=%s | "intr" | mic_vnet_mode==VNET_MODE_INTR |
| vnet=%s | "dma" | mic_vnet_mode==VNET_MODE_DMA |
| scif_id=%d | mic_ctx->bi_id+1 | |
| scif_addr=0x%llx | mic_ctx->bi_scif.si_pa | |
| vnet_addr=0x%llx | mic_ctx->bd_info->bi_vethinfo->vi_rp_phys | mic_vnet_mode==VNET_MODE_DMA |
| memmap=%dM$0x%08x | initramfs_size, initramfs_image | initramfs_image!=NULL |
| rdinit=%s | "/init" | initramfs_image!=NULL |
| initrd=0x%08x,%dM | initramfs_image, initramfs_size | initramfs_image!=NULL |
| vcons_hdr_addr=0x%llx | vcons->dc_hdr_dma_addr | #ifdef USE_VCONSOLE mic_ctx->bi_vcons->dc_enabled |
| vcons_hdr_addr=0x%llx | 0 | #ifdef USE_VCONSOLE !mic_ctx->bi_vcons->dc_enabled |
| virtio_addr=0x%llx | mic_ctx->bd_info->bi_virtio? | |
| mem=%dM | mic_ctx->boot_mem | |
| ramoops_size=%d | mic_ctx->ramoops_size | mic_ctx->ramoops_size!=0 |
| ramoops_addr=0x%llx | mic_ctx->ramoops_pa[0] | mic_ctx->ramoops_size!=0 |
| p2p=%d | mic_p2p_enable | |
| etc_comp=%lld | mic_ctx->etc_comp | |
| reg_cache=%d | mic_reg_cache_enable | |
| huge_page=%d | mic_huge_page_enable | |
| %s | mic_ctx->sysfs_info.cmdline | mic_ctx->sysfs_info.cmdline!=NULL |
| hostname=mic%d | mic_ctx->bi_id | mic_ctx->sysfs_info.cmdline==NULL |
| ipaddr=171.31.%d.2 | mic_ctx->bi_id+1 | mic_ctx->sysfs_info.cmdline==NULL |
| quiet | mic_ctx->sysfs_info.cmdline==NULL | |
| console=%s | "ttyS0,115200n8" | mic_ctx->sysfs_info.cmdline==NULL |
555 int
556 load_command_line(mic_ctx_t *mic_ctx, uint64_t uos_cmd_offset, uint32_t initramfs_image, uint32_t in itramfs_size)
557 {
558 void *cmd_line_va = mic_ctx->aper.va + uos_cmd_offset;
559 uint32_t cmdlen = 0;
560 char *buf = NULL;
561 struct board_info *bi = mic_ctx->bd_info;
562
563 #ifdef USE_VCONSOLE
564 micvcons_t *vcons = &mic_ctx->bi_vcons;
565 dma_addr_t vc_hdr_dma_addr = 0;
566 #endif
567
568 /*
569 * mic_ctx->boot_mem will also be set in IOCTL to boot the card in restricted memory
570 * FIXME::This code is added to keep the backward compatibility with IOCTLs
571 */
572 if (mic_ctx->bi_family == FAMILY_KNC)
573 if (mic_ctx->boot_mem == 0 || mic_ctx->boot_mem > mic_ctx->aper.len >> 20)
574 mic_ctx->boot_mem = mic_ctx->aper.len >> 20;
575 if (!(buf = kzalloc(MIC_CMDLINE_BUFSIZE, GFP_KERNEL))) {
576 printk(KERN_ERR "failed to allocate %d bytes for uOS command line\n",
577 MIC_CMDLINE_BUFSIZE);
578 return -ENOMEM;
579 }
580
581 cmdlen = snprintf(buf, MIC_CMDLINE_BUFSIZE, "card=%d vnet=%s scif_id=%d scif_addr=0x%llx",
582 mic_ctx->bi_id, mic_vnet_modes[mic_vnet_mode],
583 mic_ctx->bi_id + 1, mic_ctx->bi_scif.si_pa);
584
585 if (mic_vnet_mode == VNET_MODE_DMA) {
586 struct micvnet_info *vnet_info = bi->bi_vethinfo;
587 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
588 " vnet_addr=0x%llx", vnet_info->vi_rp_phys);
589 }
590
591 if (initramfs_image) {
592 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
593 " memmap=%dM$0x%08x rdinit=/init initrd=0x%08x,%dM ",
594 initramfs_size, initramfs_image, initramfs_image, initramfs_size);
595 }
596
597 #ifdef USE_VCONSOLE
598 if (vcons->dc_enabled)
599 vc_hdr_dma_addr = vcons->dc_hdr_dma_addr;
600
601 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
602 " vcons_hdr_addr=0x%llx", vc_hdr_dma_addr);
603 #endif
604
605 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) || defined(__GNUC_RH_RELEASE__)
606 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen, " virtio_addr=0x%llx",
607 mic_ctx_map_single(mic_ctx, bi->bi_virtio, sizeof(struct vb_shared)) );
608 #endif
609
610 if (mic_ctx->boot_mem)
611 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
612 " mem=%dM", mic_ctx->boot_mem);
613 mic_ctx->boot_mem = 0;
614
615 if (mic_ctx->ramoops_size)
616 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
617 " ramoops_size=%d ramoops_addr=0x%llx",
618 mic_ctx->ramoops_size, mic_ctx->ramoops_pa[0]);
619
620 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen, " p2p=%d", mic_p2p_enable);
621
622 if (mic_ctx->bi_family == FAMILY_KNC)
623 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
624 " etc_comp=%lld", mic_ctx->etc_comp);
625 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
626 " reg_cache=%d", mic_reg_cache_enable);
627 cmdlen += snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
628 " huge_page=%d", mic_huge_page_enable);
629 if (mic_ctx->sysfs_info.cmdline != NULL)
630 snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
631 " %s", mic_ctx->sysfs_info.cmdline);
632 else
633 snprintf(buf + cmdlen, MIC_CMDLINE_BUFSIZE - cmdlen,
634 " hostname=mic%d ipaddr=171.31.%d.2 quiet console=ttyS0,115200n8",
635 mic_ctx->bi_id, mic_ctx->bi_id + 1);
636
637 memcpy_toio(cmd_line_va, buf, strlen(buf) + 1);
638
639 if (mic_ctx->sysfs_info.kernel_cmdline != NULL)
640 kfree(mic_ctx->sysfs_info.kernel_cmdline);
641
642 if ((mic_ctx->sysfs_info.kernel_cmdline = kmalloc(strlen(buf) + 1, GFP_KERNEL)) != NULL)
643 strcpy(mic_ctx->sysfs_info.kernel_cmdline, buf);
644
645 kfree(buf);
646 return 0;
647 }