text: /* $Id: eicon_pci.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
   *
   * ISDN low-level module for Eicon active ISDN-Cards.
   * Hardware-specific code for PCI cards.
   *
   * Copyright 1998-2000 by Armin Schindler (mac@melware.de)
   * Copyright 1999,2000 Cytronics & Melware (info@melware.de)
   *
   * This software may be used and distributed according to the terms
   * of the GNU General Public License, incorporated herein by reference.
   *
   * Thanks to	Eicon Networks for 
   *		documents, informations and hardware. 
   *
   */
  
  #include <linux/config.h>
  #include <linux/pci.h>
  
  #include "eicon.h"
  #include "eicon_pci.h"
  
  #undef N_DATA
  #include "adapter.h"
  #include "uxio.h"
  
  char *eicon_pci_revision = "$Revision: 1.1.4.1 $";
  
  #if CONFIG_PCI	         /* intire stuff is only for PCI */
  #ifdef CONFIG_ISDN_DRV_EICON_PCI
  
  int eicon_pci_find_card(char *ID)
  {
  	int pci_cards = 0;
  	int card_id = 0;
  	int had_q = 0;
  	int ctype = 0;
  	char did[20];
  	card_t *pCard;
  	word wCardIndex;
  
  	pCard = DivasCards;
  	for (wCardIndex = 0; wCardIndex < MAX_CARDS; wCardIndex++)
  	{
  	if ((pCard->hw) && (pCard->hw->in_use))
  		{
  			switch(pCard->hw->card_type) {
  				case DIA_CARD_TYPE_DIVA_SERVER:
  					ctype = EICON_CTYPE_MAESTRAP;
  					card_id++;
  					had_q = 0;
  					break;
  				case DIA_CARD_TYPE_DIVA_SERVER_B:
  					ctype = EICON_CTYPE_MAESTRA;
  					card_id++;
  					had_q = 0;
  					break;
  				case DIA_CARD_TYPE_DIVA_SERVER_Q:
  					ctype = EICON_CTYPE_MAESTRAQ;
  					if (!had_q)
  						card_id++;
  					if (++had_q >=4)
  						had_q = 0;
  					break;
  				default:
  					printk(KERN_ERR "eicon_pci: unknown card type %d !\n",
  						pCard->hw->card_type);
  					goto err;
  			}
  			sprintf(did, "%s%d", (strlen(ID) < 1) ? "eicon":ID, pci_cards);
  			if ((!ctype) || (!(eicon_addcard(ctype, 0, pCard->hw->irq, did, card_id)))) {
  				printk(KERN_ERR "eicon_pci: Card could not be added !\n");
  			} else {
  				pci_cards++;
  				printk(KERN_INFO "%s: DriverID='%s' CardID=%d\n",
  					eicon_ctype_name[ctype], did, card_id);
  			}
  err:;
  		}
  		pCard++;
  	}
  	return pci_cards;
  }
  
  void
  eicon_pci_init_conf(eicon_card *card)
  {
  	int j;
  
  	/* initializing some variables */
  	card->ReadyInt = 0;
  
  	for(j = 0; j < 256; j++)
  		card->IdTable[j] = NULL;
  
  	for(j = 0; j < (card->d->channels + 1); j++) {
  		card->bch[j].e.busy = 0;
  		card->bch[j].e.D3Id = 0;
  		card->bch[j].e.B2Id = 0;
  		card->bch[j].e.ref = 0;
  		card->bch[j].e.Req = 0;
  		card->bch[j].e.complete = 1;
  		card->bch[j].fsm_state = EICON_STATE_NULL;
  	}
  }
  
  #endif
  #endif	/* CONFIG_PCI */
  
  