To keep the code way easier to review! Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> --- hw/sd/sd.c | 51 ++++++++++++++------------------------------------- 1 file changed, 14 insertions(+), 37 deletions(-)
diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 8e12b07ee4..9b3745a019 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -352,10 +352,7 @@ 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 */ } @@ -365,19 +362,12 @@ static void sd_response_r1_make(SDState *sd, uint8_t *response) uint32_t status = 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; + stl_be_p(response, status); } 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) @@ -390,19 +380,14 @@ static void sd_response_r6_make(SDState *sd, uint8_t *response) ((sd->card_status >> 6) & 0x2000) | (sd->card_status & 0x1fff); sd->card_status &= ~(CARD_STATUS_C & 0xc81fff); + stw_be_p(response + 0, arg); + stw_be_p(response + 2, status); - response[0] = (arg >> 8) & 0xff; - response[1] = arg & 0xff; - response[2] = (status >> 8) & 0xff; - response[3] = status & 0xff; } 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) @@ -644,20 +629,13 @@ static void sd_function_switch(SDState *sd, uint32_t arg) int i, mode, new_func, crc; mode = !!(arg & 0x80000000); - sd->data[0] = 0x00; /* Maximum current consumption */ - sd->data[1] = 0x01; - sd->data[2] = 0x80; /* Supported group 6 functions */ - sd->data[3] = 0x01; - sd->data[4] = 0x80; /* Supported group 5 functions */ - sd->data[5] = 0x01; - sd->data[6] = 0x80; /* Supported group 4 functions */ - sd->data[7] = 0x01; - sd->data[8] = 0x80; /* Supported group 3 functions */ - sd->data[9] = 0x01; - sd->data[10] = 0x80; /* Supported group 2 functions */ - sd->data[11] = 0x43; - sd->data[12] = 0x80; /* Supported group 1 functions */ - sd->data[13] = 0x03; + stw_be_p(sd->data + 0, 1); /* Maximum current consumption */ + stw_be_p(sd->data + 2, 0x8001); /* Supported group 6 functions */ + stw_be_p(sd->data + 4, 0x8001); /* Supported group 5 functions */ + stw_be_p(sd->data + 6, 0x8001); /* Supported group 4 functions */ + stw_be_p(sd->data + 8, 0x8001); /* Supported group 3 functions */ + stw_be_p(sd->data + 10, 0x8043); /* Supported group 2 functions */ + stw_be_p(sd->data + 12, 0x8003); /* Supported group 1 functions */ for (i = 0; i < 6; i ++) { new_func = (arg >> (i * 4)) & 0x0f; if (mode && new_func != 0x0f) @@ -666,8 +644,7 @@ static void sd_function_switch(SDState *sd, uint32_t arg) } 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, crc); } static inline bool sd_wp_addr(SDState *sd, uint64_t addr) -- 2.15.1