mirror of
https://github.com/Motorhead1991/qemu.git
synced 2026-01-06 14:37:42 -07:00
SD/MMC patches
- Convert legacy SD host controller to the SDBus API - Move legacy API to a separate "sdcard_legacy.h" header - Introduce methods to access multiple bytes on SDBus data lines - Fix 'switch function' group location - Fix SDSC maximum card size (2GB) CI jobs result:180605963-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAl9ABBYACgkQ4+MsLN6t wN4vng/8DEiJcb6RyjXXRbY6dY+k1mPRbUCCdkkSL/20OUF7edu8FXVO/YtTemky /rUbG8xa/WqxLXg5TqHkmJAHbQYjPu3YfakMTaNKAQfmAukepsqaWO4T2ROKtBNf Muj5X0idTnMSHYNLyJ9O59FiaGMmXN/1eWYkd6QcGl5IVyQQws1Sn/2Mwm4sXinU jkLzYSiibho/y9Y18MzvgD22/Z4dcRmdyCenHYaVAZVOJ1DNKNpJg0nem13lva8/ 9kZbtjV0WuGX+QkNd5KUSpJQEjemRuABsPSwu+MIA/1AWDhoowAITUbMba5GpRmT uIylUiVpVyJAD545UB5rVMlBb86hBEp/4cpxpZ8J05qd1L8Ko/F3ECUj1WrteqK7 Wf6p4ZtF+unGELwk/7tu9o9MiEIU5Lb8IN2cr68gQ2p50rxR1ABkJo4K7FqR9Lvk QkmfqAJRl/dSvh9ChDE/xRMewYm69FE7MGpg4JaeW6KZ4CTX0JwWy9LSpdjQf5AG uhHqGTjiZkn9kzIGMIYaRuKDqYQcnslQpKxd0lRKNMw775LI/0L3MBIc1zfLA/Sb uUHdADDUibQaXaTHVgkyJDU96i3STkehEhbTejo36i+Qevd6bE8j3yDu483Kt2aV AStMJpW+8Iuq7T2hIRaggqhcuwCIsknKU3yhvV7rwAgHxnwy4Nc= =Pefc -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/philmd-gitlab/tags/sd-next-20200821' into staging SD/MMC patches - Convert legacy SD host controller to the SDBus API - Move legacy API to a separate "sdcard_legacy.h" header - Introduce methods to access multiple bytes on SDBus data lines - Fix 'switch function' group location - Fix SDSC maximum card size (2GB) CI jobs result:180605963# gpg: Signature made Fri 21 Aug 2020 18:27:50 BST # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] # Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * remotes/philmd-gitlab/tags/sd-next-20200821: (23 commits) hw/sd: Correct the maximum size of a Standard Capacity SD Memory Card hw/sd: Fix incorrect populated function switch status data structure hw/sd: Use sdbus_read_data() instead of sdbus_read_byte() when possible hw/sd: Add sdbus_read_data() to read multiples bytes on the data line hw/sd: Use sdbus_write_data() instead of sdbus_write_byte when possible hw/sd: Add sdbus_write_data() to write multiples bytes on the data line hw/sd: Rename sdbus_read_data() as sdbus_read_byte() hw/sd: Rename sdbus_write_data() as sdbus_write_byte() hw/sd: Rename read/write_data() as read/write_byte() hw/sd: Move sdcard legacy API to 'hw/sd/sdcard_legacy.h' hw/sd/sdcard: Make sd_data_ready() static hw/sd/pl181: Replace disabled fprintf()s by trace events hw/sd/pl181: Do not create SD card within the SD host controller hw/sd/pl181: Expose a SDBus and connect the SDCard to it hw/sd/pl181: Use named GPIOs hw/sd/pl181: Add TODO to use Fifo32 API hw/sd/pl181: Rename pl181_send_command() as pl181_do_command() hw/sd/pl181: Replace fprintf(stderr, "*\n") with error_report() hw/sd/milkymist: Do not create SD card within the SD host controller hw/sd/milkymist: Create the SDBus at init() ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
d7df0ceee0
21 changed files with 415 additions and 222 deletions
|
|
@ -89,8 +89,7 @@ void pxa2xx_lcd_vsync_notifier(PXA2xxLCDState *s, qemu_irq handler);
|
|||
typedef struct PXA2xxMMCIState PXA2xxMMCIState;
|
||||
PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem,
|
||||
hwaddr base,
|
||||
BlockBackend *blk, qemu_irq irq,
|
||||
qemu_irq rx_dma, qemu_irq tx_dma);
|
||||
qemu_irq irq, qemu_irq rx_dma, qemu_irq tx_dma);
|
||||
void pxa2xx_mmci_handlers(PXA2xxMMCIState *s, qemu_irq readonly,
|
||||
qemu_irq coverswitch);
|
||||
|
||||
|
|
|
|||
|
|
@ -104,8 +104,23 @@ typedef struct {
|
|||
/*< public >*/
|
||||
|
||||
int (*do_command)(SDState *sd, SDRequest *req, uint8_t *response);
|
||||
void (*write_data)(SDState *sd, uint8_t value);
|
||||
uint8_t (*read_data)(SDState *sd);
|
||||
/**
|
||||
* Write a byte to a SD card.
|
||||
* @sd: card
|
||||
* @value: byte to write
|
||||
*
|
||||
* Write a byte on the data lines of a SD card.
|
||||
*/
|
||||
void (*write_byte)(SDState *sd, uint8_t value);
|
||||
/**
|
||||
* Read a byte from a SD card.
|
||||
* @sd: card
|
||||
*
|
||||
* Read a byte from the data lines of a SD card.
|
||||
*
|
||||
* Return: byte value read
|
||||
*/
|
||||
uint8_t (*read_byte)(SDState *sd);
|
||||
bool (*data_ready)(SDState *sd);
|
||||
void (*set_voltage)(SDState *sd, uint16_t millivolts);
|
||||
uint8_t (*get_dat_lines)(SDState *sd);
|
||||
|
|
@ -136,23 +151,6 @@ typedef struct {
|
|||
void (*set_readonly)(DeviceState *dev, bool readonly);
|
||||
} SDBusClass;
|
||||
|
||||
/* 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,
|
||||
uint8_t *response);
|
||||
void sd_write_data(SDState *sd, uint8_t value);
|
||||
uint8_t sd_read_data(SDState *sd);
|
||||
void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert);
|
||||
bool sd_data_ready(SDState *sd);
|
||||
/* sd_enable should not be used -- it is only used on the nseries boards,
|
||||
* where it is part of a broken implementation of the MMC card slot switch
|
||||
* (there should be two card slots which are multiplexed to a single MMC
|
||||
* controller, but instead we model it with one card and controller and
|
||||
* disable the card when the second slot is selected, so it looks like the
|
||||
* second slot is always empty).
|
||||
*/
|
||||
void sd_enable(SDState *sd, bool enable);
|
||||
|
||||
/* Functions to be used by qdevified callers (working via
|
||||
* an SDBus rather than directly with SDState)
|
||||
*/
|
||||
|
|
@ -160,8 +158,41 @@ void sdbus_set_voltage(SDBus *sdbus, uint16_t millivolts);
|
|||
uint8_t sdbus_get_dat_lines(SDBus *sdbus);
|
||||
bool sdbus_get_cmd_line(SDBus *sdbus);
|
||||
int sdbus_do_command(SDBus *sd, SDRequest *req, uint8_t *response);
|
||||
void sdbus_write_data(SDBus *sd, uint8_t value);
|
||||
uint8_t sdbus_read_data(SDBus *sd);
|
||||
/**
|
||||
* Write a byte to a SD bus.
|
||||
* @sd: bus
|
||||
* @value: byte to write
|
||||
*
|
||||
* Write a byte on the data lines of a SD bus.
|
||||
*/
|
||||
void sdbus_write_byte(SDBus *sd, uint8_t value);
|
||||
/**
|
||||
* Read a byte from a SD bus.
|
||||
* @sd: bus
|
||||
*
|
||||
* Read a byte from the data lines of a SD bus.
|
||||
*
|
||||
* Return: byte value read
|
||||
*/
|
||||
uint8_t sdbus_read_byte(SDBus *sd);
|
||||
/**
|
||||
* Write data to a SD bus.
|
||||
* @sdbus: bus
|
||||
* @buf: data to write
|
||||
* @length: number of bytes to write
|
||||
*
|
||||
* Write multiple bytes of data on the data lines of a SD bus.
|
||||
*/
|
||||
void sdbus_write_data(SDBus *sdbus, const void *buf, size_t length);
|
||||
/**
|
||||
* Read data from a SD bus.
|
||||
* @sdbus: bus
|
||||
* @buf: buffer to read data into
|
||||
* @length: number of bytes to read
|
||||
*
|
||||
* Read multiple bytes of data on the data lines of a SD bus.
|
||||
*/
|
||||
void sdbus_read_data(SDBus *sdbus, void *buf, size_t length);
|
||||
bool sdbus_data_ready(SDBus *sd);
|
||||
bool sdbus_get_inserted(SDBus *sd);
|
||||
bool sdbus_get_readonly(SDBus *sd);
|
||||
|
|
|
|||
50
include/hw/sd/sdcard_legacy.h
Normal file
50
include/hw/sd/sdcard_legacy.h
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* SD Memory Card emulation (deprecated legacy API)
|
||||
*
|
||||
* Copyright (c) 2006 Andrzej Zaborowski <balrog@zabor.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef HW_SDCARD_LEGACY_H
|
||||
#define HW_SDCARD_LEGACY_H
|
||||
|
||||
#include "hw/sd/sd.h"
|
||||
|
||||
/* Legacy functions to be used only by non-qdevified callers */
|
||||
SDState *sd_init(BlockBackend *blk, bool is_spi);
|
||||
int sd_do_command(SDState *card, SDRequest *request, uint8_t *response);
|
||||
void sd_write_byte(SDState *card, uint8_t value);
|
||||
uint8_t sd_read_byte(SDState *card);
|
||||
void sd_set_cb(SDState *card, qemu_irq readonly, qemu_irq insert);
|
||||
|
||||
/* sd_enable should not be used -- it is only used on the nseries boards,
|
||||
* where it is part of a broken implementation of the MMC card slot switch
|
||||
* (there should be two card slots which are multiplexed to a single MMC
|
||||
* controller, but instead we model it with one card and controller and
|
||||
* disable the card when the second slot is selected, so it looks like the
|
||||
* second slot is always empty).
|
||||
*/
|
||||
void sd_enable(SDState *card, bool enable);
|
||||
|
||||
#endif /* HW_SDCARD_LEGACY_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue