From c47b26036e092ee2aaf20b00a9cad0ed8529d481 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Wed, 16 Oct 2002 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2002-10-16 --- pc/devpccard.c | 55 ++++++++++++++++++++++++++++++------------------ pc/pcmciamodem.c | 1 + 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/pc/devpccard.c b/pc/devpccard.c index 7b0f5f825aacb2f3609ec5cad940785c632cabea..6d8e62354a0a31c45ba9d1451d00a9c21c72a170 100644 --- a/pc/devpccard.c +++ b/pc/devpccard.c @@ -17,6 +17,7 @@ enum { TI_1250_did = 0xAC16, TI_1450_did = 0xAC1B, TI_1251A_did = 0xAC1D, + TI_1420_did = 0xAC51, Ricoh_vid = 0x1180, Ricoh_476_did = 0x0476, @@ -57,7 +58,7 @@ static Variant variant[] = { { TI_vid, TI_1250_did, "TI PCI-1250 Cardbus Controller", }, { TI_vid, TI_1450_did, "TI PCI-1450 Cardbus Controller", }, { TI_vid, TI_1251A_did, "TI PCI-1251A Cardbus Controller", }, -{ TI_vid, 0xAC51, "TI 0xAC51 Cardbus Controller", }, +{ TI_vid, TI_1420_did, "TI PCI-1420 Cardbus Controller", }, }; /* Cardbus registers */ @@ -86,6 +87,8 @@ enum { PciPCR_MEM = 1 << 1, PciPCR_Master = 1 << 2, + PciPMC = 0xa4, + Nbars = 6, Ncmd = 10, CBIRQ = 9, @@ -325,7 +328,7 @@ static char *states[] = { static void engine(Cardbus *cb, int message) { - // print("engine(%d): %s(%s)\n", + //print("engine(%d): %s(%s)\n", // (int)(cb - cbslots), states[cb->state], messages[message]); switch (cb->state) { case SlotEmpty: @@ -338,8 +341,8 @@ engine(Cardbus *cb, int message) case CardEjected: break; default: - print("#Y%d: Invalid message %s in SlotEmpty state\n", - (int)(cb - cbslots), messages[message]); + //print("#Y%d: Invalid message %s in SlotEmpty state\n", + // (int)(cb - cbslots), messages[message]); break; } break; @@ -374,8 +377,8 @@ engine(Cardbus *cb, int message) powerdown(cb); break; default: - print("#Y%d: Invalid message %s in SlotPowered state\n", - (int)(cb - cbslots), messages[message]); + //print("#Y%d: Invalid message %s in SlotPowered state\n", + // (int)(cb - cbslots), messages[message]); break; } break; @@ -389,8 +392,8 @@ engine(Cardbus *cb, int message) powerdown(cb); break; default: - print("#Y%d: Invalid message %s in SlotConfigured state\n", - (int)(cb - cbslots), messages[message]); + //print("#Y%d: Invalid message %s in SlotConfigured state\n", + // (int)(cb - cbslots), messages[message]); break; } break; @@ -475,8 +478,8 @@ cbinterrupt(Ureg *, void *) state = cb->regs[SocketState]; rdreg(cb, Rcsc); /* Ack the interrupt */ - // print("interrupt: slot %d, event %.8lX, state %.8lX, (%s)\n", - // (int)(cb - cbslots), event, state, states[cb->state]); + //print("interrupt: slot %d, event %.8lX, state %.8lX, (%s)\n", + // (int)(cb - cbslots), event, state, states[cb->state]); if (event & SE_CCD) { cb->regs[SocketEvent] |= SE_CCD; /* Ack interrupt */ @@ -599,6 +602,13 @@ devpccardlink(void) else if (pci->did == TI_1250_did) { print("No support yet for the TI_1250_did, prod pb\n"); } + else if (pci->did == TI_1420_did) { + // Disable Vcc protection + pcicfgw32(cb->pci, 0x80, + pcicfgr32(cb->pci, 0x80) | (1 << 21)); + } + + pcicfgw16(cb->pci, PciPMC, pcicfgr16(cb->pci, PciPMC) & ~3); } if (intl != -1 && intl != pci->intl) @@ -659,7 +669,8 @@ powerup(Cardbus *cb) ulong state; ushort bcr; - if ((state = cb->regs[SocketState]) & SS_PC16) { + state = cb->regs[SocketState]; + if (state & SS_PC16) { // print("#Y%ld: Probed a PC16 card, powering up card\n", cb - cbslots); cb->type = PC16; @@ -671,6 +682,7 @@ powerup(Cardbus *cb) wrreg(cb, Rigc, 0); delay(100); wrreg(cb, Rigc, Fnotreset); + delay(500); return 1; } @@ -678,8 +690,8 @@ powerup(Cardbus *cb) if (state & SS_CCD) return 0; - if ((state & SS_CBC) == 0 || (state & SS_NOTCARD)) { - print("#Y%ld: No cardbus card inserted\n", cb - cbslots); + if (state & SS_NOTCARD) { + print("#Y%ld: Not a card inserted\n", cb - cbslots); return 0; } @@ -704,7 +716,7 @@ powerup(Cardbus *cb) pcicfgw16(cb->pci, PciBCR, bcr); delay(100); - cb->type = PC32; + cb->type = (state & SS_PC16)? PC16: PC32; return 1; } @@ -1124,7 +1136,7 @@ pccard_pcmspecial(char *idstr, ISAConf *isa) pi->irq = isa->irq; unlock(cb); -// print("#Y%d: %s irq %ld, port %lX\n", (int)(cb - cbslots), pi->verstr, isa->irq, isa->port); + print("#Y%d: %s irq %ld, port %lX\n", (int)(cb - cbslots), pi->verstr, isa->irq, isa->port); return (int)(cb - cbslots); } @@ -1301,6 +1313,7 @@ pccardread(Chan *c, void *a, long n, vlong offset) { Cardbus *cb; char *buf, *p, *e; + int i; switch(TYPE(c)){ case Qdir: @@ -1349,19 +1362,19 @@ pccardread(Chan *c, void *a, long n, vlong offset) p = seprint(p, e, "%s port %X; irq %d;\n", pi->verstr, pi->port, pi->irq); - for (n = 0; n != pi->nctab; n++) { + for (i = 0; i != pi->nctab; i++) { PCMconftab *ct; - int i; + int j; - ct = &pi->ctab[n]; + ct = &pi->ctab[i]; p = seprint(p, e, "\tconfiguration[%ld] irqs %.4uX; vpp %d, %d; %s\n", n, ct->irqs, ct->vpp1, ct->vpp2, (ct == pi->defctab)? "(default);": ""); - for (i = 0; i != ct->nio; i++) - if (ct->io[i].len > 0) + for (j = 0; j != ct->nio; j++) + if (ct->io[j].len > 0) p = seprint(p, e, "\t\tio[%d] %.8ulX %uld\n", - i, ct->io[i].start, ct->io[i].len); + i, ct->io[j].start, ct->io[j].len); } } break; diff --git a/pc/pcmciamodem.c b/pc/pcmciamodem.c index 3ebd4def7ef164fcd2981a41d0672afa8a90260a..04ab86a621feca75d38373f7a0651c9e85672ceb 100644 --- a/pc/pcmciamodem.c +++ b/pc/pcmciamodem.c @@ -26,6 +26,7 @@ static char* modems[] = { "CEM56", "MONTANA V.34 FAX/MODEM", /* Motorola */ "REM10", + "GSM/GPRS", 0, };