From ad9af138171a62ab03b64ed4522930e9f10495af Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Wed, 19 Jun 2002 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2002-06-19 --- bitsy/devether.c | 11 ++-- bitsy/devpcmcia.c | 10 +-- bitsy/power.c | 2 - pc/wavelan.c | 153 +++++++++++++++++++++++----------------------- 4 files changed, 84 insertions(+), 92 deletions(-) diff --git a/bitsy/devether.c b/bitsy/devether.c index 41b61b59799879976454f5c2b361cac8833d26ba..82ca462c9d89a78aa2de8a0afd4083648591e616 100644 --- a/bitsy/devether.c +++ b/bitsy/devether.c @@ -38,8 +38,7 @@ etherpower(int on) print("etherpower %d\n", on); for (i = 0; i < MaxEther; i++){ - ether = etherxx[i]; - if (ether == nil) + if ((ether = etherxx[i]) == nil) continue; if(on){ if (ether->writer == 0){ @@ -151,8 +150,7 @@ etherattach(char* spec) if((ctlrno == 0 && p == spec) || *p || (ctlrno >= MaxEther)) error(Ebadarg); } - ether = etherxx[ctlrno]; - if(ether == 0) + if((ether = etherxx[ctlrno]) == 0) error(Enodev); rlock(ether); if(waserror()) { @@ -297,6 +295,7 @@ static int etherwstat(Chan* chan, uchar* dp, int n) { Ether *ether; + int r; ether = etherxx[chan->dev]; rlock(ether); @@ -304,10 +303,10 @@ etherwstat(Chan* chan, uchar* dp, int n) runlock(ether); nexterror(); } - n = netifwstat(ether, chan, dp, n); + r = netifwstat(ether, chan, dp, n); poperror(); runlock(ether); - return n; + return r; } static void diff --git a/bitsy/devpcmcia.c b/bitsy/devpcmcia.c index ac9be6e30f3f62aaa1d51d7ad48a198022a759d1..50e46db3bb208b8e5c22ce543e0f5cfa1a718806 100644 --- a/bitsy/devpcmcia.c +++ b/bitsy/devpcmcia.c @@ -139,10 +139,8 @@ pcmciapower(int on) if(sp->cisread == 0) pcmcisread(sp); if (sp->dev){ -print("pcmciapower: dev 0x%p", sp->dev); -print(", power 0x%p\n", sp->dev->power); - if (sp->dev->power) - sp->dev->power(on); +// if (sp->dev->power) +// sp->dev->power(on); } } }else{ @@ -150,8 +148,6 @@ print(", power 0x%p\n", sp->dev->power); if (sp->occupied == 0) continue; if (sp->dev){ -print("pcmciapower: dev 0x%p", sp->dev); -print(", power 0x%p\n", sp->dev->power); if (sp->dev->power) sp->dev->power(on); } @@ -397,8 +393,6 @@ pcmctlwrite(char *p, long n, ulong, PCMslot *sp) if(devtab[dtx]->config(1, p, &cf) < 0) error("couldn't configure device"); sp->dev = devtab[dtx]; -print("pcmctlwrite: configure %s: 0x%p\n", cmd->f[1], sp->dev); - wunlock(sp); poperror(); diff --git a/bitsy/power.c b/bitsy/power.c index 45c5ef06a3912a9dd85b535f418e499dbebd8038..19a4601ce9a276f75e064d28fda1d862902770f5 100644 --- a/bitsy/power.c +++ b/bitsy/power.c @@ -295,7 +295,6 @@ powerinit(void) for (i = 0; i < 3; i++) *p++ = *q++; - *resumeaddr = (ulong) power_resume; addclock0link(blanktimer); intrenable(GPIOrising, bitno(GPIO_PWR_ON_i), onoffintr, nil, "on/off"); @@ -317,4 +316,3 @@ idlehands(void) spllo(); } } - diff --git a/pc/wavelan.c b/pc/wavelan.c index 5d39112e3e00e90f3a804d19719d51fa2b22950b..8faae4e3e0c2c3d16d89c5c6ef580c367eee55da 100644 --- a/pc/wavelan.c +++ b/pc/wavelan.c @@ -163,13 +163,13 @@ w_seek(Ctlr* ctlr, ushort id, ushort offset, int chan) static ushort sel[] = { WR_Sel0, WR_Sel1 }; static ushort off[] = { WR_Off0, WR_Off1 }; - if (chan != 0 && chan != 1) + if(chan != 0 && chan != 1) panic("wavelan: bad chan\n"); csr_outs(ctlr, sel[chan], id); csr_outs(ctlr, off[chan], offset); for (i=0; itype)){ + if(w_cmd(ctlr, WCmdAccRd, ltv->type)){ DEBUG("wavelan: access read failed\n"); return -1; } - if (w_seek(ctlr,ltv->type,0,1)){ + if(w_seek(ctlr,ltv->type,0,1)){ DEBUG("wavelan: seek failed\n"); return -1; } len = csr_ins(ctlr, WR_Data1); - if (len > ltv->len) + if(len > ltv->len) return -1; ltv->len = len; - if ((code=csr_ins(ctlr, WR_Data1)) != ltv->type){ + if((code=csr_ins(ctlr, WR_Data1)) != ltv->type){ USED(code); DEBUG("wavelan: type %x != code %x\n",ltv->type,code); return -1; @@ -269,7 +269,7 @@ ltv_inname(Ctlr* ctlr, int type) memset(<v,0,sizeof(ltv)); ltv.len = WNameLen/2+2; ltv.type = type; - if (w_inltv(ctlr, <v)) + if(w_inltv(ctlr, <v)) return Unkname; len = ltv.slen; if(len == 0 || ltv.s[0] == 0) @@ -283,7 +283,7 @@ ltv_inname(Ctlr* ctlr, int type) static int w_read(Ctlr* ctlr, int type, int off, void* buf, ulong len) { - if (w_seek(ctlr, type, off, 1)){ + if(w_seek(ctlr, type, off, 1)){ DEBUG("wavelan: w_read: seek failed"); return 0; } @@ -298,7 +298,7 @@ w_write(Ctlr* ctlr, int type, int off, void* buf, ulong len) int tries; for (tries=0; tries < WTmOut; tries++){ - if (w_seek(ctlr, type, off, 0)){ + if(w_seek(ctlr, type, off, 0)){ DEBUG("wavelan: w_write: seek failed\n"); return 0; } @@ -307,12 +307,12 @@ w_write(Ctlr* ctlr, int type, int off, void* buf, ulong len) csr_outs(ctlr, WR_Data0, 0xdead); csr_outs(ctlr, WR_Data0, 0xbeef); - if (w_seek(ctlr, type, off + len, 0)){ + if(w_seek(ctlr, type, off + len, 0)){ DEBUG("wavelan: write seek failed\n"); return 0; } - if (csr_ins(ctlr, WR_Data0) == 0xdead) - if (csr_ins(ctlr, WR_Data0) == 0xbeef) + if(csr_ins(ctlr, WR_Data0) == 0xdead) + if(csr_ins(ctlr, WR_Data0) == 0xbeef) return len; DEBUG("wavelan: Hermes bug byte.\n"); return 0; @@ -327,12 +327,12 @@ w_alloc(Ctlr* ctlr, int len) int rc; int i,j; - if (w_cmd(ctlr, WCmdMalloc, len)==0) + if(w_cmd(ctlr, WCmdMalloc, len)==0) for (i = 0; ictlr; - if (!ctlr) + if(!ctlr) return -1; w_intdis(ctlr); @@ -367,12 +367,12 @@ w_enable(Ether* ether) ltv_outs(ctlr, WTyp_ApDens, ctlr->apdensity); ltv_outs(ctlr, WTyp_PMWait, ctlr->pmwait); ltv_outs(ctlr, WTyp_PM, ctlr->pmena); - if (*ctlr->netname) + if(*ctlr->netname) ltv_outstr(ctlr, WTyp_NetName, ctlr->netname); - if (*ctlr->wantname) + if(*ctlr->wantname) ltv_outstr(ctlr, WTyp_WantName, ctlr->wantname); ltv_outs(ctlr, WTyp_Chan, ctlr->chan); - if (*ctlr->nodename) + if(*ctlr->nodename) ltv_outstr(ctlr, WTyp_NodeName, ctlr->nodename); ltv.len = 4; ltv.type = WTyp_Mac; @@ -381,7 +381,7 @@ w_enable(Ether* ether) ltv_outs(ctlr, WTyp_Prom, (ether->prom?1:0)); - if (ctlr->hascrypt){ + if(ctlr->hascrypt){ ltv_outs(ctlr, WTyp_Crypt, ctlr->crypt); ltv_outs(ctlr, WTyp_TxKey, ctlr->txkey); w_outltv(ctlr, &ctlr->keys); @@ -390,13 +390,13 @@ w_enable(Ether* ether) // BUG: set multicast addresses - if (w_cmd(ctlr, WCmdEna, 0)){ + if(w_cmd(ctlr, WCmdEna, 0)){ DEBUG("wavelan: Enable failed"); return -1; } ctlr->txdid = w_alloc(ctlr, 1518 + sizeof(WFrame) + 8); ctlr->txmid = w_alloc(ctlr, 1518 + sizeof(WFrame) + 8); - if (ctlr->txdid == -1 || ctlr->txmid == -1) + if(ctlr->txdid == -1 || ctlr->txmid == -1) DEBUG("wavelan: alloc failed"); ctlr->txbusy = 0; w_intena(ctlr); @@ -414,11 +414,11 @@ w_rxdone(Ether* ether) sp = csr_ins(ctlr, WR_RXId); len = w_read(ctlr, sp, 0, &f, sizeof(f)); - if (len == 0){ + if(len == 0){ DEBUG("wavelan: read frame error\n"); goto rxerror; } - if (f.sts&WF_Err){ + if(f.sts&WF_Err){ goto rxerror; } switch(f.sts){ @@ -427,14 +427,14 @@ w_rxdone(Ether* ether) case WF_WMP: len = f.dlen + WSnapHdrLen; bp = iallocb(ETHERHDRSIZE + len + 2); - if (!bp) + if(!bp) goto rxerror; ep = (Etherpkt*) bp->wp; memmove(ep->d, f.addr1, Eaddrlen); memmove(ep->s, f.addr2, Eaddrlen); memmove(ep->type,&f.type,2); bp->wp += ETHERHDRSIZE; - if (w_read(ctlr, sp, WF_802_11_Off, bp->wp, len+2) == 0){ + if(w_read(ctlr, sp, WF_802_11_Off, bp->wp, len+2) == 0){ DEBUG("wavelan: read 802.11 error\n"); goto rxerror; } @@ -443,9 +443,9 @@ w_rxdone(Ether* ether) default: len = ETHERHDRSIZE + f.dlen + 2; bp = iallocb(len); - if (!bp) + if(!bp) goto rxerror; - if (w_read(ctlr, sp, WF_802_3_Off, bp->wp, len) == 0){ + if(w_read(ctlr, sp, WF_802_3_Off, bp->wp, len) == 0){ DEBUG("wavelan: read 800.3 error\n"); goto rxerror; } @@ -522,7 +522,7 @@ w_txdone(Ctlr* ctlr, int sts) { ctlr->txbusy = 0; ctlr->txtmout = 0; - if (sts & WTxErrEv) + if(sts & WTxErrEv) ctlr->ntxerr++; else ctlr->ntx++; @@ -539,11 +539,11 @@ w_stats(Ctlr* ctlr) sp = csr_ins(ctlr, WR_InfoId); ltv.len = ltv.type = 0; w_read(ctlr, sp, 0, <v, 4); - if (ltv.type == WTyp_Stats){ + if(ltv.type == WTyp_Stats){ ltv.len--; for (i = 0; i < ltv.len && p < pend; i++){ rc = csr_ins(ctlr, WR_Data1); - if (rc > 0xf000) + if(rc > 0xf000) rc = ~rc & 0xffff; p[i] += rc; } @@ -558,10 +558,10 @@ w_intr(Ether *ether) int rc, txid; Ctlr* ctlr = (Ctlr*) ether->ctlr; - if ((ctlr->state & Power) == 0) + if((ctlr->state & Power) == 0) return; - if ((ctlr->state & Attached) == 0){ + if((ctlr->state & Attached) == 0){ csr_ack(ctlr, 0xffff); csr_outs(ctlr, WR_IntEna, 0); return; @@ -569,33 +569,33 @@ w_intr(Ether *ether) rc = csr_ins(ctlr, WR_EvSts); csr_ack(ctlr, ~WEvs); // Not interested in them - if (rc & WRXEv){ + if(rc & WRXEv){ w_rxdone(ether); csr_ack(ctlr, WRXEv); } - if (rc & WTXEv){ + if(rc & WTXEv){ w_txdone(ctlr, rc); csr_ack(ctlr, WTXEv); } - if (rc & WAllocEv){ + if(rc & WAllocEv){ ctlr->nalloc++; txid = csr_ins(ctlr, WR_Alloc); csr_ack(ctlr, WAllocEv); - if (txid == ctlr->txdid){ - if ((rc & WTXEv) == 0) + if(txid == ctlr->txdid){ + if((rc & WTXEv) == 0) w_txdone(ctlr, rc); } } - if (rc & WInfoEv){ + if(rc & WInfoEv){ ctlr->ninfo++; w_stats(ctlr); csr_ack(ctlr, WInfoEv); } - if (rc & WTxErrEv){ + if(rc & WTxErrEv){ w_txdone(ctlr, rc); csr_ack(ctlr, WTxErrEv); } - if (rc & WIDropEv){ + if(rc & WIDropEv){ ctlr->nidrop++; csr_ack(ctlr, WIDropEv); } @@ -616,9 +616,9 @@ w_timer(void* arg) for(;;){ tsleep(&ctlr->timer, return0, 0, 50); ctlr = (Ctlr*)ether->ctlr; - if (ctlr == 0) + if(ctlr == 0) break; - if ((ctlr->state & Attached) == 0) + if((ctlr->state & Attached) == 0) continue; ctlr->ticks++; @@ -639,22 +639,22 @@ w_timer(void* arg) // the card frames in the wrong way; due to the // lack of documentation I cannot know. - if (csr_ins(ctlr, WR_EvSts)&WEvs){ + if(csr_ins(ctlr, WR_EvSts)&WEvs){ ctlr->tickintr++; w_intr(ether); } - if ((ctlr->ticks % 10) == 0) { - if (ctlr->txtmout && --ctlr->txtmout == 0){ + if((ctlr->ticks % 10) == 0) { + if(ctlr->txtmout && --ctlr->txtmout == 0){ ctlr->nwatchdogs++; w_txdone(ctlr, WTxErrEv); - if (w_enable(ether)){ + if(w_enable(ether)){ DEBUG("wavelan: wdog enable failed\n"); } w_txstart(ether); } - if ((ctlr->ticks % 120) == 0) - if (ctlr->txbusy == 0) + if((ctlr->ticks % 120) == 0) + if(ctlr->txbusy == 0) w_cmd(ctlr, WCmdAskStats, WTyp_Stats); } iunlock(ctlr); @@ -675,12 +675,12 @@ w_attach(Ether* ether) char name[64]; int rc; - if (ether->ctlr == 0) + if(ether->ctlr == 0) return; snprint(name, sizeof(name), "#l%dtimer", ether->ctlrno); ctlr = (Ctlr*) ether->ctlr; - if ((ctlr->state & Attached) == 0){ + if((ctlr->state & Attached) == 0){ ilock(ctlr); rc = w_enable(ether); iunlock(ctlr); @@ -698,16 +698,16 @@ w_detach(Ether* ether) Ctlr* ctlr; char name[64]; - if (ether->ctlr == 0) + if(ether->ctlr == 0) return; snprint(name, sizeof(name), "#l%dtimer", ether->ctlrno); ctlr = (Ctlr*) ether->ctlr; - if (ctlr->state & Attached){ + if(ctlr->state & Attached){ ilock(ctlr); w_intdis(ctlr); - if (ctlr->timerproc){ - if (!postnote(ctlr->timerproc, 1, "kill", NExit)) + if(ctlr->timerproc){ + if(!postnote(ctlr->timerproc, 1, "kill", NExit)) print("timerproc note not posted\n"); print("w_detach, killing 0x%p\n", ctlr->timerproc); } @@ -723,15 +723,15 @@ w_power(Ether* ether, int on) ctlr = (Ctlr*) ether->ctlr; ilock(ctlr); - if (on){ - if ((ctlr->state & Power) == 0){ - if (ctlr->state & Attached) + if(on){ + if((ctlr->state & Power) == 0){ + if(ctlr->state & Attached) w_enable(ether); ctlr->state |= Power; } }else{ - if (ctlr->state & Power){ - if (ctlr->state & Attached) + if(ctlr->state & Power){ + if(ctlr->state & Attached) w_intdis(ctlr); ctlr->state &= ~Power; } @@ -788,12 +788,12 @@ w_ifstat(Ether* ether, void* a, long n, ulong offset) k = ((ctlr->txbusy)? ", txbusy" : ""); PRINTSTAT("%s\n", k); - if (ctlr->hascrypt){ + if(ctlr->hascrypt){ PRINTSTR("Keys: "); for (i = 0; i < WNKeys; i++){ - if (ctlr->keys.keys[i].len == 0) + if(ctlr->keys.keys[i].len == 0) PRINTSTR("none "); - else if (SEEKEYS == 0) + else if(SEEKEYS == 0) PRINTSTR("set "); else PRINTSTAT("%s ", ctlr->keys.keys[i].dat); @@ -821,17 +821,17 @@ w_ifstat(Ether* ether, void* a, long n, ulong offset) PRINTSTAT("Current name: %s\n", ltv_inname(ctlr, WTyp_CurName)); ltv.type = WTyp_BaseID; ltv.len = 4; - if (w_inltv(ctlr, <v)) + if(w_inltv(ctlr, <v)) print("#l%d: unable to read base station mac addr\n", ether->ctlrno); l += snprint(p+l, READSTR-l, "Base station: %2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\n", ltv.addr[0], ltv.addr[1], ltv.addr[2], ltv.addr[3], ltv.addr[4], ltv.addr[5]); } PRINTSTAT("Net name: %s\n", ltv_inname(ctlr, WTyp_WantName)); PRINTSTAT("Node name: %s\n", ltv_inname(ctlr, WTyp_NodeName)); - if (ltv_ins(ctlr, WTyp_HasCrypt) == 0) + if(ltv_ins(ctlr, WTyp_HasCrypt) == 0) PRINTSTR("WEP: not supported\n"); else { - if (ltv_ins(ctlr, WTyp_Crypt) == 0) + if(ltv_ins(ctlr, WTyp_Crypt) == 0) PRINTSTR("WEP: disabled\n"); else{ PRINTSTR("WEP: enabled\n"); @@ -886,7 +886,7 @@ w_option(Ctlr* ctlr, char* buf, long n) if(cb->nf < 2) r = -1; else if(cistrcmp(cb->f[0], "essid") == 0){ - if (cistrcmp(cb->f[1],"default") == 0) + if(cistrcmp(cb->f[1],"default") == 0) p = ""; else p = cb->f[1]; @@ -948,7 +948,7 @@ w_option(Ctlr* ctlr, char* buf, long n) ctlr->txkey = i-1; key = &ctlr->keys.keys[ctlr->txkey]; key->len = strlen(cb->f[1]); - if (key->len > WKeyLen) + if(key->len > WKeyLen) key->len = WKeyLen; memset(key->dat, 0, sizeof(key->dat)); memmove(key->dat, cb->f[1], key->len); @@ -1012,7 +1012,7 @@ w_transmit(Ether* ether) { Ctlr* ctlr = ether->ctlr; - if (ctlr == 0) + if(ctlr == 0) return; ilock(ctlr); @@ -1027,9 +1027,9 @@ w_promiscuous(void* arg, int on) Ether* ether = (Ether*)arg; Ctlr* ctlr = ether->ctlr; - if (ctlr == nil) + if(ctlr == nil) error("card not found"); - if ((ctlr->state & Attached) == 0) + if((ctlr->state & Attached) == 0) error("card not attached"); ilock(ctlr); ltv_outs(ctlr, WTyp_Prom, (on?1:0)); @@ -1042,7 +1042,7 @@ w_interrupt(Ureg* ,void* arg) Ether* ether = (Ether*) arg; Ctlr* ctlr = (Ctlr*) ether->ctlr; - if (ctlr == 0) + if(ctlr == 0) return; ilock(ctlr); ctlr->nints++; @@ -1056,7 +1056,7 @@ wavelanreset(Ether* ether, Ctlr *ctlr) Wltv ltv; w_intdis(ctlr); - if (w_cmd(ctlr,WCmdIni,0)){ + if(w_cmd(ctlr,WCmdIni,0)){ print("#l%d: init failed\n", ether->ctlrno); return -1; } @@ -1080,14 +1080,14 @@ wavelanreset(Ether* ether, Ctlr *ctlr) ltv.type = WTyp_Mac; ltv.len = 4; - if (w_inltv(ctlr, <v)){ + if(w_inltv(ctlr, <v)){ print("#l%d: unable to read mac addr\n", ether->ctlrno); return -1; } memmove(ether->ea, ltv.addr, Eaddrlen); - if (ctlr->chan == 0) + if(ctlr->chan == 0) ctlr->chan = ltv_ins(ctlr, WTyp_Chan); ctlr->apdensity = WDfltApDens; ctlr->rtsthres = WDfltRtsThres; @@ -1097,9 +1097,10 @@ wavelanreset(Ether* ether, Ctlr *ctlr) ctlr->pmwait = 100; ctlr->signal = 1; ctlr->noise = 1; + ctlr->state |= Power; // free old Ctlr struct if resetting after suspend - if (ether->ctlr) + if(ether->ctlr) free(ether->ctlr); // link to ether