View | Details | Raw Unified | Return to bug 13847
Collapse All | Expand All

(-)biosdisk.c (-11 / +46 lines)
Lines 687-704 Link Here
687
		v86int();
687
		v86int();
688
	    }
688
	    }
689
	    
689
	    
690
	    /* build request  XXX support EDD requests too */
690
	    if (cyl > 1023) {
691
	    v86.ctl = V86_FLAGS;
691
	      static unsigned short packet[8];
692
	    v86.addr = 0x13;
692
693
	    v86.eax = 0x200 | x;
693
	      /* Check for Extended READ */
694
	    v86.ecx = ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec;
694
	      v86.ctl = V86_FLAGS;
695
	    v86.edx = (hd << 8) | od->od_unit;
695
	      v86.addr = 0x13;
696
	    v86.es = VTOPSEG(xp);
696
	      v86.eax = 0x4100;
697
	    v86.ebx = VTOPOFF(xp);
697
	      v86.ebx = 0x55aa;
698
	    v86int();
698
	      v86.edx = od->od_unit;
699
	    result = (v86.efl & 0x1);
699
	      v86int();
700
	    if (result == 0)
700
701
	      if (v86.ebx == 0xaa55 && (v86.ecx & 1) == 1) {
702
703
		packet[0] = 0x10;
704
		packet[1] = x;
705
		packet[2] = VTOPOFF(xp);
706
		packet[3] = VTOPSEG(xp);
707
		packet[4] = dblk;
708
		packet[5] = dblk >> 16;
709
		packet[6] = 0;
710
		packet[7] = 0;
711
		/* build request  XXX support EDD requests too */
712
		v86.ctl = V86_FLAGS;
713
		v86.addr = 0x13;
714
		v86.eax = 0x4200;
715
		v86.ds = VTOPSEG(packet);
716
		v86.esi = VTOPOFF(packet);
717
		v86int();
718
		result = (v86.efl & 0x1);
719
		if (result == 0)
720
		  break;
721
	      }
722
	      result = 1;
723
	    } else {
724
	      /* build request  XXX support EDD requests too */
725
	      v86.ctl = V86_FLAGS;
726
	      v86.addr = 0x13;
727
	      v86.eax = 0x200 | x;
728
	      v86.ecx = ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec;
729
	      v86.edx = (hd << 8) | od->od_unit;
730
	      v86.es = VTOPSEG(xp);
731
	      v86.ebx = VTOPOFF(xp);
732
	      v86int();
733
	      result = (v86.efl & 0x1);
734
	      if (result == 0)
701
		break;
735
		break;
736
	    }
702
	}
737
	}
703
	
738
	
704
 	DEBUG("%d sectors from %d/%d/%d to %p (0x%x) %s", x, cyl, hd, sec - 1, p, VTOP(p), result ? "failed" : "ok");
739
 	DEBUG("%d sectors from %d/%d/%d to %p (0x%x) %s", x, cyl, hd, sec - 1, p, VTOP(p), result ? "failed" : "ok");

Return to bug 13847