コード例 #1
0
ファイル: niccy.c プロジェクト: xricson/knoppix
static int __init
niccy_pci_probe(struct IsdnCardState *cs, struct pci_dev *pdev)
{
	u32 pci_ioaddr;

	if (pci_enable_device(pdev))
		goto err;

	cs->subtyp = NICCY_PCI;
	cs->irq = pdev->irq;
	cs->irq_flags |= SA_SHIRQ;
	cs->hw.niccy.cfg_reg = pci_resource_start(pdev, 0);
	pci_ioaddr = pci_resource_start(pdev, 1);
	cs->hw.niccy.isac = pci_ioaddr + ISAC_PCI_DATA;
	cs->hw.niccy.isac_ale = pci_ioaddr + ISAC_PCI_ADDR;
	cs->hw.niccy.hscx = pci_ioaddr + HSCX_PCI_DATA;
	cs->hw.niccy.hscx_ale = pci_ioaddr + HSCX_PCI_ADDR;
	if (!request_io(&cs->rs, cs->hw.niccy.isac, 4, "niccy"))
		goto err;
	if (!request_io(&cs->rs, cs->hw.niccy.cfg_reg, 0x40, "niccy pci"))
		goto err;
	if (niccy_probe(cs) < 0)
		goto err;
	return 0;
 err:
	hisax_release_resources(cs);
	return -EBUSY;
}
コード例 #2
0
ファイル: teles3.c プロジェクト: xricson/knoppix
static int __init
teles_request_io(struct IsdnCardState *cs)
{
	if (!request_io(&cs->rs, cs->hw.teles3.isac + 32, 32, "HiSax isac"))
		return -EBUSY;
	if (!request_io(&cs->rs, cs->hw.teles3.hscx[0]+32, 32, "HiSax hscx A"))
		return -EBUSY;
	if (!request_io(&cs->rs, cs->hw.teles3.hscx[1]+32, 32, "HiSax hscx B"))
		return -EBUSY;
	return 0;
}
コード例 #3
0
ファイル: saphir.c プロジェクト: xricson/knoppix
static int __init
saphir_probe(struct IsdnCardState *cs, struct IsdnCard *card)
{
	cs->hw.saphir.cfg_reg = card->para[1];
	cs->hw.saphir.isac = card->para[1] + ISAC_DATA;
	cs->hw.saphir.hscx = card->para[1] + HSCX_DATA;
	cs->hw.saphir.ale = card->para[1] + ADDRESS_REG;
	cs->irq = card->para[0];

	if (!request_io(&cs->rs, cs->hw.saphir.cfg_reg, 6, "saphir"))
		goto err;

	printk(KERN_INFO "HiSax: %s config irq:%d io:0x%X\n",
	       CardType[cs->typ], cs->irq, cs->hw.saphir.cfg_reg);

	if (saphir_reset(cs))
		goto err;

	cs->card_ops = &saphir_ops;
	if (hscxisac_setup(cs, &isac_ops, &hscx_ops))
		goto err;

	init_timer(&cs->hw.saphir.timer);
	cs->hw.saphir.timer.function = (void *) SaphirWatchDog;
	cs->hw.saphir.timer.data = (long) cs;
	cs->hw.saphir.timer.expires = jiffies + 4*HZ;
	add_timer(&cs->hw.saphir.timer);
	return 0;
 err:
	hisax_release_resources(cs);
	return -EBUSY;
}
コード例 #4
0
ファイル: nj_u.c プロジェクト: xricson/knoppix
static int __init
nj_u_probe(struct IsdnCardState *cs, struct pci_dev *pdev)
{
	if (pci_enable_device(pdev))
		goto err;
			
	pci_set_master(pdev);

	cs->irq = pdev->irq;
	cs->irq_flags |= SA_SHIRQ;
	cs->hw.njet.pdev = pdev;
	cs->hw.njet.base = pci_resource_start(pdev, 0);
	if (!request_io(&cs->rs, cs->hw.njet.base, 0x100, "netspider-u isdn"))
		goto err;
	
	cs->hw.njet.auxa = cs->hw.njet.base + NETJET_AUXDATA;
	cs->hw.njet.isac = cs->hw.njet.base | NETJET_ISAC_OFF;

	cs->hw.njet.ctrl_reg = 0xff;  /* Reset On */
	byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
	
	set_current_state(TASK_UNINTERRUPTIBLE);
	schedule_timeout((10*HZ)/1000);	/* Timeout 10ms */
	
	cs->hw.njet.ctrl_reg = 0x00;  /* Reset Off and status read clear */
	byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
	
	set_current_state(TASK_UNINTERRUPTIBLE);
	schedule_timeout((10*HZ)/1000);	/* Timeout 10ms */
	
	cs->hw.njet.auxd = 0xC0;
	cs->hw.njet.dmactrl = 0;
	
	byteout(cs->hw.njet.base + NETJET_AUXCTRL, ~NETJET_ISACIRQ);
	byteout(cs->hw.njet.base + NETJET_IRQMASK1, NETJET_ISACIRQ);
	byteout(cs->hw.njet.auxa, cs->hw.njet.auxd);

	switch ((NETjet_ReadIC(cs, ICC_RBCH) >> 5) & 3)	{
	case 3:
		break;
	case 0:
		printk(KERN_WARNING "NETspider-U: NETjet-S PCI card found\n" );
		goto err;
	default:
		printk(KERN_WARNING "NETspider-U: No PCI card found\n" );
		goto err;
	}
	printk(KERN_INFO "NETspider-U: PCI card configured at %#lx IRQ %d\n",
	       cs->hw.njet.base, cs->irq);

	nj_u_reset(cs);
	cs->card_ops = &nj_u_ops;
	icc_setup(cs, &netjet_dc_ops);
	return 0;
 err:
	hisax_release_resources(cs);
	return -EBUSY;
}
コード例 #5
0
ファイル: niccy.c プロジェクト: xricson/knoppix
static int __init
niccy_pnp_probe(struct IsdnCardState *cs, struct IsdnCard *card)
{
	cs->subtyp = NICCY_PNP;
	cs->irq = card->para[0];
	cs->hw.niccy.isac = card->para[1] + ISAC_PNP;
	cs->hw.niccy.hscx = card->para[1] + HSCX_PNP;
	cs->hw.niccy.isac_ale = card->para[2] + ISAC_PNP;
	cs->hw.niccy.hscx_ale = card->para[2] + HSCX_PNP;
	cs->hw.niccy.cfg_reg = 0;

	if (!request_io(&cs->rs, cs->hw.niccy.isac, 2, "niccy data"))
		goto err;
	if (!request_io(&cs->rs, cs->hw.niccy.isac_ale, 2, "niccy addr"))
		goto err;
	if (niccy_probe(cs) < 0)
		goto err;
	return 0;
 err:
	hisax_release_resources(cs);
	return -EBUSY;
}
コード例 #6
0
ファイル: teles3.c プロジェクト: xricson/knoppix
static int __init
teles16_3_probe(struct IsdnCardState *cs, struct IsdnCard *card)
{
	u8 val;

	cs->hw.teles3.cfg_reg = card->para[1];
	switch (cs->hw.teles3.cfg_reg) {
	case 0x180:
	case 0x280:
	case 0x380:
		cs->hw.teles3.cfg_reg |= 0xc00;
		break;
	}
	cs->hw.teles3.isac = cs->hw.teles3.cfg_reg - 0x420;
	cs->hw.teles3.hscx[0] = cs->hw.teles3.cfg_reg - 0xc20;
	cs->hw.teles3.hscx[1] = cs->hw.teles3.cfg_reg - 0x820;
	teles_setup_io(cs, card);
	if (!request_io(&cs->rs, cs->hw.teles3.cfg_reg, 8, "teles3 cfg"))
		goto err;
	if (teles_request_io(cs) < 0)
		goto err;
	if ((val = bytein(cs->hw.teles3.cfg_reg + 0)) != 0x51) {
		printk(KERN_WARNING "Teles: 16.3 Byte at %x is %x\n",
		       cs->hw.teles3.cfg_reg + 0, val);
		goto err;
	}
	if ((val = bytein(cs->hw.teles3.cfg_reg + 1)) != 0x93) {
		printk(KERN_WARNING "Teles: 16.3 Byte at %x is %x\n",
		       cs->hw.teles3.cfg_reg + 1, val);
		goto err;
	}
	/* 0x1e without AB, 0x1f with AB,  0x1c 16.3 ???, 
	 * 0x39 16.3 1.1,   0x38 16.3 1.3, 0x46 16.3 with AB + Video */
	val = bytein(cs->hw.teles3.cfg_reg + 2);
	if (val != 0x46 && val != 0x39 && val != 0x38 && 
	    val != 0x1c && val != 0x1e && val != 0x1f) {
		printk(KERN_WARNING "Teles: 16.3 Byte at %x is %x\n",
		       cs->hw.teles3.cfg_reg + 2, val);
		goto err;
	}
	if (teles_hw_init(cs) < 0)
		goto err;
	return 0;
 err:
	hisax_release_resources(cs);
	return -EBUSY;
}
コード例 #7
0
ファイル: teles3.c プロジェクト: xricson/knoppix
static int __init
telespcmcia_probe(struct IsdnCardState *cs, struct IsdnCard *card)
{
	cs->hw.teles3.cfg_reg = 0;
	cs->hw.teles3.hscx[0] = card->para[1] - 0x20;
	cs->hw.teles3.hscx[1] = card->para[1];
	cs->hw.teles3.isac = card->para[1] + 0x20;
	teles_setup_io(cs, card);
	if (!request_io(&cs->rs, cs->hw.teles3.hscx[1], 96, 
			"HiSax Teles PCMCIA"))
		goto err;
	if (teles_hw_init(cs) < 0)
		goto err;
	return 0;
 err:
	hisax_release_resources(cs);
	return -EBUSY;
}
コード例 #8
0
ファイル: asuscom.c プロジェクト: sarnobat/knoppix
static int __init
asuscom_probe(struct IsdnCardState *cs, struct IsdnCard *card)
{
	int rc;
	u8 val;

	printk(KERN_INFO "ISDNLink: defined at %#lx IRQ %lu\n",
	       card->para[1], card->para[0]);

	cs->hw.asus.cfg_reg = card->para[1];
	cs->irq = card->para[0];

	rc = -EBUSY;
	if (!request_io(&cs->rs, cs->hw.asus.cfg_reg, 8, "asuscom isdn"))
		goto err;

	rc = -ENODEV;
	cs->hw.asus.adr = cs->hw.asus.cfg_reg + ASUS_IPAC_ALE;
	val = readreg(cs, cs->hw.asus.cfg_reg + ASUS_IPAC_DATA, IPAC_ID);
	if ((val == 1) || (val == 2)) {
		cs->subtyp = ASUS_IPAC;
		cs->card_ops = &asuscom_ipac_ops;
		cs->hw.asus.isac = cs->hw.asus.cfg_reg + ASUS_IPAC_DATA;
		if (ipac_setup(cs, &ipac_dc_ops, &ipac_bc_ops))
			goto err;
	} else {
		cs->subtyp = ASUS_ISACHSCX;
		cs->card_ops = &asuscom_ops;
		cs->hw.asus.adr = cs->hw.asus.cfg_reg + ASUS_ADR;
		cs->hw.asus.isac = cs->hw.asus.cfg_reg + ASUS_ISAC;
		cs->hw.asus.hscx = cs->hw.asus.cfg_reg + ASUS_HSCX;
		cs->hw.asus.u7 = cs->hw.asus.cfg_reg + ASUS_CTRL_U7;
		cs->hw.asus.pots = cs->hw.asus.cfg_reg + ASUS_CTRL_POTS;
		if (hscxisac_setup(cs, &isac_ops, &hscx_ops))
			goto err;
	}
	printk(KERN_INFO "ISDNLink: resetting card\n");
	cs->card_ops->reset(cs);
	return 0;

 err:
	hisax_release_resources(cs);
	return rc;
}
コード例 #9
0
ファイル: teles3.c プロジェクト: xricson/knoppix
static int __init
compaq_probe(struct IsdnCardState *cs, struct IsdnCard *card)
{
	cs->hw.teles3.cfg_reg = card->para[3];
	cs->hw.teles3.isac = card->para[2] - 32;
	cs->hw.teles3.hscx[0] = card->para[1] - 32;
	cs->hw.teles3.hscx[1] = card->para[1];
	teles_setup_io(cs, card);
	if (!request_io(&cs->rs, cs->hw.teles3.cfg_reg, 1, "teles3 cfg"))
		goto err;
	if (teles_request_io(cs) < 0)
		goto err;
	if (teles_hw_init(cs) < 0)
		goto err;
	return 0;
 err:
	hisax_release_resources(cs);
	return -EBUSY;
}
コード例 #10
0
ファイル: requestor.c プロジェクト: gitter-badger/knot
static int exec_request(struct knot_requestor *req, struct knot_request *last,
                        struct timeval *timeout)
{
	int ret = KNOT_EOK;

	/* Do I/O until the processing is satisifed or fails. */
	while (req->overlay.state & (KNOT_STATE_PRODUCE|KNOT_STATE_CONSUME)) {
		ret = request_io(req, last, timeout);
		if (ret != KNOT_EOK) {
			knot_overlay_reset(&req->overlay);
			return ret;
		}
	}

	/* Expect complete request. */
	if (req->overlay.state != KNOT_STATE_DONE) {
		ret = KNOT_LAYER_ERROR;
	}

	/* Finish current query processing. */
	knot_overlay_reset(&req->overlay);

	return ret;
}
コード例 #11
0
ファイル: elsa.c プロジェクト: sarnobat/knoppix
static int
check_arcofi(struct IsdnCardState *cs)
{
	int arcofi_present = 0;
	char tmp[40];
	char *t;
	u8 *p;

	if (!cs->dc.isac.mon_tx)
		if (!(cs->dc.isac.mon_tx=kmalloc(MAX_MON_FRAME, GFP_ATOMIC))) {
			if (cs->debug & L1_DEB_WARN)
				debugl1(cs, "ISAC MON TX out of buffers!");
			return(0);
		}
	cs->dc.isac.arcofi_bc = 0;
	arcofi_fsm(cs, ARCOFI_START, &ARCOFI_VERSION);
	interruptible_sleep_on(&cs->dc.isac.arcofi_wait);
	if (!test_and_clear_bit(FLG_ARCOFI_ERROR, &cs->HW_Flags)) {
			debugl1(cs, "Arcofi response received %d bytes", cs->dc.isac.mon_rxp);
			p = cs->dc.isac.mon_rx;
			t = tmp;
			t += sprintf(tmp, "Arcofi data");
			QuickHex(t, p, cs->dc.isac.mon_rxp);
			debugl1(cs, tmp);
			if ((cs->dc.isac.mon_rxp == 2) && (cs->dc.isac.mon_rx[0] == 0xa0)) {
				switch(cs->dc.isac.mon_rx[1]) {
					case 0x80:
						debugl1(cs, "Arcofi 2160 detected");
						arcofi_present = 1;
						break;
					case 0x82:
						debugl1(cs, "Arcofi 2165 detected");
						arcofi_present = 2;
						break;
					case 0x84:
						debugl1(cs, "Arcofi 2163 detected");
						arcofi_present = 3;
						break;
					default:
						debugl1(cs, "unknown Arcofi response");
						break;
				}
			} else
				debugl1(cs, "undefined Monitor response");
			cs->dc.isac.mon_rxp = 0;
	} else if (cs->dc.isac.mon_tx) {
		debugl1(cs, "Arcofi not detected");
	}
	if (arcofi_present) {
		if (cs->subtyp==ELSA_QS1000) {
			cs->subtyp = ELSA_QS3000;
			printk(KERN_INFO
				"Elsa: %s detected modem at 0x%lx\n",
				Elsa_Types[cs->subtyp],
				cs->hw.elsa.base+8);
			request_io(&cs->rs, cs->hw.elsa.base+8, 8, "elsa isdn modem");
		} else if (cs->subtyp==ELSA_PCC16) {
			cs->subtyp = ELSA_PCF;
			printk(KERN_INFO
				"Elsa: %s detected modem at 0x%lx\n",
				Elsa_Types[cs->subtyp],
				cs->hw.elsa.base+8);
			request_io(&cs->rs, cs->hw.elsa.base+8, 8, "elsa isdn modem");
		} else
			printk(KERN_INFO
				"Elsa: %s detected modem at 0x%lx\n",
				Elsa_Types[cs->subtyp],
				cs->hw.elsa.base+8);
		arcofi_fsm(cs, ARCOFI_START, &ARCOFI_XOP_0);
		interruptible_sleep_on(&cs->dc.isac.arcofi_wait);
		return(1);
	}
	return(0);
}