static int idedisk_init (void *args) { hd_t *drive; size_t size; char path[PATH_MAX]; drive = (hd_t *)args; struct block_dev *bdev = drive->bdev; /* Make new device */ if ((drive->media == IDE_DISK) && (drive->udmamode == -1)) { *path = 0; strcat(path, "/dev/hd*"); if (0 > (drive->idx = block_dev_named(path, idedisk_idx))) { return drive->idx; } drive->bdev = block_dev_create(path, &idedisk_pio_driver, drive); if (NULL != drive->bdev) { size = drive->blks * bdev->block_size; block_dev(drive->bdev)->size = size; } else { return -1; } create_partitions(drive); } return 0; }
void scsi_disk_found(struct scsi_dev *sdev) { struct block_dev *bdev; char path[PATH_MAX]; strcpy(path, "/dev/sd*"); if (0 > (sdev->idx = block_dev_named(path, &scsi_disk_idx))) { return; } bdev = block_dev_create(path, (void *) &bdev_driver_scsi, sdev); bdev->size = sdev->blk_n * sdev->blk_size; sdev->bdev = bdev; scsi_state_transit(sdev, &scsi_state_user); }
static int idedisk_udma_init (void *args) { // struct ide_tab *ide; hd_t *drive; double size; char path[PATH_MAX]; #if 0 ide = ide_get_drive(); for(int i = 0; i < HD_DRIVES; i++) { if (NULL == ide->drive[i]) { continue; } else { drive = (hd_t *) ide->drive[i]; #endif drive = (hd_t *)args; /* Make new device */ if ((drive->media == IDE_DISK) && (drive->udmamode != -1)) { *path = 0; strcat(path, "/dev/hd*"); if (0 > (drive->idx = block_dev_named(path, idedisk_idx))) { return drive->idx; } drive->bdev = block_dev_create(path, &idedisk_udma_driver, drive); if (NULL != drive->bdev) { size = (double) drive->param.cylinders * (double) drive->param.heads * (double) drive->param.unfbytes * (double) (drive->param.sectors + 1); block_dev(drive->bdev)->size = (size_t) size; } else { return -1; } create_partitions(drive); // } else { // continue; // } } // } return 0; } EMBOX_BLOCK_DEV("idedisk_udma", &idedisk_udma_driver, idedisk_udma_init);