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/ic/comvar.h

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: comvar.h,v 1.54 2006/07/13 22:56:02 gdamore Exp $      */
    2 
    3 /*
    4  * Copyright (c) 1996 Christopher G. Demetriou.  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  * 3. All advertising materials mentioning features or use of this software
   15  *    must display the following acknowledgement:
   16  *      This product includes software developed by Christopher G. Demetriou
   17  *      for the NetBSD Project.
   18  * 4. The name of the author may not be used to endorse or promote products
   19  *    derived from this software without specific prior written permission
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   31  */
   32 
   33 #include "rnd.h"
   34 #include "opt_multiprocessor.h"
   35 #include "opt_lockdebug.h"
   36 #include "opt_com.h"
   37 #include "opt_kgdb.h"
   38 
   39 #if NRND > 0 && defined(RND_COM)
   40 #include <sys/rnd.h>
   41 #endif
   42 
   43 #include <sys/callout.h>
   44 #include <sys/timepps.h>
   45 #include <sys/lock.h>
   46 
   47 #include <dev/ic/comreg.h>      /* for COM_NPORTS */
   48 
   49 struct com_regs;
   50 
   51 int comcnattach(bus_space_tag_t, bus_addr_t, int, int, int, tcflag_t);
   52 int comcnattach1(struct com_regs *, int, int, int, tcflag_t);
   53 
   54 #ifdef KGDB
   55 int com_kgdb_attach(bus_space_tag_t, bus_addr_t, int, int, int, tcflag_t);
   56 int com_kgdb_attach1(struct com_regs *, int, int, int, tcflag_t);
   57 #endif
   58 
   59 int com_is_console(bus_space_tag_t, bus_addr_t, bus_space_handle_t *);
   60 
   61 /* Hardware flag masks */
   62 #define COM_HW_NOIEN    0x01
   63 #define COM_HW_FIFO     0x02
   64                 /*      0x04    free for use */
   65 #define COM_HW_FLOW     0x08
   66 #define COM_HW_DEV_OK   0x20
   67 #define COM_HW_CONSOLE  0x40
   68 #define COM_HW_KGDB     0x80
   69 #define COM_HW_TXFIFO_DISABLE   0x100
   70 #define COM_HW_NO_TXPRELOAD     0x200
   71 
   72 /* Buffer size for character buffer */
   73 #define COM_RING_SIZE   2048
   74 
   75 #ifdef  COM_REGMAP
   76 #define COM_REG_RXDATA          0
   77 #define COM_REG_TXDATA          1
   78 #define COM_REG_DLBL            2
   79 #define COM_REG_DLBH            3
   80 #define COM_REG_IER             4
   81 #define COM_REG_IIR             5
   82 #define COM_REG_FIFO            6
   83 #define COM_REG_EFR             7
   84 #define COM_REG_LCR             8
   85 #define COM_REG_MCR             9
   86 #define COM_REG_LSR             10
   87 #define COM_REG_MSR             11
   88 
   89 struct com_regs {
   90         bus_space_tag_t         cr_iot;
   91         bus_space_handle_t      cr_ioh;
   92         bus_addr_t              cr_iobase;
   93         bus_size_t              cr_nports;
   94         bus_size_t              cr_map[16];
   95 };
   96 
   97 extern const bus_size_t com_std_map[16];
   98 
   99 #define COM_INIT_REGS(regs, tag, hdl, addr)                             \
  100         do {                                                            \
  101                 regs.cr_iot = tag;                                      \
  102                 regs.cr_ioh = hdl;                                      \
  103                 regs.cr_iobase = addr;                                  \
  104                 regs.cr_nports = COM_NPORTS;                            \
  105                 memcpy(regs.cr_map, com_std_map, sizeof (regs.cr_map)); \
  106         } while (0)
  107 
  108 #else
  109 #define COM_REG_RXDATA          com_data
  110 #define COM_REG_TXDATA          com_data
  111 #define COM_REG_DLBL            com_dlbl
  112 #define COM_REG_DLBH            com_dlbh
  113 #define COM_REG_IER             com_ier
  114 #define COM_REG_IIR             com_iir
  115 #define COM_REG_FIFO            com_fifo
  116 #define COM_REG_EFR             com_efr
  117 #define COM_REG_LCR             com_lctl
  118 #define COM_REG_MCR             com_mcr
  119 #define COM_REG_LSR             com_lsr
  120 #define COM_REG_MSR             com_msr
  121 
  122 struct com_regs {
  123         bus_space_tag_t         cr_iot;
  124         bus_space_handle_t      cr_ioh;
  125         bus_addr_t              cr_iobase;
  126         bus_size_t              cr_nports;
  127 };
  128 
  129 #define COM_INIT_REGS(regs, tag, hdl, addr)             \
  130         do {                                            \
  131                 regs.cr_iot = tag;                      \
  132                 regs.cr_ioh = hdl;                      \
  133                 regs.cr_iobase = addr;                  \
  134                 regs.cr_nports = COM_NPORTS;            \
  135         } while (0)
  136 
  137 #endif
  138 
  139 struct com_softc {
  140         struct device sc_dev;
  141         void *sc_si;
  142         struct tty *sc_tty;
  143 
  144         struct callout sc_diag_callout;
  145 
  146         int sc_frequency;
  147 
  148         struct com_regs sc_regs;
  149         bus_space_handle_t sc_hayespioh;
  150 
  151 
  152         u_int sc_overflows,
  153               sc_floods,
  154               sc_errors;
  155 
  156         int sc_hwflags,
  157             sc_swflags;
  158         u_int sc_fifolen;
  159 
  160         u_int sc_r_hiwat,
  161               sc_r_lowat;
  162         u_char *volatile sc_rbget,
  163                *volatile sc_rbput;
  164         volatile u_int sc_rbavail;
  165         u_char *sc_rbuf,
  166                *sc_ebuf;
  167 
  168         u_char *sc_tba;
  169         u_int sc_tbc,
  170               sc_heldtbc;
  171 
  172         volatile u_char sc_rx_flags,
  173 #define RX_TTY_BLOCKED          0x01
  174 #define RX_TTY_OVERFLOWED       0x02
  175 #define RX_IBUF_BLOCKED         0x04
  176 #define RX_IBUF_OVERFLOWED      0x08
  177 #define RX_ANY_BLOCK            0x0f
  178                         sc_tx_busy,
  179                         sc_tx_done,
  180                         sc_tx_stopped,
  181                         sc_st_check,
  182                         sc_rx_ready;
  183 
  184         volatile u_char sc_heldchange;
  185         volatile u_char sc_msr, sc_msr_delta, sc_msr_mask, sc_mcr,
  186             sc_mcr_active, sc_lcr, sc_ier, sc_fifo, sc_dlbl, sc_dlbh, sc_efr;
  187         u_char sc_mcr_dtr, sc_mcr_rts, sc_msr_cts, sc_msr_dcd;
  188 
  189 #ifdef COM_HAYESP
  190         u_char sc_prescaler;
  191 #endif
  192 
  193         /*
  194          * There are a great many almost-ns16550-compatible UARTs out
  195          * there, which have minor differences.  The type field here
  196          * lets us distinguish between them.
  197          */
  198         int sc_type;
  199 #define COM_TYPE_NORMAL         0       /* normal 16x50 */
  200 #define COM_TYPE_HAYESP         1       /* Hayes ESP modem */
  201 #define COM_TYPE_PXA2x0         2       /* Intel PXA2x0 processor built-in */
  202 #define COM_TYPE_AU1x00         3       /* AMD/Alchemy Au1x000 proc. built-in */
  203 
  204         /* power management hooks */
  205         int (*enable)(struct com_softc *);
  206         void (*disable)(struct com_softc *);
  207         int enabled;
  208 
  209 #ifdef __HAVE_TIMECOUNTER
  210         struct pps_state sc_pps_state;  /* pps state */
  211 #else /* !__HAVE_TIMECOUNTER */
  212         /* PPS signal on DCD, with or without inkernel clock disciplining */
  213         u_char  sc_ppsmask;                     /* pps signal mask */
  214         u_char  sc_ppsassert;                   /* pps leading edge */
  215         u_char  sc_ppsclear;                    /* pps trailing edge */
  216         pps_info_t ppsinfo;
  217         pps_params_t ppsparam;
  218 #endif /* !__HAVE_TIMECOUNTER */
  219 
  220 #if NRND > 0 && defined(RND_COM)
  221         rndsource_element_t  rnd_source;
  222 #endif
  223         void                    *sc_powerhook;  /* power management hook */
  224         struct simplelock       sc_lock;
  225 };
  226 
  227 int comprobe1(bus_space_tag_t, bus_space_handle_t);
  228 int comintr(void *);
  229 void com_attach_subr(struct com_softc *);
  230 int com_probe_subr(struct com_regs *);
  231 int com_detach(struct device *, int);
  232 int com_activate(struct device *, enum devact);
  233 void com_cleanup(void *);
  234 
  235 #ifndef __HAVE_GENERIC_SOFT_INTERRUPTS
  236 #ifdef __NO_SOFT_SERIAL_INTERRUPT
  237 #define IPL_SERIAL      IPL_TTY
  238 #define splserial()     spltty()
  239 #define IPL_SOFTSERIAL  IPL_TTY
  240 #define splsoftserial() spltty()
  241 #endif
  242 #endif

Cache object: 6d8adfa15f75273fcb1739965c8c0877


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