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 /*      comvar.h,v 1.55.8.3 2008/01/09 01:52:50 matt 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/mutex.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_TCR             6
   84 #define COM_REG_EFR             7
   85 #define COM_REG_TLR             7
   86 #define COM_REG_LCR             8
   87 #define COM_REG_MDR1            8
   88 #define COM_REG_MCR             9
   89 #define COM_REG_LSR             10
   90 #define COM_REG_MSR             11
   91 
   92 struct com_regs {
   93         bus_space_tag_t         cr_iot;
   94         bus_space_handle_t      cr_ioh;
   95         bus_addr_t              cr_iobase;
   96         bus_size_t              cr_nports;
   97         bus_size_t              cr_map[16];
   98 };
   99 
  100 extern const bus_size_t com_std_map[16];
  101 
  102 #define COM_INIT_REGS(regs, tag, hdl, addr)                             \
  103         do {                                                            \
  104                 regs.cr_iot = tag;                                      \
  105                 regs.cr_ioh = hdl;                                      \
  106                 regs.cr_iobase = addr;                                  \
  107                 regs.cr_nports = COM_NPORTS;                            \
  108                 memcpy(regs.cr_map, com_std_map, sizeof (regs.cr_map)); \
  109         } while (0)
  110 
  111 #else
  112 #define COM_REG_RXDATA          com_data
  113 #define COM_REG_TXDATA          com_data
  114 #define COM_REG_DLBL            com_dlbl
  115 #define COM_REG_DLBH            com_dlbh
  116 #define COM_REG_IER             com_ier
  117 #define COM_REG_IIR             com_iir
  118 #define COM_REG_FIFO            com_fifo
  119 #define COM_REG_EFR             com_efr
  120 #define COM_REG_LCR             com_lctl
  121 #define COM_REG_MCR             com_mcr
  122 #define COM_REG_LSR             com_lsr
  123 #define COM_REG_MSR             com_msr
  124 #define COM_REG_TCR             com_msr
  125 #define COM_REG_TLR             com_scratch
  126 #define COM_REG_MDR1            8
  127 
  128 struct com_regs {
  129         bus_space_tag_t         cr_iot;
  130         bus_space_handle_t      cr_ioh;
  131         bus_addr_t              cr_iobase;
  132         bus_size_t              cr_nports;
  133 };
  134 
  135 #define COM_INIT_REGS(regs, tag, hdl, addr)             \
  136         do {                                            \
  137                 regs.cr_iot = tag;                      \
  138                 regs.cr_ioh = hdl;                      \
  139                 regs.cr_iobase = addr;                  \
  140                 regs.cr_nports = COM_NPORTS;            \
  141         } while (0)
  142 
  143 #endif
  144 
  145 struct com_softc {
  146         device_t sc_dev;
  147         void *sc_si;
  148         struct tty *sc_tty;
  149 
  150         struct callout sc_diag_callout;
  151 
  152         int sc_frequency;
  153 
  154         struct com_regs sc_regs;
  155         bus_space_handle_t sc_hayespioh;
  156 
  157 
  158         u_int sc_overflows,
  159               sc_floods,
  160               sc_errors;
  161 
  162         int sc_hwflags,
  163             sc_swflags;
  164         u_int sc_fifolen;
  165 
  166         u_int sc_r_hiwat,
  167               sc_r_lowat;
  168         u_char *volatile sc_rbget,
  169                *volatile sc_rbput;
  170         volatile u_int sc_rbavail;
  171         u_char *sc_rbuf,
  172                *sc_ebuf;
  173 
  174         u_char *sc_tba;
  175         u_int sc_tbc,
  176               sc_heldtbc;
  177 
  178         volatile u_char sc_rx_flags,
  179 #define RX_TTY_BLOCKED          0x01
  180 #define RX_TTY_OVERFLOWED       0x02
  181 #define RX_IBUF_BLOCKED         0x04
  182 #define RX_IBUF_OVERFLOWED      0x08
  183 #define RX_ANY_BLOCK            0x0f
  184                         sc_tx_busy,
  185                         sc_tx_done,
  186                         sc_tx_stopped,
  187                         sc_st_check,
  188                         sc_rx_ready;
  189 
  190         volatile u_char sc_heldchange;
  191         volatile u_char sc_msr, sc_msr_delta, sc_msr_mask, sc_mcr,
  192             sc_mcr_active, sc_lcr, sc_ier, sc_fifo, sc_dlbl, sc_dlbh, sc_efr;
  193         u_char sc_mcr_dtr, sc_mcr_rts, sc_msr_cts, sc_msr_dcd;
  194 
  195 #ifdef COM_HAYESP
  196         u_char sc_prescaler;
  197 #endif
  198 
  199         /*
  200          * There are a great many almost-ns16550-compatible UARTs out
  201          * there, which have minor differences.  The type field here
  202          * lets us distinguish between them.
  203          */
  204         int sc_type;
  205 #define COM_TYPE_NORMAL         0       /* normal 16x50 */
  206 #define COM_TYPE_HAYESP         1       /* Hayes ESP modem */
  207 #define COM_TYPE_PXA2x0         2       /* Intel PXA2x0 processor built-in */
  208 #define COM_TYPE_AU1x00         3       /* AMD/Alchemy Au1x000 proc. built-in */
  209 #define COM_TYPE_OMAP           4       /* TI OMAP processor built-in */
  210 #define COM_TYPE_16550_NOERS    5       /* like a 16550, no ERS */
  211 
  212         /* power management hooks */
  213         int (*enable)(struct com_softc *);
  214         void (*disable)(struct com_softc *);
  215         int enabled;
  216 
  217         struct pps_state sc_pps_state;  /* pps state */
  218 
  219 #if NRND > 0 && defined(RND_COM)
  220         rndsource_element_t  rnd_source;
  221 #endif
  222         kmutex_t                sc_lock;
  223 };
  224 
  225 int comprobe1(bus_space_tag_t, bus_space_handle_t);
  226 int comintr(void *);
  227 void com_attach_subr(struct com_softc *);
  228 int com_probe_subr(struct com_regs *);
  229 int com_detach(struct device *, int);
  230 bool com_resume(device_t PMF_FN_PROTO);
  231 int com_activate(struct device *, enum devact);
  232 bool com_cleanup(device_t, int);
  233 bool com_suspend(device_t PMF_FN_PROTO);
  234 
  235 #ifndef IPL_SERIAL
  236 #define IPL_SERIAL      IPL_TTY
  237 #define splserial()     spltty()
  238 #endif

Cache object: 2a240dc094de9c874a62c1fe8825bb73


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