struct pdc_port_priv *pp = ap->private_data;
        u8 *buf = pp->pkt;
        u32 *buf32 = (u32 *) buf;
-       unsigned int dev_sel, feature, nbytes;
+       unsigned int dev_sel, feature;
 
        /* set control bits (byte 0), zero delay seq id (byte 3),
         * and seq id (byte 2)
        buf32[2] = 0;                           /* no next-packet */
 
        /* select drive */
-       if (sata_scr_valid(&ap->link)) {
+       if (sata_scr_valid(&ap->link))
                dev_sel = PDC_DEVICE_SATA;
-       } else {
-               dev_sel = ATA_DEVICE_OBS;
-               if (qc->dev->devno != 0)
-                       dev_sel |= ATA_DEV1;
-       }
+       else
+               dev_sel = qc->tf.device;
+
        buf[12] = (1 << 5) | ATA_REG_DEVICE;
        buf[13] = dev_sel;
        buf[14] = (1 << 5) | ATA_REG_DEVICE | PDC_PKT_CLEAR_BSY;
        buf[15] = dev_sel; /* once more, waiting for BSY to clear */
 
        buf[16] = (1 << 5) | ATA_REG_NSECT;
-       buf[17] = 0x00;
+       buf[17] = qc->tf.nsect;
        buf[18] = (1 << 5) | ATA_REG_LBAL;
-       buf[19] = 0x00;
+       buf[19] = qc->tf.lbal;
 
        /* set feature and byte counter registers */
-       if (qc->tf.protocol != ATA_PROT_ATAPI_DMA) {
+       if (qc->tf.protocol != ATA_PROT_ATAPI_DMA)
                feature = PDC_FEATURE_ATAPI_PIO;
-               /* set byte counter register to real transfer byte count */
-               nbytes = qc->nbytes;
-               if (nbytes > 0xffff)
-                       nbytes = 0xffff;
-       } else {
+       else
                feature = PDC_FEATURE_ATAPI_DMA;
-               /* set byte counter register to 0 */
-               nbytes = 0;
-       }
+
        buf[20] = (1 << 5) | ATA_REG_FEATURE;
        buf[21] = feature;
        buf[22] = (1 << 5) | ATA_REG_BYTEL;
-       buf[23] = nbytes & 0xFF;
+       buf[23] = qc->tf.lbam;
        buf[24] = (1 << 5) | ATA_REG_BYTEH;
-       buf[25] = (nbytes >> 8) & 0xFF;
+       buf[25] = qc->tf.lbah;
 
        /* send ATAPI packet command 0xA0 */
        buf[26] = (1 << 5) | ATA_REG_CMD;
-       buf[27] = ATA_CMD_PACKET;
+       buf[27] = qc->tf.command;
 
        /* select drive and check DRQ */
        buf[28] = (1 << 5) | ATA_REG_DEVICE | PDC_PKT_WAIT_DRDY;