Re: [PATCH 13/22] hw/sd: Introduce receive_ready() callback
On 12/31/20 12:30 PM, Bin Meng wrote: > From: Bin Meng > > 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 > --- > > include/hw/sd/sd.h | 2 ++ > hw/sd/core.c | 13 + > hw/sd/sd.c | 6 ++ > 3 files changed, 21 insertions(+) Reviewed-by: Philippe Mathieu-Daudé
Re: [PATCH 13/22] hw/sd: Introduce receive_ready() callback
On Thu, Dec 31, 2020 at 3:44 AM Bin Meng wrote: > > From: Bin Meng > > 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 Acked-by: Alistair Francis 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 > >
[PATCH 13/22] hw/sd: Introduce receive_ready() callback
From: Bin Meng 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 --- 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