Browse Source

Remove a host of 32-bit assumptions (#1047)

There are many, many more lurking in the code.

Signed-off-by: Dan Cross <cross@gajendra.net>

Co-authored-by: Dan Cross <cross@gajendra.net>
Dan Cross 3 years ago
parent
commit
9e2ddbbeb1

+ 10 - 10
sys/src/9/386/ether8169.c

@@ -555,8 +555,8 @@ rtl8169ifstat(Ether* edev, void* a, int32_t n, uint32_t offset)
 
 	dtcc = ctlr->dtcc;
 	assert(dtcc);
-	csr32w(ctlr, Dtccr+4, 0);
-	csr32w(ctlr, Dtccr, PCIWADDR(dtcc)|Cmd);
+	csr32w(ctlr, Dtccr+4, (PADDR(dtcc)|Cmd) >> 32);
+	csr32w(ctlr, Dtccr, PADDR(dtcc)|Cmd);
 	for(timeo = 0; timeo < 1000; timeo++){
 		if(!(csr32r(ctlr, Dtccr) & Cmd))
 			break;
@@ -694,8 +694,8 @@ rtl8169replenish(Ctlr* ctlr)
 				break;
 			}
 			ctlr->rb[rdt] = bp;
-			d->addrlo = PCIWADDR(bp->rp);
-			d->addrhi = 0;
+			d->addrlo = (uint32_t)PADDR(bp->rp);
+			d->addrhi = (uint32_t)(PADDR(bp->rp) >> 32);
 			coherence();
 		}else
 			iprint("i8169: rx overrun\n");
@@ -855,10 +855,10 @@ rtl8169init(Ether* edev)
 	 */
 	csr32w(ctlr, Mpc, 0);
 	csr8w(ctlr, Etx, 0x3f);			/* magic */
-	csr32w(ctlr, Tnpds+4, 0);
-	csr32w(ctlr, Tnpds, PCIWADDR(ctlr->td));
-	csr32w(ctlr, Rdsar+4, 0);
-	csr32w(ctlr, Rdsar, PCIWADDR(ctlr->rd));
+	csr32w(ctlr, Tnpds+4, PADDR(ctlr->td) >> 32);
+	csr32w(ctlr, Tnpds, PADDR(ctlr->td));
+	csr32w(ctlr, Rdsar+4, PADDR(ctlr->rd) >> 32);
+	csr32w(ctlr, Rdsar, PADDR(ctlr->rd));
 	csr16w(ctlr, Rms, 16383);		/* was Mps; see above comment */
 	r = csr16r(ctlr, Mulint) & 0xF000;	/* no early rx interrupts */
 	csr16w(ctlr, Mulint, r);
@@ -1007,8 +1007,8 @@ rtl8169transmit(Ether* edev)
 			break;
 
 		d = &ctlr->td[x];
-		d->addrlo = PCIWADDR(bp->rp);
-		d->addrhi = 0;
+		d->addrlo = (uint32_t)PADDR(bp->rp);
+		d->addrhi = (uint32_t)(PADDR(bp->rp) >> 32);
 		ctlr->tb[x] = bp;
 		coherence();
 		d->control |= Own | Fs | Ls | BLEN(bp);

+ 8 - 7
sys/src/9/386/etherigbe.c

@@ -950,8 +950,8 @@ igbetxinit(Ctlr* ctlr)
 	csr32w(ctlr, Ait, 0);
 	csr32w(ctlr, Txdmac, 0);
 
-	csr32w(ctlr, Tdbal, PCIWADDR(ctlr->tdba));
-	csr32w(ctlr, Tdbah, 0);
+	csr32w(ctlr, Tdbal, PADDR(ctlr->tdba));
+	csr32w(ctlr, Tdbah, PADDR(ctlr->tdba) >> 32);
 	csr32w(ctlr, Tdlen, ctlr->ntd*sizeof(Td));
 	ctlr->tdh = PREV(0, ctlr->ntd);
 	csr32w(ctlr, Tdh, 0);
@@ -1032,7 +1032,8 @@ igbetransmit(Ether* edev)
 		if((bp = qget(edev->oq)) == nil)
 			break;
 		td = &ctlr->tdba[tdt];
-		td->addr[0] = PCIWADDR(bp->rp);
+		td->addr[0] = (uint32_t)PADDR(bp->rp);
+		td->addr[1] = (uint32_t)(PADDR(bp->rp) >> 32);
 		td->control = ((BLEN(bp) & LenMASK)<<LenSHIFT);
 		td->control |= Dext|Ifcs|Teop|DtypeDD;
 		ctlr->tb[tdt] = bp;
@@ -1072,8 +1073,8 @@ igbereplenish(Ctlr* ctlr)
 				break;
 			}
 			ctlr->rb[rdt] = bp;
-			rd->addr[0] = PCIWADDR(bp->rp);
-			rd->addr[1] = 0;
+			rd->addr[0] = (uint32_t)PADDR(bp->rp);
+			rd->addr[1] = (uint32_t)(PADDR(bp->rp) >> 32);
 		}
 		coherence();
 		rd->status = 0;
@@ -1093,8 +1094,8 @@ igberxinit(Ctlr* ctlr)
 	/* temporarily keep Mpe on */
 	csr32w(ctlr, Rctl, Dpf|Bsize2048|Bam|RdtmsHALF|Mpe);
 
-	csr32w(ctlr, Rdbal, PCIWADDR(ctlr->rdba));
-	csr32w(ctlr, Rdbah, 0);
+	csr32w(ctlr, Rdbal, PADDR(ctlr->rdba));
+	csr32w(ctlr, Rdbah, PADDR(ctlr->rdba) >> 32);
 	csr32w(ctlr, Rdlen, ctlr->nrd*sizeof(Rd));
 	ctlr->rdh = 0;
 	csr32w(ctlr, Rdh, 0);

+ 7 - 7
sys/src/9/386/etherm10g.c

@@ -854,7 +854,7 @@ setmem(Pcidev *p, Ctlr *c)
 	c->port = raddr;
 	c->ram = mem;
 	c->cmd = malign(sizeof *c->cmd);
-	c->cprt = PCIWADDR(c->cmd);
+	c->cprt = PADDR(c->cmd);
 
 	d = &c->done;
 	d->n = Maxslots;
@@ -862,11 +862,11 @@ setmem(Pcidev *p, Ctlr *c)
 	i = d->n * sizeof *d->entry;
 	d->entry = malign(i);
 	memset(d->entry, 0, i);
-	d->busaddr = PCIWADDR(d->entry);
+	d->busaddr = PADDR(d->entry);
 
 	c->stats = malign(sizeof *c->stats);
 	memset(c->stats, 0, sizeof *c->stats);
-	c->statsprt = PCIWADDR(c->stats);
+	c->statsprt = PADDR(c->stats);
 
 	memmove(c->eprom, c->ram + c->ramsz - Epromsz, Epromsz-2);
 	return setpcie(p) || parseeprom(c);
@@ -946,8 +946,8 @@ replenish(Rx *rx)
 		idx = rx->cnt & rx->m;
 		for(i = 0; i < 8; i++){
 			b = balloc(rx);
-			buf[i*2]   = pbit32((uint64_t)PCIWADDR(b->wp) >> 32);
-			buf[i*2+1] = pbit32(PCIWADDR(b->wp));
+			buf[i*2]   = pbit32((uint64_t)PADDR(b->wp) >> 32);
+			buf[i*2+1] = pbit32(PADDR(b->wp));
 			rx->host[idx+i] = b;
 			assert(b);
 		}
@@ -1204,7 +1204,7 @@ nsegments(Block *b, int segsz)
 	uintptr_t bus, end, slen, len;
 	int i;
 
-	bus = PCIWADDR(b->rp);
+	bus = PADDR(b->rp);
 	i = 0;
 	for(len = BLEN(b); len; len -= slen){
 		end = (bus + segsz) & ~(segsz-1);
@@ -1246,7 +1246,7 @@ m10gtransmit(Ether *e)
 		if((len = BLEN(b)) < 1520)
 			flags |= SFsmall;
 		rdma = nseg = nsegments(b, segsz);
-		bus = PCIWADDR(b->rp);
+		bus = PADDR(b->rp);
 		for(; len; len -= slen){
 			end = (bus + segsz) & ~(segsz-1);
 			slen = end - bus;

+ 4 - 4
sys/src/9/amd64/ether8139.c

@@ -436,7 +436,7 @@ rtl8139init(Ether* edev)
 	ctlr->rbstart = alloc;
 	alloc += ctlr->rblen+16;
 	memset(ctlr->rbstart, 0, ctlr->rblen+16);
-	csr32w(ctlr, Rbstart, PCIWADDR(ctlr->rbstart));
+	csr32w(ctlr, Rbstart, PADDR(ctlr->rbstart));
 	ctlr->rcr = Rxfth256|Rblen|Mrxdmaunlimited|Ab|Am|Apm;
 
 	/*
@@ -519,12 +519,12 @@ rtl8139txstart(Ether* edev)
 		if(((int64_t)bp->rp) & 0x03){
 			memmove(td->data, bp->rp, size);
 			freeb(bp);
-			csr32w(ctlr, td->tsad, PCIWADDR(td->data));
+			csr32w(ctlr, td->tsad, PADDR(td->data));
 			ctlr->tunaligned++;
 		}
 		else{
 			td->bp = bp;
-			csr32w(ctlr, td->tsad, PCIWADDR(bp->rp));
+			csr32w(ctlr, td->tsad, PADDR(bp->rp));
 			ctlr->taligned++;
 		}
 		csr32w(ctlr, td->tsd, (ctlr->etxth<<EtxthSHIFT)|size);
@@ -590,7 +590,7 @@ rtl8139receive(Ether* edev)
 			 */
 			cr = csr8r(ctlr, Cr);
 			csr8w(ctlr, Cr, cr & ~Re);
-			csr32w(ctlr, Rbstart, PCIWADDR(ctlr->rbstart));
+			csr32w(ctlr, Rbstart, PADDR(ctlr->rbstart));
 			csr8w(ctlr, Cr, cr);
 			csr32w(ctlr, Rcr, ctlr->rcr);
 

+ 8 - 7
sys/src/9/amd64/ether82563.c

@@ -893,8 +893,8 @@ i82563txinit(Ctlr* ctlr)
 		}
 	memset(ctlr->tdba, 0, Ntd * sizeof(Td));
 	coherence();
-	csr32w(ctlr, Tdbal, PCIWADDR(ctlr->tdba));
-	csr32w(ctlr, Tdbah, 0);				/* 32-bit system */
+	csr32w(ctlr, Tdbal, (uint32_t)PADDR(ctlr->tdba));
+	csr32w(ctlr, Tdbah, (uint32_t)(PADDR(ctlr->tdba) >> 32));
 	csr32w(ctlr, Tdlen, Ntd * sizeof(Td));
 	ctlr->tdh = PREV(0, Ntd);
 	csr32w(ctlr, Tdh, 0);
@@ -965,7 +965,8 @@ i82563transmit(Ether* edev)
 		if((bp = qget(edev->oq)) == nil)
 			break;
 		td = &ctlr->tdba[tdt];
-		td->addr[0] = PCIWADDR(bp->rp);
+		td->addr[0] = (uint32_t)PADDR(bp->rp);
+		td->addr[1] = (uint32_t)(PADDR(bp->rp) >> 32);
 		td->control = Ide|Rs|Ifcs|Teop|BLEN(bp);
 		ctlr->tb[tdt] = bp;
 		/* note size of queue of tds awaiting transmission */
@@ -1005,8 +1006,8 @@ i82563replenish(Ctlr* ctlr)
 			panic("#l%d: 82563: all %d rx buffers in use, nrbfull %d",
 				ctlr->edev->ctlrno, Nrb, nrbfull);
 		ctlr->rb[rdt] = bp;
-		rd->addr[0] = PCIWADDR(bp->rp);
-//		rd->addr[1] = 0;
+		rd->addr[0] = (uint32_t)PADDR(bp->rp);
+		rd->addr[1] = (uint32_t)(PADDR(bp->rp) >> 32);
 		rd->status = 0;
 		ctlr->rdfree++;
 		rdt = NEXT(rdt, Nrd);
@@ -1047,8 +1048,8 @@ i82563rxinit(Ctlr* ctlr)
 		break;
 	}
 
-	csr32w(ctlr, Rdbal, PCIWADDR(ctlr->rdba));
-	csr32w(ctlr, Rdbah, 0);			/* 32-bit system */
+	csr32w(ctlr, Rdbal, (uint32_t)PADDR(ctlr->rdba));
+	csr32w(ctlr, Rdbah, (uint32_t)(PADDR(ctlr->rdba) >> 32));
 	csr32w(ctlr, Rdlen, Nrd * sizeof(Rd));
 	ctlr->rdh = ctlr->rdt = 0;
 	csr32w(ctlr, Rdh, 0);

+ 0 - 5
sys/src/9/amd64/io.h

@@ -369,8 +369,3 @@ struct Pcidev
 	uint32_t capcnt;
 	Pcicap **capidx;
 };
-
-#define PCIWINDOW	0
-#define PCIWADDR(va)	(PADDR(va)+PCIWINDOW)
-#define ISAWINDOW	0
-#define ISAWADDR(va)	(PADDR(va)+ISAWINDOW)

+ 2 - 2
sys/src/9/amd64/sdata.c

@@ -1119,7 +1119,7 @@ atadmasetup(Drive* drive, int len)
 	int bmiba, bmisx, count, i, span;
 
 	ctlr = drive->ctlr;
-	pa = PCIWADDR(drive->data);
+	pa = PADDR(drive->data);
 	if(pa & 0x03)
 		return -1;
 
@@ -1153,7 +1153,7 @@ atadmasetup(Drive* drive, int len)
 		(prd-1)->count |= PrdEOT;
 
 	bmiba = ctlr->bmiba;
-	outl(bmiba+Bmidtpx, PCIWADDR(ctlr->prdt));
+	outl(bmiba+Bmidtpx, PADDR(ctlr->prdt));
 	if(drive->write)
 		outb(ctlr->bmiba+Bmicx, 0);
 	else

+ 16 - 16
sys/src/9/amd64/sdiahci.c

@@ -331,8 +331,8 @@ listsetup(Aportc *pc, int flags)
 	list = pc->pm->list;
 	list->flags = flags | 5;
 	list->len = 0;
-	list->ctab = PCIWADDR(pc->pm->ctab);
-	list->ctabhi = PCIWADDR(pc->pm->ctab)>>32;
+	list->ctab = PADDR(pc->pm->ctab);
+	list->ctabhi = PADDR(pc->pm->ctab)>>32;
 }
 
 static int
@@ -513,8 +513,8 @@ ahciidentify0(Aportc *pc, void *id, int atapi)
 
 	memset(id, 0, 0x100);			/* magic */
 	p = &pc->pm->ctab->prdt;
-	p->dba = PCIWADDR(id);
-	p->dbahi = PCIWADDR(id)>>32;
+	p->dba = PADDR(id);
+	p->dbahi = PADDR(id)>>32;
 	p->count = 1<<31 | (0x200-2) | 1;
 	return ahciwait(pc, 3*1000);
 }
@@ -761,10 +761,10 @@ ahciconfigdrive(Drive *d)
 
 	p->serror = SerrAll;
 
-	p->list = PCIWADDR(pm->list);
-	p->listhi = PCIWADDR(pm->list)>>32;
-	p->fis = PCIWADDR(pm->fis.base);
-	p->fishi = PCIWADDR(pm->fis.base)>>32;
+	p->list = PADDR(pm->list);
+	p->listhi = PADDR(pm->list)>>32;
+	p->fis = PADDR(pm->fis.base);
+	p->fishi = PADDR(pm->fis.base)>>32;
 	p->cmd |= Afre|Ast;
 
 	/* drive coming up in slumbering? */
@@ -1573,12 +1573,12 @@ ahcibuild(Drive *d, unsigned char *cmd, void *data, int n, int64_t lba)
 	if(dir == Write)
 		l->flags |= Lwrite;
 	l->len = 0;
-	l->ctab = PCIWADDR(t);
-	l->ctabhi = PCIWADDR(t)>>32;
+	l->ctab = PADDR(t);
+	l->ctabhi = PADDR(t)>>32;
 
 	p = &t->prdt;
-	p->dba = PCIWADDR(data);
-	p->dbahi = PCIWADDR(data)>>32;
+	p->dba = PADDR(data);
+	p->dbahi = PADDR(data)>>32;
 	if(d->unit == nil)
 		panic("ahcibuild: nil d->unit");
 	p->count = 1<<31 | (d->unit->secsize*n - 2) | 1;
@@ -1627,15 +1627,15 @@ ahcibuildpkt(Aportm *pm, SDreq *r, void *data, int n)
 	if(r->write != 0 && data)
 		l->flags |= Lwrite;
 	l->len = 0;
-	l->ctab = PCIWADDR(t);
-	l->ctabhi = PCIWADDR(t)>>32;
+	l->ctab = PADDR(t);
+	l->ctabhi = PADDR(t)>>32;
 
 	if(data == 0)
 		return l;
 
 	p = &t->prdt;
-	p->dba = PCIWADDR(data);
-	p->dbahi = PCIWADDR(data)>>32;
+	p->dba = PADDR(data);
+	p->dbahi = PADDR(data)>>32;
 	p->count = 1<<31 | (n - 2) | 1;
 
 	return l;

+ 13 - 13
sys/src/9/amd64/usbuhci.c

@@ -289,7 +289,7 @@ struct Td
 #define	OUTS(x, v)	outs(ctlr->port+(x), (v))
 #define OUTL(x, v)	outl(ctlr->port+(x), (v))
 #define TRUNC(x, sz)	((x) & ((sz)-1))
-#define PTR(q)		((void*)KADDR((uint32_t)(q) & ~ (0xF|PCIWINDOW)))
+#define PTR(q)		((void*)KADDR((uintmem)(q) & ~0xFULL))
 #define QPTR(q)		((Qh*)PTR(q))
 #define TPTR(q)		((Td*)PTR(q))
 #define PORT(p)		(Portsc0 + 2*(p))
@@ -456,7 +456,7 @@ isodump(Isoio *iso, int all)
 }
 
 static int
-sameptr(void *p, uint32_t l)
+sameptr(void *p, uintmem l)
 {
 	if(l & QHterm)
 		return p == nil;
@@ -492,7 +492,7 @@ qhdump(Qh *qh, char *pref)
 	char buf[256];
 	char *s;
 	char *se;
-	uint32_t td;
+	uintmem td;
 	int i;
 
 	s = buf;
@@ -639,7 +639,7 @@ qhlinkqh(Qh* qh, Qh* next)
 	else{
 		next->link = qh->link;
 		next->next = qh->next;
-		qh->link = PCIWADDR(next)|QHlinkqh;
+		qh->link = PADDR(next)|QHlinkqh;
 	}
 	qh->next = next;
 }
@@ -651,7 +651,7 @@ qhlinktd(Qh *qh, Td *td)
 	if(td == nil)
 		qh->elink = QHvf|QHterm;
 	else
-		qh->elink = PCIWADDR(td);
+		qh->elink = PADDR(td);
 }
 
 static void
@@ -661,7 +661,7 @@ tdlinktd(Td *td, Td *next)
 	if(next == nil)
 		td->link = Tdterm;
 	else
-		td->link = PCIWADDR(next)|Tdvf;
+		td->link = PADDR(next)|Tdvf;
 }
 
 static Qh*
@@ -1180,7 +1180,7 @@ epgettd(Ep *ep, Qio *io, int flags, void *a, int count)
 		td->data = td->sbuff;
 	else
 		td->data = td->buff = smalloc(ep->maxpkt);
-	td->buffer = PCIWADDR(td->data);
+	td->buffer = PADDR(td->data);
 	td->ndata = count;
 	if(a != nil && count > 0)
 		memmove(td->data, a, count);
@@ -1691,7 +1691,7 @@ isoopen(Ep *ep)
 			td->data = iso->data + i * ep->maxpkt;
 		else
 			td->data = td->sbuff;
-		td->buffer = PCIWADDR(td->data);
+		td->buffer = PADDR(td->data);
 		tdisoinit(iso, td, size);
 		if(ltd != nil)
 			ltd->next = td;
@@ -1710,7 +1710,7 @@ isoopen(Ep *ep)
 	coherence();
 	frno = iso->td0frno;
 	for(i = 0; i < iso->nframes; i++){
-		ctlr->frames[frno] = PCIWADDR(iso->tdps[frno]);
+		ctlr->frames[frno] = PADDR(iso->tdps[frno]);
 		frno = TRUNC(frno+ep->pollival, Nframes);
 	}
 	iso->next = ctlr->iso;
@@ -2169,14 +2169,14 @@ uhcimeminit(Ctlr *ctlr)
 	/* This is a workaround for PIIX4 errata 29773804.pdf */
 	qh = qhalloc(ctlr, ctlr->qh[Tbulk], nil, "BWS");
 	td = tdalloc();
-	td->link = PCIWADDR(td);
+	td->link = PADDR(td);
 	qhlinktd(qh, td);
 
 	/* loop (hw only) from the last qh back to control xfers.
 	 * this may be done only for some of them. Disable until ehci comes.
 	 */
 	if(0)
-	qh->link = PCIWADDR(ctlr->qhs);
+	qh->link = PADDR(ctlr->qhs);
 
 	frsize = Nframes*sizeof(uint32_t);
 	ctlr->frames = mallocalign(frsize, frsize, 0, 0);
@@ -2185,8 +2185,8 @@ uhcimeminit(Ctlr *ctlr)
 
 	ctlr->iso = nil;
 	for(i = 0; i < Nframes; i++)
-		ctlr->frames[i] = PCIWADDR(ctlr->qhs)|QHlinkqh;
-	OUTL(Flbaseadd, PCIWADDR(ctlr->frames));
+		ctlr->frames[i] = PADDR(ctlr->qhs)|QHlinkqh;
+	OUTL(Flbaseadd, PADDR(ctlr->frames));
 	OUTS(Frnum, 0);
 	dprint("uhci %#x flb %#lx frno %#x\n", ctlr->port,
 		INL(Flbaseadd), INS(Frnum));