[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH 04/10] hw/sd: Introduce sd_cmd_handler type
From: |
Cédric Le Goater |
Subject: |
Re: [RFC PATCH 04/10] hw/sd: Introduce sd_cmd_handler type |
Date: |
Mon, 28 Jun 2021 09:29:13 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 |
On 6/24/21 4:22 PM, Philippe Mathieu-Daudé wrote:
> Add 2 command handler arrays in SDProto, for CMD and ACMD.
> Have sd_normal_command() / sd_app_command() use these arrays:
> if an command handler is registered, call it, otherwise fall
> back to current code base.
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> hw/sd/sd.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/hw/sd/sd.c b/hw/sd/sd.c
> index a1cc8ab0be8..ce1eec0374f 100644
> --- a/hw/sd/sd.c
> +++ b/hw/sd/sd.c
> @@ -88,8 +88,12 @@ enum SDCardStates {
> sd_disconnect_state,
> };
>
> +typedef sd_rsp_type_t (*sd_cmd_handler)(SDState *sd, SDRequest req);
> +
> typedef struct SDProto {
> const char *name;
> + sd_cmd_handler cmd[SDMMC_CMD_MAX];
> + sd_cmd_handler acmd[SDMMC_CMD_MAX];
> } SDProto;
A class would be better but it's no big deal for the moment.
>
> struct SDState {
> @@ -994,6 +998,10 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
> SDRequest req)
> return sd_illegal;
> }
>
> + if (sd->proto->cmd[req.cmd]) {
> + return sd->proto->cmd[req.cmd](sd, req);
> + }
> +
I expect that some default array will be used to initialize ->cmd ?
Thanks,
C.
> switch (req.cmd) {
> /* Basic commands (Class 0 and Class 1) */
> case 0: /* CMD0: GO_IDLE_STATE */
> @@ -1533,6 +1541,11 @@ static sd_rsp_type_t sd_app_command(SDState *sd,
> trace_sdcard_app_command(sd->proto->name, sd_acmd_name(req.cmd),
> req.cmd, req.arg, sd_state_name(sd->state));
> sd->card_status |= APP_CMD;
> +
> + if (sd->proto->acmd[req.cmd]) {
> + return sd->proto->acmd[req.cmd](sd, req);
> + }
> +
> switch (req.cmd) {
> case 6: /* ACMD6: SET_BUS_WIDTH */
> if (sd->spi) {
>
- [RFC PATCH 00/10] hw/sd: Start splitting SD vs SPI protocols, Philippe Mathieu-Daudé, 2021/06/24
- [RFC PATCH 01/10] hw/sd: When card is in wrong state, log which state it is, Philippe Mathieu-Daudé, 2021/06/24
- [RFC PATCH 02/10] hw/sd: Extract address_in_range() helper, log invalid accesses, Philippe Mathieu-Daudé, 2021/06/24
- [RFC PATCH 03/10] hw/sd: Move proto_name to SDProto structure, Philippe Mathieu-Daudé, 2021/06/24
- [RFC PATCH 04/10] hw/sd: Introduce sd_cmd_handler type, Philippe Mathieu-Daudé, 2021/06/24
- [RFC PATCH 05/10] hw/sd: Add sd_cmd_illegal() handler, Philippe Mathieu-Daudé, 2021/06/24
- [RFC PATCH 06/10] hw/sd: Add sd_cmd_unimplemented() handler, Philippe Mathieu-Daudé, 2021/06/24