aboutsummaryrefslogtreecommitdiffstats
path: root/hw/ide
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2011-04-19 13:13:44 +0200
committerKevin Wolf <kwolf@redhat.com>2011-04-27 16:20:59 +0200
commite119bcaceb8dc17fe4874d6b0d2b62752639e488 (patch)
treeae904b9d7de09ad7018d2890b842a5bfbc9fa656 /hw/ide
parente1a064f982802ebb4a865482b7c0fe5e68d047f9 (diff)
ide/atapi: Replace bdrv_get_geometry calls by s->nb_sectors
The disk size can only change when the medium is changed, and the change callback takes care of updating s->nb_sectors in this case. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'hw/ide')
-rw-r--r--hw/ide/atapi.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index 277404b61..045233717 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -416,10 +416,10 @@ static int ide_dvd_read_structure(IDEState *s, int format,
if (layer != 0)
return -ASC_INV_FIELD_IN_CMD_PACKET;
- bdrv_get_geometry(s->bs, &total_sectors);
- total_sectors >>= 2;
- if (total_sectors == 0)
+ total_sectors = s->nb_sectors >> 2;
+ if (total_sectors == 0) {
return -ASC_MEDIUM_NOT_PRESENT;
+ }
buf[4] = 1; /* DVD-ROM, part version 1 */
buf[5] = 0xf; /* 120mm disc, minimum rate unspecified */
@@ -881,11 +881,8 @@ static void cmd_read_cd(IDEState *s, uint8_t* buf)
static void cmd_seek(IDEState *s, uint8_t* buf)
{
unsigned int lba;
- uint64_t total_sectors;
-
- bdrv_get_geometry(s->bs, &total_sectors);
+ uint64_t total_sectors = s->nb_sectors >> 2;
- total_sectors >>= 2;
if (total_sectors == 0) {
ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT);
return;
@@ -944,12 +941,9 @@ static void cmd_mechanism_status(IDEState *s, uint8_t* buf)
static void cmd_read_toc_pma_atip(IDEState *s, uint8_t* buf)
{
int format, msf, start_track, len;
- uint64_t total_sectors;
+ uint64_t total_sectors = s->nb_sectors >> 2;
int max_len;
- bdrv_get_geometry(s->bs, &total_sectors);
-
- total_sectors >>= 2;
if (total_sectors == 0) {
ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT);
return;
@@ -990,11 +984,8 @@ static void cmd_read_toc_pma_atip(IDEState *s, uint8_t* buf)
static void cmd_read_cdvd_capacity(IDEState *s, uint8_t* buf)
{
- uint64_t total_sectors;
-
- bdrv_get_geometry(s->bs, &total_sectors);
+ uint64_t total_sectors = s->nb_sectors >> 2;
- total_sectors >>= 2;
if (total_sectors == 0) {
ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT);
return;