On Thu, Dec 31, 2020 at 3:44 AM Bin Meng <bmeng...@gmail.com> wrote: > > From: Bin Meng <bin.m...@windriver.com> > > At present there is a data_ready() callback for the SD data read > path. Let's add a receive_ready() for the SD data write path. > > Signed-off-by: Bin Meng <bin.m...@windriver.com>
Acked-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > > include/hw/sd/sd.h | 2 ++ > hw/sd/core.c | 13 +++++++++++++ > hw/sd/sd.c | 6 ++++++ > 3 files changed, 21 insertions(+) > > diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h > index 05ef9b73e5..47360ba4ee 100644 > --- a/include/hw/sd/sd.h > +++ b/include/hw/sd/sd.h > @@ -116,6 +116,7 @@ struct SDCardClass { > * Return: byte value read > */ > uint8_t (*read_byte)(SDState *sd); > + bool (*receive_ready)(SDState *sd); > bool (*data_ready)(SDState *sd); > void (*set_voltage)(SDState *sd, uint16_t millivolts); > uint8_t (*get_dat_lines)(SDState *sd); > @@ -187,6 +188,7 @@ void sdbus_write_data(SDBus *sdbus, const void *buf, > size_t length); > * 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_receive_ready(SDBus *sd); > bool sdbus_data_ready(SDBus *sd); > bool sdbus_get_inserted(SDBus *sd); > bool sdbus_get_readonly(SDBus *sd); > diff --git a/hw/sd/core.c b/hw/sd/core.c > index 08c93b5903..30ee62c510 100644 > --- a/hw/sd/core.c > +++ b/hw/sd/core.c > @@ -160,6 +160,19 @@ void sdbus_read_data(SDBus *sdbus, void *buf, size_t > length) > } > } > > +bool sdbus_receive_ready(SDBus *sdbus) > +{ > + SDState *card = get_card(sdbus); > + > + if (card) { > + SDCardClass *sc = SD_CARD_GET_CLASS(card); > + > + return sc->receive_ready(card); > + } > + > + return false; > +} > + > bool sdbus_data_ready(SDBus *sdbus) > { > SDState *card = get_card(sdbus); > diff --git a/hw/sd/sd.c b/hw/sd/sd.c > index 67e5f7c05d..f19e38625a 100644 > --- a/hw/sd/sd.c > +++ b/hw/sd/sd.c > @@ -2036,6 +2036,11 @@ uint8_t sd_read_byte(SDState *sd) > return ret; > } > > +static bool sd_receive_ready(SDState *sd) > +{ > + return sd->state == sd_receivingdata_state; > +} > + > static bool sd_data_ready(SDState *sd) > { > return sd->state == sd_sendingdata_state; > @@ -2147,6 +2152,7 @@ static void sd_class_init(ObjectClass *klass, void > *data) > sc->do_command = sd_do_command; > sc->write_byte = sd_write_byte; > sc->read_byte = sd_read_byte; > + sc->receive_ready = sd_receive_ready; > sc->data_ready = sd_data_ready; > sc->enable = sd_enable; > sc->get_inserted = sd_get_inserted; > -- > 2.25.1 > >