void hd_geometry_guess(BlockDriverState *bs,

                       uint32_t *pcyls, uint32_t *pheads, uint32_t *psecs,

                       int *ptrans)

{

    int cylinders, heads, secs, translation;



    if (guess_disk_lchs(bs, &cylinders, &heads, &secs) < 0) {

        /* no LCHS guess: use a standard physical disk geometry  */

        guess_chs_for_size(bs, pcyls, pheads, psecs);

        translation = hd_bios_chs_auto_trans(*pcyls, *pheads, *psecs);

    } else if (heads > 16) {

        /* LCHS guess with heads > 16 means that a BIOS LBA

           translation was active, so a standard physical disk

           geometry is OK */

        guess_chs_for_size(bs, pcyls, pheads, psecs);

        translation = *pcyls * *pheads <= 131072

            ? BIOS_ATA_TRANSLATION_LARGE

            : BIOS_ATA_TRANSLATION_LBA;

    } else {

        /* LCHS guess with heads <= 16: use as physical geometry */

        *pcyls = cylinders;

        *pheads = heads;

        *psecs = secs;

        /* disable any translation to be in sync with

           the logical geometry */

        translation = BIOS_ATA_TRANSLATION_NONE;

    }

    if (ptrans) {

        *ptrans = translation;

    }

    trace_hd_geometry_guess(bs, *pcyls, *pheads, *psecs, translation);

}

void hd_geometry_guess(BlockDriverState *bs,

                       uint32_t *pcyls, uint32_t *pheads, uint32_t *psecs,

                       int *ptrans)

{

    int cylinders, heads, secs, translation;



    if (guess_disk_lchs(bs, &cylinders, &heads, &secs) < 0) {

        

        guess_chs_for_size(bs, pcyls, pheads, psecs);

        translation = hd_bios_chs_auto_trans(*pcyls, *pheads, *psecs);

    } else if (heads > 16) {

        





        guess_chs_for_size(bs, pcyls, pheads, psecs);

        translation = *pcyls * *pheads <= 131072

            ? BIOS_ATA_TRANSLATION_LARGE

            : BIOS_ATA_TRANSLATION_LBA;

    } else {

        

        *pcyls = cylinders;

        *pheads = heads;

        *psecs = secs;

        



        translation = BIOS_ATA_TRANSLATION_NONE;

    }

    if (ptrans) {

        *ptrans = translation;

    }

    trace_hd_geometry_guess(bs, *pcyls, *pheads, *psecs, translation);

}

void FUNC_0(BlockDriverState *VAR_0,

                       uint32_t *VAR_1, uint32_t *VAR_2, uint32_t *VAR_3,

                       int *VAR_4)

{

    int VAR_5, VAR_6, VAR_7, VAR_8;



    if (guess_disk_lchs(VAR_0, &VAR_5, &VAR_6, &VAR_7) < 0) {

        

        guess_chs_for_size(VAR_0, VAR_1, VAR_2, VAR_3);

        VAR_8 = hd_bios_chs_auto_trans(*VAR_1, *VAR_2, *VAR_3);

    } else if (VAR_6 > 16) {

        





        guess_chs_for_size(VAR_0, VAR_1, VAR_2, VAR_3);

        VAR_8 = *VAR_1 * *VAR_2 <= 131072

            ? BIOS_ATA_TRANSLATION_LARGE

            : BIOS_ATA_TRANSLATION_LBA;

    } else {

        

        *VAR_1 = VAR_5;

        *VAR_2 = VAR_6;

        *VAR_3 = VAR_7;

        



        VAR_8 = BIOS_ATA_TRANSLATION_NONE;

    }

    if (VAR_4) {

        *VAR_4 = VAR_8;

    }

    trace_hd_geometry_guess(VAR_0, *VAR_1, *VAR_2, *VAR_3, VAR_8);

}

void FUNC_0(BlockDriverState *VAR_0,
uint32_t *VAR_1, uint32_t *VAR_2, uint32_t *VAR_3,
int *VAR_4)
{ int VAR_5, VAR_6, VAR_7, VAR_8; if (guess_disk_lchs(VAR_0, &VAR_5, &VAR_6, &VAR_7) < 0) { guess_chs_for_size(VAR_0, VAR_1, VAR_2, VAR_3); VAR_8 = hd_bios_chs_auto_trans(*VAR_1, *VAR_2, *VAR_3); } else if (VAR_6 > 16) { guess_chs_for_size(VAR_0, VAR_1, VAR_2, VAR_3); VAR_8 = *VAR_1 * *VAR_2 <= 131072
? BIOS_ATA_TRANSLATION_LARGE
: BIOS_ATA_TRANSLATION_LBA; } else { *VAR_1 = VAR_5; *VAR_2 = VAR_6; *VAR_3 = VAR_7; VAR_8 = BIOS_ATA_TRANSLATION_NONE; } if (VAR_4) { *VAR_4 = VAR_8; } trace_hd_geometry_guess(VAR_0, *VAR_1, *VAR_2, *VAR_3, VAR_8); }