Revision 03f311ed

b/hw/sd.c
365 365
    uint32_t size;
366 366
    uint64_t sect;
367 367

  
368
    bdrv_get_geometry(bdrv, &sect);
368
    if (bdrv) {
369
        bdrv_get_geometry(bdrv, &sect);
370
    } else {
371
        sect = 0;
372
    }
369 373
    sect <<= 9;
370 374

  
371 375
    if (sect > 0x40000000)
......
388 392

  
389 393
    if (sd->wp_groups)
390 394
        qemu_free(sd->wp_groups);
391
    sd->wp_switch = bdrv_is_read_only(bdrv);
395
    sd->wp_switch = bdrv ? bdrv_is_read_only(bdrv) : 0;
392 396
    sd->wp_groups = (int *) qemu_mallocz(sizeof(int) * sect);
393 397
    memset(sd->function_group, 0, sizeof(int) * 6);
394 398
    sd->erase_start = 0;
......
421 425
    sd->spi = is_spi;
422 426
    sd->enable = 1;
423 427
    sd_reset(sd, bs);
424
    bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd);
428
    if (sd->bdrv) {
429
        bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd);
430
    }
425 431
    return sd;
426 432
}
427 433

  
......
1228 1234
    sd_rsp_type_t rtype;
1229 1235
    int rsplen;
1230 1236

  
1231
    if (!bdrv_is_inserted(sd->bdrv) || !sd->enable) {
1237
    if (!sd->bdrv || !bdrv_is_inserted(sd->bdrv) || !sd->enable) {
1232 1238
        return 0;
1233 1239
    }
1234 1240

  

Also available in: Unified diff