ixgbe: Add boolean parameter to ixgbe_set_vmolr
authorGreg Rose <gregory.v.rose@intel.com>
Tue, 4 May 2010 22:11:46 +0000 (22:11 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 6 May 2010 04:15:32 +0000 (21:15 -0700)
Add a boolean parameter to ixgbe-set_vmolr so that the caller can
specify whether the pool should accept untagged packets.  Required
for a follow on patch to enable administrative configuration of port
VLAN for virtual functions.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_sriov.c
drivers/net/ixgbe/ixgbe_sriov.h

index 2ae5a5159ce4cf7e908c855c4463772ece65e0cd..0a0e90e800255540ea6bfa3517cdde85657c051f 100644 (file)
@@ -2722,7 +2722,7 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
                IXGBE_WRITE_REG(hw, IXGBE_VFRE(reg_offset), (1 << vf_shift));
                IXGBE_WRITE_REG(hw, IXGBE_VFTE(reg_offset), (1 << vf_shift));
                IXGBE_WRITE_REG(hw, IXGBE_PFDTXGSWC, IXGBE_PFDTXGSWC_VT_LBEN);
-               ixgbe_set_vmolr(hw, adapter->num_vfs);
+               ixgbe_set_vmolr(hw, adapter->num_vfs, true);
        }
 
        /* Program MRQC for the distribution of queues */
index d4cd20f301990e576cc12ecf24f71eb1908c5371..53f364d577399b15d07db5a07309d637a9539b4b 100644 (file)
@@ -113,13 +113,16 @@ int ixgbe_set_vf_vlan(struct ixgbe_adapter *adapter, int add, int vid, u32 vf)
 }
 
 
-void ixgbe_set_vmolr(struct ixgbe_hw *hw, u32 vf)
+void ixgbe_set_vmolr(struct ixgbe_hw *hw, u32 vf, bool aupe)
 {
        u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf));
-       vmolr |= (IXGBE_VMOLR_AUPE |
-                 IXGBE_VMOLR_ROMPE |
+       vmolr |= (IXGBE_VMOLR_ROMPE |
                  IXGBE_VMOLR_ROPE |
                  IXGBE_VMOLR_BAM);
+       if (aupe)
+               vmolr |= IXGBE_VMOLR_AUPE;
+       else
+               vmolr &= ~IXGBE_VMOLR_AUPE;
        IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);
 }
 
@@ -128,7 +131,7 @@ inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
        struct ixgbe_hw *hw = &adapter->hw;
 
        /* reset offloads to defaults */
-       ixgbe_set_vmolr(hw, vf);
+       ixgbe_set_vmolr(hw, vf, true);
 
 
        /* reset multicast table array for vf */
index 51d1106c45a1fec2d3074e4098cbb76e2698a6fc..7fb12885cf5d52720c06c7be8fb8c7eed2596bce 100644 (file)
@@ -32,7 +32,7 @@ int ixgbe_set_vf_multicasts(struct ixgbe_adapter *adapter,
                             int entries, u16 *hash_list, u32 vf);
 void ixgbe_restore_vf_multicasts(struct ixgbe_adapter *adapter);
 int ixgbe_set_vf_vlan(struct ixgbe_adapter *adapter, int add, int vid, u32 vf);
-void ixgbe_set_vmolr(struct ixgbe_hw *hw, u32 vf);
+void ixgbe_set_vmolr(struct ixgbe_hw *hw, u32 vf, bool aupe);
 void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf);
 void ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf);
 void ixgbe_msg_task(struct ixgbe_adapter *adapter);