]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/libfis/fis.c
Add alignment hints for e512 ATA drives.
[plan9front.git] / sys / src / libfis / fis.c
index cb6c7340736e7aea6cfcdfafd496072c25d3bbc5..c04b327ad7853a54e659a3fe78ed7a4d0937e766 100644 (file)
@@ -307,20 +307,24 @@ idfeat(Sfis *f, ushort *id)
 int
 idss(Sfis *f, ushort *id)
 {
-       uint sw, i;
+       uint sw, i, pa;
 
        if(f->sig>>16 == 0xeb14)
                return 0;
        f->lsectsz = 512;
        f->physshift = 0;
+       f->physalign = 0;
        i = gbit16(id + 106);
        if(i >> 14 != 1)
                return f->lsectsz;
-       if((sw = gbit32(id + 117)) >= 256)
+       if((i & (1<<12)) && (sw = gbit32(id + 117)) >= 256)
                f->lsectsz = sw * 2;
-       if(i & 1<<13)
+       if(i & 1<<13){
                f->physshift = i & 7;
-       return f->lsectsz * (1<<f->physshift);
+               if((pa = gbit16(id + 209)) & 0x4000)
+                       f->physalign = pa & 0x3fff;
+       }
+       return f->lsectsz;
 }
 
 uvlong