pcmciamodem.c 1.6 KB

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