}
 EXPORT_SYMBOL(ib_check_mr_status);
 
+int ib_set_vf_link_state(struct ib_device *device, int vf, u8 port,
+                        int state)
+{
+       if (!device->set_vf_link_state)
+               return -ENOSYS;
+
+       return device->set_vf_link_state(device, vf, port, state);
+}
+EXPORT_SYMBOL(ib_set_vf_link_state);
+
+int ib_get_vf_config(struct ib_device *device, int vf, u8 port,
+                    struct ifla_vf_info *info)
+{
+       if (!device->get_vf_config)
+               return -ENOSYS;
+
+       return device->get_vf_config(device, vf, port, info);
+}
+EXPORT_SYMBOL(ib_get_vf_config);
+
+int ib_get_vf_stats(struct ib_device *device, int vf, u8 port,
+                   struct ifla_vf_stats *stats)
+{
+       if (!device->get_vf_stats)
+               return -ENOSYS;
+
+       return device->get_vf_stats(device, vf, port, stats);
+}
+EXPORT_SYMBOL(ib_get_vf_stats);
+
+int ib_set_vf_guid(struct ib_device *device, int vf, u8 port, u64 guid,
+                  int type)
+{
+       if (!device->set_vf_guid)
+               return -ENOSYS;
+
+       return device->set_vf_guid(device, vf, port, guid, type);
+}
+EXPORT_SYMBOL(ib_set_vf_guid);
+
 /**
  * ib_map_mr_sg() - Map the largest prefix of a dma mapped SG list
  *     and set it the memory region.
 
 #include <linux/string.h>
 #include <linux/slab.h>
 
+#include <linux/if_link.h>
 #include <linux/atomic.h>
 #include <linux/mmu_notifier.h>
 #include <asm/uaccess.h>
        IB_DEVICE_SIGNATURE_HANDOVER            = (1 << 30),
        IB_DEVICE_ON_DEMAND_PAGING              = (1 << 31),
        IB_DEVICE_SG_GAPS_REG                   = (1ULL << 32),
+       IB_DEVICE_VIRTUAL_FUNCTION              = ((u64)1 << 33),
 };
 
 enum ib_signature_prot_cap {
        void                       (*disassociate_ucontext)(struct ib_ucontext *ibcontext);
        void                       (*drain_rq)(struct ib_qp *qp);
        void                       (*drain_sq)(struct ib_qp *qp);
+       int                        (*set_vf_link_state)(struct ib_device *device, int vf, u8 port,
+                                                       int state);
+       int                        (*get_vf_config)(struct ib_device *device, int vf, u8 port,
+                                                  struct ifla_vf_info *ivf);
+       int                        (*get_vf_stats)(struct ib_device *device, int vf, u8 port,
+                                                  struct ifla_vf_stats *stats);
+       int                        (*set_vf_guid)(struct ib_device *device, int vf, u8 port, u64 guid,
+                                                 int type);
 
        struct ib_dma_mapping_ops   *dma_ops;
 
                 u8 port_num, int index, union ib_gid *gid,
                 struct ib_gid_attr *attr);
 
+int ib_set_vf_link_state(struct ib_device *device, int vf, u8 port,
+                        int state);
+int ib_get_vf_config(struct ib_device *device, int vf, u8 port,
+                    struct ifla_vf_info *info);
+int ib_get_vf_stats(struct ib_device *device, int vf, u8 port,
+                   struct ifla_vf_stats *stats);
+int ib_set_vf_guid(struct ib_device *device, int vf, u8 port, u64 guid,
+                  int type);
+
 int ib_query_pkey(struct ib_device *device,
                  u8 port_num, u16 index, u16 *pkey);