]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/pc/pcmciamodem.c
Import sources from 2011-03-30 iso image - lib
[plan9front.git] / sys / src / 9 / 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 }