FreeBSD/Linux Kernel Cross Reference
sys/pc/pcmciamodem.c
1 #include "u.h"
2 #include "../port/lib.h"
3 #include "mem.h"
4 #include "dat.h"
5 #include "fns.h"
6 #include "io.h"
7 #include "ureg.h"
8 #include "../port/error.h"
9
10 /*
11 * PCMCIA modem.
12 * By default, this will set it up with the port and irq of
13 * COM2 unless a serialx=type=com line is found in plan9.ini.
14 * The assumption is that a laptop with a pcmcia will have only
15 * one com port.
16 */
17
18 enum {
19 Maxcard= 8,
20 };
21
22 static char* modems[] = {
23 "IBM 33.6 Data/Fax/Voice Modem",
24 "CM-56G", /* Xircom CreditCard Modem 56 - GlobalACCESS */
25 "KeepInTouch",
26 "CEM56",
27 "MONTANA V.34 FAX/MODEM", /* Motorola */
28 "REM10",
29 "GSM/GPRS",
30 "AirCard 555",
31 "Gold Card Global", /* Psion V90 Gold card */
32 "Merlin UMTS Modem", /* Novatel card */
33 0,
34 };
35
36 void
37 pcmciamodemlink(void)
38 {
39 ISAConf isa;
40 int i, j, slot, com2used, usingcom2;
41
42 i = 0;
43 com2used = 0;
44 for(j = 0; modems[j]; j++){
45 memset(&isa, 0, sizeof(isa));
46
47 /* look for a configuration line */
48 for(; i < Maxcard; i++){
49 if(isaconfig("serial", i, &isa))
50 if(cistrcmp(isa.type, "com") == 0)
51 break;
52 memset(&isa, 0, sizeof(isa));
53 }
54
55 usingcom2 = 0;
56 if (isa.irq == 0 && isa.port == 0) {
57 if (com2used == 0) {
58 /* default is COM2 */
59 isa.irq = 3;
60 isa.port = 0x2F8;
61 usingcom2 = 1;
62 } else
63 break;
64 }
65 slot = pcmspecial(modems[j], &isa);
66 if(slot >= 0){
67 if(usingcom2)
68 com2used = 1;
69 if(ioalloc(isa.port, 8, 0, modems[j]) < 0)
70 print("%s port %lux already in use\n",
71 modems[j], isa.port);
72 print("%s in pcmcia slot %d port 0x%lux irq %d\n",
73 modems[j], slot, isa.port, isa.irq);
74 }
75 }
76 }
Cache object: 275bfd0d5b35eff8fe27a847b111d777
|