Hi,
I've added support for the Compaq Microcom 610 ISDN card, also known as:
Compaq series PSB2222I, i guess.
After my previous attempt to build support for this card I last interest for
a few months. Yesterday I started again and in about 1 hour I had it working
:)
I haven't tested it fully yet, just the answering machine thingie. But I
guess it works since the card is very familliar to the Teles
16.3PnP(according to the linux source).
Steve
PS.
I am not able to use my normal address: <fsteevie@dds.nl> , so if you need
to contact me personally reply to this message...
PPS.
Hotmail does not seem to accept my attachment, so here is the patch in the
patch:
--- CUT FROM HERE ---
*** /usr/src/sys/conf/options.i386.orig Mon Aug 27 16:58:10 2001
--- /usr/src/sys/conf/options.i386 Mon Aug 27 16:59:18 2001
***************
*** 167,172 ****
--- 167,173 ----
ELSA_QS1ISA opt_i4b.h
SIEMENS_ISURF2 opt_i4b.h
EICON_DIVA opt_i4b.h
+ COMPAQ_M610 opt_i4b.h
# -------------------------------
# isdn4bsd: passive PCI cards
# -------------------------------
*** /usr/src/sys/i4b/layer1/isic/i4b_ctx_s0P.c.orig Mon Aug 27 16:57:41 2001
--- /usr/src/sys/i4b/layer1/isic/i4b_ctx_s0P.c Mon Aug 27 17:13:58 2001
***************
*** 43,49 ****
#include "isic.h"
#include "opt_i4b.h"
! #if (NISIC > 0) && (defined(CRTX_S0_P) || defined(TEL_S0_16_3_P))
#include <sys/param.h>
#include <sys/systm.h>
--- 43,49 ----
#include "isic.h"
#include "opt_i4b.h"
! #if (NISIC > 0) && (defined(CRTX_S0_P) || defined(TEL_S0_16_3_P) ||
defined(COMPAQ_M610))
#include <sys/param.h>
#include <sys/systm.h>
***************
*** 109,114 ****
--- 109,115 ----
{
u_int32_t iobase1;
u_int32_t iobase2;
+ u_int32_t iocfg;
int unit = device_get_unit(dev);
struct l1_softc *sc = &l1_sc[unit];
bus_space_tag_t t;
***************
*** 131,155 ****
return ENXIO;
}
! /* remember the io base addresses */
! iobase1 = rman_get_start(sc->sc_resources.io_base[0]);
! iobase2 = rman_get_start(sc->sc_resources.io_base[1]);
/*
* because overlapping resources are invalid,
! * release the first io port resource
*/
bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[0],
sc->sc_resources.io_base[0]);
/* set and allocate a base io address for the ISAC chip */
sc->sc_resources.io_rid[2] = 2;
bus_set_resource(dev, SYS_RES_IOPORT, 2, iobase1-0x20, 0x40);
!
if(!(sc->sc_resources.io_base[2] =
bus_alloc_resource(dev, SYS_RES_IOPORT,
&sc->sc_resources.io_rid[2],
--- 132,192 ----
return ENXIO;
}
! /*
! * Compaq M610 has a cfg io area,
! * we need it
! */
!
! if (sc->sc_cardtyp == CARD_TYPEP_COMPAQ_M610)
! {
! sc->sc_resources.io_rid[2] = 2;
! if(!(sc->sc_resources.io_base[2] =
! bus_alloc_resource(dev, SYS_RES_IOPORT,
! &sc->sc_resources.io_rid[2],
! 0UL, ~0UL, 1, RF_ACTIVE)))
! {
! printf("isic%d: Could not get cfg io area for Compaq Microcom 610\n",
unit);
! isic_detach_common(dev);
! return ENXIO;
! }
!
! iocfg = rman_get_start(sc->sc_resources.io_base[2]);
!
! bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[2],
! sc->sc_resources.io_base[2]);
! }
!
! /* remember the io base addresses */
+ if (sc->sc_cardtyp != CARD_TYPEP_COMPAQ_M610)
+ {
+ iobase1 = rman_get_start(sc->sc_resources.io_base[0]);
+ iobase2 = rman_get_start(sc->sc_resources.io_base[1]);
+ }
+ else
+ {
+ iobase1 = rman_get_start(sc->sc_resources.io_base[1]);
+ iobase2 = rman_get_start(sc->sc_resources.io_base[0]);
+ }
+
/*
* because overlapping resources are invalid,
! * release the first and second io port resource
*/
bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[0],
sc->sc_resources.io_base[0]);
+ bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[1],
+ sc->sc_resources.io_base[1]);
+
/* set and allocate a base io address for the ISAC chip */
sc->sc_resources.io_rid[2] = 2;
bus_set_resource(dev, SYS_RES_IOPORT, 2, iobase1-0x20, 0x40);
!
if(!(sc->sc_resources.io_base[2] =
bus_alloc_resource(dev, SYS_RES_IOPORT,
&sc->sc_resources.io_rid[2],
***************
*** 160,172 ****
return ENXIO;
}
- /*
- * because overlapping resources are invalid,
- * release the second io port resource
- */
-
- bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[1],
- sc->sc_resources.io_base[1]);
/* set and allocate a resource for the HSCX channel A */
--- 197,202 ----
***************
*** 200,206 ****
sc->sc_resources.io_rid[4] = 4;
bus_set_resource(dev, SYS_RES_IOPORT, 4, iobase2, 0x40);
!
if(!(sc->sc_resources.io_base[4] =
bus_alloc_resource(dev,SYS_RES_IOPORT,
&sc->sc_resources.io_rid[4],
--- 230,236 ----
sc->sc_resources.io_rid[4] = 4;
bus_set_resource(dev, SYS_RES_IOPORT, 4, iobase2, 0x40);
!
if(!(sc->sc_resources.io_base[4] =
bus_alloc_resource(dev,SYS_RES_IOPORT,
&sc->sc_resources.io_rid[4],
***************
*** 210,216 ****
isic_detach_common(dev);
return ENXIO;
}
!
/* setup access routines */
sc->clearirq = NULL;
--- 240,268 ----
isic_detach_common(dev);
return ENXIO;
}
!
! /*
! * set and allocate a resource for the cfg io
! * for compaq m610
! */
!
! if (sc->sc_cardtyp == CARD_TYPEP_COMPAQ_M610)
! {
! sc->sc_resources.io_rid[5] = 5;
!
! bus_set_resource(dev, SYS_RES_IOPORT, 5, iocfg, 0x01);
!
! if(!(sc->sc_resources.io_base[5] =
! bus_alloc_resource(dev,SYS_RES_IOPORT,
! &sc->sc_resources.io_rid[5],
! 0ul, ~0ul, 1, RF_ACTIVE)))
! {
! printf("isic%d: Could not get cfg io area for Compaq Microcom 610!\n",
unit);
! isic_detach_common(dev);
! return ENXIO;
! }
! }
!
/* setup access routines */
sc->clearirq = NULL;
***************
*** 221,228 ****
sc->writefifo = ctxs0P_write_fifo;
/* setup card type */
!
! sc->sc_cardtyp = CARD_TYPEP_CS0P;
/* setup IOM bus type */
--- 273,281 ----
sc->writefifo = ctxs0P_write_fifo;
/* setup card type */
!
! if (sc->sc_cardtyp != CARD_TYPEP_COMPAQ_M610)
! sc->sc_cardtyp = CARD_TYPEP_CS0P;
/* setup IOM bus type */
***************
*** 233,249 ****
/* enable the card */
! t = rman_get_bustag(sc->sc_resources.io_base[2]);
! h = rman_get_bushandle(sc->sc_resources.io_base[2]);
! bus_space_write_1(t, h, 0x3c, 0);
! DELAY(SEC_DELAY / 10);
! bus_space_write_1(t, h, 0x3c, 1);
! DELAY(SEC_DELAY / 10);
return 0;
}
! #endif /* (NISIC > 0) && (defined(CRTX_S0_P) || defined(TEL_S0_16_3_P)) */
--- 286,316 ----
/* enable the card */
! if (sc->sc_cardtyp != CARD_TYPEP_COMPAQ_M610)
! {
! t = rman_get_bustag(sc->sc_resources.io_base[2]);
! h = rman_get_bushandle(sc->sc_resources.io_base[2]);
! bus_space_write_1(t, h, 0x3c, 0);
! DELAY(SEC_DELAY / 10);
! bus_space_write_1(t, h, 0x3c, 1);
! DELAY(SEC_DELAY / 10);
! }
! else
! {
! t = rman_get_bustag(sc->sc_resources.io_base[5]);
! h = rman_get_bushandle(sc->sc_resources.io_base[5]);
+ bus_space_write_1(t, h, 0xff, 0);
+ DELAY(SEC_DELAY / 10);
+
+ bus_space_write_1(t, h, 0x00, 1);
+ DELAY(SEC_DELAY / 10);
+ }
+
return 0;
}
! #endif /* (NISIC > 0) && (defined(CRTX_S0_P) || defined(TEL_S0_16_3_P) ||
defined(COMPAQ_M610)) */
*** /usr/src/sys/i4b/layer1/isic/i4b_isic_pnp.c.orig Mon Aug 27 16:57:57
2001
--- /usr/src/sys/i4b/layer1/isic/i4b_isic_pnp.c Mon Aug 27 16:59:08 2001
***************
*** 71,84 ****
#define VID_ASUSCOM_IPAC 0x90167506 /* Asuscom (with IPAC) */
#define VID_EICON_DIVA_20 0x7100891c /* Eicon DIVA 2.0 ISAC/HSCX */
#define VID_EICON_DIVA_202 0xa100891c /* Eicon DIVA 2.02 IPAC */
static struct isic_pnp_ids {
u_long vend_id;
char *id_str;
} isic_pnp_ids[] = {
! #if defined(TEL_S0_16_3_P) || defined(CRTX_S0_P)
{ VID_TEL163PNP, "Teles S0/16.3 PnP" },
{ VID_CREATIXPP, "Creatix S0/16 PnP" },
#endif
#ifdef DYNALINK
{ VID_DYNALINK, "Dynalink IS64PH" },
--- 71,86 ----
#define VID_ASUSCOM_IPAC 0x90167506 /* Asuscom (with IPAC) */
#define VID_EICON_DIVA_20 0x7100891c /* Eicon DIVA 2.0 ISAC/HSCX */
#define VID_EICON_DIVA_202 0xa100891c /* Eicon DIVA 2.02 IPAC */
+ #define VID_COMPAQ_M610 0x0210110e /* Compaq Microcom 610 */
static struct isic_pnp_ids {
u_long vend_id;
char *id_str;
} isic_pnp_ids[] = {
! #if defined(TEL_S0_16_3_P) || defined(CRTX_S0_P) || defined(COMPAQ_M610)
{ VID_TEL163PNP, "Teles S0/16.3 PnP" },
{ VID_CREATIXPP, "Creatix S0/16 PnP" },
+ { VID_COMPAQ_M610, "Compaq Microcom 610" },
#endif
#ifdef DYNALINK
{ VID_DYNALINK, "Dynalink IS64PH" },
***************
*** 223,229 ****
switch(vend_id)
{
! #if defined(TEL_S0_16_3_P) || defined(CRTX_S0_P)
case VID_TEL163PNP:
sc->sc_cardtyp = CARD_TYPEP_163P;
ret = isic_attach_Cs0P(dev);
--- 225,231 ----
switch(vend_id)
{
! #if defined(TEL_S0_16_3_P) || defined(CRTX_S0_P) || defined(COMPAQ_M610)
case VID_TEL163PNP:
sc->sc_cardtyp = CARD_TYPEP_163P;
ret = isic_attach_Cs0P(dev);
***************
*** 231,236 ****
--- 233,243 ----
case VID_CREATIXPP:
sc->sc_cardtyp = CARD_TYPEP_CS0P;
+ ret = isic_attach_Cs0P(dev);
+ break;
+
+ case VID_COMPAQ_M610:
+ sc->sc_cardtyp = CARD_TYPEP_COMPAQ_M610;
ret = isic_attach_Cs0P(dev);
break;
#endif
*** /usr/src/sys/i386/include/i4b_ioctl.h.orig Mon Aug 27 16:58:21 2001
--- /usr/src/sys/i386/include/i4b_ioctl.h Mon Aug 27 16:58:48 2001
***************
*** 136,141 ****
--- 136,142 ----
#define CARD_TYPEP_CCD_HFCS_PCI 28 /* Cologne Chip HFC-S PCI based */
#define CARD_TYPEP_NETJET_S 29 /* Traverse NetJet-S (Tiger300) */
#define CARD_TYPEP_DIVA_ISA 30 /* Eicon DIVA ISA PnP 2.0 or 2.02 */
+ #define CARD_TYPEP_COMPAQ_M610 31 /* Compaq Microcom 610 */
/*
* in case you add support for more cards, please update:
***************
*** 145,151 ****
* and adjust CARD_TYPEP_MAX below.
*/
! #define CARD_TYPEP_MAX 30 /* max type */
/*---------------------------------------------------------------------------*
* card types for CTRL_DAIC
--- 146,152 ----
* and adjust CARD_TYPEP_MAX below.
*/
! #define CARD_TYPEP_MAX 31 /* max type */
/*---------------------------------------------------------------------------*
* card types for CTRL_DAIC
*** /usr/src/usr.sbin/i4b/isdnd/controller.c.orig Mon Aug 27 16:58:30 2001
--- /usr/src/usr.sbin/i4b/isdnd/controller.c Mon Aug 27 16:58:34 2001
***************
*** 78,83 ****
--- 78,84 ----
"Cologne Chip HFC-S PCI based",
"Traverse Tech NETjet-S / Teles PCI-TJ",
"Eicon.Diehl DIVA 2.0 / 2.02 ISA PnP",
+ "Compaq Microcom 610",
};
static char *daic_card[] = {
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-isdn" in the body of the message