Revision fa1fb14c hw/esp.c

b/hw/esp.c
43 43

  
44 44
#define ESP_MAXREG 0x3f
45 45
#define TI_BUFSZ 32
46
/* The HBA is ID 7, so for simplicitly limit to 7 devices.  */
47
#define ESP_MAX_DEVS      7
46 48

  
47 49
typedef struct ESPState ESPState;
48 50

  
......
526 528
    return 0;
527 529
}
528 530

  
531
void esp_scsi_attach(void *opaque, BlockDriverState *bd, int id)
532
{
533
    ESPState *s = (ESPState *)opaque;
534

  
535
    if (id < 0) {
536
        for (id = 0; id < ESP_MAX_DEVS; id++) {
537
            if (s->scsi_dev[id] == NULL)
538
                break;
539
        }
540
    }
541
    if (id >= ESP_MAX_DEVS) {
542
        DPRINTF("Bad Device ID %d\n", id);
543
        return;
544
    }
545
    if (s->scsi_dev[id]) {
546
        DPRINTF("Destroying device %d\n", id);
547
        scsi_disk_destroy(s->scsi_dev[id]);
548
    }
549
    DPRINTF("Attaching block device %d\n", id);
550
    /* Command queueing is not implemented.  */
551
    s->scsi_dev[id] = scsi_disk_init(bd, 0, esp_command_complete, s);
552
}
553

  
529 554
void *esp_init(BlockDriverState **bd, uint32_t espaddr, void *dma_opaque)
530 555
{
531 556
    ESPState *s;
532 557
    int esp_io_memory;
533
    int i;
534 558

  
535 559
    s = qemu_mallocz(sizeof(ESPState));
536 560
    if (!s)
......
546 570

  
547 571
    register_savevm("esp", espaddr, 2, esp_save, esp_load, s);
548 572
    qemu_register_reset(esp_reset, s);
549
    for (i = 0; i < MAX_DISKS; i++) {
550
        if (bs_table[i]) {
551
            /* Command queueing is not implemented.  */
552
            s->scsi_dev[i] =
553
                scsi_disk_init(bs_table[i], 0, esp_command_complete, s);
554
        }
555
    }
556 573

  
557 574
    return s;
558 575
}

Also available in: Unified diff