/** * Print status of network device * * @v netdev Network device */ void ifstat ( struct net_device *netdev ) { printf ( "%s: %s on %s (%s)\n" " [Link:%s, TX:%d TXE:%d RX:%d RXE:%d]\n", netdev->name, netdev_addr ( netdev ), netdev->dev->name, ( netdev_is_open ( netdev ) ? "open" : "closed" ), ( netdev_link_ok ( netdev ) ? "up" : "down" ), netdev->tx_stats.good, netdev->tx_stats.bad, netdev->rx_stats.good, netdev->rx_stats.bad ); if ( ! netdev_link_ok ( netdev ) ) { printf ( " [Link status: %s]\n", strerror ( netdev->link_rc ) ); } ifstat_errors ( &netdev->tx_stats, "TXE" ); ifstat_errors ( &netdev->rx_stats, "RXE" ); }
/** * Build HII package list for SNP device * * @v snpdev SNP device * @ret package Package list, or NULL on error */ static EFI_HII_PACKAGE_LIST_HEADER * efi_snp_hii_package_list ( struct efi_snp_device *snpdev ) { struct net_device *netdev = snpdev->netdev; struct device *dev = netdev->dev; struct efi_ifr_builder ifr; EFI_HII_PACKAGE_LIST_HEADER *package; const char *name; EFI_GUID package_guid; EFI_GUID formset_guid; EFI_GUID varstore_guid; unsigned int title_id; unsigned int varstore_id; /* Initialise IFR builder */ efi_ifr_init ( &ifr ); /* Determine product name */ name = ( product_name[0] ? product_name : product_short_name ); /* Generate GUIDs */ efi_snp_hii_random_guid ( &package_guid ); efi_snp_hii_random_guid ( &formset_guid ); efi_snp_hii_random_guid ( &varstore_guid ); /* Generate title string (used more than once) */ title_id = efi_ifr_string ( &ifr, "%s (%s)", name, netdev_addr ( netdev ) ); /* Generate opcodes */ efi_ifr_form_set_op ( &ifr, &formset_guid, title_id, efi_ifr_string ( &ifr, "Configure %s", product_short_name ), &efi_hii_platform_setup_formset_guid, &efi_hii_ibm_ucm_compliant_formset_guid, NULL ); efi_ifr_guid_class_op ( &ifr, EFI_NETWORK_DEVICE_CLASS ); efi_ifr_guid_subclass_op ( &ifr, 0x03 ); varstore_id = efi_ifr_varstore_name_value_op ( &ifr, &varstore_guid ); efi_ifr_form_op ( &ifr, title_id ); efi_ifr_text_op ( &ifr, efi_ifr_string ( &ifr, "Name" ), efi_ifr_string ( &ifr, "Firmware product name" ), efi_ifr_string ( &ifr, "%s", name ) ); efi_ifr_text_op ( &ifr, efi_ifr_string ( &ifr, "Version" ), efi_ifr_string ( &ifr, "Firmware version" ), efi_ifr_string ( &ifr, "%s", product_version ) ); efi_ifr_text_op ( &ifr, efi_ifr_string ( &ifr, "Driver" ), efi_ifr_string ( &ifr, "Firmware driver" ), efi_ifr_string ( &ifr, "%s", dev->driver_name ) ); efi_ifr_text_op ( &ifr, efi_ifr_string ( &ifr, "Device" ), efi_ifr_string ( &ifr, "Hardware device" ), efi_ifr_string ( &ifr, "%s", dev->name ) ); efi_snp_hii_questions ( snpdev, &ifr, varstore_id ); efi_ifr_end_op ( &ifr ); efi_ifr_end_op ( &ifr ); /* Build package */ package = efi_ifr_package ( &ifr, &package_guid, "en-us", efi_ifr_string ( &ifr, "English" ) ); if ( ! package ) { DBGC ( snpdev, "SNPDEV %p could not build IFR package\n", snpdev ); efi_ifr_free ( &ifr ); return NULL; } /* Free temporary storage */ efi_ifr_free ( &ifr ); return package; }