etheriwl: fix botched merge...

This commit is contained in:
cinap_lenrek 2021-08-06 10:05:23 +00:00
parent 36a5b385f4
commit 5a15acc7f0

View file

@ -1,9 +1,10 @@
/* /*
* Intel WiFi Link driver. * Intel WiFi Link driver.
* *
* Written without any documentation but Damien Bergaminis * Written without any documentation but Damien Bergamini's
* OpenBSD iwn(4) and iwm(4) driver sources. Requires intel * iwn(4) and Stefan Sperling's iwm(4) OpenBSD driver sources.
* firmware to be present in /lib/firmware/iwn-* on attach. * Requires Intel firmware to be present in /lib/firmware/iw[nm]-*
* on attach.
*/ */
#include "u.h" #include "u.h"
@ -242,6 +243,8 @@ enum {
SbCpu1Status = 0xa01e30, SbCpu1Status = 0xa01e30,
SbCpu2Status = 0xa01e34, SbCpu2Status = 0xa01e34,
OscClk = 0xa04068,
OscClkCtrl = 1<<3,
UregChick = 0xa05c00, UregChick = 0xa05c00,
UregChickMsiEnable = 1<<24, UregChickMsiEnable = 1<<24,
@ -632,6 +635,7 @@ enum {
Type2030 = 12, Type2030 = 12,
Type2000 = 16, Type2000 = 16,
Type7260 = 30,
Type8265 = 35, Type8265 = 35,
}; };
@ -686,6 +690,7 @@ static char *fwname[32] = {
[Type6005] "iwn-6005", /* see in iwlattach() below */ [Type6005] "iwn-6005", /* see in iwlattach() below */
[Type2030] "iwn-2030", [Type2030] "iwn-2030",
[Type2000] "iwn-2000", [Type2000] "iwn-2000",
[Type7260] "iwm-7260-17",
}; };
static char *qcmd(Ctlr *ctlr, uint qid, uint code, uchar *data, int size, Block *block); static char *qcmd(Ctlr *ctlr, uint qid, uint code, uchar *data, int size, Block *block);
@ -1088,6 +1093,23 @@ poweron(Ctlr *ctlr)
nicunlock(ctlr); nicunlock(ctlr);
} }
/* Enable the oscillator to count wake up time for L1 exit. (weird W/A) */
if(ctlr->type == Type7260){
if((err = niclock(ctlr)) != nil)
return err;
prphread(ctlr, OscClk);
prphread(ctlr, OscClk);
delay(20);
prphwrite(ctlr, OscClk, prphread(ctlr, OscClk) | OscClkCtrl);
prphread(ctlr, OscClk);
prphread(ctlr, OscClk);
nicunlock(ctlr);
}
if(ctlr->family < 8000){ if(ctlr->family < 8000){
if((err = niclock(ctlr)) != nil) if((err = niclock(ctlr)) != nil)
return err; return err;
@ -2800,6 +2822,15 @@ disablebeaconfilter(Ctlr *ctlr)
return cmd(ctlr, 210, c, 11*4); return cmd(ctlr, 210, c, 11*4);
} }
static void
tttxbackoff(Ctlr *ctlr)
{
uchar c[4];
put32(c, 0);
cmd(ctlr, 126, c, sizeof(c));
}
static char* static char*
updatedevicepower(Ctlr *ctlr) updatedevicepower(Ctlr *ctlr)
{ {
@ -2864,6 +2895,10 @@ postboot7000(Ctlr *ctlr)
if((err = sendbtcoexadv(ctlr)) != nil) if((err = sendbtcoexadv(ctlr)) != nil)
return err; return err;
/* Initialize tx backoffs to the minimum. */
if(ctlr->family == 7000)
tttxbackoff(ctlr);
if((err = updatedevicepower(ctlr)) != nil){ if((err = updatedevicepower(ctlr)) != nil){
print("can't update device power: %s\n", err); print("can't update device power: %s\n", err);
return err; return err;
@ -3416,6 +3451,12 @@ qcmd(Ctlr *ctlr, uint qid, uint code, uchar *data, int size, Block *block)
iunlock(ctlr); iunlock(ctlr);
return "qcmd: broken"; return "qcmd: broken";
} }
/* wake up the nic (just needed for 7k) */
if(ctlr->family == 7000 && q->n == 0)
if(niclock(ctlr) != nil){
iunlock(ctlr);
return "qcmd: busy";
}
q->n++; q->n++;
q->lastcmd = code; q->lastcmd = code;
@ -4242,6 +4283,9 @@ receive(Ctlr *ctlr)
if(tx != nil && tx->n > 0){ if(tx != nil && tx->n > 0){
tx->n--; tx->n--;
wakeup(tx); wakeup(tx);
/* unlock 7k family nics as all commands are done */
if(ctlr->family == 7000 && tx->n == 0)
nicunlock(ctlr);
} }
} }
@ -4351,6 +4395,11 @@ iwlpci(void)
family = 0; family = 0;
fwname = nil; fwname = nil;
break; break;
case 0x08b1: /* Wireless AC 7260 */
case 0x08b2: /* Wireless AC 7260 */
family = 7000;
fwname = nil;
break;
case 0x24f3: /* Wireless AC 8260 */ case 0x24f3: /* Wireless AC 8260 */
family = 8000; family = 8000;
fwname = "iwm-8000C-34"; fwname = "iwm-8000C-34";