From patchwork Thu Feb 15 22:13:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 874186 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="PaIi9N6w"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zj9nk6sSpz9sRW for ; Fri, 16 Feb 2018 09:25:14 +1100 (AEDT) Received: from localhost ([::1]:37143 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1emRxo-0000C0-SM for incoming@patchwork.ozlabs.org; Thu, 15 Feb 2018 17:25:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1emRmp-0004vo-7q for qemu-devel@nongnu.org; Thu, 15 Feb 2018 17:13:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1emRmo-00059d-6t for qemu-devel@nongnu.org; Thu, 15 Feb 2018 17:13:51 -0500 Received: from mail-qk0-x243.google.com ([2607:f8b0:400d:c09::243]:39661) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1emRmo-00059O-1b for qemu-devel@nongnu.org; Thu, 15 Feb 2018 17:13:50 -0500 Received: by mail-qk0-x243.google.com with SMTP id z197so1569716qkb.6 for ; Thu, 15 Feb 2018 14:13:50 -0800 (PST) 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=+o/tOAGRIQrxcfEw3+duf8s/pqAsMrbZpOfd+DdBACU=; b=PaIi9N6w1i8HLVKr5yE7wV11noXZgkNHgGBjGXchHTbB/mD4KGHl8Gg+rOYDXsNkNS /ctXHjHL5LoTD71RGhilp0EzF2PL1ZSGLmC8n9+i7EwH0On8MGt93lJtqtx4HZyvYdcb 6pN1+hmDeRaVNgJbHuU6ERC/7rce1JiTaPPOBWODe45QyKZX3iPE6U0cdZOwk+pufVat /ixMmfpxxprhJ8lQCcx371V5TecWM2b7JI0m0YiTVYqHwn8Eq9L8oU3IbKI9ZMA5ArNE sauo7ZPjY4CALcbmFcr/GobZUvf25QXwitN3Rgf7xcYk7/M4FqYeD+MN+bInb3q7uRYZ +lBw== 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=+o/tOAGRIQrxcfEw3+duf8s/pqAsMrbZpOfd+DdBACU=; b=hqhN2/j2zmx0nhDk7s9w+hMMVJiHIh+aVBKMhRgijFtiPPc63V3rzc8RM8gmvzVGF5 Wv5NqFR4UZ7rx3occ9q6TfCOYj3vjSA1onJJovnn/LeaZE/UEk/wL9069P9CGc0rVhrv evnfvm3JlslwSyWnQSQOkSWc7AQ9GaHHNIMJsC5SSv2nZ6bvh5L6+PoVYhdNin9nvXkF 6RF3lhSXClaeBQjT7EbY/qUmxQBpKbSH8z1lEa6vnAti288KCMdQoQpwvHL0DTmYzONo WBRjdliDMFgsMOh2aFUabhnusIeVEjaMLpY6pDPYyNR0N5SRLS/573k+oh2QHgLeAte1 o/3w== X-Gm-Message-State: APf1xPDCfFegcy51Xn6hW79anbEbiIYtsrs/eSDv6lHtgY3ummSK8TSy dNFUZPNIonn0SDWg+4JsUtM= X-Google-Smtp-Source: AH8x226hTt2cGxSl7KC8mWMToq+EVd0wxsPR/S3wVJwgUDDXeGUcQ+zeWIOoQKix9pcH4wz0F415+w== X-Received: by 10.55.142.71 with SMTP id q68mr6582779qkd.40.1518732829560; Thu, 15 Feb 2018 14:13:49 -0800 (PST) Received: from x1.lan ([138.117.48.219]) by smtp.gmail.com with ESMTPSA id t5sm10732075qtn.44.2018.02.15.14.13.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 15 Feb 2018 14:13:49 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: Alistair Francis , Peter Maydell , Igor Mitsyanko Date: Thu, 15 Feb 2018 19:13:11 -0300 Message-Id: <20180215221325.7611-7-f4bug@amsat.org> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180215221325.7611-1-f4bug@amsat.org> References: <20180215221325.7611-1-f4bug@amsat.org> MIME-Version: 1.0 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 v4 06/20] sdcard: simplify using the ldst API 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: "Edgar E . Iglesias" , Prasad J Pandit , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" the code is easier to review/refactor. Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Alistair Francis --- hw/sd/sd.c | 38 +++++++++----------------------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 4267919ce0..b43baa2edd 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -432,57 +432,39 @@ static int sd_req_crc_validate(SDRequest *req) { uint8_t buffer[5]; buffer[0] = 0x40 | req->cmd; - buffer[1] = (req->arg >> 24) & 0xff; - buffer[2] = (req->arg >> 16) & 0xff; - buffer[3] = (req->arg >> 8) & 0xff; - buffer[4] = (req->arg >> 0) & 0xff; + stl_be_p(&buffer[1], req->arg); return 0; return sd_crc7(buffer, 5) != req->crc; /* TODO */ } static void sd_response_r1_make(SDState *sd, uint8_t *response) { - uint32_t status = sd->card_status; + stl_be_p(response, sd->card_status); + /* Clear the "clear on read" status bits */ sd->card_status &= ~CARD_STATUS_C; - - response[0] = (status >> 24) & 0xff; - response[1] = (status >> 16) & 0xff; - response[2] = (status >> 8) & 0xff; - response[3] = (status >> 0) & 0xff; } static void sd_response_r3_make(SDState *sd, uint8_t *response) { - response[0] = (sd->ocr >> 24) & 0xff; - response[1] = (sd->ocr >> 16) & 0xff; - response[2] = (sd->ocr >> 8) & 0xff; - response[3] = (sd->ocr >> 0) & 0xff; + stl_be_p(response, sd->ocr); } static void sd_response_r6_make(SDState *sd, uint8_t *response) { - uint16_t arg; uint16_t status; - arg = sd->rca; status = ((sd->card_status >> 8) & 0xc000) | ((sd->card_status >> 6) & 0x2000) | (sd->card_status & 0x1fff); sd->card_status &= ~(CARD_STATUS_C & 0xc81fff); - - response[0] = (arg >> 8) & 0xff; - response[1] = arg & 0xff; - response[2] = (status >> 8) & 0xff; - response[3] = status & 0xff; + stw_be_p(response + 0, sd->rca); + stw_be_p(response + 2, status); } static void sd_response_r7_make(SDState *sd, uint8_t *response) { - response[0] = (sd->vhs >> 24) & 0xff; - response[1] = (sd->vhs >> 16) & 0xff; - response[2] = (sd->vhs >> 8) & 0xff; - response[3] = (sd->vhs >> 0) & 0xff; + stl_be_p(response, sd->vhs); } static inline uint64_t sd_addr_to_wpnum(uint64_t addr) @@ -728,7 +710,7 @@ static uint32_t sd_wpbits(SDState *sd, uint64_t addr) static void sd_function_switch(SDState *sd, uint32_t arg) { - int i, mode, new_func, crc; + int i, mode, new_func; mode = !!(arg & 0x80000000); sd->data[0] = 0x00; /* Maximum current consumption */ @@ -752,9 +734,7 @@ static void sd_function_switch(SDState *sd, uint32_t arg) sd->data[14 + (i >> 1)] = new_func << ((i * 4) & 4); } memset(&sd->data[17], 0, 47); - crc = sd_crc16(sd->data, 64); - sd->data[65] = crc >> 8; - sd->data[66] = crc & 0xff; + stw_be_p(sd->data + 65, sd_crc16(sd->data, 64)); } static inline bool sd_wp_addr(SDState *sd, uint64_t addr)