Revision 02ce600c hw/sd.c
b/hw/sd.c | ||
---|---|---|
90 | 90 |
uint32_t data_start; |
91 | 91 |
uint32_t data_offset; |
92 | 92 |
uint8_t data[512]; |
93 |
void (*readonly_cb)(void *, int); |
|
94 |
void (*inserted_cb)(void *, int); |
|
95 |
void *opaque; |
|
93 |
qemu_irq readonly_cb; |
|
94 |
qemu_irq inserted_cb; |
|
96 | 95 |
BlockDriverState *bdrv; |
97 | 96 |
}; |
98 | 97 |
|
... | ... | |
372 | 371 |
|
373 | 372 |
sd->bdrv = bdrv; |
374 | 373 |
|
374 |
if (s->wp_groups) |
|
375 |
qemu_free(s->wp_groups); |
|
375 | 376 |
sd->wp_switch = bdrv_is_read_only(bdrv); |
376 | 377 |
sd->wp_groups = (int *) qemu_mallocz(sizeof(int) * sect); |
377 | 378 |
memset(sd->wp_groups, 0, sizeof(int) * sect); |
... | ... | |
386 | 387 |
static void sd_cardchange(void *opaque) |
387 | 388 |
{ |
388 | 389 |
SDState *sd = opaque; |
389 |
if (sd->inserted_cb) |
|
390 |
sd->inserted_cb(sd->opaque, bdrv_is_inserted(sd->bdrv)); |
|
390 |
qemu_set_irq(sd->inserted_cb, bdrv_is_inserted(sd->bdrv)); |
|
391 | 391 |
if (bdrv_is_inserted(sd->bdrv)) { |
392 | 392 |
sd_reset(sd, sd->bdrv); |
393 |
if (sd->readonly_cb) |
|
394 |
sd->readonly_cb(sd->opaque, sd->wp_switch); |
|
393 |
qemu_set_irq(s->readonly_cb, sd->wp_switch); |
|
395 | 394 |
} |
396 | 395 |
} |
397 | 396 |
|
... | ... | |
401 | 400 |
|
402 | 401 |
sd = (SDState *) qemu_mallocz(sizeof(SDState)); |
403 | 402 |
sd_reset(sd, bs); |
403 |
bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd); |
|
404 | 404 |
return sd; |
405 | 405 |
} |
406 | 406 |
|
407 |
void sd_set_cb(SDState *sd, void *opaque, |
|
408 |
void (*readonly_cb)(void *, int), |
|
409 |
void (*inserted_cb)(void *, int)) |
|
407 |
void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert) |
|
410 | 408 |
{ |
411 |
sd->opaque = opaque; |
|
412 |
sd->readonly_cb = readonly_cb; |
|
413 |
sd->inserted_cb = inserted_cb; |
|
414 |
if (sd->readonly_cb) |
|
415 |
sd->readonly_cb(sd->opaque, bdrv_is_read_only(sd->bdrv)); |
|
416 |
if (sd->inserted_cb) |
|
417 |
sd->inserted_cb(sd->opaque, bdrv_is_inserted(sd->bdrv)); |
|
418 |
bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd); |
|
409 |
sd->readonly_cb = readonly; |
|
410 |
sd->inserted_cb = insert; |
|
411 |
qemu_set_irq(readonly, bdrv_is_read_only(sd->bdrv)); |
|
412 |
qemu_set_irq(insert, bdrv_is_inserted(sd->bdrv)); |
|
419 | 413 |
} |
420 | 414 |
|
421 | 415 |
static void sd_erase(SDState *sd) |
Also available in: Unified diff