pcmciamodem.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. 0,
  29. };
  30. void
  31. pcmciamodemlink(void)
  32. {
  33. ISAConf isa;
  34. int i, j, slot, com2used, usingcom2;
  35. i = 0;
  36. com2used = 0;
  37. for(j = 0; modems[j]; j++){
  38. memset(&isa, 0, sizeof(isa));
  39. /* look for a configuration line */
  40. for(; i < Maxcard; i++){
  41. if(isaconfig("serial", i, &isa))
  42. if(cistrcmp(isa.type, "com") == 0)
  43. break;
  44. memset(&isa, 0, sizeof(isa));
  45. }
  46. usingcom2 = 0;
  47. if (isa.irq == 0 && isa.port == 0) {
  48. if (com2used == 0) {
  49. /* default is COM2 */
  50. isa.irq = 3;
  51. isa.port = 0x2F8;
  52. usingcom2 = 1;
  53. } else
  54. break;
  55. }
  56. slot = pcmspecial(modems[j], &isa);
  57. if(slot >= 0){
  58. if(usingcom2)
  59. com2used = 1;
  60. if(ioalloc(isa.port, 8, 0, modems[j]) < 0)
  61. print("%s port %lux already in use\n", modems[j], isa.port);
  62. print("%s in pcmcia slot %d port 0x%lux irq %lud\n",
  63. modems[j], slot, isa.port, isa.irq);
  64. }
  65. }
  66. }