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/pci/iwic_fsm.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 /*      $NetBSD: iwic_fsm.c,v 1.1 2002/09/24 22:05:19 pooka Exp $       */
    2 
    3 /*
    4  * Copyright (c) 1999, 2000 Dave Boyce. All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  *
   15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   25  * SUCH DAMAGE.
   26  *
   27  *---------------------------------------------------------------------------
   28  *
   29  *      i4b_iwic - isdn4bsd Winbond W6692 driver
   30  *      ----------------------------------------
   31  *
   32  * $FreeBSD$
   33  *
   34  *      last edit-date: [Sun Jan 21 11:09:24 2001]
   35  *
   36  *---------------------------------------------------------------------------*/
   37 
   38 #include <sys/cdefs.h>
   39 __KERNEL_RCSID(0, "$NetBSD: iwic_fsm.c,v 1.1 2002/09/24 22:05:19 pooka Exp $");
   40 
   41 #include <sys/param.h>
   42 #include <sys/kernel.h>
   43 #include <sys/systm.h>
   44 #include <sys/mbuf.h>
   45 #include <sys/callout.h>
   46 #include <sys/socket.h>
   47 #include <sys/device.h>
   48 #include <net/if.h>
   49 
   50 #include <machine/bus.h>
   51 
   52 #include <dev/pci/pcireg.h>
   53 #include <dev/pci/pcivar.h>
   54 #include <dev/pci/pcidevs.h>
   55 
   56 #include <dev/pci/iwicreg.h>
   57 #include <dev/pci/iwicvar.h>
   58 
   59 #if DO_I4B_DEBUG
   60 static char *state_names[] = {
   61         "F3N",
   62         "F3",
   63         "F4",
   64         "F5",
   65         "F6",
   66         "F7",
   67         "F8",
   68         "ILLEGAL",
   69 };
   70 
   71 static char *event_names[] = {
   72         "PHAR",
   73         "CE",
   74         "T3",
   75         "INFO0",
   76         "RSY",
   77         "INFO2",
   78         "INFO48",
   79         "INFO410",
   80         "DR",
   81         "PU",
   82         "DIS",
   83         "EI",
   84         "ILLEGAL"
   85 };
   86 #endif
   87 
   88 /*---------------------------------------------------------------------------*
   89  *
   90  *---------------------------------------------------------------------------*/
   91 static void
   92 F_NULL(struct iwic_softc *sc)
   93 {
   94         NDBGL1(L1_F_MSG, "FSM function F_NULL executing");
   95 }
   96 
   97 /*---------------------------------------------------------------------------*
   98  *
   99  *---------------------------------------------------------------------------*/
  100 static void
  101 F_AR(struct iwic_softc *sc)
  102 {
  103         NDBGL1(L1_F_MSG, "FSM function F_AR executing");
  104         IWIC_WRITE(sc, CIX, CIX_ECK);
  105 }
  106 
  107 /*---------------------------------------------------------------------------*
  108  *
  109  *---------------------------------------------------------------------------*/
  110 static void
  111 F_AR3(struct iwic_softc *sc)
  112 {
  113         NDBGL1(L1_F_MSG, "FSM function F_AR3 executing");
  114         IWIC_WRITE(sc, CIX, CIX_AR8);
  115 }
  116 
  117 /*---------------------------------------------------------------------------*
  118  *
  119  *---------------------------------------------------------------------------*/
  120 static void
  121 F_I0I(struct iwic_softc *sc)
  122 {
  123         NDBGL1(L1_F_MSG, "FSM function F_IOI executing");
  124 }
  125 
  126 /*---------------------------------------------------------------------------*
  127  *
  128  *---------------------------------------------------------------------------*/
  129 static void
  130 F_I0A(struct iwic_softc *sc)
  131 {
  132         NDBGL1(L1_F_MSG, "FSM function F_IOA executing");
  133         iwic_dchan_disable(sc);
  134         isdn_layer2_activate_ind(&sc->sc_l2, sc->sc_l3token, 0);
  135 }
  136 
  137 /*---------------------------------------------------------------------------*
  138  *
  139  *---------------------------------------------------------------------------*/
  140 static void
  141 F_AI8(struct iwic_softc *sc)
  142 {
  143         NDBGL1(L1_F_MSG, "FSM function F_AI8 executing");
  144         iwic_dchan_transmit(sc);
  145         isdn_layer2_activate_ind(&sc->sc_l2, sc->sc_l3token, 1);
  146 }
  147 
  148 /*---------------------------------------------------------------------------*
  149  *
  150  *---------------------------------------------------------------------------*/
  151 static void
  152 F_AI10(struct iwic_softc *sc)
  153 {
  154         NDBGL1(L1_F_MSG, "FSM function F_AI10 executing");
  155         iwic_dchan_transmit(sc);
  156         isdn_layer2_activate_ind(&sc->sc_l2, sc->sc_l3token, 1);
  157 }
  158 
  159 /*---------------------------------------------------------------------------*
  160  *
  161  *---------------------------------------------------------------------------*/
  162 struct iwic_state_tab {
  163         void (*func) (struct iwic_softc *sc);   /* function to execute */
  164         int newstate;                           /* next state */
  165 } iwic_state_tab[N_EVENTS][N_STATES] = {
  166 
  167 /* STATE:       F3N                  F3                  F4                  F5                  F6                  F7                  F8                  ILLEGAL STATE        */
  168 /* ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ */
  169 /* EV_PHAR   */ {{F_AR,   ST_F3  },  {F_AR3,  ST_F4  },  {F_NULL, ST_F4  },  {F_NULL, ST_F5  },  {F_NULL, ST_F6  },  {F_NULL, ST_F7  },  {F_NULL, ST_F8  },  {F_NULL, ST_ILL }},
  170 /* EV_CE     */ {{F_NULL, ST_F3  },  {F_AR3,  ST_F4  },  {F_NULL, ST_F4  },  {F_NULL, ST_F4  },  {F_NULL, ST_F4  },  {F_NULL, ST_F4  },  {F_NULL, ST_F4  },  {F_NULL, ST_ILL }},
  171 /* EV_T3     */ {{F_NULL, ST_F3N },  {F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F7  },  {F_NULL, ST_F8  },  {F_NULL, ST_ILL }},
  172 /* EV_INFO0  */ {{F_I0I,  ST_F3  },  {F_I0I,  ST_F3  },  {F_I0I,  ST_F3  },  {F_I0I,  ST_F3  },  {F_I0A,  ST_F3  },  {F_I0A,  ST_F3  },  {F_I0A,  ST_F3  },  {F_NULL, ST_ILL }},
  173 /* EV_RSY    */ {{F_NULL, ST_F3  },  {F_NULL, ST_F5  },  {F_NULL, ST_F5  },  {F_NULL, ST_F5  },  {F_NULL, ST_F8  },  {F_NULL, ST_F8  },  {F_NULL, ST_F8  },  {F_NULL, ST_ILL }},
  174 /* EV_INFO2  */ {{F_NULL, ST_F6  },  {F_NULL, ST_F6  },  {F_NULL, ST_F6  },  {F_NULL, ST_F6  },  {F_NULL, ST_F6  },  {F_NULL, ST_F6  },  {F_NULL, ST_F6  },  {F_NULL, ST_ILL }},
  175 /* EV_INFO48 */ {{F_AI8 , ST_F7  },  {F_AI8,  ST_F7  },  {F_AI8,  ST_F7  },  {F_AI8,  ST_F7  },  {F_AI8,  ST_F7  },  {F_AI8,  ST_F7  },  {F_AI8,  ST_F7  },  {F_NULL, ST_ILL }},
  176 /* EV_INFO410*/ {{F_AI10, ST_F7  },  {F_AI10, ST_F7  },  {F_AI10, ST_F7  },  {F_AI10, ST_F7  },  {F_AI10, ST_F7  },  {F_AI10, ST_F7  },  {F_AI10, ST_F7  },  {F_NULL, ST_ILL }},
  177 /* EV_DR     */ {{F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F4  },  {F_NULL, ST_F5  },  {F_NULL, ST_F6  },  {F_NULL, ST_F7  },  {F_NULL, ST_F8  },  {F_NULL, ST_ILL }},
  178 /* EV_PU     */ {{F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F4  },  {F_NULL, ST_F5  },  {F_NULL, ST_F6  },  {F_NULL, ST_F7  },  {F_NULL, ST_F8  },  {F_NULL, ST_ILL }},
  179 /* EV_DIS    */ {{F_NULL, ST_F3N },  {F_NULL, ST_F3N },  {F_NULL, ST_F3N },  {F_NULL, ST_F3N },  {F_NULL, ST_F3N },  {F_I0A,  ST_F3N },  {F_I0A,  ST_F3N },  {F_NULL, ST_ILL }},
  180 /* EV_EI     */ {{F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_F3  },  {F_NULL, ST_ILL }},
  181 /* EV_ILL    */ {{F_NULL, ST_ILL },  {F_NULL, ST_ILL },  {F_NULL, ST_ILL },  {F_NULL, ST_ILL },  {F_NULL, ST_ILL },  {F_NULL, ST_ILL },  {F_NULL, ST_ILL },  {F_NULL, ST_ILL }},
  182 };
  183 
  184 /*---------------------------------------------------------------------------*
  185  *
  186  *---------------------------------------------------------------------------*/
  187 void
  188 iwic_next_state(struct iwic_softc *sc, int event)
  189 {
  190         int currstate, newstate;
  191 
  192         NDBGL1(L1_F_MSG, "event %s", event_names[event]);
  193 
  194         if (event >= N_EVENTS)
  195         {
  196                 printf("iwic_next_state: event >= N_EVENTS\n");
  197                 return;
  198         }
  199 
  200         currstate = sc->sc_I430state;
  201 
  202         newstate = iwic_state_tab[event][currstate].newstate;
  203         if (newstate >= N_STATES)
  204         {
  205                 printf("iwic_next_state: newstate >= N_STATES\n");
  206                 return;
  207         }
  208 
  209         NDBGL1(L1_F_MSG, "state %s -> %s",
  210                 state_names[currstate], state_names[newstate]);
  211 
  212         sc->sc_I430state = newstate;
  213 
  214         (*iwic_state_tab[event][currstate].func) (sc);
  215 }
  216 
  217 #if DO_I4B_DEBUG
  218 /*---------------------------------------------------------------------------*
  219  *      return pointer to current state description
  220  *---------------------------------------------------------------------------*/
  221 char *
  222 iwic_printstate(struct iwic_softc *sc)
  223 {
  224         return((char *)state_names[sc->sc_I430state]);
  225 }
  226 #endif

Cache object: 67d7cd0d9dbb5779d75fa2034e8c08c7


[ 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.