From patchwork Sun Sep 24 19:57:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 817973 X-Patchwork-Delegate: agraf@suse.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3y0dQQ4dMXz9t1t for ; Mon, 25 Sep 2017 06:01:34 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 57CECC220D2; Sun, 24 Sep 2017 20:00:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 2D477C22142; Sun, 24 Sep 2017 19:58:40 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 8E153C22106; Sun, 24 Sep 2017 19:58:20 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by lists.denx.de (Postfix) with ESMTPS id B035EC22127 for ; Sun, 24 Sep 2017 19:58:16 +0000 (UTC) Received: from workstation4.fritz.box ([84.118.154.110]) by mail.gmx.com (mrgmx102 [212.227.17.174]) with ESMTPSA (Nemesis) id 0M7m0a-1dA2KS45ei-00vLB0; Sun, 24 Sep 2017 21:57:33 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Sun, 24 Sep 2017 21:57:11 +0200 Message-Id: <20170924195716.3433-13-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170924195716.3433-1-xypron.glpk@gmx.de> References: <20170924195716.3433-1-xypron.glpk@gmx.de> X-Provags-ID: V03:K0:SzBov9O31V61Hu5eCuGqjAW7LjUnqaMij3GyLevlW1dN6ZUtTp2 ARAOSHiRiZS7i5lyFppEELqb0/GVh+CCVdoMC7ya1fmCGT1i5VfIMAwdpxfRp7RZqwZnELr hYI2FC7HBDuPgD5Burh+t9kWlkcVHwsLvhVDZ37Nm27/YwXFL663y5LJc4/Lw/PySYPGzXX gRonFxRxRGJuxZ//GN8hw== X-UI-Out-Filterresults: notjunk:1; V01:K0:IIF8wHI4c7Q=:IAa5YIaL8cE9Fn8GIe9S5G 8hB1BbELBsNRCEe+DBuglpRUVZ2x2+wTQ/bqmNmDEMVwyFoTXAAFBsgRbIZ7uQQaRqEy9L1A3 av/HMyxXEHNVzBIvoLwmWQBK/kGti8KZoGcRe/RG83kXwBliuq5Bi5latW5D3m5z1WwOtKL5k OdVU93u97NQIubD/zfFk/zKQSl/l5k1dTiWM0M1h02q6vO5fPDugP6VBSbPN+IKm8Z3FEjp9r BcXFMFhO77a1V8F6HFmcoU9iT6Pn7AcPiaSEhfq4Yz05WrgYGCFdNgWPBzZWLdOaiUK2dj11P EJbXFfNaNgDVc7wR6ElkfFMlReyxz9vLhbYjuMbTDRmNHNOS7MHnKIN+nhe5zguqkyBtW1dhc /HpA+a9nVFEjrRohnRd7s8FvhUmW1sGHDZDV4gi5uasvx3rD7NRF2VnmhooTMpOGaGOB6LxNz M8f8HFHuvQxhkppQrokWbNWjkJsCfIW4A9xkjO2lBUkYJb9EE6EOzio6KKD10TXeS+/7DnYXD re1VfxPtizPBERvqW8wYZvGoZPiK42RJlbXwck2C9DiSzUrwbFGZzYzueZlBOUVNF6IX+2PWB c3+AVl390fNsA6+1Dny5oWpoz5xdMdEjd3c07CuNi3/Z2T43agTLo1t9FsDREi3mSYS5mttrB gJ5AW/rytCZNupGWfqPrELUYdi8KgUFS1aGgmT0obSiHcE1J5cQ6c14wvfzDiI49QSplTTaX4 JB/3cQESgEKqfiV7MpcNJ7xAvuzDCkz3WnEL5158dn+ko/J+jk8t7XKCNX8BwMPGLn8Kff3XU Km/KnV9NTcql+Wwqmqml+j96J+f9g== Cc: Heinrich Schuchardt , u-boot@lists.denx.de Subject: [U-Boot] [PATCH 12/17] efi_loader: fix efi_net_get_status X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The returned interrupt status was wrong. As out transmit buffer is empty we need to always set EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT. When we have received a packet we need to set EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT. Furthermore we should call efi_timer_check() to handle events. Signed-off-by: Heinrich Schuchardt --- include/efi_api.h | 6 ++++++ lib/efi_loader/efi_net.c | 11 ++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/efi_api.h b/include/efi_api.h index 2f31464cb3..1f349db246 100644 --- a/include/efi_api.h +++ b/include/efi_api.h @@ -600,6 +600,12 @@ struct efi_simple_network_mode { #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10 +/* interrupt status bit mask */ +#define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT 0x01 +#define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02 +#define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT 0x04 +#define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08 + /* revision of the simple network protocol */ #define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000 diff --git a/lib/efi_loader/efi_net.c b/lib/efi_loader/efi_net.c index 72a023803d..89dc2006f1 100644 --- a/lib/efi_loader/efi_net.c +++ b/lib/efi_loader/efi_net.c @@ -133,9 +133,14 @@ static efi_status_t EFIAPI efi_net_get_status(struct efi_simple_network *this, { EFI_ENTRY("%p, %p, %p", this, int_status, txbuf); - /* We send packets synchronously, so nothing is outstanding */ - if (int_status) - *int_status = 0; + efi_timer_check(); + + if (int_status) { + /* We send packets synchronously, so nothing is outstanding */ + *int_status = EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT; + if (new_rx_packet) + *int_status |= EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT; + } if (txbuf) *txbuf = new_tx_packet;