From patchwork Mon May 30 11:23:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rajesh Bhagat X-Patchwork-Id: 627786 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3rJGGb0HD5z9s5J for ; Mon, 30 May 2016 22:32:23 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id C87ECA7667; Mon, 30 May 2016 14:32:19 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wjwghGS7hPBF; Mon, 30 May 2016 14:32:19 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2AEA6A766D; Mon, 30 May 2016 14:31:26 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id DF904A74A8 for ; Mon, 30 May 2016 13:57:01 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zdd7P0g6i0jy for ; Mon, 30 May 2016 13:57:00 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0064.outbound.protection.outlook.com [65.55.169.64]) by theia.denx.de (Postfix) with ESMTPS id 6C179A7498 for ; Mon, 30 May 2016 13:56:54 +0200 (CEST) Received: from BLUPR0301CA0008.namprd03.prod.outlook.com (10.162.113.146) by BN1PR03MB201.namprd03.prod.outlook.com (10.255.200.141) with Microsoft SMTP Server (TLS) id 15.1.492.11; Mon, 30 May 2016 11:24:05 +0000 Received: from BL2FFO11FD025.protection.gbl (2a01:111:f400:7c09::166) by BLUPR0301CA0008.outlook.office365.com (2a01:111:e400:5259::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.506.9 via Frontend Transport; Mon, 30 May 2016 11:24:04 +0000 Authentication-Results: spf=none (sender IP is 192.88.158.2) smtp.mailfrom=lvd4224.freescale.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=nxp.com; Received-SPF: None (protection.outlook.com: lvd4224.freescale.com does not designate permitted sender hosts) Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD025.mail.protection.outlook.com (10.173.161.104) with Microsoft SMTP Server (TLS) id 15.1.497.8 via Frontend Transport; Mon, 30 May 2016 11:24:03 +0000 Received: from lvd4224.freescale.com (lvd4224.ap.freescale.net [10.232.52.224]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id u4UBO1AI011354; Mon, 30 May 2016 04:24:02 -0700 Received: by lvd4224.freescale.com (Postfix, from userid 65022248) id 1F7A668089; Mon, 30 May 2016 16:54:01 +0530 (IST) From: Rajesh Bhagat To: Date: Mon, 30 May 2016 16:53:55 +0530 Message-ID: <1464607435-2639-3-git-send-email-rajesh.bhagat@nxp.com> X-Mailer: git-send-email 1.7.7.4 In-Reply-To: <1464607435-2639-1-git-send-email-rajesh.bhagat@nxp.com> References: <1464607435-2639-1-git-send-email-rajesh.bhagat@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131090810439309680; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6039001)(6009001)(2980300002)(428002)(189002)(199003)(90966002)(5003940100001)(6806005)(50226002)(19580405001)(110136002)(36756003)(50466002)(586003)(2906002)(1220700001)(8676002)(81166006)(16796002)(8936002)(4326007)(87936001)(2950100001)(5008740100001)(19580395003)(47776003)(2351001)(229853001)(86372001)(8666003)(103686003)(105586002)(92566002)(106466001)(33646002)(101416001)(45336002)(46386002)(48376002)(42186005)(960300001)(52956003)(189998001)(76176999)(50986999)(7059030)(21314002)(42882005)(4720700001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR03MB201; H:az84smr01.freescale.net; FPR:; SPF:None; MLV:sfv; MX:1; A:0; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD025; 1:gpzJbHuCQGNwJY6wyNTW38IvRexyVZ/4vCH8d83cu7Tohf7UpYZ7K1ee9D2yLWKIGLUpfJKJqtsMjj6qrl5sGEdn8DwCLIXy7lDLzIXuwoyd6V5JqTHjjDw1FtDjsXHhtT+4GjURYbxuRoyVBHzWzAKNOWiM3bAzl57WWy7Qm+ouplhBcn9AlW3LZ9JuZAhHt/uh9+iJe0+HVRyP4dTQu83/iS9T+NPF41ZQl5xdxzQQhVw2MPKjVeZkFSa5egUuYYFRY7k5kvCS0vDc+HjWLDw84GPw6EAWjwV+s6XEtT4yfhBClevKIq3hTR3xR1QkVXlxr/gPb3Qgly/pMXd8XfLByfh7ZRrcHGr0+u1HQHhftilFik0GgOLepX7AW/ZUqj0LqqDI4ZSMYpxxYpPiSlBAc5qa9GG6fTXXFn4ksZENpSr8AwqyQTW4t0an+Vmv2lT16GnjCnCk1KuLIODtSQO0FN59zqIUtVmkYjUf6M9JlfPoK1I+/9Y+E2ARq+GfmuWiZUODj4/hS7vzfHIBSzTueLRsQeyKi1oP9xaAXVDyb3Uqn4EmzB1Rc7F9EF4hQlh5djvxW1pv/YqUPEant7YhX2YEYinEqQ6WlYKC6CBl1XlhSv//HtUQG1GFvXbwZlAFolU+crJNU6ab0sg0yUWVKqdRhbTzDg9yGgo2fJNYMVVIUnyLXP72zL6F7RsrBAJdzVkd+pGLzrBbauEuBA== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 4342fd42-c376-490d-8e70-08d3887ce7f1 X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB201; 2:Z+cN/ArGLtvHukOv1UrpVEGCHOvcPWaUlEGgnAcI6OP7UwR7UNVMXmGscL5LzKaWcvg6/MxXgWrnOn+6/H8r0snH+sumlTOlZb1hprYBzt9dolknINWjuEgo6y/1JqIzWHBDC6kPGw2sc5f4iD/1IOzMCw6x8rQiFz82Qphskl7kspV+Usy0dNErVoXOkN4Z; 3:nlu4CnWuH47qs3CPqeZ7zqsv0Ad3uDxvb6yZpUm5eNvlhygLBDjJdWX+FVYlCIp3PyNQGxDYwmURQidlHyakZ0L34Bm+2j3nJXdSx2tLVc4IQ5oKNxrIT49a0uAYWd9ld9nmo4UYs+5G1YQOsm9XKVZHGbb4ITI5ZX9vSOyjzKgX8knTaiEUdfIHGsDDB560iLkvK5chu34VDpfFU8JQxfKIq+XbMHA5Srwc+U0fqt4=; 25:2il1rCHc2cbr2i+ZgYkj3LPMyqBzQULVrp3O8X1aaovG9wrvUpHtzbVaR8Fu1zxqNLJFgb6xtSDH1lKyPQsjkOPsGtwbcX31LR6Was82qghZQDuvD//aNWGIXxpcpu82Nnx0Nrjq1zd9C0rqPJOwrru9hr4TkwVX/DdNS4KWCCmbHAoXeOuuit2U7y14MzMWAd7GkdnyvZTCYC0JgPJuoWD4gm4YlEQCCDMn96kMq3RFsExAUTOL945IY6DTFF/qUiyrvfrrPkTpHpohV7DNqREiFikpXcJtQ6BWbUiBgM5SYD18exQ8bAj132S/aw+YWEN+4F9CAWVQVERi3rbBhqHHjz/pLJXp0QZWvmFZmRAZibRqKZQ8/HCyUOxyV+VeEc8u4BA1wP+LIX/F52rwCaS8Vw51/imRiOba+dHIklQ= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN1PR03MB201; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(13024025)(13015025)(5005006)(13018025)(8121501046)(13017025)(13023025)(10201501046)(3002001)(6055026); SRVR:BN1PR03MB201; BCL:0; PCL:0; RULEID:(400006); SRVR:BN1PR03MB201; X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB201; 4:4JWFcJwOQX8IdviUc2Sn0lMl9C28kxG2hR26eIKy3PdJI9oVlOzlUoQC5pS1nCdTk14zYD5DDrE4BNwUoIZ5OkzxxCtcSiEAkwU5+Q+e2hzCXpLO2Ff7USeHRpCpNgz+zQdDGdYM6Bgb2G/oAJ/Ia9IWDsuAZvmyau6XV1nl2FXMZnGgPbP2yeZ+H2FBClECVCQatSJRjraPrAcWZM0wU5Q6ON73ogmAUnNRi3BLhE9gqXf6N+McVL8rUWiqyEqVQxrpMmCoxWWtCTsMfwr5Sou0ZWOkCs72EMHs0g8wkbXPM8SzZL2Zw+4YkMJuCAHV1Ks85fk1aPfAQ9ZjnvRDkj8hT0hgBZQ/nEWS2NegudymS0Amb9Kc5DvVBSiV13sqB4DDvfSpiYJTNOXRTa6PYCXXKTwlgd1YKuVwGvlc2JIxx6GJGUvNnn9EkgKM0pzZg2uBlVhri3WFjLSBHHUZZ/rB9e1mM/HE0Pb/2wdMriCa4HySyxQ3/q5vfNa60eV4JGHd9xESAD+smO1CZz/VMQ== X-Forefront-PRVS: 09583628E0 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR03MB201; 23:3eGtTHnJ99Zr0qhRzh+7pCkBhRb6tI81lin9HDuLK2?= =?us-ascii?Q?ws2GNxVldoWG9Md9meskHsApCHY3I/djF/ly3JMtUjCVEG/+2tCNF9GtxA2T?= =?us-ascii?Q?BDLUry7BuxcEjgzTBQ80/GUA5jtyMYovGgfoRU0XZgjUl//HyhydI8O6qRHB?= =?us-ascii?Q?Y+1f9e6jbc5rAYOo+6XJJWwDLcIABuQWikAbldp3Ny7/b6coelQSxpRQ3Zuw?= =?us-ascii?Q?3NwCdgWaA2z+1NhWmZ6p3kCg9QPsVuxYrQ+QFAKLBU0K68dmPC1ljkbDYj1n?= =?us-ascii?Q?e3/QjH/+sQi+E9Z1ukvtJWf2g+hyIkVU6Y2kmuNIm4pjt8arAiNB3uQnQbNm?= =?us-ascii?Q?Mw77PlFylH+9nDIl/I2cqFpPN7ii3T3rAKEp9aX1mSWWQtUm4/ZztkQOOMGd?= =?us-ascii?Q?r0NFerk3Oz/oo2+aVrx7o66x++7kxfkaoAoXVT7kMAngn8VDBVS7zwissdQ2?= =?us-ascii?Q?8Jc1RSG0bE09Dw/+FIPaYRbxmLa6tMcBCmT+jPcqfxW2nEJjX9r7XzQN7AQX?= =?us-ascii?Q?jH3Ar9xTD3gOnQUQn3Wox23l8Z04HPQSr47C7fOGXrYiPA8/yDav616va/KK?= =?us-ascii?Q?qbf0WztH8WHtgCYrKlhTTbdeMPEM4SnMIO1QbaFQX6zcEkhzfMtcvXdheOoQ?= =?us-ascii?Q?eSGGfIneNdkbMfF255JgMWycd0NBnu+LKZWmnnOBVa7JS7QXLS/UUHVmlcWh?= =?us-ascii?Q?J+xefR8bsLSwjDUCqKdy0gC7p1HSzZ0qjvZbIB/cYiVpOms/7nXo5JsOYpLi?= =?us-ascii?Q?DEN6/t2uYKpbjq6rQ9QdpiMaM4ohmLqMW54N/Qo0cxfcQWcb7zw6paxHrddy?= =?us-ascii?Q?ohypEjX+QNxj+U3ofMGgBedPhVdcCOPpdpvgAhgVrFvbSdKmPz4J2MK2dEOY?= =?us-ascii?Q?LCUvW64lJ9adatmBi0LoehVpRpyf/xr/TCSac1lBl0q55ATCh/pfqHZ0wyqs?= =?us-ascii?Q?6/Y0Hk8EgvBa3V4v+9EQtLuExhwlvOIFuqnshPRa38UhZCTL2892tpEYhp7c?= =?us-ascii?Q?ZCLsV1YpHj8CM4DpdxxnO70dFjNAr7U/Lfnjyq2kWvaiELMkI0qSF1QWw1yG?= =?us-ascii?Q?LGdUhGuWkG+hzwFu3HA7VuAwLFDta4uqpsP32NIbSAyf7xJmClDqbUBWdV5j?= =?us-ascii?Q?RK7hOgixD60JDpCSYt8bXUSu/krdNg+bCYKG4WRPBfyW4mR1WaLFzV2sBqxM?= =?us-ascii?Q?u+OcpEZN17aAjKoP2+c5zhVyJF1m8t+UHGPSo9PJ8kBiIwuCDlDbh+V0V/lC?= =?us-ascii?Q?x1ms9aHsq2F6AWbmo=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB201; 5:bX/rFcb3Y+ODwMHXg886t5d3a4tP2oWIEv5TmYhL+OrL3dnD92SC/XG21bQWdDHkWnx0xfd9LSHbD/mDLQyHQkH1X+x9F/0BtGk9kZw2nfY61sIzIjGoroo+u6B+1HCVGKbYexSUKxVRyg3/lYKgSfSfC0dJc8u9QRNf4JKYjJ8=; 24:cCUfQb5nNCtVoDi+AyH/q8DUNIhbf87TU1OIZbv79ZdqTtEntFCf5jE3PmCbzNjbV5MgZlrQ6jglgHA+Mp/ZCk5bDkLFspFbMgYU8r2yW04=; 7:bL4gKr8WoEAZiz4fS2O2E2LAGTI1N95meS2/7vbVudcs7ZMpvYjv+4mdFBKt9NswGFimg86d3Xt+5zncRbtyqR+TW3Q+PjySZnt/TW4RCL7Z61Pfr1FNqJc5IHZuOcDriVv9mIyry8lwOpMEaLrnQ4ad4Bp/ls5v/KnOOpK3ljGYaMM3rufUTu6ju0mSC0Cf SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 May 2016 11:24:03.5721 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR03MB201 X-Mailman-Approved-At: Mon, 30 May 2016 14:30:16 +0200 Cc: marex@denx.de, Rajesh Bhagat , sriram.dash@nxp.com Subject: [U-Boot] [PATCH 2/2] common: usb_storage : Seperate optimal blocks logic calculation for read/write X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Seperates optimal blocks logic calculation for read/write by defining the usb_max_xfer_blk variable for usb_stor_read and usb_stor_write. It has been observed, that USB devices are tend to be slower in write as compared to read operation. Hence, should be handled in diffrent manner. Signed-off-by: Sriram Dash Signed-off-by: Rajesh Bhagat --- common/usb_storage.c | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/common/usb_storage.c b/common/usb_storage.c index 7b5ad07..fb3c58a 100644 --- a/common/usb_storage.c +++ b/common/usb_storage.c @@ -108,7 +108,7 @@ static unsigned short usb_xfer_blk_tbl[5] = {4096, 8192, 16384, 32768, 65535}; static unsigned short usb_xfer_blk_tbl[1] = {20}; #endif -static unsigned short USB_MAX_XFER_BLK; +static unsigned short usb_read_xfer_blk, usb_write_xfer_blk; #ifndef CONFIG_BLK static struct us_data usb_stor[USB_MAX_STOR_DEV]; @@ -1116,7 +1116,7 @@ static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr, unsigned short smallblks; struct usb_device *udev; struct us_data *ss; - int retry, next = LOG2((USB_MAX_XFER_BLK + 1) / usb_xfer_blk_tbl[0]); + int retry, next = LOG2((usb_read_xfer_blk + 1) / usb_xfer_blk_tbl[0]); bool retry_flag = false; ccb *srb = &usb_ccb; #ifdef CONFIG_BLK @@ -1153,14 +1153,14 @@ static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr, /* XXX need some comment here */ retry = 2; srb->pdata = (unsigned char *)buf_addr; - if (blks > USB_MAX_XFER_BLK) - smallblks = USB_MAX_XFER_BLK; + if (blks > usb_read_xfer_blk) + smallblks = usb_read_xfer_blk; else smallblks = (unsigned short) blks; retry_it: debug("usb_read: retry #%d, xfer_blk %hu, smallblks %hu\n", - retry, USB_MAX_XFER_BLK, smallblks); - if (smallblks == USB_MAX_XFER_BLK) + retry, usb_read_xfer_blk, smallblks); + if (smallblks == usb_read_xfer_blk) usb_show_progress(); srb->datalen = block_dev->blksz * smallblks; srb->pdata = (unsigned char *)buf_addr; @@ -1168,10 +1168,10 @@ retry_it: debug("Read ERROR\n"); usb_request_sense(srb, ss); if (retry--) { - /* decrease the USB_MAX_XFER_BLK */ + /* decrease the usb_read_xfer_blk */ if (next > 0) { smallblks = usb_xfer_blk_tbl[--next]; - USB_MAX_XFER_BLK = smallblks; + usb_read_xfer_blk = smallblks; } retry_flag = true; goto retry_it; @@ -1183,10 +1183,10 @@ retry_it: blks -= smallblks; buf_addr += srb->datalen; - /* try to increase the USB_MAX_XFER_BLK */ + /* try to increase the usb_read_xfer_blk */ if (next < USB_XFER_BLK_TBL_SZ - 1) if (!retry_flag && usb_xfer_blk_tbl[next + 1] <= blks) - USB_MAX_XFER_BLK = usb_xfer_blk_tbl[++next]; + usb_read_xfer_blk = usb_xfer_blk_tbl[++next]; } while (blks != 0); ss->flags &= ~USB_READY; @@ -1195,7 +1195,7 @@ retry_it: start, smallblks, buf_addr); usb_disable_asynch(0); /* asynch transfer allowed */ - if (blkcnt >= USB_MAX_XFER_BLK) + if (blkcnt >= usb_read_xfer_blk) debug("\n"); return blkcnt; } @@ -1213,7 +1213,7 @@ static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr, unsigned short smallblks; struct usb_device *udev; struct us_data *ss; - int retry, next = LOG2((USB_MAX_XFER_BLK + 1) / usb_xfer_blk_tbl[0]); + int retry, next = LOG2((usb_write_xfer_blk + 1) / usb_xfer_blk_tbl[0]); bool retry_flag = false; ccb *srb = &usb_ccb; #ifdef CONFIG_BLK @@ -1254,14 +1254,14 @@ static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr, */ retry = 2; srb->pdata = (unsigned char *)buf_addr; - if (blks > USB_MAX_XFER_BLK) - smallblks = USB_MAX_XFER_BLK; + if (blks > usb_write_xfer_blk) + smallblks = usb_write_xfer_blk; else smallblks = (unsigned short) blks; retry_it: debug("usb_write: retry #%d, xfer_blk %hu, smallblks %hu\n", - retry, USB_MAX_XFER_BLK, smallblks); - if (smallblks == USB_MAX_XFER_BLK) + retry, usb_write_xfer_blk, smallblks); + if (smallblks == usb_write_xfer_blk) usb_show_progress(); srb->datalen = block_dev->blksz * smallblks; srb->pdata = (unsigned char *)buf_addr; @@ -1269,10 +1269,10 @@ retry_it: debug("Write ERROR\n"); usb_request_sense(srb, ss); if (retry--) { - /* decrease the USB_MAX_XFER_BLK */ + /* decrease the usb_write_xfer_blk */ if (next > 0) { smallblks = usb_xfer_blk_tbl[--next]; - USB_MAX_XFER_BLK = smallblks; + usb_write_xfer_blk = smallblks; } retry_flag = true; goto retry_it; @@ -1284,10 +1284,10 @@ retry_it: blks -= smallblks; buf_addr += srb->datalen; - /* try to increase the USB_MAX_XFER_BLK */ + /* try to increase the usb_write_xfer_blk */ if (next < USB_XFER_BLK_TBL_SZ - 1) if (!retry_flag && usb_xfer_blk_tbl[next + 1] <= blks) - USB_MAX_XFER_BLK = usb_xfer_blk_tbl[++next]; + usb_write_xfer_blk = usb_xfer_blk_tbl[++next]; } while (blks != 0); ss->flags &= ~USB_READY; @@ -1295,7 +1295,7 @@ retry_it: PRIxPTR "\n", start, smallblks, buf_addr); usb_disable_asynch(0); /* asynch transfer allowed */ - if (blkcnt >= USB_MAX_XFER_BLK) + if (blkcnt >= usb_write_xfer_blk) debug("\n"); return blkcnt; @@ -1361,7 +1361,8 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum, } /* Initialize the current transfer blocks to minimum value */ - USB_MAX_XFER_BLK = usb_xfer_blk_tbl[0]; + usb_read_xfer_blk = usb_xfer_blk_tbl[0]; + usb_write_xfer_blk = usb_xfer_blk_tbl[0]; /* * We are expecting a minimum of 2 endpoints - in and out (bulk).