Add the device ID of the VF to the PCI device ID table.
Added a boolean flag is_vf in efx_nic_type to differentiate
between a VF and PF at probe time. This flag is useful in later
patches while setting MAC address specially in the
PCI-passthrough case.
Signed-off-by: Shradha Shah <sshah@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
 }
 
 const struct efx_nic_type efx_hunt_a0_vf_nic_type = {
+       .is_vf = true,
        .mem_bar = EFX_MEM_VF_BAR,
        .mem_map_size = efx_ef10_mem_map_size,
        .probe = efx_ef10_probe_vf,
 };
 
 const struct efx_nic_type efx_hunt_a0_nic_type = {
+       .is_vf = false,
        .mem_bar = EFX_MEM_BAR,
        .mem_map_size = efx_ef10_mem_map_size,
        .probe = efx_ef10_probe_pf,
 
        }
 #endif
        efx->rss_spread = efx->n_rx_channels;
+
        return 0;
 }
 
         .driver_data = (unsigned long) &siena_a0_nic_type},
        {PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x0903),  /* SFC9120 PF */
         .driver_data = (unsigned long) &efx_hunt_a0_nic_type},
+       {PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x1903),  /* SFC9120 VF */
+        .driver_data = (unsigned long) &efx_hunt_a0_vf_nic_type},
        {PCI_DEVICE(PCI_VENDOR_ID_SOLARFLARE, 0x0923),  /* SFC9140 PF */
         .driver_data = (unsigned long) &efx_hunt_a0_nic_type},
        {0}                     /* end of list */
        netif_info(efx, probe, efx->net_dev,
                   "Solarflare NIC detected\n");
 
-       efx_probe_vpd_strings(efx);
+       if (!efx->type->is_vf)
+               efx_probe_vpd_strings(efx);
 
        /* Set up basic I/O (BAR mappings etc) */
        rc = efx_init_io(efx);
 
  */
 
 const struct efx_nic_type falcon_a1_nic_type = {
+       .is_vf = false,
        .mem_bar = EFX_MEM_BAR,
        .mem_map_size = falcon_a1_mem_map_size,
        .probe = falcon_probe_nic,
 };
 
 const struct efx_nic_type falcon_b0_nic_type = {
+       .is_vf = false,
        .mem_bar = EFX_MEM_BAR,
        .mem_map_size = falcon_b0_mem_map_size,
        .probe = falcon_probe_nic,
 
         * and are completely trusted by firmware.  Abort probing
         * if that's not true for this function.
         */
-       if (driver_operating &&
-           (efx->mcdi->fn_flags &
-            (1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL |
-             1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED)) !=
-           (1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL |
-            1 << MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED)) {
-               netif_err(efx, probe, efx->net_dev,
-                         "This driver version only supports one function per port\n");
-               return -ENODEV;
-       }
 
        if (was_attached != NULL)
                *was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE);
 
  * @hwtstamp_filters: Mask of hardware timestamp filter types supported
  */
 struct efx_nic_type {
+       bool is_vf;
        unsigned int mem_bar;
        unsigned int (*mem_map_size)(struct efx_nic *efx);
        int (*probe)(struct efx_nic *efx);
 
  */
 
 const struct efx_nic_type siena_a0_nic_type = {
+       .is_vf = false,
        .mem_bar = EFX_MEM_BAR,
        .mem_map_size = siena_mem_map_size,
        .probe = siena_probe_nic,