X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fdevices%2Fide.h;h=d299827f031e632b70d0047b6d9252ea4a93364b;hb=326a9425e1dc7a9f7afafe2951b55f35d9ff2422;hp=ee6f2c5d2071227ccc3c83857947017dfa32d8ab;hpb=bb102eef875adf3e667e4e3ffe7e6412b167b14e;p=palacios.git diff --git a/palacios/include/devices/ide.h b/palacios/include/devices/ide.h index ee6f2c5..d299827 100644 --- a/palacios/include/devices/ide.h +++ b/palacios/include/devices/ide.h @@ -24,10 +24,50 @@ #include +#define ATAPI_BLOCK_SIZE 2048 +#define IDE_SECTOR_SIZE 512 + +typedef enum {IDE_NONE, IDE_DISK, IDE_CDROM} v3_ide_dev_type_t; + +struct v3_ide_cd_ops { + uint32_t (*get_capacity)(void * private_data); + // Reads always operate on 2048 byte blocks + int (*read)(uint8_t * buf, int block_count, uint64_t lba, void * private_data); +}; + + +struct v3_ide_hd_ops { + uint64_t (*get_capacity)(void * private_data); + // Reads always operate on 2048 byte blocks + int (*read)(uint8_t * buf, int sector_count, uint64_t lba, void * private_data); + int (*write)(uint8_t * buf, int sector_count, uint64_t lba, void * private_data); +}; + + +int v3_ide_register_cdrom(struct vm_device * ide, + uint_t bus_num, + uint_t drive_num, + char * drive_name, + struct v3_ide_cd_ops * ops, + void * private_data); + +int v3_ide_register_harddisk(struct vm_device * ide, + uint_t bus_num, + uint_t drive_num, + char * drive_name, + struct v3_ide_hd_ops * ops, + void * private_data); + + + struct vm_device * v3_create_ide(); +int v3_ide_get_geometry(struct vm_device * ide_dev, int channel_num, int drive_num, + uint32_t * cylinders, uint32_t * heads, uint32_t * sectors); + + #endif // ! __V3VEE__