The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/isapnp/isic_isapnp_siemens_isurf.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  *   Copyright (c) 1999 Udo Schweigert. All rights reserved.
    3  *
    4  *   Redistribution and use in source and binary forms, with or without
    5  *   modification, are permitted provided that the following conditions
    6  *   are met:
    7  *
    8  *   1. Redistributions of source code must retain the above copyright
    9  *      notice, this list of conditions and the following disclaimer.
   10  *   2. Redistributions in binary form must reproduce the above copyright
   11  *      notice, this list of conditions and the following disclaimer in the
   12  *      documentation and/or other materials provided with the distribution.
   13  *   3. Neither the name of the author nor the names of any co-contributors
   14  *      may be used to endorse or promote products derived from this software
   15  *      without specific prior written permission.
   16  *   4. Altered versions must be plainly marked as such, and must not be
   17  *      misrepresented as being the original software and/or documentation.
   18  *   
   19  *   THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   20  *   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   21  *   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   22  *   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   23  *   FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   24  *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   25  *   OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   26  *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   27  *   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   28  *   OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   29  *   SUCH DAMAGE.
   30  *
   31  *---------------------------------------------------------------------------
   32  *   Based on ELSA Quickstep 1000pro PCI driver (i4b_elsa_qs1p.c)
   33  *---------------------------------------------------------------------------
   34  *   In case of trouble please contact Udo Schweigert <ust@cert.siemens.de>
   35  *---------------------------------------------------------------------------
   36  *
   37  *      Siemens I-Surf 2.0 PnP specific routines for isic driver
   38  *      --------------------------------------------------------
   39  *
   40  *      $Id: isic_isapnp_siemens_isurf.c,v 1.4 2002/03/24 20:35:52 martin Exp $
   41  *
   42  *      last edit-date: [Fri Jan  5 11:38:29 2001]
   43  *
   44  *---------------------------------------------------------------------------*/
   45 
   46 #include <sys/cdefs.h>
   47 __KERNEL_RCSID(0, "$NetBSD: isic_isapnp_siemens_isurf.c,v 1.4 2002/03/24 20:35:52 martin Exp $");
   48 
   49 #include <sys/param.h>
   50 #include <sys/kernel.h>
   51 #include <sys/systm.h>
   52 #include <sys/mbuf.h>
   53 
   54 #if defined(__NetBSD__) && __NetBSD_Version__ >= 104230000
   55 #include <sys/callout.h>
   56 #endif
   57 
   58 #if defined(__FreeBSD__)
   59 #if __FreeBSD__ >= 3
   60 #include <sys/ioccom.h>
   61 #else
   62 #include <sys/ioctl.h>
   63 #endif
   64 
   65 #include <machine/clock.h>
   66 #include <i386/isa/isa_device.h>
   67 
   68 #else
   69 #include <machine/bus.h>
   70 #include <sys/device.h>
   71 #endif
   72 
   73 #include <sys/socket.h>
   74 #include <net/if.h>
   75 
   76 #if defined(__FreeBSD__)
   77 #include <machine/i4b_debug.h>
   78 #include <machine/i4b_ioctl.h>
   79 #else
   80 #include <netisdn/i4b_debug.h>
   81 #include <netisdn/i4b_ioctl.h>
   82 #endif
   83 
   84 #include <netisdn/i4b_global.h>
   85 #include <netisdn/i4b_debug.h>
   86 #include <netisdn/i4b_l2.h>
   87 #include <netisdn/i4b_l1l2.h>
   88 #include <netisdn/i4b_mbuf.h>
   89 
   90 #include <dev/ic/isic_l1.h>
   91 #include <dev/ic/ipac.h>
   92 #include <dev/ic/isac.h>
   93 #include <dev/ic/hscx.h>
   94 
   95 #if !defined(__FreeBSD__)
   96 void isic_attach_siemens_isurf __P((struct isic_softc *sc));
   97 #endif
   98 
   99 /* masks for register encoded in base addr */
  100 
  101 #define SIE_ISURF_BASE_MASK             0x0ffff
  102 #define SIE_ISURF_OFF_MASK              0xf0000
  103 
  104 /* register id's to be encoded in base addr */
  105 
  106 #define SIE_ISURF_IDISAC                0x00000
  107 #define SIE_ISURF_IDHSCXA               0x10000
  108 #define SIE_ISURF_IDHSCXB               0x20000
  109 #define SIE_ISURF_IDIPAC                0x40000
  110 
  111 /* offsets from base address */
  112 
  113 #define SIE_ISURF_OFF_ALE               0x00
  114 #define SIE_ISURF_OFF_RW                0x01
  115 
  116 /*---------------------------------------------------------------------------*
  117  *      Siemens I-Surf 2.0 PnP ISAC get fifo routine
  118  *---------------------------------------------------------------------------*/
  119 #if defined(__FreeBSD__)
  120 
  121 static void             
  122 siemens_isurf_read_fifo(void *buf, const void *base, size_t len)
  123 {
  124         if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXB)
  125         {
  126                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_HSCXB_OFF);
  127                 insb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (u_char *)buf, (u_int)len);
  128         }
  129         else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXA)
  130         {
  131                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_HSCXA_OFF);
  132                 insb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (u_char *)buf, (u_int)len);
  133         }               
  134         else /* if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDISAC) */
  135         {
  136                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_ISAC_OFF);
  137                 insb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (u_char *)buf, (u_int)len);
  138         }               
  139 }
  140 
  141 #else
  142 
  143 static void
  144 siemens_isurf_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
  145 {
  146         bus_space_tag_t t = sc->sc_maps[0].t;
  147         bus_space_handle_t h = sc->sc_maps[0].h;
  148         switch (what) {
  149         case ISIC_WHAT_ISAC:
  150                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_ISAC_OFF);
  151                 bus_space_read_multi_1(t, h, SIE_ISURF_OFF_RW, buf, size);
  152                 break;
  153         case ISIC_WHAT_HSCXA:
  154                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_HSCXA_OFF);
  155                 bus_space_read_multi_1(t, h, SIE_ISURF_OFF_RW, buf, size);
  156                 break;
  157         case ISIC_WHAT_HSCXB:
  158                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_HSCXB_OFF);
  159                 bus_space_read_multi_1(t, h, SIE_ISURF_OFF_RW, buf, size);
  160                 break;
  161         }
  162 }
  163 
  164 #endif
  165 
  166 /*---------------------------------------------------------------------------*
  167  *      Siemens I-Surf 2.0 PnP ISAC put fifo routine
  168  *---------------------------------------------------------------------------*/
  169 #if defined(__FreeBSD__)
  170 
  171 static void
  172 siemens_isurf_write_fifo(void *base, const void *buf, size_t len)
  173 {
  174         if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXB)
  175         {
  176                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_HSCXB_OFF);
  177                 outsb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (const u_char *)buf, (u_int)len);
  178         }
  179         else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXA)
  180         {
  181                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_HSCXA_OFF);
  182                 outsb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (const u_char *)buf, (u_int)len);
  183         }               
  184         else /* if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDISAC) */
  185         {
  186                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_ISAC_OFF);
  187                 outsb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (const u_char *)buf, (u_int)len);
  188         }
  189 }
  190 
  191 #else
  192 
  193 static void
  194 siemens_isurf_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
  195 {
  196         bus_space_tag_t t = sc->sc_maps[0].t;
  197         bus_space_handle_t h = sc->sc_maps[0].h;
  198         switch (what) {
  199         case ISIC_WHAT_ISAC:
  200                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_ISAC_OFF);
  201                 bus_space_write_multi_1(t, h, SIE_ISURF_OFF_RW, (u_int8_t*)buf, size);
  202                 break;
  203         case ISIC_WHAT_HSCXA:
  204                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_HSCXA_OFF);
  205                 bus_space_write_multi_1(t, h, SIE_ISURF_OFF_RW, (u_int8_t*)buf, size);
  206                 break;
  207         case ISIC_WHAT_HSCXB:
  208                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_HSCXB_OFF);
  209                 bus_space_write_multi_1(t, h, SIE_ISURF_OFF_RW, (u_int8_t*)buf, size);
  210                 break;
  211         }
  212 }
  213 
  214 #endif
  215 
  216 /*---------------------------------------------------------------------------*
  217  *      Siemens I-Surf 2.0 PnP ISAC put register routine
  218  *---------------------------------------------------------------------------*/
  219 #if defined(__FreeBSD__)
  220 
  221 static void
  222 siemens_isurf_write_reg(u_char *base, u_int offset, u_int v)
  223 {
  224         if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXB)
  225         {
  226                 outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_HSCXB_OFF));
  227                 outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW, (u_char)v);
  228         }               
  229         else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXA)
  230         {
  231                 outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_HSCXA_OFF));
  232                 outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW, (u_char)v);
  233         }               
  234         else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDISAC)
  235         {
  236                 outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_ISAC_OFF));
  237                 outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW, (u_char)v);
  238         }               
  239         else /* IPAC */
  240         {
  241                 outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_IPAC_OFF));
  242                 outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW, (u_char)v);
  243         }               
  244 }
  245 
  246 #else
  247 
  248 static void
  249 siemens_isurf_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
  250 {
  251         bus_space_tag_t t = sc->sc_maps[0].t;
  252         bus_space_handle_t h = sc->sc_maps[0].h;
  253         switch (what) {
  254         case ISIC_WHAT_ISAC:
  255                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_ISAC_OFF+offs);
  256                 bus_space_write_1(t, h, SIE_ISURF_OFF_RW, data);
  257                 break;
  258         case ISIC_WHAT_HSCXA:
  259                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_HSCXA_OFF+offs);
  260                 bus_space_write_1(t, h, SIE_ISURF_OFF_RW, data);
  261                 break;
  262         case ISIC_WHAT_HSCXB:
  263                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_HSCXB_OFF+offs);
  264                 bus_space_write_1(t, h, SIE_ISURF_OFF_RW, data);
  265                 break;
  266         case ISIC_WHAT_IPAC:
  267                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_IPAC_OFF+offs);
  268                 bus_space_write_1(t, h, SIE_ISURF_OFF_RW, data);
  269                 break;
  270         }
  271 }
  272 
  273 #endif
  274 
  275 /*---------------------------------------------------------------------------*
  276  *      Siemens I-Surf 2.0 PnP ISAC get register routine
  277  *---------------------------------------------------------------------------*/
  278 #if defined(__FreeBSD__)
  279 
  280 static u_char
  281 siemens_isurf_read_reg(u_char *base, u_int offset)
  282 {
  283         if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXB)
  284         {
  285                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_HSCXB_OFF));
  286                 return(inb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW));
  287         }
  288         else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXA)
  289         {
  290                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_HSCXA_OFF));
  291                 return(inb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW));
  292         }               
  293         else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDISAC)
  294         {
  295                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_ISAC_OFF));
  296                 return(inb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW));
  297         }               
  298         else /* IPAC */
  299         {
  300                 outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_IPAC_OFF));
  301                 return(inb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW));
  302         }               
  303 }
  304 
  305 #else
  306 
  307 static u_int8_t
  308 siemens_isurf_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
  309 {
  310         bus_space_tag_t t = sc->sc_maps[0].t;
  311         bus_space_handle_t h = sc->sc_maps[0].h;
  312         switch (what) {
  313         case ISIC_WHAT_ISAC:
  314                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_ISAC_OFF+offs);
  315                 return bus_space_read_1(t, h, SIE_ISURF_OFF_RW);
  316         case ISIC_WHAT_HSCXA:
  317                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_HSCXA_OFF+offs);
  318                 return bus_space_read_1(t, h, SIE_ISURF_OFF_RW);
  319         case ISIC_WHAT_HSCXB:
  320                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_HSCXB_OFF+offs);
  321                 return bus_space_read_1(t, h, SIE_ISURF_OFF_RW);
  322         case ISIC_WHAT_IPAC:
  323                 bus_space_write_1(t, h, SIE_ISURF_OFF_ALE, IPAC_IPAC_OFF+offs);
  324                 return bus_space_read_1(t, h, SIE_ISURF_OFF_RW);
  325         }
  326         return 0;
  327 }
  328 
  329 #endif
  330 
  331 /*---------------------------------------------------------------------------*
  332  *      isic_probe_siemens_isurf - probe for Siemens I-Surf 2.0 PnP
  333  *---------------------------------------------------------------------------*/
  334 #if defined(__FreeBSD__)
  335 
  336 int
  337 isic_probe_siemens_isurf(struct isa_device *dev, unsigned int iobase2)
  338 {
  339         struct isic_softc *sc = &l1_sc[dev->id_unit];
  340         
  341         /* check max unit range */
  342         
  343         if(dev->id_unit >= ISIC_MAXUNIT)
  344         {
  345                 printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Siemens I-Surf 2.0 PnP\n",
  346                                 dev->id_unit, dev->id_unit);
  347                 return(0);      
  348         }       
  349         sc->sc_unit = dev->id_unit;
  350 
  351         /* check IRQ validity */
  352 
  353         switch(ffs(dev->id_irq) - 1)
  354         {
  355                 case 3:
  356                 case 4:         
  357                 case 5:
  358                 case 7:
  359                 case 10:
  360                 case 11:
  361                 case 12:
  362                 case 15:                
  363                         break;
  364                         
  365                 default:
  366                         printf("isic%d: Error, invalid IRQ [%d] specified for Siemens I-Surf 2.0 PnP!\n",
  367                                 dev->id_unit, ffs(dev->id_irq)-1);
  368                         return(0);
  369                         break;
  370         }
  371         sc->sc_irq = dev->id_irq;
  372 
  373         /* check if memory addr specified */
  374 
  375         if(dev->id_maddr)
  376         {
  377                 printf("isic%d: Error, mem addr 0x%lx specified for Siemens I-Surf 2.0 PnP!\n",
  378                         dev->id_unit, (u_long)dev->id_maddr);
  379                 return(0);
  380         }
  381         dev->id_msize = 0;
  382         
  383         /* check if we got an iobase */
  384 
  385         if(!((dev->id_iobase >= 0x100) && (dev->id_iobase <= 0xfffc)))
  386         {
  387                 printf("isic%d: Error, invalid iobase 0x%x specified for Siemens I-Surf 2.0 PnP!\n",
  388                         dev->id_unit, dev->id_iobase);
  389                 return(0);
  390         }
  391         sc->sc_port = dev->id_iobase;
  392 
  393 
  394         /* setup access routines */
  395 
  396         sc->clearirq = NULL;
  397         sc->readreg = siemens_isurf_read_reg;
  398         sc->writereg = siemens_isurf_write_reg;
  399 
  400         sc->readfifo = siemens_isurf_read_fifo;
  401         sc->writefifo = siemens_isurf_write_fifo;
  402 
  403         /* setup card type */
  404         
  405         sc->sc_cardtyp = CARD_TYPEP_SIE_ISURF2;
  406 
  407         /* setup IOM bus type */
  408         
  409         sc->sc_bustyp = BUS_TYPE_IOM2;
  410 
  411         /* setup chip type = IPAC ! */
  412         
  413         sc->sc_ipac = 1;
  414         sc->sc_bfifolen = IPAC_BFIFO_LEN;
  415         
  416         
  417         return (1);
  418 }
  419 
  420 /*---------------------------------------------------------------------------*
  421  *      isic_attach_siemens_isurf - attach for Siemens I-Surf 2.0 PnP
  422  *---------------------------------------------------------------------------*/
  423 int
  424 isic_attach_siemens_isurf(struct isa_device *dev, unsigned int iobase2)
  425 {
  426         struct isic_softc *sc = &l1_sc[dev->id_unit];
  427 
  428         /* setup ISAC and HSCX base addr */
  429 
  430         ISAC_BASE   = (caddr_t) ((u_int)sc->sc_port | SIE_ISURF_IDISAC);
  431         HSCX_A_BASE = (caddr_t) ((u_int)sc->sc_port | SIE_ISURF_IDHSCXA);
  432         HSCX_B_BASE = (caddr_t) ((u_int)sc->sc_port | SIE_ISURF_IDHSCXB);
  433         IPAC_BASE   = (caddr_t) ((u_int)sc->sc_port | SIE_ISURF_IDIPAC);
  434 
  435         /* enable hscx/isac irq's */
  436         IPAC_WRITE(IPAC_MASK, (IPAC_MASK_INT1 | IPAC_MASK_INT0));
  437 
  438         IPAC_WRITE(IPAC_ACFG, 0);       /* outputs are open drain */
  439         IPAC_WRITE(IPAC_AOE,            /* aux 5..2 are inputs, 7, 6 outputs */
  440                 (IPAC_AOE_OE5 | IPAC_AOE_OE4 | IPAC_AOE_OE3 | IPAC_AOE_OE2));
  441         IPAC_WRITE(IPAC_ATX, 0xff);     /* set all output lines high */
  442 
  443         return(1);
  444 }
  445 
  446 #else
  447 
  448 void
  449 isic_attach_siemens_isurf(struct isic_softc *sc)
  450 {
  451         /* setup access routines */
  452 
  453         sc->clearirq = NULL;
  454         sc->readreg = siemens_isurf_read_reg;
  455         sc->writereg = siemens_isurf_write_reg;
  456 
  457         sc->readfifo = siemens_isurf_read_fifo;
  458         sc->writefifo = siemens_isurf_write_fifo;
  459 
  460         /* setup card type */
  461 
  462         sc->sc_cardtyp = CARD_TYPEP_SIE_ISURF2;
  463 
  464         /* setup IOM bus type */
  465 
  466         sc->sc_bustyp = BUS_TYPE_IOM2;
  467 
  468         /* setup chip type = IPAC ! */
  469 
  470         sc->sc_ipac = 1;
  471         sc->sc_bfifolen = IPAC_BFIFO_LEN;        
  472 
  473         /* enable hscx/isac irq's */
  474 
  475         IPAC_WRITE(IPAC_MASK, (IPAC_MASK_INT1 | IPAC_MASK_INT0));
  476 
  477         IPAC_WRITE(IPAC_ACFG, 0);       /* outputs are open drain */
  478         IPAC_WRITE(IPAC_AOE,            /* aux 5..2 are inputs, 7, 6 outputs */
  479                 (IPAC_AOE_OE5 | IPAC_AOE_OE4 | IPAC_AOE_OE3 | IPAC_AOE_OE2));
  480         IPAC_WRITE(IPAC_ATX, 0xff);     /* set all output lines high */
  481 }
  482 
  483 #endif

Cache object: 2e031d9aeca7d0e3e0cc9c844e5a7565


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.