update to nix k10 build - update sdmpt2 - update disk driver lists - update mk clean (use fast method) Reference: /n/atom/patch/applied2013/k10confupd Date: Fri Dec 27 21:23:29 CET 2013 Signed-off-by: quanstro@quanstro.net # rm /sys/src/nix/port/sdscsi.c --- /sys/src/nix/k10/term Fri Dec 27 21:22:06 2013 +++ /sys/src/nix/k10/term Fri Dec 27 21:22:06 2013 @@ -51,20 +51,14 @@ link +dev resmem -# wireless - etheriwl wifi -# 1gbe +# etheriwl wifi ether8169 pci ethermii # ether82557 pci ether82563 pci etherbcm pci ethermii etherigbe pci ethermii -# 10gbe ether82598 pci # etherm10g pci -# ether57711 pci -# 40gbe - etheri40 pci ethermedium # loopbackmedium # netdevmedium @@ -77,7 +71,10 @@ sd +dev sdaoe sdahci sdscsifis sdatafis led - sdide sdscsifis sdatafis +# sdide sdscsifis sdatafis + sdodin sdscsifis sdatafis + sdvanir sdscsifis sdatafis + sdmpt2 sdscsifis sdatafis sdloop misc +dev --- /sys/src/nix/k10/termd Fri Dec 27 21:22:06 2013 +++ /sys/src/nix/k10/termd Fri Dec 27 21:22:06 2013 @@ -52,7 +52,7 @@ link +dev resmem # wireless - etheriwl wifi +# etheriwl wifi # 1gbe ether8169 pci ethermii # ether82557 pci @@ -78,6 +78,9 @@ sdaoe sdahci sdscsifis sdatafis led # sdide sdscsifis sdatafis + sdodin sdscsifis sdatafis + sdvanir sdscsifis sdatafis + sdmpt2 sdscsifis sdatafis sdloop misc +dev --- /sys/src/nix/k10/cpu Fri Dec 27 21:22:06 2013 +++ /sys/src/nix/k10/cpu Fri Dec 27 21:22:06 2013 @@ -44,23 +44,24 @@ link +dev resmem -# 1gbe + ether8169 pci ethermii # ether82557 pci ether82563 pci etherbcm pci ethermii etherigbe pci ethermii -# 10gbe + ether82598 pci - etherm10g pci # ether57711 pci -# 40gbe + etherm10g pci + etheri40 pci + ethermedium # loopbackmedium # netdevmedium usbuhci - usbohci +# usbohci usbehci usbehcipc sd +dev @@ -69,7 +70,7 @@ sdide sdscsifis sdatafis sdodin sdscsifis sdatafis sdvanir sdscsifis sdatafis - sdmpt2 sdscsi + sdmpt2 sdscsifis sdatafis sdloop misc +dev --- /sys/src/nix/k10/cpud Fri Dec 27 21:22:06 2013 +++ /sys/src/nix/k10/cpud Fri Dec 27 21:22:06 2013 @@ -69,7 +69,7 @@ # sdide sdscsifis sdatafis sdodin sdscsifis sdatafis sdvanir sdscsifis sdatafis - sdmpt2 sdscsi + sdmpt2 sdscsifis sdatafis sdloop misc +dev --- /sys/src/nix/k10/cpuf Thu Jan 1 00:00:00 1970 +++ /sys/src/nix/k10/cpuf Fri Dec 27 21:22:07 2013 @@ -0,0 +1,186 @@ +dev +dev + root + cons + arch + env + pipe + proc + mnt + srv + dup + rtc + sd + ssl + tls + cap + kprof +# segment + acpi + ws + + ether netif + cec + aoe + ip arp chandial ip ipv6 ipaux iproute netlog nullmedium pktmedium ptclbsum inferno + pci + + uart + kbin + kbmap + usb + +uart +dev + uarti8250 + uartox958 pci uartp8250 + uartpci pci uartp8250 + +ip +dev + il + tcp + udp + ipifc + icmp + icmp6 + +link +dev + resmem +# 1gbe + ether8169 pci ethermii +# ether82557 pci + ether82563 pci + etherbcm pci ethermii + etherigbe pci ethermii +# 10gbe + ether82598 pci + etherm10g pci +# ether57711 pci +# 40gbe + etheri40 pci + ethermedium +# loopbackmedium +# netdevmedium + usbuhci + usbohci + usbehci usbehcipc + +sd +dev + sdaoe + sdahci sdscsifis sdatafis led +# sdide sdscsifis sdatafis + sdodin sdscsifis sdatafis + sdvanir sdscsifis sdatafis + sdmpt2 sdscsifis sdatafis + sdloop + +misc +dev +# mp mpacpi lapic ioapic msi pci sipi + acpi acpiio lapic ioapic msi pci sipi + +boot cpu + il + local + +rootdir + bootcpuf.out boot + /amd64/bin/auth/factotum factotum + /amd64/bin/ip/ipconfig ipconfig + /amd64/bin/usb/usbd usbd + /amd64/bin/fossil/fossil fossil + /amd64/bin/venti/venti venti + +conf + int cpuserver = 1; + +dbgflg + apic 'A' + arch 'V' + devacpi 'C' + devsegment 'z' + hpet 'H' + image 'p' + ioapic 'I' + main 'x' + mp 'M' + page 'p' + pager 'p' + physalloc 'm' + sysproc 'E' + sysseg 'p' + syssem 'S' + mmu 'v' + +amd64 +dev + l32p + l64v + l64idt + l64cpuid + l64syscall + l64fpu + adr + arch + archk10 + cga + options + fpu +# i8254 + i8259 + kbd + main + map + mmu + qmalloc + random + syscall + trap + vsvm + physalloc + +physseg + { .attr=SG_SHARED, .name="shared", .size=SEGMAXPG, .pgszi=1, }, + { .attr=SG_BSS, .name="memory", .size=SEGMAXPG, .pgszi=1, }, + +port + alarm + qallocb + chan + dev + devtab + edf + fault + image + latin1 + log2 + page + pager + parse + pgrp + portclock + print + proc + ps + qio + qlock + rebootcmd + segment + sysauth + sysfile + sysproc + sysseg +# syssem + systab +# taslock + tiklock + tod + syscallfmt + +dir + ip + port + +lib + libaml + libip + libsec + libmp + libfis + libc --- /sys/src/nix/k10/sdmpt2.c Fri Dec 27 21:22:07 2013 +++ /sys/src/nix/k10/sdmpt2.c Fri Dec 27 21:22:07 2013 @@ -289,8 +289,10 @@ case ScsiIoRequest: case SataPassthrough: switch(status){ - case 0x0045: /* SCSI_DATA_UNDERRUN */ case 0x0003: /* INVALID_SGL (user command with r/w bits mixed up) */ + case 0x0045: /* SCSI_DATA_UNDERRUN */ + case 0x0046: /* SCSI_IO_DATA_ERROR */ + case 0x0047: /* SCSI_PROTOCOL_ERROR */ return 0; } break; @@ -921,6 +923,81 @@ freereq(ctlr, r); } +static int +fisreqchk(Sfis *f, SDreq *r) +{ + uchar *c; + + if((r->ataproto & Pprotom) == Ppkt) + return SDnostatus; + if(r->clen != 16) + error("bad command length"); + c = r->cmd; + if(c[0] == 0xf0){ + sigtofis(f, r->cmd); + return r->status = SDok; + } +// c[0] = H2dev; +// c[1] = Fiscmd; +// c[7] |= Ataobs; + return SDnostatus; +} + +static void +ataio(Ctlr *ctlr, Unit *u, SDreq *sdreq) +{ + Req *r; + int ms; + u32int desc[2]; + +print("ataio %.2ux %.2ux %.2ux %.2ux clen=%d\n", sdreq->cmd[0], sdreq->cmd[1], sdreq->cmd[2], sdreq->cmd[3], + sdreq->clen); + if((sdreq->status = fisreqchk(u, sdreq)) != SDnostatus) + return; /* sdreq->status;*/ + + /* + * SATA passthrough is supported for PIO protocol ATA commands + * such as IDENTIFY DEVICE. Only Register Host to Device + * and Register Device to Host command FISes are supported. + */ + r = nextreq(ctlr); + if (r == nil) { + sdreq->status = SDbusy; + return; + } + r->sdreq = sdreq; + memset(r->req, 0, W2B(12)); + r->req[0] = SataPassthrough<<24; /* Function */ + r->req[0] |= u->devh; /* DevHandle */ + r->req[1] = 1<<4; /* PIO */ + if (sdreq->write) + r->req[1] |= 1<<1; /* WRITE */ + else + r->req[1] |= 1<<0; /* READ */ + r->req[6] = sdreq->dlen; /* DataLength */ + memmove(r->req+7, sdreq->cmd, sdreq->clen); + mksge32(r->req+12, sdreq->data, sdreq->dlen, sdreq->write); + + desc[0] = r->smid<<16 | 0x4<<1; /* Default Request */ + desc[1] = 0; + + /* + * Pernicious hack to ensure certain commands are + * able to run to completion. + */ + switch (sdreq->cmd[2]) { + case 0x92: /* DOWNLOAD MICROCODE */ + case 0xf4: /* SECURITY ERASE */ + case 0xf5: /* SECURITY FREEZE LOCK */ + ms = 180*1000; + break; + default: + ms = 10*1000; + } + postio(ctlr, r, desc, ms); + freereq(ctlr, r); +} + #define REPLY(ctlr, n) ((ctlr)->reply + (n)*1) #define REPLYPOST(ctlr, n) ((ctlr)->replypost + (n)*2) @@ -1733,6 +1810,32 @@ } static int +mpt2ataio(SDreq *sdreq) +{ + Ctlr *ctlr; + Unit *u; + + ctlr = sdreq->unit->dev->ctlr; + u = UNIT(ctlr, sdreq->unit->subno); + rlock(&ctlr->resetlock); + if(waserror()){ + runlock(&ctlr->resetlock); + return SDeio; + } + if(u->state != Online) + error(Ebadunit); + if(waserror()){ + wakeup(&ctlr->reset); + nexterror(); + } + ataio(ctlr, u, sdreq); + poperror(); + poperror(); + runlock(&ctlr->resetlock); + return sdreq->status; +} + +static int mpt2rctl(SDunit *unit, char *p, int l) { Ctlr *ctlr; @@ -1823,4 +1926,5 @@ nil, /* clear */ mpt2rtopctl, /* rtopctl */ nil, /* wtopctl */ + mpt2ataio, /* ataio */ }; --- /sys/src/nix/mk/portmkfile Fri Dec 27 21:22:07 2013 +++ /sys/src/nix/mk/portmkfile Fri Dec 27 21:22:07 2013 @@ -109,10 +109,8 @@ %.clean:V: rm -f $AGEN $PGEN $stem.c [9bz]$stem [9bz]$stem.gz boot$stem.* -clean:V: +clean:V: ${CONFLIST:%=%.clean} rm -f *.[$OS] *.root.[cs] *.out *.m *.acid errstr.h init.h $objtype^l.h - for(i in $CONFLIST) - mk $i.clean nuke:V: clean rm -f ../boot/libboot.a$O *.elf *.rr