From nobody Thu Oct 30 15:35:20 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525450426582780.4237136239385; Fri, 4 May 2018 09:13:46 -0700 (PDT) Received: from localhost ([::1]:35139 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fEdL7-0005qe-NA for importer@patchew.org; Fri, 04 May 2018 12:13:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55069) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fEd7n-0002rK-PO for qemu-devel@nongnu.org; Fri, 04 May 2018 12:00:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fEd7m-0001dZ-Fa for qemu-devel@nongnu.org; Fri, 04 May 2018 11:59:59 -0400 Received: from mail-qk0-x243.google.com ([2607:f8b0:400d:c09::243]:34701) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fEd7m-0001dN-9l for qemu-devel@nongnu.org; Fri, 04 May 2018 11:59:58 -0400 Received: by mail-qk0-x243.google.com with SMTP id p186so16985379qkd.1 for ; Fri, 04 May 2018 08:59:58 -0700 (PDT) Received: from x1.local ([138.117.48.222]) by smtp.gmail.com with ESMTPSA id a83sm8587066qkb.22.2018.05.04.08.59.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 04 May 2018 08:59:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IyO1B2E1AmrCFzlNXJLICzcVKouzz9qdGTjPcRAmLkY=; b=vUCYyvOj7Cq/BYzhZc6rwboB8TiIdAr7rLRTwjrBrL0P0RZQFwGXuXfOZ3ZBwrXkAp OW5+0Nmr2qRhuG/60MYiDHO0gy0LPjvawuPmroTTweDhJ294EZIR5kAm29K0mODbQNGM 5YjWz8L5mB7X2KjEIRidWQYRt6wqtRn5cbbqGsq0SsO0HPhBC/xR98Y63PJ9u1DYEt0j 4cVgAemGmjVfN393+tVvGcKeewehSAoonN/2FbtjPMspxDkwe/G1N83wfpH59OEajoFm vYNk2e/6XD6/v1IznbQJeGOh9RAYCe/9h9sD+wIDRHbwDEOYwFOpJ9+xBgTxvv1UFTOJ FOrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=IyO1B2E1AmrCFzlNXJLICzcVKouzz9qdGTjPcRAmLkY=; b=Nj6tQFajadAbMN/AJgWwSVYnLpxI3w6Fy67wdaJpcxXMITyuHHNokYQxfM1crzx1W8 KdJaGtQUwJFknzp8t7eugoUKIGZCg5P90x8XvTtCO10jJSwWd3NyYknscROdyLyweNdA M+J1w5xU+0HYOeYjP374rzAKnEIfI0Mr3TqIbW0aDnIhSgi2bk0GZ8SAfJ/8igtCaEsK 8d9nahjbYqiTXqK+Sbn1zaDGta13QhjbOoAySUN+Ka42spNZI8Ri1OFNeqR6IKXFGpya hTuUpnwpGpKJvFhbWebgRwwy6DCj3X9GU0erOL6XoKv7+ZmIB0wZoWqURgm5Sq7BbDco wvyg== X-Gm-Message-State: ALQs6tB6zY2ChuQth5pj8YKx6faCggoOyVjzOhIBvNhVwHtxpmFgEhAt s28mRw+w8j0ODKyg2/NgqjhSWqZc X-Google-Smtp-Source: AB8JxZr0Sq/k22IJqGHhQhIN2iB10bVUN03O//m/RO/oQyIXdq3tU/il52ZLLoAGIfbLiyRUUgRBoA== X-Received: by 10.55.203.9 with SMTP id d9mr21744630qkj.95.1525449597706; Fri, 04 May 2018 08:59:57 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Peter Maydell , "Edgar E . Iglesias" Date: Fri, 4 May 2018 12:59:08 -0300 Message-Id: <20180504155918.21287-11-f4bug@amsat.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180504155918.21287-1-f4bug@amsat.org> References: <20180504155918.21287-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::243 Subject: [Qemu-devel] [PATCH 10/20] sdcard: Expose sd_prepare_request*() functions for QTest use X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Stefan Hajnoczi , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Take those functions out of hw/sd/sd.c (via "sdmmc-internal.h") to be able to write QTests for them. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/sdmmc-internal.h | 2 ++ include/hw/sd/sd.h | 18 ++++++++++++++++++ hw/sd/sd.c | 43 ------------------------------------------ hw/sd/sdmmc-internal.c | 43 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 43 deletions(-) diff --git a/hw/sd/sdmmc-internal.h b/hw/sd/sdmmc-internal.h index 62c0ff250d..d672112200 100644 --- a/hw/sd/sdmmc-internal.h +++ b/hw/sd/sdmmc-internal.h @@ -10,6 +10,8 @@ #ifndef SD_INTERNAL_H #define SD_INTERNAL_H =20 +#include "hw/sd/sd.h" + #define SDMMC_CMD_MAX 64 =20 /** diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index 7d9c906897..b65107ffe1 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -168,6 +168,24 @@ void sd_prepare_request(SDRequest *req, uint8_t cmd, u= int32_t arg, void sd_prepare_request_with_crc(SDRequest *req, uint8_t cmd, uint32_t arg, uint8_t crc); =20 +/** + * sd_update_frame48_checksum: + * @frame: the #SDFrame48 to verify + * + * Update the 7-bit CRC checksum of a SD 48-bit frame. + */ +void sd_update_frame48_checksum(SDFrame48 *frame); + +/** + * sd_verify_frame48_checksum: + * @frame: the #SDFrame48 to verify + * + * Verify the 7-bit CRC checksum of a SD 48-bit frame. + * + * Returns: A boolean indicating whether the frame 7-bit CRC is correct. + */ +bool sd_verify_frame48_checksum(SDFrame48 *frame); + /* Legacy functions to be used only by non-qdevified callers */ SDState *sd_init(BlockBackend *bs, bool is_spi); int sd_do_command(SDState *sd, SDRequest *req, diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 11b4606051..2d2c31d308 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -449,21 +449,6 @@ static void sd_set_sdstatus(SDState *sd) memset(sd->sd_status, 0, 64); } =20 -static uint8_t sd_calc_frame48_crc7(uint8_t cmd, uint32_t arg) -{ - uint8_t buffer[5]; - buffer[0] =3D 0x40 | cmd; - stl_be_p(&buffer[1], arg); - return sd_crc7(buffer, sizeof(buffer)); -} - -static bool sd_verify_frame48_checksum(SDFrame48 *frame) -{ - uint8_t crc =3D sd_calc_frame48_crc7(frame->cmd, frame->arg); - - return crc =3D=3D frame->crc; -} - static bool sd_req_crc_validate(SDState *sd, SDRequest *req) { if (sd->validate_crc) { @@ -472,34 +457,6 @@ static bool sd_req_crc_validate(SDState *sd, SDRequest= *req) return true; } =20 -static void sd_update_frame48_checksum(SDFrame48 *frame) -{ - frame->crc =3D sd_calc_frame48_crc7(frame->cmd, frame->arg); -} - -static void sd_prepare_frame48(SDFrame48 *frame, uint8_t cmd, uint32_t arg, - bool gen_crc) -{ - frame->cmd =3D cmd; - frame->arg =3D arg; - frame->crc =3D 0x00; - if (gen_crc) { - sd_update_frame48_checksum(frame); - } -} - -void sd_prepare_request(SDFrame48 *req, uint8_t cmd, uint32_t arg, bool ge= n_crc) -{ - sd_prepare_frame48(req, cmd, arg, gen_crc); -} - -void sd_prepare_request_with_crc(SDRequest *req, uint8_t cmd, uint32_t arg, - uint8_t crc) -{ - sd_prepare_frame48(req, cmd, arg, /* gen_crc */ false); - req->crc =3D crc; -} - static void sd_response_r1_make(SDState *sd, uint8_t *response) { stl_be_p(response, sd->card_status); diff --git a/hw/sd/sdmmc-internal.c b/hw/sd/sdmmc-internal.c index 69ad0a99e6..97f5f71569 100644 --- a/hw/sd/sdmmc-internal.c +++ b/hw/sd/sdmmc-internal.c @@ -108,3 +108,46 @@ uint16_t sd_crc16(const void *message, size_t width) =20 return shift_reg; } + +static uint8_t sd_calc_frame48_crc7(uint8_t cmd, uint32_t arg) +{ + uint8_t buffer[5]; + buffer[0] =3D 0x40 | cmd; + stl_be_p(&buffer[1], arg); + return sd_crc7(buffer, sizeof(buffer)); +} + +bool sd_verify_frame48_checksum(SDFrame48 *frame) +{ + uint8_t crc =3D sd_calc_frame48_crc7(frame->cmd, frame->arg); + + return crc =3D=3D frame->crc; +} + +void sd_update_frame48_checksum(SDFrame48 *frame) +{ + frame->crc =3D sd_calc_frame48_crc7(frame->cmd, frame->arg); +} + +static void sd_prepare_frame48(SDFrame48 *frame, uint8_t cmd, uint32_t arg, + bool gen_crc) +{ + frame->cmd =3D cmd; + frame->arg =3D arg; + frame->crc =3D 0x00; + if (gen_crc) { + sd_update_frame48_checksum(frame); + } +} + +void sd_prepare_request(SDFrame48 *req, uint8_t cmd, uint32_t arg, bool ge= n_crc) +{ + sd_prepare_frame48(req, cmd, arg, gen_crc); +} + +void sd_prepare_request_with_crc(SDRequest *req, uint8_t cmd, uint32_t arg, + uint8_t crc) +{ + sd_prepare_frame48(req, cmd, arg, /* gen_crc */ false); + req->crc =3D crc; +} --=20 2.17.0