eicon_pci.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: eicon_pci.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
  2.  *
  3.  * ISDN low-level module for Eicon active ISDN-Cards.
  4.  * Hardware-specific code for PCI cards.
  5.  *
  6.  * Copyright 1998-2000 by Armin Schindler (mac@melware.de)
  7.  * Copyright 1999,2000 Cytronics & Melware (info@melware.de)
  8.  *
  9.  * This software may be used and distributed according to the terms
  10.  * of the GNU General Public License, incorporated herein by reference.
  11.  *
  12.  * Thanks to Eicon Networks for 
  13.  * documents, informations and hardware. 
  14.  *
  15.  */
  16. #include <linux/config.h>
  17. #include <linux/pci.h>
  18. #include "eicon.h"
  19. #include "eicon_pci.h"
  20. #undef N_DATA
  21. #include "adapter.h"
  22. #include "uxio.h"
  23. char *eicon_pci_revision = "$Revision: 1.1.4.1 $";
  24. #if CONFIG_PCI          /* intire stuff is only for PCI */
  25. #ifdef CONFIG_ISDN_DRV_EICON_PCI
  26. int eicon_pci_find_card(char *ID)
  27. {
  28. int pci_cards = 0;
  29. int card_id = 0;
  30. int had_q = 0;
  31. int ctype = 0;
  32. char did[20];
  33. card_t *pCard;
  34. word wCardIndex;
  35. pCard = DivasCards;
  36. for (wCardIndex = 0; wCardIndex < MAX_CARDS; wCardIndex++)
  37. {
  38. if ((pCard->hw) && (pCard->hw->in_use))
  39. {
  40. switch(pCard->hw->card_type) {
  41. case DIA_CARD_TYPE_DIVA_SERVER:
  42. ctype = EICON_CTYPE_MAESTRAP;
  43. card_id++;
  44. had_q = 0;
  45. break;
  46. case DIA_CARD_TYPE_DIVA_SERVER_B:
  47. ctype = EICON_CTYPE_MAESTRA;
  48. card_id++;
  49. had_q = 0;
  50. break;
  51. case DIA_CARD_TYPE_DIVA_SERVER_Q:
  52. ctype = EICON_CTYPE_MAESTRAQ;
  53. if (!had_q)
  54. card_id++;
  55. if (++had_q >=4)
  56. had_q = 0;
  57. break;
  58. default:
  59. printk(KERN_ERR "eicon_pci: unknown card type %d !n",
  60. pCard->hw->card_type);
  61. goto err;
  62. }
  63. sprintf(did, "%s%d", (strlen(ID) < 1) ? "eicon":ID, pci_cards);
  64. if ((!ctype) || (!(eicon_addcard(ctype, 0, pCard->hw->irq, did, card_id)))) {
  65. printk(KERN_ERR "eicon_pci: Card could not be added !n");
  66. } else {
  67. pci_cards++;
  68. printk(KERN_INFO "%s: DriverID='%s' CardID=%dn",
  69. eicon_ctype_name[ctype], did, card_id);
  70. }
  71. err:;
  72. }
  73. pCard++;
  74. }
  75. return pci_cards;
  76. }
  77. void
  78. eicon_pci_init_conf(eicon_card *card)
  79. {
  80. int j;
  81. /* initializing some variables */
  82. card->ReadyInt = 0;
  83. for(j = 0; j < 256; j++)
  84. card->IdTable[j] = NULL;
  85. for(j = 0; j < (card->d->channels + 1); j++) {
  86. card->bch[j].e.busy = 0;
  87. card->bch[j].e.D3Id = 0;
  88. card->bch[j].e.B2Id = 0;
  89. card->bch[j].e.ref = 0;
  90. card->bch[j].e.Req = 0;
  91. card->bch[j].e.complete = 1;
  92. card->bch[j].fsm_state = EICON_STATE_NULL;
  93. }
  94. }
  95. #endif
  96. #endif /* CONFIG_PCI */