1
From f44be2b943a88c6732ae6c8a1fabd60e14c4bfd6 Mon Sep 17 00:00:00 2001
2
From: Peter Maydell <peter.maydell@linaro.org>
3
Date: Mon, 18 Feb 2013 16:58:22 +0000
4
Subject: [PATCH 02/71] hw/sd: Expose sd_reset() as public function
6
Expose sd_reset() as a public function so MMC controllers
9
XXX: is this really right? Need to check specs.
11
hw/sd/sd.c | 17 ++++++++---------
13
2 files changed, 9 insertions(+), 9 deletions(-)
15
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
16
index 346d86f..6c221f8 100644
19
@@ -400,13 +400,13 @@ static inline uint64_t sd_addr_to_wpnum(uint64_t addr)
20
return addr >> (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT);
23
-static void sd_reset(SDState *sd, BlockDriverState *bdrv)
24
+void sd_reset(SDState *sd)
30
- bdrv_get_geometry(bdrv, §);
32
+ bdrv_get_geometry(sd->bdrv, §);
36
@@ -423,11 +423,9 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv)
37
sd_set_cardstatus(sd);
43
g_free(sd->wp_groups);
44
- sd->wp_switch = bdrv ? bdrv_is_read_only(bdrv) : false;
45
+ sd->wp_switch = sd->bdrv ? bdrv_is_read_only(sd->bdrv) : false;
46
sd->wpgrps_size = sect;
47
sd->wp_groups = bitmap_new(sd->wpgrps_size);
48
memset(sd->function_group, 0, sizeof(sd->function_group));
49
@@ -445,7 +443,7 @@ static void sd_cardchange(void *opaque, bool load)
51
qemu_set_irq(sd->inserted_cb, bdrv_is_inserted(sd->bdrv));
52
if (bdrv_is_inserted(sd->bdrv)) {
53
- sd_reset(sd, sd->bdrv);
55
qemu_set_irq(sd->readonly_cb, sd->wp_switch);
58
@@ -498,7 +496,8 @@ SDState *sd_init(BlockDriverState *bs, bool is_spi)
59
sd->buf = qemu_blockalign(bs, 512);
66
bdrv_attach_dev_nofail(sd->bdrv, sd);
67
bdrv_set_dev_ops(sd->bdrv, &sd_block_ops, sd);
68
@@ -686,7 +685,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
71
sd->state = sd_idle_state;
72
- sd_reset(sd, sd->bdrv);
74
return sd->spi ? sd_r1 : sd_r0;
77
diff --git a/include/hw/sd.h b/include/hw/sd.h
78
index d9b97e4..4ef822f 100644
81
@@ -69,6 +69,7 @@ typedef struct {
82
typedef struct SDState SDState;
84
SDState *sd_init(BlockDriverState *bs, bool is_spi);
85
+void sd_reset(SDState *sd);
86
int sd_do_command(SDState *sd, SDRequest *req,
88
void sd_write_data(SDState *sd, uint8_t value);