From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 76D35378E for ; Mon, 26 Oct 2015 08:36:29 +0100 (CET) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP; 26 Oct 2015 00:36:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,200,1444719600"; d="scan'208";a="802965620" Received: from shwdeisgchi017.ccr.corp.intel.com (HELO [10.239.66.70]) ([10.239.66.70]) by orsmga001.jf.intel.com with ESMTP; 26 Oct 2015 00:35:44 -0700 Message-ID: <562DD7D0.8060808@intel.com> Date: Mon, 26 Oct 2015 15:35:44 +0800 From: "Liang, Cunming" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Yong Liu , dev@dpdk.org References: <1443169692-4709-1-git-send-email-yong.liu@intel.com> <1443169692-4709-2-git-send-email-yong.liu@intel.com> In-Reply-To: <1443169692-4709-2-git-send-email-yong.liu@intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v1 1/7] e1000: add rx interrupt support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 26 Oct 2015 07:36:29 -0000 Hi Yong, On 9/25/2015 4:28 PM, Yong Liu wrote: > From: Marvin Liu > > Enable rx interrupt support on e1000 PF non-IOV mode. As I know, e1000 hasn't IOV mode. It's not necessary to mention PF non-IOV mode or not. In addition, it's necessary to mention the patch series is to support uio/vfio or both? To allow physical/emulation or both? > > Signed-off-by: Marvin Liu > > diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c > index 912f5dd..99beb9c 100644 > --- a/drivers/net/e1000/em_ethdev.c > +++ b/drivers/net/e1000/em_ethdev.c > @@ -81,6 +81,7 @@ static int eth_em_flow_ctrl_get(struct rte_eth_dev *dev, > static int eth_em_flow_ctrl_set(struct rte_eth_dev *dev, > struct rte_eth_fc_conf *fc_conf); > static int eth_em_interrupt_setup(struct rte_eth_dev *dev); > +static int eth_em_rxq_interrupt_setup(struct rte_eth_dev *dev); > static int eth_em_interrupt_get_status(struct rte_eth_dev *dev); > static int eth_em_interrupt_action(struct rte_eth_dev *dev); > static void eth_em_interrupt_handler(struct rte_intr_handle *handle, > @@ -107,6 +108,7 @@ static void em_vlan_hw_strip_disable(struct rte_eth_dev *dev); > static void eth_em_vlan_filter_set(struct rte_eth_dev *dev, > uint16_t vlan_id, int on); > */ > +static void em_rxq_intr_enable(struct e1000_hw *hw); > static int eth_em_led_on(struct rte_eth_dev *dev); > static int eth_em_led_off(struct rte_eth_dev *dev); > > @@ -608,6 +610,9 @@ eth_em_start(struct rte_eth_dev *dev) > return ret; > } > } > + /* check if rxq interrupt is enabled */ > + if (dev->data->dev_conf.intr_conf.rxq != 0) > + eth_em_rxq_interrupt_setup(dev); > > adapter->stopped = 0; > > @@ -1276,6 +1281,39 @@ eth_em_interrupt_setup(struct rte_eth_dev *dev) > return (0); > } > > +/* It clears the interrupt causes and enables the interrupt. Comments start from next line of '/*' or '/**'? > + * It will be called once only during nic initialized. > + * > + * @param dev > + * Pointer to struct rte_eth_dev. > + * > + * @return > + * - On success, zero. > + * - On failure, a negative value. > + */ > +static int > +eth_em_rxq_interrupt_setup(struct rte_eth_dev *dev) > +{ > + struct e1000_hw *hw = > + E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); > + > + E1000_READ_REG(hw, E1000_ICR); > + em_rxq_intr_enable(hw); > + return 0; > +} > + > +/* It enable receive packet interrupt. The same. > + * @param hw > + * Pointer to struct e1000_hw > + * > + * @return > + */ > +static void > +em_rxq_intr_enable(struct e1000_hw *hw) > +{ > + E1000_WRITE_REG(hw, E1000_IMS, E1000_IMS_RXT0); To make sure post-write be finished immediately, E1000_WRITE_FLUSH() shall add behind. > +} > + > /* > * It reads ICR and gets interrupt causes, check it and set a bit flag > * to update link status.