All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
To: Larry Finger <Larry.Finger@lwfinger.net>,
	Phillip Potter <phil@philpotter.co.uk>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
	Michael Straube <straube.linux@gmail.com>
Cc: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>,
	Pavel Skripkin <paskripkin@gmail.com>
Subject: [PATCH v4 17/18] staging: r8188eu: Shorten calls chain of rtw_read8/16/32()
Date: Mon, 13 Sep 2021 20:10:01 +0200	[thread overview]
Message-ID: <20210913181002.16651-18-fmdefrancesco@gmail.com> (raw)
In-Reply-To: <20210913181002.16651-1-fmdefrancesco@gmail.com>

Shorten the calls chain of rtw_read8/16/32() down to the actual reads.
For this purpose unify the three usb_read8/16/32 into the new
usb_read(); make the latter parameterizable with 'size'; embed most of
the code of usbctrl_vendorreq() into usb_read() and use in it the new
usb_control_msg_recv() API of USB Core.

Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Co-developed-by: Pavel Skripkin <paskripkin@gmail.com>
Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
---

v3->v4: 
	Make some changes according to a first review of Greg
	Kroah-Hartman; remove unnecessary while loop and a couple of
	'if' test; handle the errors returned by usb_control_msg_recv()
v2->v3: 
	No changes.
v1->v2: 
	No changes.

 drivers/staging/r8188eu/hal/usb_ops_linux.c | 56 +++++++++++++++++++--
 1 file changed, 53 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/r8188eu/hal/usb_ops_linux.c b/drivers/staging/r8188eu/hal/usb_ops_linux.c
index 04402bab805e..75475b0083db 100644
--- a/drivers/staging/r8188eu/hal/usb_ops_linux.c
+++ b/drivers/staging/r8188eu/hal/usb_ops_linux.c
@@ -89,6 +89,56 @@ static int usbctrl_vendorreq(struct intf_hdl *intfhdl, u16 value, void *data, u1
 	return status;
 }
 
+static int usb_read(struct intf_hdl *intfhdl, u16 addr, void *data, u8 size)
+{
+	int status;
+	u8 *io_buf; /* pointer to I/O buffer */
+	struct adapter *adapt = intfhdl->padapter;
+	struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt);
+	struct usb_device *udev = dvobjpriv->pusbdev;
+
+	if (adapt->bSurpriseRemoved || adapt->pwrctrlpriv.pnp_bstop_trx) {
+		status = -EPERM;
+		goto exit;
+	}
+
+	mutex_lock(&dvobjpriv->usb_vendor_req_mutex);
+
+	io_buf = dvobjpriv->usb_vendor_req_buf;
+
+	status = usb_control_msg_recv(udev, 0, REALTEK_USB_VENQT_CMD_REQ,
+				      REALTEK_USB_VENQT_READ, addr,
+				      REALTEK_USB_VENQT_CMD_IDX, io_buf,
+				      size, RTW_USB_CONTROL_MSG_TIMEOUT,
+				      GFP_KERNEL);
+	if (!status) {
+		/*  Success this control transfer. */
+		rtw_reset_continual_urb_error(dvobjpriv);
+		memcpy(data, io_buf, size);
+		goto mutex_unlock;
+	}
+	/*  error cases */
+	if (status == (-ESHUTDOWN || -ENODEV || -ENOENT)) {
+		/*
+		 * device or controller has been disabled due to
+		 * some problem that could not be worked around,
+		 * device or bus doesn’t exist, endpoint does not
+		 * exist or is not enabled.
+		 */
+		adapt->bSurpriseRemoved = true;
+			goto mutex_unlock;
+	}
+	GET_HAL_DATA(adapt)->srestpriv.wifi_error_status = USB_VEN_REQ_CMD_FAIL;
+	if (rtw_inc_and_chk_continual_urb_error(dvobjpriv)) {
+		adapt->bSurpriseRemoved = true;
+		goto mutex_unlock;
+	}
+mutex_unlock:
+	mutex_unlock(&dvobjpriv->usb_vendor_req_mutex);
+exit:
+	return status;
+}
+
 u8 rtw_read8(struct adapter *adapter, u32 addr)
 {
 	u8 data;
@@ -96,7 +146,7 @@ u8 rtw_read8(struct adapter *adapter, u32 addr)
 	struct intf_hdl *intfhdl = &io_priv->intf;
 	u16 address = (u16)(addr & 0xffff);
 
-	usbctrl_vendorreq(intfhdl, address, &data, 1, REALTEK_USB_VENQT_READ);
+	usb_read(intfhdl, address, &data, 1);
 
 	return data;
 }
@@ -108,7 +158,7 @@ u16 rtw_read16(struct adapter *adapter, u32 addr)
 	struct io_priv *io_priv = &adapter->iopriv;
 	struct intf_hdl *intfhdl = &io_priv->intf;
 
-	usbctrl_vendorreq(intfhdl, address, &data, 2, REALTEK_USB_VENQT_READ);
+	usb_read(intfhdl, address, &data, 2);
 
 	return le16_to_cpu(data);
 }
@@ -120,7 +170,7 @@ u32 rtw_read32(struct adapter *adapter, u32 addr)
 	struct io_priv *io_priv = &adapter->iopriv;
 	struct intf_hdl *intfhdl = &io_priv->intf;
 
-	usbctrl_vendorreq(intfhdl, address, &data, 4, REALTEK_USB_VENQT_READ);
+	usb_read(intfhdl, address, &data, 4);
 
 	return le32_to_cpu(data);
 }
-- 
2.33.0


  parent reply	other threads:[~2021-09-13 18:13 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-13 18:09 [PATCH v4 00/18] staging: r8188eu: Shorten and simplify calls chain Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 01/18] staging: r8188eu: remove usb_{read,write}_mem Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 02/18] staging: r8188eu: remove the helpers of rtw_read8() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 03/18] staging: r8188eu: remove the helpers of rtw_read16() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 04/18] staging: r8188eu: remove the helpers of rtw_read32() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 05/18] staging: r8188eu: remove the helpers of usb_write8 Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 06/18] staging: r8188eu: remove the helpers of usb_write16() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 07/18] staging: r8188eu: remove the helpers of usb_write32() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 08/18] staging: r8188eu: remove the helpers of usb_writeN() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 09/18] staging: r8188eu: remove the helpers of rtw_read_port() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 10/18] staging: r8188eu: remove the helpers of rtw_write_port() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 11/18] staging: r8188eu: remove the helpers of usb_read_port_cancel() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 12/18] staging: r8188eu: remove the helpers of rtw_write_port_cancel() Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 13/18] staging: r8188eu: remove core/rtw_io.c Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 14/18] staging: remove struct _io_ops Fabio M. De Francesco
2021-09-13 18:09 ` [PATCH v4 15/18] staging: r8188eu: hal: Clean up usbctrl_vendorreq() Fabio M. De Francesco
2021-09-14  9:24   ` Dan Carpenter
2021-09-14 11:18     ` Fabio M. De Francesco
2021-09-14 12:20       ` Dan Carpenter
2021-09-14 13:24     ` Fabio M. De Francesco
2021-09-14 13:30       ` Dan Carpenter
2021-09-14 14:05         ` Fabio M. De Francesco
2021-09-13 18:10 ` [PATCH v4 16/18] staging: r8188eu: hal: Clean up rtw_read*() and rtw_write*() Fabio M. De Francesco
2021-09-14 14:33   ` David Laight
2021-09-13 18:10 ` Fabio M. De Francesco [this message]
2021-09-13 20:19   ` [PATCH v4 17/18] staging: r8188eu: Shorten calls chain of rtw_read8/16/32() Pavel Skripkin
2021-09-14  9:32   ` Dan Carpenter
2021-09-14 12:55     ` Fabio M. De Francesco
2021-09-14 13:01       ` Dan Carpenter
2021-09-13 18:10 ` [PATCH v4 18/18] staging: r8188eu: Shorten calls chain of rtw_write8/16/32/N() Fabio M. De Francesco
2021-09-13 20:35 ` [PATCH v4 00/18] staging: r8188eu: Shorten and simplify calls chain Fabio M. De Francesco

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210913181002.16651-18-fmdefrancesco@gmail.com \
    --to=fmdefrancesco@gmail.com \
    --cc=Larry.Finger@lwfinger.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-staging@lists.linux.dev \
    --cc=paskripkin@gmail.com \
    --cc=phil@philpotter.co.uk \
    --cc=straube.linux@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.